wifi详解-2(netd)
来源:互联网 发布:淘宝客服售前做什么 编辑:程序博客网 时间:2024/04/30 13:34
引用:http://blog.csdn.net/xiaokeweng/article/details/8130218
所谓 Netd 就是Network Daemon 的缩写,表示Network守护进程,类似的命名还有很多,例如 Vold(Volumn Deamon)—磁盘管理,Rild(Radio Interface Layer Deamon)— 电话的基本数据功能……类似的还有好多,遍及Android各类服务,各个层次~
Netd负责跟一些涉及物理端口的网络操作相关的功能实现,例如带宽控制(Bandwidth),网络地址转换(NAT),个人局域网(pan),PPP链接,soft-ap,共享上网(Tether)等等……都是按照模块(.cpp+.h)组织在netd文件目录下的~
Android Netd相关的基本框架的四大部分:
(1)Linux Kernel 用于检测 network相关的所有 event 事件。
(2)Netd 作为 Kernel 与 Framework之间通信的桥梁。
(3)Framework 层操作 Netd,向 Netd发送操作命令。
(4)UI 与 Framework交互,用于用户进行网络的操控。
涉及主要源码位置:
Netd:
/System/netd
/system/core/libsysutils/src
/system/core/include/sysutils
Framework:
/frameworks/base/services/java/com/android/server
先统领一下~整体的框架图~ 很不规范,会意即可,之后还会详细介绍:
从init.rc文件中可以看到,是系统级的守护进程,手动kill后还会从新启动。
三.基本实例
就拿手机的soft-ap功能来举例吧,以使用 softap(Soft Access Point)为例。softap可以为wlan接入设备共享手机使用的移动网络,笔记本接入softap,可以通过手机的 3g 上网。
1)设置并开启 softap(便携式 WLAN 热点)
在 Setting 选项中进行设置,该设置功能的开启将涉及相关的UI 路径下相关的文件,packages /apps/Settings/src/com/Android/settings/wifi 路径下,程序中的 WifiApEnabler. OnPreferenceChange 里, 设置 soft ap 在 wifiApDialog.onClick 里。
2)调用相应的处理函数,通过 socket 向 netd 下发命令
应用层通过ConnectivityManager接口,最终走到 Framework 层的 NetworkManagementService.startAccessPoint 函数。
[java] view plain copy//NetworkManagementService.java @Override public void startAccessPoint( WifiConfiguration wifiConfig, String wlanIface, String softapIface) { mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG); try { wifiFirmwareReload(wlanIface, "AP"); if (wifiConfig == null) { mConnector.execute("softap", "set", wlanIface, softapIface); } else { mConnector.execute("softap", "set", wlanIface, softapIface, wifiConfig.SSID, getSecurityType(wifiConfig), wifiConfig.preSharedKey); } mConnector.execute("softap", "startap"); } catch (NativeDaemonConnectorException e) { throw e.rethrowAsParcelableException(); } }
NetworkManagementService 通过NativeDaemonConnector, 这里用来和系统的 netd 守护进程通过 socket 进行通信,发送命令。
3) netd 接受命令并进行处理,并将处理结果反馈给 Framework 层。
Netd 中 softap 控制的功能在/system/netd/SoftapController.{h,cpp}里, 具体的执行是通过调用网卡驱动的 ap 功能。NetworkManagementService 通过 NativeDaemonConnector 向下通过 socket 向下 softap 相关的字符串命令,NativeDaemonConnector 中维护着与 Netd 中 CommandListener 相关联的内部socket 线程。两者可以通过它相互通信。
[cpp] view plain copy//CommandListener.cpp int CommandListener::SoftapCmd::runCommand(SocketClient *cli, int argc, char **argv) { int rc = 0, flag = 0; char *retbuf = NULL; if (argc < 2) { cli->sendMsg(ResponseCode::CommandSyntaxError, "Softap Missing argument", false); return 0; } if (!strcmp(argv[1], "start")) { rc = sSoftapCtrl->startDriver(argv[2]); } else if (!strcmp(argv[1], "stop")) { rc = sSoftapCtrl->stopDriver(argv[2]); } else if (!strcmp(argv[1], "startap")) { rc = sSoftapCtrl->startSoftap(); } else if (!strcmp(argv[1], "stopap")) { rc = sSoftapCtrl->stopSoftap(); } else if (!strcmp(argv[1], "fwreload")) { rc = sSoftapCtrl->fwReloadSoftap(argc, argv); } else if (!strcmp(argv[1], "clients")) { rc = sSoftapCtrl->clientsSoftap(&retbuf); if (!rc) { cli->sendMsg(ResponseCode::CommandOkay, retbuf, false); free(retbuf); return 0; } } else if (!strcmp(argv[1], "status")) { …… ……
4) Framework 受到回馈的信息,并通知 UI 处理结果,呈现给用户。
- wifi详解-2(netd)
- wifi详解(2)
- netd
- Android 4.1 Netd详细分析(四)代码分析2
- Android 4.1 Netd详细分析(四)代码分析2
- wifi详解(一)
- wifi详解(二)
- wifi详解(三)
- wifi详解(四)
- wifi详解(五)
- wifi详解(一)
- wifi详解(二)
- wifi详解(三)
- wifi详解(一)
- wifi详解(二)
- wifi详解(三)
- wifi详解(二)
- wifi详解(三)
- JS实用ToolKit--NO1.数组排序
- http协议
- Ambari file view无权限问题
- 在windows 、linux下读取目录下所有文件名
- Linux下SHELL的PS1变量简介
- wifi详解-2(netd)
- SQL Server自定义函数(二)
- hive 设置队列
- wifi详解-3(wap_supplicant与wifiserver)
- 开发记录————基础JS掌握
- 更新系统后,找回消失的「允许任何来源应用运行」选项
- idea Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:
- Java SE5中的CountDownLatch和CyclicBarrier类库
- flash定时器