void get_current_network(int *device, char *name, int *channel) { int sfd; struct sockaddr_in saddr; socklen_t len; int active_device = get_current_network_device(); /* if (vrms_nw == 0) { sfd = socket(AF_INET, SOCK_DGRAM, 0); bzero(&saddr, sizeof(saddr)); saddr.sin_family = AF_INET; saddr.sin_addr.s_addr = inet_addr("127.0.0.1"); saddr.sin_port = htons(5678); len = sizeof(saddr); sendto(sfd, &active_device, sizeof(active_device), 0, (struct sockaddr *)&saddr, len); vrms_nw = 1; } */ if (active_device == WIFI) { *device = WIFI; get_essid(name, channel); } else if (active_device == GSM) { *device = GSM; strcpy(name, gsm_conn_name); } }
static void wireless_essid(RESULT * result, RESULT * arg1) { char *dev = R2S(arg1); if (check_socket() != 0) return; save_result(result, dev, KEY_ESSID, get_essid(dev, KEY_ESSID)); }
static const char * help_iw(void) { static xsg_string_t *string = NULL; xsg_list_t *l; int i = 0; init_iw(); if (skfd < 0) { return NULL; } if (string == NULL) { string = xsg_string_new(NULL); } else { xsg_string_truncate(string, 0); } get_iw_device_list(); for (l = device_list; l; l = l->next) { char name[128]; snprintf(name, sizeof(name), "IW_INTERFACE%d", i++); xsg_setenv(name, (char *) device_list->data, TRUE); xsg_string_append_printf(string, "%s: %s\n", name, (char *) device_list->data); } xsg_string_append(string, "\n"); for (l = device_list; l; l = l->next) { char *ifname = (char *) l->data; xsg_string_append_printf(string, "S %s:%s:%-36s%s\n", XSG_MODULE_NAME, ifname, "config:name", get_name(ifname)); xsg_string_append_printf(string, "N %s:%s:%-36s%.0f\n", XSG_MODULE_NAME, ifname, "config:nwid", get_nwid(ifname)); xsg_string_append_printf(string, "N %s:%s:%-36s%.0f\n", XSG_MODULE_NAME, ifname, "config:freq", get_freq_number(ifname)); xsg_string_append_printf(string, "S %s:%s:%-36s%s\n", XSG_MODULE_NAME, ifname, "config:freq", get_freq_string(ifname)); xsg_string_append_printf(string, "N %s:%s:%-36s%.0f\n", XSG_MODULE_NAME, ifname, "config:channel", get_channel(ifname)); xsg_string_append_printf(string, "S %s:%s:%-36s%s\n", XSG_MODULE_NAME, ifname, "config:key", get_key(ifname)); xsg_string_append_printf(string, "N %s:%s:%-36s%.0f\n", XSG_MODULE_NAME, ifname, "config:keyid", get_keyid(ifname)); xsg_string_append_printf(string, "S %s:%s:%-36s%s\n", XSG_MODULE_NAME, ifname, "config:essid", get_essid(ifname)); xsg_string_append_printf(string, "N %s:%s:%-36s%.0f\n", XSG_MODULE_NAME, ifname, "config:mode", get_mode_number(ifname)); xsg_string_append_printf(string, "S %s:%s:%-36s%s\n", XSG_MODULE_NAME, ifname, "config:mode", get_mode_string(ifname)); xsg_string_append_printf(string, "N %s:%s:%-36s%.0f\n", XSG_MODULE_NAME, ifname, "info:sensitivity", get_sens(ifname)); xsg_string_append_printf(string, "S %s:%s:%-36s%s\n", XSG_MODULE_NAME, ifname, "info:nickname", get_nickname(ifname)); xsg_string_append_printf(string, "S %s:%s:%-36s%s\n", XSG_MODULE_NAME, ifname, "info:access_point", get_ap(ifname)); xsg_string_append_printf(string, "N %s:%s:%-36s%.0f\n", XSG_MODULE_NAME, ifname, "info:bitrate", get_bitrate_number(ifname)); xsg_string_append_printf(string, "S %s:%s:%-36s%s\n", XSG_MODULE_NAME, ifname, "info:bitrate", get_bitrate_string(ifname)); xsg_string_append_printf(string, "N %s:%s:%-36s%.0f\n", XSG_MODULE_NAME, ifname, "info:rts", get_rts_number(ifname)); xsg_string_append_printf(string, "S %s:%s:%-36s%s\n", XSG_MODULE_NAME, ifname, "info:rts", get_rts_string(ifname)); xsg_string_append_printf(string, "N %s:%s:%-36s%.0f\n", XSG_MODULE_NAME, ifname, "info:fragment", get_frag_number(ifname)); xsg_string_append_printf(string, "S %s:%s:%-36s%s\n", XSG_MODULE_NAME, ifname, "info:fragment", get_frag_string(ifname)); xsg_string_append_printf(string, "S %s:%s:%-36s%s\n", XSG_MODULE_NAME, ifname, "info:power_management", get_power_management(ifname)); xsg_string_append_printf(string, "N %s:%s:%-36s%.0f\n", XSG_MODULE_NAME, ifname, "info:txpower:dbm", get_txpower_dbm(ifname)); xsg_string_append_printf(string, "N %s:%s:%-36s%.2f\n", XSG_MODULE_NAME, ifname, "info:txpower:mw", get_txpower_mw(ifname)); xsg_string_append_printf(string, "S %s:%s:%-36s%s\n", XSG_MODULE_NAME, ifname, "info:retry", get_retry(ifname)); xsg_string_append_printf(string, "N %s:%s:%-36s%.0f\n", XSG_MODULE_NAME, ifname, "stats:quality:quality", get_stats_quality_quality(ifname)); xsg_string_append_printf(string, "N %s:%s:%-36s%.0f\n", XSG_MODULE_NAME, ifname, "stats:quality:signal", get_stats_quality_signal(ifname)); xsg_string_append_printf(string, "N %s:%s:%-36s%.0f\n", XSG_MODULE_NAME, ifname, "stats:quality:noise", get_stats_quality_noise(ifname)); xsg_string_append_printf(string, "N %s:%s:%-36s%.0f\n", XSG_MODULE_NAME, ifname, "stats:discarded:nwid", get_stats_discarded_nwid(ifname)); xsg_string_append_printf(string, "N %s:%s:%-36s%.0f\n", XSG_MODULE_NAME, ifname, "stats:discarded:code", get_stats_discarded_code(ifname)); xsg_string_append_printf(string, "N %s:%s:%-36s%.0f\n", XSG_MODULE_NAME, ifname, "stats:discarded:fragment", get_stats_discarded_fragment(ifname)); xsg_string_append_printf(string, "N %s:%s:%-36s%.0f\n", XSG_MODULE_NAME, ifname, "stats:discarded:retries", get_stats_discarded_retries(ifname)); xsg_string_append_printf(string, "N %s:%s:%-36s%.0f\n", XSG_MODULE_NAME, ifname, "stats:discarded:misc", get_stats_discarded_misc(ifname)); xsg_string_append_printf(string, "N %s:%s:%-36s%.0f\n", XSG_MODULE_NAME, ifname, "stats:missed:beacon", get_stats_missed_beacon(ifname)); xsg_string_append_printf(string, "N %s:%s:%-36s%.0f\n", XSG_MODULE_NAME, ifname, "range:sensitivity", get_range_sensitivity(ifname)); xsg_string_append_printf(string, "N %s:%s:%-36s%.0f\n", XSG_MODULE_NAME, ifname, "range:max_quality:quality", get_range_max_quality_quality(ifname)); } return string->str; }
void vho_trigger() { float qdv_wifi, qdv_3g, qdv_diff; int old_dev, new_dev; char essid[50], apn_name[50]; char *apn = apn_name; char network_name[50]; char* ip_interface; int best_3g_conn; memset(apn_name, '\0', sizeof (apn_name)); if (wifi_avail == 1) { /* Get the QDV and essid of a network which is best in Wi-Fi */ printf("wifi avail = %d\n",wifi_avail); get_wifi_qdv(&qdv_wifi, essid); } if (threeg_avail == 1) { /* Get the QDV and APN name of 3G network */ get_3g_qdv(&qdv_3g, apn); } if (*apn != '\0') { best_3g_conn = is_connected_3g(conn,apn); if(best_3g_conn == 1){ printf("******Best 3G network = %s is connected\n",apn); } else { printf ("Trying to connect to %s...\n", apn); // update_modem_paths(conn,apn); connect_3g_modem(conn,apn); update_modem_paths(conn,apn); } ip_interface = fetch_interface(conn,apn); #if 0 if(ip_interface) { printf("**********IP Interface for %s\t is %s********\n", apn, ip_interface); } else{ printf("**********IP Interface NOT FOUND for %s********\n", apn); update_modem_paths(conn,apn); } #endif } #define DEBUG #ifdef DEBUG printf("QDV of WIFI: %f\t", qdv_wifi); printf("QDV of 3G:%f\n", qdv_3g); #endif int active_device = get_current_network_device(); if (active_device == WIFI) { if (((qdv_3g - qdv_wifi) >= 0) && (threeg_avail == 1)) { old_dev = WIFI; new_dev = GSM; strcpy(network_name, apn); qdv_diff = qdv_3g - qdv_wifi; printf ("vho_main : Handing over from WiFi to 3G [qdv diff = %f]\n", qdv_diff); send_vrms_data(ip_interface, strlen(ip_interface)); // logging_network_change(ip_interface, strlen(ip_interface)); logging_network_change(apn, strlen(apn)); }else { /* To handle horizontal handoff. If current essid does not match * with the essid of the network with highest QDV, then handoff * to the highest QDV Wi-Fi network */ char *name = malloc(10); int channel; /* Get current essid and channel */ get_essid(name, &channel); if (!strcmp(name, essid)) { /* If highest QDV Wi-Fi network is current network return */ printf ("Highest QDV Wi-Fi network is current network\n"); old_dev = new_dev = WIFI; send_vrms_data("wlan0", strlen("wlan0")); logging_network_change("wlan0", strlen("wlan0")); } else { strcpy(network_name, essid); old_dev = new_dev = WIFI; send_vrms_data("wlan0", strlen("wlan0")); logging_network_change("wlan0", strlen("wlan0")); } free(name); } }else if (active_device == GSM) { if (active_device == GSM && ((qdv_wifi - qdv_3g) >= 0) && (wifi_avail == 1)){ printf("\n Handing over from 3G to WiFi \n"); old_dev = GSM; new_dev = WIFI; strcpy(network_name, essid); } else if (active_device == GSM && ((qdv_3g - qdv_wifi) >= 0)) { if(ip_interface){ // printf("ip interface of the best conected network%s = %s \n",apn,ip_interface); send_vrms_data(ip_interface, strlen(ip_interface));} // logging_network_change(ip_interface, strlen(ip_interface)); logging_network_change(apn, strlen(apn)); return; } else{ printf("Highest QDV GSM network is current network\n"); if(ip_interface) send_vrms_data(ip_interface, strlen(ip_interface)); // logging_network_change(ip_interface, strlen(ip_interface)); logging_network_change(apn, strlen(apn)); } } else { if (threeg_avail == -1 && wifi_avail == -1) { printf("Both wifi and 3g interfaces not available \n"); return; } } if (old_dev != new_dev) { /* Invoke post-handoff routine to perform the handoff task */ printf ("[P_HO] new_dev = %d, old_dev = %d, network_name = %s\n", new_dev, old_dev, network_name); post_handoff(conn, network_name, old_dev, new_dev); handover = 1; } }