src/solaris/native/java/net/NetworkInterface.c

Print this page




 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;