wifi.c中函数分析: :::int wifi_connect_to_supplicant()

 /* Make sure supplicant is running */

查看属性,保存在supp_status

判断是否运行:否返回-1

    if (!property_get(SUPP_PROP_NAME, supp_status, NULL)
            || strcmp(supp_status, "running") != 0) {
        LOGE("Supplicant not running, cannot connect");
        return -1;
    }

获得属性:wifi.interface值,保存在iface中

在该环境中:iface=wlan0

    property_get("wifi.interface", iface, WIFI_TEST_INTERFACE);


判断文件IFACE_DIR = "/data/system/wpa_supplicant";是否存在,

    存在:ifname="/data/system/wpa_supplicant/wlan0";

    不存在:ifname=wlan0

if (access(IFACE_DIR, F_OK) == 0) {
        snprintf(ifname, sizeof(ifname), "%s/%s", IFACE_DIR, iface);
    } else {
        strlcpy(ifname, iface, sizeof(ifname));
    }

创建两个socket,并链接由ifname,生成的des.sun_path

 ctrl_conn = wpa_ctrl_open(ifname);

  monitor_conn = wpa_ctrl_open(ifname);

测试链接是否成功:

if (wpa_ctrl_attach(monitor_conn) != 0) {
        wpa_ctrl_close(monitor_conn);
        wpa_ctrl_close(ctrl_conn);
        ctrl_conn = monitor_conn = NULL;
        return -1;
    }
    return 0;

wpa_ctrl_open()

wpa_ctrl * wpa_ctrl_open(const char *ctrl_path)

在wifi.c中:传入参数

ctrl_path=ifname="/data/system/wpa_supplicant/wlan0";

也就是wpa_supplicant的soket。

如果定义android

则生成自己的soket文件路径组合如下:

%s/%s%d-%d", local_socket_dir, local_socket_prefix, getpid(), counter++);

其中:local_socket_dir= "/data/misc/wifi/sockets";

local_socket_prefix = "wpa_ctrl_";

在wpa_ctrl.c中定义。

生成后绑定本地soket文件,修改权限及所属组。



你可能感兴趣的:(android零散笔记)