ArmV9 Cix P1 USB RNDIS 网络开发

阿里云教程2个月前发布
21 0 0

1. PC 通过USB Rndis 访问Cix P1共享网络

Setting usb setting 选择usb tethering

Cix P1 新增usb0 网络节点:

console:/ # ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope: Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 TX bytes:0

dummy0    Link encap:Ethernet  HWaddr 26:d9:24:73:51:1b
          inet6 addr: fe80::24d9:24ff:fe73:511b/64 Scope: Link
          UP BROADCAST RUNNING NOARP  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 TX bytes:350

eth0      Link encap:Ethernet  HWaddr 12:5f:c0:94:ae:6d  Driver macb
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 TX bytes:0
          Interrupt:104

usb0      Link encap:Ethernet  HWaddr f2:90:cc:d9:ae:f8  Driver configfs-gadget.g1
          inet addr:192.168.33.17  Bcast:192.168.33.255  Mask:255.255.255.0
          inet6 addr: fe80::f090:ccff:fed9:aef8/64 Scope: Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:256 errors:0 dropped:0 overruns:0 frame:0
          TX packets:185 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:23574 TX bytes:25574

Pc 新增usb0 网络节点:

stephen@stephen-System-Product-Name:~/workdir/Android14_Beta1/out/target/product/sky1_evb$ ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.200.1  netmask 255.255.255.0  broadcast 192.168.200.255
        ether 02:42:9a:bd:fd:60  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp5s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.18.64.27  netmask 255.255.252.0  broadcast 172.18.67.255
        inet6 fe80::1e5b:7181:99c3:182c  prefixlen 64  scopeid 0x20<link>
        ether 08:bf:b8:41:0e:3d  txqueuelen 1000  (Ethernet)
        RX packets 7631998  bytes 3895309742 (3.8 GB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4803586  bytes 955338435 (955.3 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 296163  bytes 1388079428 (1.3 GB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 296163  bytes 1388079428 (1.3 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

usb0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.33.25  netmask 255.255.255.0  broadcast 192.168.33.255
        inet6 fe80::7f01:e9c6:a6af:a10  prefixlen 64  scopeid 0x20<link>
        ether 42:57:a7:7e:70:eb  txqueuelen 1000  (Ethernet)
        RX packets 241  bytes 19028 (19.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 331  bytes 48502 (48.5 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Pc 通过usb0 访问Cix P1 usb 共享网络

stephen@stephen-System-Product-Name:~/workdir/Android14_Beta1/out/target/product/sky1_evb$ ping -I usb0 www.baidu.com
PING www.a.shifen.com (153.3.238.110) 56(84) bytes of data.
64 bytes from 153.3.238.110 (153.3.238.110): icmp_seq=1 ttl=44 time=23.1 ms
64 bytes from 153.3.238.110 (153.3.238.110): icmp_seq=2 ttl=44 time=22.9 ms

2. PC Usb Rndis 共享网络给Cix P1

Android 原生不支持该Feature,需要对应Patch 支持DNS。

diff –git a/DnsProxyListener.cpp b/DnsProxyListener.cpp
index 8064aef7..4d1f7218 100644
— a/DnsProxyListener.cpp
+++ b/DnsProxyListener.cpp
@@ -33,7 +33,7 @@

 #include <algorithm>
 #include <vector>

+#include “resolv_cache.h”
 #include <android-base/parseint.h>

@@ -905,8 +905,26 @@ void DnsProxyListener::GetAddrInfoHandler::doDns64Synthesis(int32_t* rv, addrinf
 }

 void DnsProxyListener::GetAddrInfoHandler::run() {
   LOG(INFO) << “GetAddrInfoHandler::run: {” << mNetContext.toString() << “}”;
+    if(mNetContext.app_netid == 0)
+    {
+        const std::vector<std::string> servers = {“10.128.30.12”};
+        const std::vector<std::string> domains = {“”};
+        const std::vector<int32_t>& transportTypes = {aidl::android::net::IDnsResolver::TRANSPORT_ETHERNET, aidl::android::net::IDnsResolver::TRANSPORT_VPN};
+        const aidl::android::net::ResolverOptionsParcel& resolverOptions = {};
+        const res_params params = {
+                .sample_validity = 1800,
+                .success_threshold = 25,
+                .min_samples = 8,
+                .max_samples = 64,
+                .base_timeout_msec = 5000,
+                .retry_count = 2,
+        };
+        LOG(INFO) << “GetAddrInfoHandler::run: resolv_set_nameservers ” << mNetContext.toString() << “}”;
+        resolv_create_cache_for_net(mNetContext.app_netid);
+        resolv_set_nameservers(mNetContext.app_netid, servers, domains, params, resolverOptions, transportTypes);
+    }

Setting usb setting 选择usb tethering

Cix P1 新增usb0 网络节点,配置对应路由:

console:/ # ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope: Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 TX bytes:0

dummy0    Link encap:Ethernet  HWaddr 26:d9:24:73:51:1b
          inet6 addr: fe80::24d9:24ff:fe73:511b/64 Scope: Link
          UP BROADCAST RUNNING NOARP  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 TX bytes:350

eth0      Link encap:Ethernet  HWaddr 12:5f:c0:94:ae:6d  Driver macb
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 TX bytes:0
          Interrupt:104

usb0      Link encap:Ethernet  HWaddr f2:90:cc:d9:ae:f8  Driver configfs-gadget.g1
          inet addr:192.168.33.17  Bcast:192.168.33.255  Mask:255.255.255.0
          inet6 addr: fe80::f090:ccff:fed9:aef8/64 Scope: Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:256 errors:0 dropped:0 overruns:0 frame:0
          TX packets:185 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:23574 TX bytes:25574

ip route add 192.168.0.0/24 dev usb0 proto kernel scope link src 192.168.33.17
ip route add default via 192.168.33.17 dev usb0
ip rule add from all lookup main pref 9000

Pc 新增usb0 网络节点,配置对应网络路由:

stephen@stephen-System-Product-Name:~/workdir/Android14_Beta1/out/target/product/sky1_evb$ ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.200.1  netmask 255.255.255.0  broadcast 192.168.200.255
        ether 02:42:9a:bd:fd:60  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp5s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.18.64.27  netmask 255.255.252.0  broadcast 172.18.67.255
        inet6 fe80::1e5b:7181:99c3:182c  prefixlen 64  scopeid 0x20<link>
        ether 08:bf:b8:41:0e:3d  txqueuelen 1000  (Ethernet)
        RX packets 7631998  bytes 3895309742 (3.8 GB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4803586  bytes 955338435 (955.3 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 296163  bytes 1388079428 (1.3 GB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 296163  bytes 1388079428 (1.3 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

usb0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.33.25  netmask 255.255.255.0  broadcast 192.168.33.255
        inet6 fe80::7f01:e9c6:a6af:a10  prefixlen 64  scopeid 0x20<link>
        ether 42:57:a7:7e:70:eb  txqueuelen 1000  (Ethernet)
        RX packets 241  bytes 19028 (19.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 331  bytes 48502 (48.5 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

sudo ip route add 192.168.0.0/24 dev usb0 proto kernel scope link src 192.168.33.25

Pc 设置网络转发:

sudo iptables -A FORWARD -i usb0 -o enp5s0 -j ACCEPT
sudo iptables -A FORWARD -i enp5s0 -o usb0 -m state –state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o enp5s0 -j MASQUERADE

Cix P1 通过usb0 访问Pc usb 共享网络

ping -I usb0 www.baidu.com
PING www.a.shifen.com (153.3.238.110) 56(84) bytes of data.
64 bytes from 153.3.238.110 (153.3.238.110): icmp_seq=1 ttl=44 time=23.1 ms
64 bytes from 153.3.238.110 (153.3.238.110): icmp_seq=2 ttl=44 time=22.9 ms
© 版权声明

相关文章

暂无评论

none
暂无评论...