
wifi
文章平均质量分 74
LoneHugo
寻寻觅觅,暮然回首~
展开
-
Android WiFi Dhcp 获取到 IP 和配置的过程
在 ConnectivityService 中负责配置,由updateLinkProperties 来完成: private void updateLinkProperties(NetworkAgentInfo networkAgent, LinkProperties newLp, LinkProperties oldLp) { int netId = networkAgent.network.netId; // The Network.原创 2021-04-28 16:01:32 · 1993 阅读 · 0 评论 -
Android WiFi 扫描并选择网络进行连接
在 WifiConfigManager 中通过createNewInternalWifiConfigurationFromExternal 创建新的 WifiConfiguration 配置项,并且创建合法的 networkId 信息,通过 mNextNetworkId 参数递增的方式对新创建的 Network 赋值 Id; 创建过程发生在addOrUpdateNetworkInternal 接口中,进行网络的添加,其中传入的 config 为空或者是新的 config 信息,networkId 为 ..原创 2021-04-25 12:10:56 · 2450 阅读 · 2 评论 -
NetworkManagementService 解读
在前面文章介绍了其自身定义的接口功能提供给客户端:https://blog.youkuaiyun.com/Vince_/article/details/115203280在与底层 netd 通信过程中实际上采用了NetdUnsolicitedEventListener 内部类定义的接口进行,它自身作为服务端,netd 作为客户端对该功能进行引用调用。NetdUnsolicitedEventListener 的 定义在 NetworkManagementService.java 中,不过其继承实现了接口类IN..原创 2021-03-27 10:49:47 · 1015 阅读 · 0 评论 -
Android 网络服务类提供的服务接口
1.NetworkManagementService继承了INetworkManagementService.Stub,因此提供对应的 AIDL 定义的服务:在 frameworks/base/core/java/android/os/INetworkManagementService.aidl 中定义interface INetworkManagementService{ /* Register and unregister an observer to receive ev...原创 2021-03-25 14:28:09 · 3159 阅读 · 0 评论 -
Android 网络管理
一、相关服务的启动1. Netd 中创建 NETD_SERVICE 服务注册到 binder 中,在 framework 层直接获取对应的引用对象实例:在NetworkManagementService 中类初始化采用 create 接口,其中新建对象,调用了 connectNativeNetdService 初始化了INetd 对象 mNetdService ,其实调用了内部类SystemServices 的 getNetd 方法,进而调用了 NetdService 类的 get 方法,最...原创 2021-03-24 20:10:13 · 1441 阅读 · 0 评论 -
Android 网络代理的创建
ConnectivityService管理网络连接的服务层,其中维护了 NetworkAgent 对象列表,每种网络连接都会创建对应的 Agent 用于管理;NetworkAgent 其实是通过 AsyncChannel 与 ConnectivityService 之间通信的ConnectivityService:handleRegisterNetworkProvider 中参数为 NetworkProviderInfo,其中包含 Messenger 成员,通过其 AsyncChannel 的原创 2021-02-05 17:35:41 · 1079 阅读 · 0 评论 -
netd 中 Route 配置过程
0xc0a82b1f 192.168.43.31RouteController.cppmodifyIpRoute// Adds or deletes an IPv4 or IPv6 route.// Returns 0 on success or negative errno on failure.int modifyIpRoute(uint16_t action, uint16_t flags, uint32_t table, const char* interface, ...原创 2021-02-05 11:09:50 · 1158 阅读 · 1 评论 -
Android WiFi 获取 IP 过程
FdEventsReader 类在其 start 接口中调用了 createAndRegisterFd(),调用了 createFd 接口创建了 mFd 对象,并将对应的对象通过 MessageQueue() 的addOnFileDescriptorEventListener 方法加入到监听队列中;其中要求 Subclasses 必须实现createFd 接口并且重载 handlePacket 方法;PacketReader 类继承FdEventsReader 类它作为抽象类需要子类作...原创 2021-01-28 16:28:58 · 1437 阅读 · 1 评论 -
WifiConfiguration 的各字段的填充和修改
新建在 WifiConnectivityManager 处理消息进行 handleScanResults 操作的过程中,会通过 ScoredNetworkNominator 进行 nominateNetworks 操作,从中调用 ScanResultUtil::createNetworkFromScanResult 方法创建新的 WifiConfiguration 对象,并且对其进行必要的初始化ScanResultUtil::setAllowedKeyManagementFromScanResult原创 2021-01-26 23:02:34 · 1035 阅读 · 0 评论 -
wpa_supplicant 中 ISupplicant 服务代理客户端对象获取
在setupInterfaceForClientInConnectivityMode 中执行 startSupplicant 启动 Supplicant 服务,获取到服务端的信息调用了startAndWaitForSupplicantConnection 接口,其中进而调用了 SupplicantStaIfaceHal::initialize 接口,这里面包含了两层初始化以及初始化状态判断的过程:IServiceManager 的初始化,用于管理整个 HIDL 层面的 Service 的服务端口..原创 2021-01-20 11:23:12 · 678 阅读 · 0 评论 -
Netd 中 NetworkManager 分析
NetlinkManager 管理 netd 中 NetlinkHandler 的初始化并启动监听和处理;NetlinkHandler 处理和转发 Kernel 的相应事件;SocketListener 监听 socket,启动监听并接收 socket 事件;SocketClient 实际的消息处理者,他将 event 通过 socket 发送给 java 层进行处理;NativeDaemonConnector java 层的 socket 通讯端,用于接收和下发事件;NetworkMa原创 2021-01-06 21:05:00 · 957 阅读 · 2 评论 -
Netd 服务的 netd 套接字创建
在上一篇分析android_get_control_socket 获取 UNIX 域套接字 FD中留下一个问题:netd UNIX 域套接字何时创建的呢?现在来分析这个问题。前面分析了在 netd 中是通过 android_get_control_socket 接口查询到对应的 UNIX 域套接字的 fd,而实际上netd 后台服务进程的同名套接字 “netd” 的创建是在 Framework 层的 NetworkManagementService 部分,以后简称 NMS,关于 NMS 的详细内容后..原创 2020-12-29 12:17:09 · 1133 阅读 · 0 评论 -
Android 网络评分机制
在前两节简单介绍了连接管理的大致框架,数据链接的准备工作,包括APN的初始化与默认APN使能,DcTracker的构造,包括各种事件的注册等工作。但是数据链接的打开不止是只有用户主动去打开,Android可以提供数据业务的对象主要有,移动数据网络、WIFI、蓝牙、网线等,这些连接本身都可以独立使用,但是对于用户来说,每一时刻又最多只能使用一种方式接入网络,那么当这些功能同时打开时,比如即使用户打开了移动数据连接,但是又打开了wifi,那么只要wifi畅通,移动数据链接是不会用于上网的,那究竟如何选择最佳的接转载 2020-12-25 14:31:29 · 1584 阅读 · 0 评论 -
WiFi 连接到网络的过程
在WifiConnectivityManager 中收到扫描结果进行处理,选择相应的网络进行连接,发生在 connectToNetwork 接口中: /** * Attempt to connect to a network candidate. * * Based on the currently connected network, this menthod determines whether we should * connect or roam.原创 2020-12-24 20:10:03 · 1942 阅读 · 1 评论 -
WifiConnectivityManager 管理扫描
通过 WifiScanner.java 中 WifiScanner 类的 registerScanListener 方法注册 Scan 结果的回调监听句柄,实际上内部通过 AsyncChannel 向 WifiScanningService 层发送了CMD_REGISTER_SCAN_LISTENER 消息: /** * Register a listener that will receive results from all single scans. * Either.原创 2020-12-24 15:43:51 · 1856 阅读 · 0 评论 -
Android 高通 Wi-Fi 驱动
nl80211_copy.h 来自wpa_supplicant-2.6/src/drivers/nl80211_copy.h,在高通无线驱动中hardware/qcom/qcwcn/wifi_hal 里面被引用,高通无线驱动位于安卓根目录下的hardware/qcom/wlan/qcwcn 路径下,而 wpa_supplicant 位于 external/wpa_supplicant_8 中android/hardware/qcom/wlan 目录树结构:├── cld80211-lib└──...原创 2020-12-23 21:05:52 · 2829 阅读 · 1 评论 -
WiFi 连接过程
1. 在 WifiNative 类中 connectNetwork 被调用用于连接,其主要工作为停止当前扫描过程,删除 wpa_supplicant 中的网络配置信息,并将新的配置传送给 wpa_supplicant 保存,这会触发对已有配置网络的 disconnect 操作,最后触发 reconnect 操作到 wpa_supplicant: /** * Add the provided network configuration to wpa_supplicant and init原创 2020-12-11 17:53:59 · 1676 阅读 · 0 评论 -
WiFi 配置设置
用户配置界面的消息机制1. 用户界面入口在 WifiSettings.java,为 WifiSettings 类,其内部的 onActivityCreated 方法中调用了 WifiTrackerFactory 类的 create 接口创建了 WifiTracker 对象赋值给 mWifiTracker 成员,其中传入的 WifiTracker.Listener 内部类对象为 WifiSettings 类对象自身: @Override public void onActivityCr原创 2020-12-10 18:06:39 · 1863 阅读 · 0 评论 -
WiFi 扫描结果的通知过程
套接字初始化和报文收取1. netlink_manager.cpp 中 NetlinkManager 类的 start 函数中通过 WatchSocket 将 async_netlink_fd_ 绑定到 netlink 套接字打开,并通过 SubscribeToEvents 订阅对应的广播事件(NL80211_MULTICAST_GROUP_REG 和 NL80211_MULTICAST_GROUP_SCAN),从而该套接字可以收到 SCAN 的广播报文;2. 套接字的处理函数ReceivePac.原创 2020-12-08 14:48:49 · 1943 阅读 · 0 评论 -
WiFi 接口创建过程
接口创建wifi_chip.cpp 中handleChipConfiguration 接口调用了 legacy_hal 的 start 接口进行 legacy_hal 的启动操作被configureChipInternal 调用,回溯而被configureChip 调用,进而是被 Framework 层 HalDeviceManager.java 中的executeChipReconfiguration 调用进行每个 chip 的配置操作;同样回溯而被HalDeviceManager 的...原创 2020-12-02 18:10:35 · 931 阅读 · 0 评论