From 3f3b4e646263eb53cc90531b3d9cd32bb9a7b162 Mon Sep 17 00:00:00 2001 From: Chad Brubaker Date: Thu, 11 Jul 2013 13:30:36 -0700 Subject: [PATCH] Add NetworkUtil function for marking sockets Add NetworkUtil function for setting the SO_MARK field of sockets Change-Id: I94389b64296d87ee928293f24a26f8dd08c3bf37 --- core/java/android/net/NetworkUtils.java | 5 +++++ core/jni/android_net_NetUtils.cpp | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/core/java/android/net/NetworkUtils.java b/core/java/android/net/NetworkUtils.java index 333fcc67bc..b24d3969f7 100644 --- a/core/java/android/net/NetworkUtils.java +++ b/core/java/android/net/NetworkUtils.java @@ -103,6 +103,11 @@ public class NetworkUtils { */ public native static String getDhcpError(); + /** + * Set the SO_MARK of {@code socketfd} to {@code mark} + */ + public native static void markSocket(int socketfd, int mark); + /** * Convert a IPv4 address from an integer to an InetAddress. * @param hostAddress an int corresponding to the IPv4 address in network byte order diff --git a/core/jni/android_net_NetUtils.cpp b/core/jni/android_net_NetUtils.cpp index faae11ec3b..526159f4f1 100644 --- a/core/jni/android_net_NetUtils.cpp +++ b/core/jni/android_net_NetUtils.cpp @@ -17,6 +17,7 @@ #define LOG_TAG "NetUtils" #include "jni.h" +#include "JNIHelp.h" #include #include #include @@ -239,6 +240,13 @@ static jstring android_net_utils_getDhcpError(JNIEnv* env, jobject clazz) return env->NewStringUTF(::dhcp_get_errmsg()); } +static void android_net_utils_markSocket(JNIEnv *env, jobject thiz, jint socket, jint mark) +{ + if (setsockopt(socket, SOL_SOCKET, SO_MARK, &mark, sizeof(mark)) < 0) { + jniThrowException(env, "java/lang/IllegalStateException", "Error marking socket"); + } +} + // ---------------------------------------------------------------------------- /* @@ -255,6 +263,7 @@ static JNINativeMethod gNetworkUtilMethods[] = { { "stopDhcp", "(Ljava/lang/String;)Z", (void *)android_net_utils_stopDhcp }, { "releaseDhcpLease", "(Ljava/lang/String;)Z", (void *)android_net_utils_releaseDhcpLease }, { "getDhcpError", "()Ljava/lang/String;", (void*) android_net_utils_getDhcpError }, + { "markSocket", "(II)V", (void*) android_net_utils_markSocket }, }; int register_android_net_NetworkUtils(JNIEnv* env)