NetlinkManager分析
NetlinkManager分析
江桃人 发表于1年前
NetlinkManager分析
  • 发表于 1年前
  • 阅读 26
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

摘要: 平台:msm8953 代码位置:\system\netd\server\netlinkmanager.cpp 设计模式:单例

一. 主要功能

  主要负责接收并解析来自Kernel的UEvent消息,其核心代码在start函数中。

二.start函数分析

1. 源码

int NetlinkManager::start() {
    if ((mUeventHandler = setupSocket(&mUeventSock, NETLINK_KOBJECT_UEVENT,
         0xffffffff, NetlinkListener::NETLINK_FORMAT_ASCII, false)) == NULL) {
        return -1;
    }

    if ((mRouteHandler = setupSocket(&mRouteSock, NETLINK_ROUTE,
                                     RTMGRP_LINK |
                                     RTMGRP_IPV4_IFADDR |
                                     RTMGRP_IPV6_IFADDR |
                                     RTMGRP_IPV6_ROUTE |
                                     (1 << (RTNLGRP_ND_USEROPT - 1)),
         NetlinkListener::NETLINK_FORMAT_BINARY, false)) == NULL) {
        return -1;
    }

    if ((mQuotaHandler = setupSocket(&mQuotaSock, NETLINK_NFLOG,
            NFLOG_QUOTA_GROUP, NetlinkListener::NETLINK_FORMAT_BINARY, false)) == NULL) {
        ALOGW("Unable to open qlog quota socket, check if xt_quota2 can send via UeventHandler");
        // TODO: return -1 once the emulator gets a new kernel.
    }

    if ((mStrictHandler = setupSocket(&mStrictSock, NETLINK_NETFILTER,
            0, NetlinkListener::NETLINK_FORMAT_BINARY_UNICAST, true)) == NULL) {
        ALOGE("Unable to open strict socket");
        // TODO: return -1 once the emulator gets a new kernel.
    }

    return 0;
}

2.功能分析

  start函数向Kernel注册三个socket连接,用来接收不同的UEvent事件。

名称 接收类型 值保存位置 保存格式 备注
NETLINK_KOBJECT_UEVENT kobject事件 mUeventSock NETLINK_FORMAT_ASCII kobject一般涌来通知内核中某个模块的加载或卸载;这关注的是/sys/class/net下的模块
NETLINK_ROUTE routing/link改变对应消息 mRouteSock NETLINK_FORMAT_BINARY NETLINK_ROUTE包含很多子项,上面使用了RTMGRP_LINK| RTMGRP_IPV4_IFADDR| RTMGRP_IPV6_IFADDR |RTMGRP_IPV6_ROUTE | (1 << (RTNLGRP_ND_USEROPT - 1)),这里表示希望收到网络链接断开或者接通,IP地址切换(?)等对应的UEvent消息
NETLINK_NFLOG 带宽控制相关 mQuotaSock NETLINK_FORMAT_BINARY eg:netd中带宽控制设置一个预警值,当网络超过这个值就会出发Kernel发送一个警告,属于iptables的扩展项。
NETLINK_NETFILTER   mStrictSock NETLINK_FORMAT_BINARY_UNICAST to do...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 5
博文 15
码字总数 15700
×
江桃人
穷学生,求打赏。
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: