l2fwd 增加自定義修改目的mac位址功能

2021-09-03 08:20:02 字數 1519 閱讀 7189

這個功能是由我同事針對特定測試需求在l2fwd指令碼中二次開發的功能。用以支援l2fwd**流量能夠自定義指定使用者輸入的mac位址。今年初我同事因為各種原因離開公司和團隊,謹以此部落格來紀念我同事無私的奉獻。並希望有同樣功能訴求的人在看到這篇部落格時,這個工具能對你們有所幫助。

以dpdk18的版本為例。l2fwd指令碼執行時會綁埠,將繫結的埠上的流量進行**。但是仔細一想**只是完成了乙個流向轉換的過程。在l2fwd資料夾的main.c檔案中可以看到**如下:

151 static void

152 l2fwd_mac_updating(struct rte_mbuf *m, unsigned dest_portid)

153

在l2fwd處理**時,會把目的mac位址統一的更新為02:00:00:00:00:00。這樣會導致乙個問題就是當流量到l2fwd時,l2fwd更新目的mac位址之後,測試流量並不能正常的返回到源測試端。

當使用例如ixia,sprint打流儀器來傳送二層包時,無法正確的調換包內mac位址會造成不必要的麻煩。雖然ixia和sprint打流儀可以很好的自定義包結構和包資料能很好的規避這種問題。

以pktgen-dpdk產生的流量為例,pktgen-dpdk傳送的是三層網路包。所以報文具有三層網路的特性,報文中包含源ip,源mac位址,目的ip,目的mac位址。當l2fwd處理從pktgen-dpdk傳送過來的報文時,只會將報文從繫結的埠原路返回。這也就意味著報文中源ip,源mac位址,目的ip,目的mac位址並不會做調換。

在l2fwd中新增了-d引數,用於支援將dmac手動輸入到l2fwd中,並使**包持續的**我手動輸入的mac位址。

命令通過新增-d指定埠的dmac:

# ./build/l2fwd -c 3 -n 2 -- -p 3 -d 11:11:11:11:11:11 -d 22:22:22:22:22:22

port0的dmac為: 11:11:11:11:11:11

port2的dmac為: 22:22:22:22:22:22

執行時輸出資訊增加了port的使用者指定dmac顯示:

…initializing port 0... done:

port 0, mac address: 52:54:00:46:8d:c0

initializing port 1... done:

port 1, mac address: 52:54:00:f0:6c:50

port 0, destination mac address: 11:11:11:11:11:11

port 1, destination mac address: 22:22:22:22:22:22

這裡我將mac位址指定為vm1網絡卡的mac位址fa:16:3e:5a:d5:99。通過在vm2抓包可以看到是否實際生效。

支援dpdk18版本的l2fwd:

自定義view增加動畫效果

通過這一周的學習總算對自定義view比較了解了。所以也想和大家分享一下自定義view的學習方法和我學習的乙個過程。還是來看一下我們每篇比談的我們的自定義view的大綱 1.自定義view單純的用畫筆繪製view 死view 2.自定義view 增加動畫 3.自定義view增加手勢 4.自定義view...

NFrog 增加自定義屬性支援

所謂自定義屬性,就是如以下屬性定義中的黑體部分。獲取 設定 註冊日期 nhfield listpos 3,caption 註冊日期 format public datetime registdate set 為了讓nfrog輸出的 cs檔案的屬性也支援自定義屬性增加了兩個父類 code namesp...

mysql增加自定義函式功能

mysql預設是不能自定義函式的 當create function時 this function has none of deterministic,no sql,or reads sql data in its declaration and binary solution 1 exec set ...