天天看點

WiFi開啟熱點沖突

OS:Linux3.18 + Android4.4

問題點: 開發闆已經接入4G子產品,可以正常上網,現在要通過開啟Wifi熱點共享網絡,在設定裡開啟AP模式時,wifi一直在不停的開關,不能打開熱點。

原本不加4G子產品,ap功能是正常的,添加後不能用,以為是4g子產品和wifi驅動沖突,看kernel和logcat,一點點找,iptables這部分存在問題。

具體的natcontroller功能及runcmd功能清單看Android系統中iptables的應用(三)NatController,

這時候看logcat

09-18 09:49:02.853 D/Tethering( 2130): TetheredState.processMessage what=12
09-18 09:49:02.853 V/NatController( 1429): enableNat(intIface=<wlan0>, extIface=<usb0>)
09-18 09:49:02.863 D/MobileDataStateTracker( 2130): hipri: Broadcast received: android.intent.action.ANY_DATA_STATE apnType=hipri
09-18 09:49:02.863 D/MobileDataStateTracker( 2130): hipri: Received state=DISCONNECTED, old=CONNECTED, reason=dataDisabled
09-18 09:49:02.863 D/MobileDataStateTracker( 2130): hipri: setDetailed state, old =CONNECTED and new state=DISCONNECTED
09-18 09:49:02.863 D/ConnectivityService( 2130): ConnectivityChange for mobile_hipri: DISCONNECTED/DISCONNECTED
09-18 09:49:02.913 V/NatController( 1429): runCmd(/system/bin/ip route flush cache) res=0
09-18 09:49:02.923 V/NatController( 1429): runCmd(/system/bin/iptables -t nat -A natctrl_nat_POSTROUTING -o usb0 -j MASQUERADE) res=3
09-18 09:49:02.923 E/NatController( 1429): Error seting postroute rule: iface=usb0
09-18 09:49:02.933 D/dalvikvm( 2130): GC_CONCURRENT freed 773K, 15% free 6215K/7236K, paused 4ms+9ms, total 61ms
09-18 09:49:02.973 V/NatController( 1429): runCmd(/system/bin/ip route flush cache) res=0
09-18 09:49:02.993 V/NatController( 1429): runCmd(/system/bin/iptables -F natctrl_FORWARD) res=0
09-18 09:49:02.993 V/NatController( 1429): runCmd(/system/bin/iptables -A natctrl_FORWARD -j DROP) res=0
09-18 09:49:03.003 V/NatController( 1429): runCmd(/system/bin/iptables -t nat -F natctrl_nat_POSTROUTING) res=3
09-18 09:49:03.003 E/Tethering( 2130): Exception enabling Nat: java.lang.IllegalStateException: command '129 nat enable wlan0 usb0 2 fe80::/64 192.168.43.0/24' failed with '400 129 Nat operation failed (Cannot assign requested address)'
09-18 09:49:03.023 D/TetherController( 1429): untetherInterface(wlan0)
09-18 09:49:03.033 D/BluetoothAdapter( 2651): 1099669424: getState() :  mService = null. Returning STATE_OFF
           

runCmd(/system/bin/iptables -t nat -A natctrl_nat_POSTROUTING -o usb0 -j MASQUERADE) res=3

這行已經錯誤,正常res=0,嘗試在開發闆序列槽輸入

iptables -t nat -A natctrl_nat_POSTROUTING -o usb0 -j MASQUERADE
           

會出現

iptables v1.4.11.1: can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
           

這時候已經明白原因,Linux核心沒有添加nat子產品,在核心添加nat後,ap熱點可以正常使用。

看到了Android KitKat 4.4 Wifi移植AP模式和網絡共享的調試日志,原來也是一樣的問題