pica8 基本設定
設定 port 和 port 之間的對應關係
Last updated
設定 port 和 port 之間的對應關係
Last updated
在我們實驗架設的環境中,把 WiFi AP 連上 pica8 Switch 來提供對外網路連線,架構大致如下圖所示:
以下是 pica8 的網卡設定,可以看到有兩張網卡: eth0 和 eth1 分別對應對外網路 (用來 SSH 進入 pica8) 以及對內網路 (用來 SSH 其他 WiFi AP)
PICOS-OVS$ifconfig
br0 Link encap:Ethernet HWaddr 08:9e:01:61:65:3f
inet6 addr: fe80::a9e:1ff:fe61:653f/64 Scope:Link
UP BROADCAST RUNNING PROMISC MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:0 (0.0 B) TX bytes:368 (368.0 B)
eth0 Link encap:Ethernet HWaddr 08:9e:01:61:65:40
inet addr:140.113.xxx.xxx Bcast:140.113.xxx.255 Mask:255.255.255.0
inet6 addr: fe80::a9e:1ff:fe61:6540/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:16764 errors:0 dropped:0 overruns:0 frame:0
TX packets:663 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1482645 (1.4 MiB) TX bytes:106647 (104.1 KiB)
Base address:0xa000
eth1 Link encap:Ethernet HWaddr 08:9e:01:61:65:41
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::a9e:1ff:fe61:6541/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:25 errors:0 dropped:0 overruns:0 frame:0
TX packets:58 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2815 (2.7 KiB) TX bytes:4980 (4.8 KiB)
Base address:0xe000
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:16436 Metric:1
RX packets:26 errors:0 dropped:0 overruns:0 frame:0
TX packets:26 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2728 (2.6 KiB) TX bytes:2728 (2.6 KiB)
為了提供 WiFi AP 連網功能,我們要先設定好 pica8 上面 port 的對應關係,一開始,我們先從簡單的 bridge 模式開始,也就是,把所有 WiFi AP 的封包都導到 port 1 (連接至一個路由器)。
此模式並沒有用到 SDN (software-defined network) 的功能,只是純粹的把網路連載一起,所以不牽涉到 SDN controller 的設定,WiFi AP 也不需要安裝 SDN 的 client (例如: OpenFlow)。
ovs-ofctl add-flow br0 "in_port=2,priority=1,actions=output:1";
ovs-ofctl add-flow br0 "in_port=3,priority=1,actions=output:1";
ovs-ofctl add-flow br0 "in_port=4,priority=1,actions=output:1";
ovs-ofctl add-flow br0 "in_port=5,priority=1,actions=output:1";
ovs-ofctl add-flow br0 "in_port=6,priority=1,actions=output:1";
ovs-ofctl add-flow br0 "in_port=7,priority=1,actions=output:1";
ovs-ofctl add-flow br0 "in_port=8,priority=1,actions=output:1";
ovs-ofctl add-flow br0 "in_port=9,priority=1,actions=output:1";
ovs-ofctl add-flow br0 "in_port=10,priority=1,actions=output:1";
ovs-ofctl add-flow br0 "in_port=11,priority=1,actions=output:1";
ovs-ofctl add-flow br0 "in_port=12,priority=1,actions=output:1";
ovs-ofctl add-flow br0 "in_port=13,priority=1,actions=output:1";
ovs-ofctl add-flow br0 "in_port=14,priority=1,actions=output:1";
同時,對於從 port 1 來的資料,也都轉傳至每一個 WiFi AP。
ovs-ofctl add-flow br0 "in_port=1,priority=1,actions=output:2, output:3, output:4, output:5, output:6, output:7, output:8, output:9, output:10, output:11, output:12, output:13, output:14"
此指令是刪除所有的 flow 規則。
ovs-ofctl del-flows br0
當然,我們也可以透過指令來查詢目前 flow 的設定。
PICOS-OVS$ovs-ofctl dump-flows br0
NXST_FLOW reply (xid=0x4):
flow_id=32, cookie=0x0, duration=28.464s, table=0, n_packets=n/a, n_bytes=0, idle_age=28, priority=1,in_port=5 actions=output:1
flow_id=34, cookie=0x0, duration=28.419s, table=0, n_packets=n/a, n_bytes=402, idle_age=5, priority=1,in_port=7 actions=output:1
flow_id=42, cookie=0x0, duration=23.149s, table=0, n_packets=n/a, n_bytes=1392, idle_age=4, priority=1,in_port=1 actions=output:2,output:3,output:4,output:5,output:6,output:7,output:8,output:9,output:10,output:11,output:12,output:13,output:14
flow_id=37, cookie=0x0, duration=28.372s, table=0, n_packets=n/a, n_bytes=0, idle_age=28, priority=1,in_port=10 actions=output:1
flow_id=31, cookie=0x0, duration=28.488s, table=0, n_packets=n/a, n_bytes=344, idle_age=1, priority=1,in_port=4 actions=output:1
flow_id=38, cookie=0x0, duration=28.357s, table=0, n_packets=n/a, n_bytes=274, idle_age=13, priority=1,in_port=11 actions=output:1
flow_id=33, cookie=0x0, duration=28.440s, table=0, n_packets=n/a, n_bytes=274, idle_age=13, priority=1,in_port=6 actions=output:1
flow_id=29, cookie=0x0, duration=28.524s, table=0, n_packets=n/a, n_bytes=402, idle_age=5, priority=1,in_port=2 actions=output:1
flow_id=35, cookie=0x0, duration=28.402s, table=0, n_packets=n/a, n_bytes=0, idle_age=28, priority=1,in_port=8 actions=output:1
flow_id=39, cookie=0x0, duration=28.342s, table=0, n_packets=n/a, n_bytes=274, idle_age=10, priority=1,in_port=12 actions=output:1
flow_id=36, cookie=0x0, duration=28.387s, table=0, n_packets=n/a, n_bytes=344, idle_age=1, priority=1,in_port=9 actions=output:1
flow_id=41, cookie=0x0, duration=28.310s, table=0, n_packets=n/a, n_bytes=274, idle_age=13, priority=1,in_port=14 actions=output:1
flow_id=40, cookie=0x0, duration=28.326s, table=0, n_packets=n/a, n_bytes=0, idle_age=28, priority=1,in_port=13 actions=output:1
flow_id=30, cookie=0x0, duration=28.510s, table=0, n_packets=n/a, n_bytes=1008, idle_age=4, priority=1,in_port=3 actions=output:1