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);
	}
}
Beispiel #2
0
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));
}
Beispiel #3
0
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;
        }
}