nycu-OpenWrt
  • OpenWRT: WiFi 網路的開放平台
  • OpenWRT 硬體
    • 測試硬體與功能列表
    • 小米路由器3的設定與測試
  • OpenWRT 編譯環境建立
    • OPKG Package Manager
    • 建立編譯環境 (Cross Compiler)
    • 建立編譯環境 (SDK for .ipk 封裝)
    • 遠端登入執行程式
  • OpenWRT 功能測試
    • 設定時區與 NTP 網路對時
    • CRONTAB 排程工作
    • 從 WAN 登入 OpenWRT
    • 防火牆的設置
    • 無線網路 SSID 的設定
    • Bridge-mode and Router-mode
    • 在 OpenWRT 上布建 Container (LXC)
    • 實驗: WiFi 的無線設定 (iw)
    • 實驗: 封包排程與 QoS
  • 實驗: 側聽封包資訊
    • 802.11 封包解析
    • 實驗: 虛擬監聽網卡並取得 RSSI
    • 實驗: 取得 RSSI 並回傳至伺服器
  • 實驗: MQTT 物聯網
    • MQTT 通訊協定
    • MQTT 在 OpenWRT 上的開發
  • 實驗: SDN-based Network
    • pica8 基本設定
    • 在 OpenWRT 上架設 Open vSwitch (OVS)
    • VLAN 在 WiFi AP 硬體上的實現
    • 在 OpenWRT 上架設 VLAN
    • 架設一個訪客用的無線網路
  • 實驗: OpenWRT 周邊存取
    • 實驗: GPIO 的存取
    • 實驗: I2C 的操作
Powered by GitBook
On this page
  • 網路架構與 pica8 設定
  • pica8 flow table 設定 (bridge mode)
  1. 實驗: SDN-based Network

pica8 基本設定

設定 port 和 port 之間的對應關係

PreviousMQTT 在 OpenWRT 上的開發Next在 OpenWRT 上架設 Open vSwitch (OVS)

Last updated 6 years ago

網路架構與 pica8 設定

在我們實驗架設的環境中,把 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)

pica8 flow table 設定 (bridge mode)

為了提供 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