[RK3288][Android6.0] WiFi之wpa_supplicant与内核通信的socket

本文主要探讨在Rockchip平台、Android 6.0系统和3.10.92内核环境下,WPAS如何通过不同类型的socket与内核进行通信。介绍了从入口开始,包括rtnetlinks socket、generic netlink socket和ioctl socket的使用,详细阐述了它们在处理网卡路由、接收和发送事件以及控制网口状态等方面的角色。
摘要由CSDN通过智能技术生成

Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92

前面了解了Framework和WPAS的socket交互,这里再看看WPAS和kernel的socket交互。

入口:

select_driver -> wpa_drivers[i]->global_init -> nl80211_global_init

static void * nl80211_global_init(void)
{
    //两个回调函数,收到内核事件会调用
    cfg->newlink_cb = wpa_driver_nl80211_event_rtm_newlink;
    cfg->dellink_cb = wpa_driver_nl80211_event_rtm_dellink;
    //初始化netlink socket,用来接收网卡的状态变化事件,创建或删除网络接口
    global->netlink = netlink_init(cfg);
    //netlink和driver交互初始化,这里创建的是generic netlink的socket,
    if (wpa_driver_nl80211_init_nl_global(global) < 0)
    //控制网口up/down,获取hwaddr的socket
    global->ioctl_sock = socket(PF_INET, SOCK_DGRAM, 0);
}
struct netlink_data * netlink_init(struct netlink_config *cfg)
{
    //创建netlink类型socket,这种类型用于和kernel通信
    netlink->sock = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
    //注册收取内核事件回调函数,它会调用上面的newlink_cb函数 
    eloop_register_read_sock(netlink->sock, netlink_receive, netlink,
                     NULL);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值