PC端
两个有线网口, 分别为enp0s31f6和enx98fc84e92b6f
先用网线将两个网口直连起来
$ sudo ip netns exec ns0 ip link set enp0s31f6 netns 1
$ sudo ip netns exec ns1 ip link set enx98fc84e92b6f netns 1
$ sudo ip netns delete ns0
$ sudo ip netns delete ns1
$ sudo ip netns add ns0
$ sudo ip link set enp0s31f6 netns ns0
$ sudo ip netns exec ns0 ip link set dev enp0s31f6 up
$ sudo ip netns exec ns0 ip addr flush dev enp0s31f6
$ sudo ip netns exec ns0 ip addr add 10.0.1.1/24 dev enp0s31f6
$ sudo ip netns add ns1
$ sudo ip link set enx98fc84e92b6f netns ns1
$ sudo ip netns exec ns1 ip link set dev enx98fc84e92b6f up
$ sudo ip netns exec ns1 ip addr flush dev enx98fc84e92b6f
$ sudo ip netns exec ns1 ip addr add 10.0.2.2/24 dev enx98fc84e92b6f
$ ls /var/run/netns/
ns0 ns1
$ sudo ip netns exec ns0 ip addr show
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s31f6: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether 84:a9:38:b8:23:64 brd ff:ff:ff:ff:ff:ff
inet 10.0.1.1/24 scope global enp0s31f6
valid_lft forever preferred_lft forever
$ sudo ip netns exec ns1 ip addr show
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
11: enx98fc84e92b6f: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 98:fc:84:e9:2b:6f brd ff:ff:ff:ff:ff:ff
inet 10.0.2.2/24 scope global enx98fc84e92b6f
valid_lft forever preferred_lft forever
$ sudo ip netns exec ns1 ping -c 4 10.0.1.1
ping: connect: 网络不可达
$ sudo ip netns exec ns0 ping -c 4 10.0.2.2
ping: connect: 网络不可达
$ sudo ip netns exec ns0 ip route add 10.0.2.0/24 dev enp0s31f6
$ sudo ip netns exec ns1 ip route add 10.0.1.0/24 dev enx98fc84e92b6f
$ sudo ip netns exec ns1 ping -c 4 10.0.1.1
PING 10.0.1.1 (10.0.1.1) 56(84) bytes of data.
64 字节,来自 10.0.1.1: icmp_seq=1 ttl=64 时间=0.789 毫秒
64 字节,来自 10.0.1.1: icmp_seq=2 ttl=64 时间=0.494 毫秒
64 字节,来自 10.0.1.1: icmp_seq=3 ttl=64 时间=0.553 毫秒
64 字节,来自 10.0.1.1: icmp_seq=4 ttl=64 时间=0.631 毫秒
--- 10.0.1.1 ping 统计 ---
已发送 4 个包, 已接收 4 个包, 0% 包丢失, 耗时 3069 毫秒
rtt min/avg/max/mdev = 0.494/0.616/0.789/0.110 ms
$ sudo ip netns exec ns0 ping -c 4 10.0.2.2
PING 10.0.2.2 (10.0.2.2) 56(84) bytes of data.
64 字节,来自 10.0.2.2: icmp_seq=1 ttl=64 时间=0.449 毫秒
64 字节,来自 10.0.2.2: icmp_seq=2 ttl=64 时间=0.598 毫秒
64 字节,来自 10.0.2.2: icmp_seq=3 ttl=64 时间=0.681 毫秒
64 字节,来自 10.0.2.2: icmp_seq=4 ttl=64 时间=0.551 毫秒
--- 10.0.2.2 ping 统计 ---
已发送 4 个包, 已接收 4 个包, 0% 包丢失, 耗时 3067 毫秒
rtt min/avg/max/mdev = 0.449/0.569/0.681/0.083 ms
可以看到, 如果两个网口不同网段,是不能ping通的,需要配置路由。
注:如果同网段,两个网口都是使用默认路由(e.g 10.0.1.0), 这时不需要修改是可以直接ping通的
开发板
设置网桥,并配置pfe0, pfe2端口
$ ip addr flush dev pfe0
$ ip addr add 0.0.0.0/24 dev pfe0
$ ip addr flush dev pfe2
$ ip addr add 0.0.0.0/24 dev pfe2
$ ip link add br0 type bridge
$ ip link set dev br0 up
$ ip addr flush dev br0
$ ip addr add 10.0.1.100/24 dev br0
$ ip link set pfe0 up
$ ip link set dev pfe0 master br0
$ ip link set pfe2 up
$ ip link set dev pfe2 master br0
$ ifconfig
[...]
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.1.100 netmask 255.255.255.0 broadcast 0.0.0.0
ether 00:01:be:be:ef:11 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 7 bytes 618 (618.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[...]
通过switch互ping
将两根网线分别连接:
- PC(enp0s31f6)和SJA1110A 交换机端口 2
- PC(enx98fc84e92b6f)和SJA1110A 交换机端口 3
实现PC两个网口间互ping
$ sudo ip netns exec ns0 ping -c 4 10.0.2.2
PING 10.0.2.2 (10.0.2.2) 56(84) bytes of data.
64 字节,来自 10.0.2.2: icmp_seq=1 ttl=64 时间=0.747 毫秒
64 字节,来自 10.0.2.2: icmp_seq=2 ttl=64 时间=0.572 毫秒
64 字节,来自 10.0.2.2: icmp_seq=3 ttl=64 时间=0.654 毫秒
64 字节,来自 10.0.2.2: icmp_seq=4 ttl=64 时间=0.639 毫秒
--- 10.0.2.2 ping 统计 ---
已发送 4 个包, 已接收 4 个包, 0% 包丢失, 耗时 3050 毫秒
rtt min/avg/max/mdev = 0.572/0.653/0.747/0.062 ms
$ sudo ip netns exec ns1 ping -c 4 10.0.1.1
PING 10.0.1.1 (10.0.1.1) 56(84) bytes of data.
64 字节,来自 10.0.1.1: icmp_seq=1 ttl=64 时间=0.401 毫秒
64 字节,来自 10.0.1.1: icmp_seq=2 ttl=64 时间=0.682 毫秒
64 字节,来自 10.0.1.1: icmp_seq=3 ttl=64 时间=0.683 毫秒
64 字节,来自 10.0.1.1: icmp_seq=4 ttl=64 时间=0.657 毫秒
--- 10.0.1.1 ping 统计 ---
已发送 4 个包, 已接收 4 个包, 0% 包丢失, 耗时 3070 毫秒
rtt min/avg/max/mdev = 0.401/0.605/0.683/0.118 ms
sudo ip netns exec ns0 ip link set eth0 netns 1
sudo ip netns exec ns1 ip link set pfe2 netns 1
sudo ip netns delete ns0
sudo ip netns delete ns1
sudo ip netns add ns0
sudo ip link set eth0 netns ns0
sudo ip netns exec ns0 ip link set dev eth0 up
sudo ip netns exec ns0 ip addr flush dev eth0
sudo ip netns exec ns0 ip addr add 10.0.1.1/24 dev eth0
sudo ip netns add ns1
sudo ip link set pfe2 netns ns1
sudo ip netns exec ns1 ip link set dev pfe2 up
sudo ip netns exec ns1 ip addr flush dev pfe2
sudo ip netns exec ns1 ip addr add 10.0.2.2/24 dev pfe2
ls /var/run/netns/
sudo ip netns exec ns0 ip route add 10.0.2.0/24 dev eth0
sudo ip netns exec ns1 ip route add 10.0.1.0/24 dev pfe2
sudo ip netns exec ns1 ping -c 4 10.0.1.1