int update_kernel_addresses(int dump) { int rc; if(nl_socket < 0) { log_msg(LOG_ERROR, "Netlink not initialized.\n"); errno = EIO; return -1; } if(dump) { int i; int families[2] = { AF_INET6, AF_INET }; free_array(&addresses, free); for(i = 0; i < 2; i++) { /* ask for routes */ rc = netlink_send_dump_request(RTM_GETADDR, families[i]); if(rc < 0) return -1; rc = netlink_read_ack(nl_socket); } } else { rc = netlink_read_all(nl_socket); } return 0; }
jint Java_edu_vu_isis_ammo_core_ethertracker_EthTrackSvc_initEthernetNative(JNIEnv *env, jobject clazz) { int ret = -1; //LOGI("==>%s",__FUNCTION__); // __android_log_print(ANDROID_LOG_INFO, LOG_TAG, // "==>%s",__FUNCTION__); memset(&addr_msg, 0, sizeof(struct sockaddr_nl)); addr_msg.nl_family = AF_NETLINK; memset(&addr_poll, 0, sizeof(struct sockaddr_nl)); addr_poll.nl_family = AF_NETLINK; addr_poll.nl_pid = 0;//getpid(); addr_poll.nl_groups = RTMGRP_LINK | RTMGRP_IPV4_IFADDR; /* *Create connection to netlink socket */ nl_socket_msg = socket(AF_NETLINK,SOCK_RAW,NETLINK_ROUTE); if (nl_socket_msg <= 0) { //LOGE("Can not create netlink msg socket"); __android_log_print( ANDROID_LOG_INFO, LOG_TAG, "Can not create netlink msg socket" ); goto error; } // __android_log_print(ANDROID_LOG_INFO, LOG_TAG, // "Got socket for msg"); if (bind(nl_socket_msg, (struct sockaddr *)(&addr_msg), sizeof(struct sockaddr_nl))) { __android_log_print( ANDROID_LOG_INFO, LOG_TAG, "Can not bind to netlink msg socket" ); goto error; } __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "Bound msg socket .... Getting poll socket"); nl_socket_poll = socket(AF_NETLINK,SOCK_RAW,NETLINK_ROUTE); if (nl_socket_poll <= 0) { __android_log_print( ANDROID_LOG_INFO, LOG_TAG, "Can not create netlink poll socket" ); goto error; } // __android_log_print(ANDROID_LOG_INFO, LOG_TAG, // "Got Poll socket ... Trying to bind poll socket"); errno = 0; if(bind(nl_socket_poll, (struct sockaddr *)(&addr_poll), sizeof(struct sockaddr_nl))) { __android_log_print( ANDROID_LOG_INFO, LOG_TAG, "Can not bind to netlink poll socket,%s",strerror(errno) ); goto error; } netlink_send_dump_request(nl_socket_poll, RTM_GETLINK | RTM_GETADDR, AF_PACKET); //LOGE("%s exited with success",__FUNCTION__); __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "%s exited with success",__FUNCTION__); doQuery = 1; return 0; error: //LOGE("%s exited with error",__FUNCTION__); __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "%s exited with error",__FUNCTION__); if (nl_socket_msg >0) close(nl_socket_msg); if (nl_socket_poll >0) close(nl_socket_poll); return ret; }