文章

顯示從 七月, 2021 起發佈的文章

Rootless Router (Part 1): wggo-vpp

圖片
前篇:  Rootless Router (Part 0): 用戶態DN42節點 提到的東西,第一部分終於完成了 也就是memif+tap2tun的部分 tap2tun的部分邏輯很簡單,如下 tap部分邏輯 收到一個封包 if 是ARP request: 回復一個ARP response 加入ARP Table elif 是Neighbor solicitation : 回覆一個Neighbor advertisement 加入Neighbor Table elif 是ARP reply: 加入ARP Table elif 是Neighbor advertisement: 加入Neighbor Table else: 拔掉L2丟去tun對面 tun的部分更簡單 收到一個封包 去ARP/Neighbor Table查表 if 查表成功: 目標Mac=查表結果 elif 需要查表(預先定義了一個要查表的範圍,通常是設定成l2內網範圍): 發送一個ARP request/Neighbor solicitation到tap端 丟棄該封包,返回 else: 目標Mac=Gateway Mac Address 補上l2包頭,發送到tap端 幾經波折,終於完成第一部分。把wireguard-go的tun的 CreateTun/Read/Write 改掉,變成用libmemif+vpp-api和vpp互動 以上指定都是用普通用戶身分在userspace執行,亦不需要kernel的tun/tap支援 成功在vpp裡面ping通對端電腦 對端電腦也成功收到來自vpp的封包 完成了第一部分,至於心得嘛... govpp根本不是一個可以正常用的package,還得幫他們debug。想用的建議直接改用C++,詳情請看issue 20~22 https://jira.fd.io/projects/GOVPP/issues/GOVPP-20?filter=allissues 雖然都是一些小修正,但是又不是很少用的功能出錯。而是example裡面提供的程式碼,也就是最基礎的功能都無法正常運作! 讓人不禁想抱怨一下 有興趣的人可以去這邊下載,原始碼:  https://github.com/Kusak