连接管理功能包括 wifi ethernet cable bluetooth tethering ap mobile的连接和切换,状态和数据统计,是一个复杂的模块。
在framework层,通常来说主要如下:
ANDROID 系统网络连接和管理服务由四个系统服务ConnectivityService、NetworkPolicyManagerService、NetworkManagementService、NetworkStatsService共同配合完成网络连接和管理功能,四个服务只有ConnectivityService、NetworkPolicyManagerService两个服务通过NetworkPolicyManager、ConnectivityManager两个客户端对象对应用程序提供对外SDK接口,而NetworkManagementService、NetworkStatsService没有对外提供SDK接口,但设置应用程序可以通过获取系统服务接口使用NetworkManagementService、NetworkStatsService服务.
框架详细介绍:
http://old.uplook.cn/index.php?a=index&m=Index&c=show&id=240006&
这里
结合底层服务netd的部分
http://blog.csdn.net/xiaokeweng/article/details/8130218
总结:
netd服务是主要控制pppd,tethering,softap,dns,route控制。它通过netlink与kernel通信。上层是通过socket与framework通信。
ethernet 子系统:
http://blog.csdn.net/martingang/article/details/8170950
wifi子系统:
http://blog.csdn.net/seker_xinjian/article/details/6254609
NOte: 在android4.0上面,Wifimonitor监听wpa的消息然后 WifiStateMachine的接口最后发广播,WifiStateTracker会收到广播然后用connectivityservice的handler发送消息给ConnectivityService
WifiStateMachine.java
1563 private void sendNetworkStateChangeBroadcast(String bssid) {
1564 Intent intent = new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION);
1565 intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT
1566 | Intent.FLAG_RECEIVER_REPLACE_PENDING);
1567 intent.putExtra(WifiManager.EXTRA_NETWORK_INFO, mNetworkInfo);
1568 intent.putExtra(WifiManager.EXTRA_LINK_PROPERTIES, new LinkProperties (mLinkProperties));
1569 if (bssid != null)
1570 intent.putExtra(WifiManager.EXTRA_BSSID, bssid);
1571 if (mNetworkInfo.getState() == NetworkInfo.State.CONNECTED)
1572 intent.putExtra(WifiManager.EXTRA_WIFI_INFO, new WifiInfo(mWifiInfo));
1573 mContext.sendStickyBroadcast(intent);
1574 }
WifiStateMachine.java
224 } else if (intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
225 mNetworkInfo = (NetworkInfo) intent.getParcelableExtra(
226 WifiManager.EXTRA_NETWORK_INFO);
227 mLinkProperties = intent.getParcelableExtra(
228 WifiManager.EXTRA_LINK_PROPERTIES);
229 if (mLinkProperties == null) {
230 mLinkProperties = new LinkProperties();
231 }
232 mLinkCapabilities = intent.getParcelableExtra(
233 WifiManager.EXTRA_LINK_CAPABILITIES);
234 if (mLinkCapabilities == null) {
235 mLinkCapabilities = new LinkCapabilities();
236 }
237 // don't want to send redundent state messages
238 // TODO can this be fixed in WifiStateMachine?
239 NetworkInfo.State state = mNetworkInfo.getState();
240 if (mLastState == state) {
241 return;
242 } else {
243 mLastState = state;
244 }
245 Message msg = mCsHandler.obtainMessage(EVENT_STATE_CHANGED,
246 new NetworkInfo(mNetworkInfo));
247 msg.sendToTarget();
TrafficStats.java