天天看點

P4 Tutorials---- source routing後記(補充IPv4轉發)實驗内容拓撲圖Switch邏輯示意圖:操作步驟添加Switch規則測試

實驗内容

針對P4 Tutorials---- source routing實驗最後提出的問題。

如何使壓入标簽的動作在第一跳網絡裝置上執行,這樣應該使更貼近現實中的網絡場景。

實驗前,我們先看一下h1 ping h2是不通的。因為和./send.py 發的帶标簽的包不同,直接ping的是普通的ipv4包,但是switch現在沒有轉發ipv4封包的邏輯。

P4 Tutorials---- source routing後記(補充IPv4轉發)實驗内容拓撲圖Switch邏輯示意圖:操作步驟添加Switch規則測試

拓撲圖

P4 Tutorials---- source routing後記(補充IPv4轉發)實驗内容拓撲圖Switch邏輯示意圖:操作步驟添加Switch規則測試

Switch邏輯示意圖:

我們這次實驗要做是ipv4的資料包進入後在第一個switch壓入指導轉發的标簽棧,後面的switch就所需要做的是彈出标簽,從相應的端口送出資料包。

以S1為例:

  1. IPv4封包進到S1後改變Type類型為0x1234,壓入兩個标簽,注意要先壓入離目的端近的标簽。
P4 Tutorials---- source routing後記(補充IPv4轉發)實驗内容拓撲圖Switch邏輯示意圖:操作步驟添加Switch規則測試

2. 封包出S1的Port2口并彈出一層标簽,到達S2

P4 Tutorials---- source routing後記(補充IPv4轉發)實驗内容拓撲圖Switch邏輯示意圖:操作步驟添加Switch規則測試

3.封包出S2時,彈出一層标簽,修改Type為0x0800

P4 Tutorials---- source routing後記(補充IPv4轉發)實驗内容拓撲圖Switch邏輯示意圖:操作步驟添加Switch規則測試

操作步驟

這裡主要介紹一下相比source routing實驗增加的代碼。

Parser:

如果ehterType是IPV4,轉到parse_ipv4

P4 Tutorials---- source routing後記(補充IPv4轉發)實驗内容拓撲圖Switch邏輯示意圖:操作步驟添加Switch規則測試

Ingress:

如果進來的是ipv4的資料包,壓入兩個标簽

P4 Tutorials---- source routing後記(補充IPv4轉發)實驗内容拓撲圖Switch邏輯示意圖:操作步驟添加Switch規則測試

Egress:

增加一個table ipv4_final ,如果比對目的ip,替換目的mac

P4 Tutorials---- source routing後記(補充IPv4轉發)實驗内容拓撲圖Switch邏輯示意圖:操作步驟添加Switch規則測試

Checksum computation

資料包改變做校驗。

P4 Tutorials---- source routing後記(補充IPv4轉發)實驗内容拓撲圖Switch邏輯示意圖:操作步驟添加Switch規則測試

添加Switch規則

CLI 登入到S1和S2

S1添加規則:

table_add ipv4_lpm_add addlabel 10.0.2.2/32 => 1 1

table_add ipv4_lpm_add2 addlabel2 10.0.2.2/32 => 2 0

table_add ipv4_final dmac 10.0.1.1/32 => 08:00:00:00:01:11

S2添加規則:

table_add ipv4_lpm_add addlabel 10.0.1.1/32 => 1 1

table_add ipv4_lpm_add2 addlabel2 10.0.1.1/32 => 2 0

table_add ipv4_final dmac 10.0.2.2/32 => 08:00:00:00:02:22

測試

現在h1可以ping通h2

P4 Tutorials---- source routing後記(補充IPv4轉發)實驗内容拓撲圖Switch邏輯示意圖:操作步驟添加Switch規則測試

通過wireshark,我們可以在pcap的目錄下看到抓包記錄。

這裡依次截出了從h1到h2 ping的封包轉發全過程

S1 eth1 是一個IPv4包。

P4 Tutorials---- source routing後記(補充IPv4轉發)實驗内容拓撲圖Switch邏輯示意圖:操作步驟添加Switch規則測試

S1 eth2送出去時,帶着一層标簽。

因為自定義的type,是以wireshark不能完全識别這個包。

但是我們可以通過type 1234判斷後面的16bit(80 01)是soure route的标簽,換算成二進制1000 0001。

對照開始定義的srcRoute_t,第1個bit是表示bos,後面15個bit是表示端口号。

P4 Tutorials---- source routing後記(補充IPv4轉發)實驗内容拓撲圖Switch邏輯示意圖:操作步驟添加Switch規則測試

S2 eth1出來IPv4包。

P4 Tutorials---- source routing後記(補充IPv4轉發)實驗内容拓撲圖Switch邏輯示意圖:操作步驟添加Switch規則測試

實驗代碼https://mp.csdn.net/mp_download/creation/uploadResources/85182479

繼續閱讀