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文件,修改权限及所属组。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值