153 #ifdef __solaris__ 154 static netif *enumIPvXInterfaces(JNIEnv *env, int sock, netif *ifs, int family); 155 static int getMacFromDevice(JNIEnv *env, const char* ifname, unsigned char* retbuf); 156 157 #ifndef SIOCGLIFHWADDR 158 #define SIOCGLIFHWADDR _IOWR('i', 192, struct lifreq) 159 #endif 160 161 #endif 162 163 /******************* Java entry points *****************************/ 164 165 /* 166 * Class: java_net_NetworkInterface 167 * Method: init 168 * Signature: ()V 169 */ 170 JNIEXPORT void JNICALL 171 Java_java_net_NetworkInterface_init(JNIEnv *env, jclass cls) { 172 ni_class = (*env)->FindClass(env,"java/net/NetworkInterface"); 173 ni_class = (*env)->NewGlobalRef(env, ni_class); 174 ni_nameID = (*env)->GetFieldID(env, ni_class,"name", "Ljava/lang/String;"); 175 ni_indexID = (*env)->GetFieldID(env, ni_class, "index", "I"); 176 ni_addrsID = (*env)->GetFieldID(env, ni_class, "addrs", "[Ljava/net/InetAddress;"); 177 ni_bindsID = (*env)->GetFieldID(env, ni_class, "bindings", "[Ljava/net/InterfaceAddress;"); 178 ni_descID = (*env)->GetFieldID(env, ni_class, "displayName", "Ljava/lang/String;"); 179 ni_virutalID = (*env)->GetFieldID(env, ni_class, "virtual", "Z"); 180 ni_childsID = (*env)->GetFieldID(env, ni_class, "childs", "[Ljava/net/NetworkInterface;"); 181 ni_parentID = (*env)->GetFieldID(env, ni_class, "parent", "Ljava/net/NetworkInterface;"); 182 ni_ctrID = (*env)->GetMethodID(env, ni_class, "<init>", "()V"); 183 184 ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); 185 ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); 186 ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); 187 ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); 188 ni_ia6cls = (*env)->FindClass(env, "java/net/Inet6Address"); 189 ni_ia6cls = (*env)->NewGlobalRef(env, ni_ia6cls); 190 ni_ibcls = (*env)->FindClass(env, "java/net/InterfaceAddress"); 191 ni_ibcls = (*env)->NewGlobalRef(env, ni_ibcls); 192 ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V"); 193 ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "<init>", "()V"); 194 ni_ibctrID = (*env)->GetMethodID(env, ni_ibcls, "<init>", "()V"); 195 ni_ibaddressID = (*env)->GetFieldID(env, ni_ibcls, "address", "Ljava/net/InetAddress;"); 196 ni_ib4broadcastID = (*env)->GetFieldID(env, ni_ibcls, "broadcast", "Ljava/net/Inet4Address;"); 197 ni_ib4maskID = (*env)->GetFieldID(env, ni_ibcls, "maskLength", "S"); 198 ni_defaultIndexID = (*env)->GetStaticFieldID(env, ni_class, "defaultIndex", "I"); 199 } 200 201 202 /* 203 * Class: java_net_NetworkInterface 204 * Method: getByName0 205 * Signature: (Ljava/lang/String;)Ljava/net/NetworkInterface; 206 */ 207 JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByName0 208 (JNIEnv *env, jclass cls, jstring name) { 209 210 netif *ifs, *curr; 211 jboolean isCopy; 212 const char* name_utf; 213 jobject obj = NULL; 214 215 ifs = enumInterfaces(env); 216 if (ifs == NULL) { 217 return NULL; | 153 #ifdef __solaris__ 154 static netif *enumIPvXInterfaces(JNIEnv *env, int sock, netif *ifs, int family); 155 static int getMacFromDevice(JNIEnv *env, const char* ifname, unsigned char* retbuf); 156 157 #ifndef SIOCGLIFHWADDR 158 #define SIOCGLIFHWADDR _IOWR('i', 192, struct lifreq) 159 #endif 160 161 #endif 162 163 /******************* Java entry points *****************************/ 164 165 /* 166 * Class: java_net_NetworkInterface 167 * Method: init 168 * Signature: ()V 169 */ 170 JNIEXPORT void JNICALL 171 Java_java_net_NetworkInterface_init(JNIEnv *env, jclass cls) { 172 ni_class = (*env)->FindClass(env,"java/net/NetworkInterface"); 173 CHECK_NULL(ni_class); 174 ni_class = (*env)->NewGlobalRef(env, ni_class); 175 CHECK_NULL(ni_class); 176 ni_nameID = (*env)->GetFieldID(env, ni_class,"name", "Ljava/lang/String;"); 177 CHECK_NULL(ni_nameID); 178 ni_indexID = (*env)->GetFieldID(env, ni_class, "index", "I"); 179 CHECK_NULL(ni_indexID); 180 ni_addrsID = (*env)->GetFieldID(env, ni_class, "addrs", "[Ljava/net/InetAddress;"); 181 CHECK_NULL(ni_addrsID); 182 ni_bindsID = (*env)->GetFieldID(env, ni_class, "bindings", "[Ljava/net/InterfaceAddress;"); 183 CHECK_NULL(ni_bindsID); 184 ni_descID = (*env)->GetFieldID(env, ni_class, "displayName", "Ljava/lang/String;"); 185 CHECK_NULL(ni_descID); 186 ni_virutalID = (*env)->GetFieldID(env, ni_class, "virtual", "Z"); 187 CHECK_NULL(ni_virutalID); 188 ni_childsID = (*env)->GetFieldID(env, ni_class, "childs", "[Ljava/net/NetworkInterface;"); 189 CHECK_NULL(ni_childsID); 190 ni_parentID = (*env)->GetFieldID(env, ni_class, "parent", "Ljava/net/NetworkInterface;"); 191 CHECK_NULL(ni_parentID); 192 ni_ctrID = (*env)->GetMethodID(env, ni_class, "<init>", "()V"); 193 CHECK_NULL(ni_ctrID); 194 195 ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); 196 CHECK_NULL(ni_iacls); 197 ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); 198 CHECK_NULL(ni_iacls); 199 ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); 200 CHECK_NULL(ni_ia4cls); 201 ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); 202 CHECK_NULL(ni_ia4cls); 203 ni_ia6cls = (*env)->FindClass(env, "java/net/Inet6Address"); 204 CHECK_NULL(ni_ia6cls); 205 ni_ia6cls = (*env)->NewGlobalRef(env, ni_ia6cls); 206 CHECK_NULL(ni_ia6cls); 207 ni_ibcls = (*env)->FindClass(env, "java/net/InterfaceAddress"); 208 CHECK_NULL(ni_ibcls); 209 ni_ibcls = (*env)->NewGlobalRef(env, ni_ibcls); 210 CHECK_NULL(ni_ibcls); 211 ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V"); 212 CHECK_NULL(ni_ia4ctrID); 213 ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "<init>", "()V"); 214 CHECK_NULL(ni_ia6ctrID); 215 ni_ibctrID = (*env)->GetMethodID(env, ni_ibcls, "<init>", "()V"); 216 CHECK_NULL(ni_ibctrID); 217 ni_ibaddressID = (*env)->GetFieldID(env, ni_ibcls, "address", "Ljava/net/InetAddress;"); 218 CHECK_NULL(ni_ibaddressID); 219 ni_ib4broadcastID = (*env)->GetFieldID(env, ni_ibcls, "broadcast", "Ljava/net/Inet4Address;"); 220 CHECK_NULL(ni_ib4broadcastID); 221 ni_ib4maskID = (*env)->GetFieldID(env, ni_ibcls, "maskLength", "S"); 222 CHECK_NULL(ni_ib4maskID); 223 ni_defaultIndexID = (*env)->GetStaticFieldID(env, ni_class, "defaultIndex", "I"); 224 } 225 226 227 /* 228 * Class: java_net_NetworkInterface 229 * Method: getByName0 230 * Signature: (Ljava/lang/String;)Ljava/net/NetworkInterface; 231 */ 232 JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByName0 233 (JNIEnv *env, jclass cls, jstring name) { 234 235 netif *ifs, *curr; 236 jboolean isCopy; 237 const char* name_utf; 238 jobject obj = NULL; 239 240 ifs = enumInterfaces(env); 241 if (ifs == NULL) { 242 return NULL; |