Pipe DHCP vendor info towards framework.

Bug: 6344821
Change-Id: Ifb9a93c995f4d70f4ae2aa03b7e21f13013ef3b6
diff --git a/core/jni/android_net_NetUtils.cpp b/core/jni/android_net_NetUtils.cpp
index 724d9fb..1f2b1ae 100644
--- a/core/jni/android_net_NetUtils.cpp
+++ b/core/jni/android_net_NetUtils.cpp
@@ -31,20 +31,22 @@
 int dhcp_do_request(const char *ifname,
                     const char *ipaddr,
                     const char *gateway,
-                    uint32_t  *prefixLength,
+                    uint32_t *prefixLength,
                     const char *dns1,
                     const char *dns2,
                     const char *server,
-                    uint32_t  *lease);
+                    uint32_t *lease,
+                    const char *vendorInfo);
 
 int dhcp_do_request_renew(const char *ifname,
                     const char *ipaddr,
                     const char *gateway,
-                    uint32_t  *prefixLength,
+                    uint32_t *prefixLength,
                     const char *dns1,
                     const char *dns2,
                     const char *server,
-                    uint32_t  *lease);
+                    uint32_t *lease,
+                    const char *vendorInfo);
 
 int dhcp_stop(const char *ifname);
 int dhcp_release_lease(const char *ifname);
@@ -68,6 +70,7 @@
     jfieldID dns2;
     jfieldID serverAddress;
     jfieldID leaseDuration;
+    jfieldID vendorInfo;
 } dhcpInfoInternalFieldIds;
 
 static jint android_net_utils_enableInterface(JNIEnv* env, jobject clazz, jstring ifname)
@@ -116,16 +119,17 @@
     char    dns2[PROPERTY_VALUE_MAX];
     char  server[PROPERTY_VALUE_MAX];
     uint32_t lease;
+    char vendorInfo[PROPERTY_VALUE_MAX];
 
     const char *nameStr = env->GetStringUTFChars(ifname, NULL);
     if (nameStr == NULL) return (jboolean)false;
 
     if (renew) {
         result = ::dhcp_do_request_renew(nameStr, ipaddr, gateway, &prefixLength,
-                dns1, dns2, server, &lease);
+                dns1, dns2, server, &lease, vendorInfo);
     } else {
         result = ::dhcp_do_request(nameStr, ipaddr, gateway, &prefixLength,
-                dns1, dns2, server, &lease);
+                dns1, dns2, server, &lease, vendorInfo);
     }
 
     env->ReleaseStringUTFChars(ifname, nameStr);
@@ -161,6 +165,7 @@
         env->SetObjectField(info, dhcpInfoInternalFieldIds.serverAddress,
                 env->NewStringUTF(server));
         env->SetIntField(info, dhcpInfoInternalFieldIds.leaseDuration, lease);
+        env->SetObjectField(info, dhcpInfoInternalFieldIds.vendorInfo, env->NewStringUTF(vendorInfo));
     }
     return (jboolean)(result == 0);
 }
@@ -230,6 +235,7 @@
     dhcpInfoInternalFieldIds.dns2 = env->GetFieldID(dhcpInfoInternalClass, "dns2", "Ljava/lang/String;");
     dhcpInfoInternalFieldIds.serverAddress = env->GetFieldID(dhcpInfoInternalClass, "serverAddress", "Ljava/lang/String;");
     dhcpInfoInternalFieldIds.leaseDuration = env->GetFieldID(dhcpInfoInternalClass, "leaseDuration", "I");
+    dhcpInfoInternalFieldIds.vendorInfo = env->GetFieldID(dhcpInfoInternalClass, "vendorInfo", "Ljava/lang/String;");
 
     return AndroidRuntime::registerNativeMethods(env,
             NETUTILS_PKG_NAME, gNetworkUtilMethods, NELEM(gNetworkUtilMethods));