1 examples
這裏包括兩個NS4使用案例,一個是p4-demo.cc,一個是p4-topo-test.cc
1.1 p4-demo.cc
p4-demo.cc 包含了一個簡單的網絡拓撲結構,主要用於測試P4程序編寫的正確性以及NS4是否可以正常運行
1.2 p4-topo-test.cc
p4-topo-test.cc 用於模擬大規模的P4驅動的網絡,可自動構造或手動定義網絡拓撲(如fattree),可自動構造或手動編寫流表項
2 model
這是NS4核心部分,主要包括P4網絡設備模塊、P4交換機接口模塊、P4控制器模塊、網絡拓撲讀取模塊、流表下發異常處理模塊等
2.1 P4網絡設備模塊
P4網絡設備是將ns3與bmv2連接的關鍵所在,包括p4-net-device.cc和p4-net-device.h,裏面主要有P4NetDevice和P4Model這兩個類,P4Model繼承於bmv2中的Switch,裏面的核心是對P4流水線的處理,包括解析、匹配行爲操作、逆解析等過程,P4NetDevice繼承於ns3中的NetDevice,以便連接ns3其餘模塊。
2.2 P4交換機接口模塊
P4交換機接口模塊是溝通P4Model與P4Controller的重要組件,由p4-switch-interface.h、p4-switch-interface.cc、switch-api.h、switch-api.cc組成,p4-switch-interface.h、p4-switch-interface.cc包含P4Model以及其餘相關元素,主要工作是爲P4Model下發流表,switch-api.h、switch-api.cc定義了操作流表項的接口以及類SwitchApi。
2.3 P4控制器模塊
P4控制器用於對網絡中P4Model進行管理,可對P4Model下發流表以及查詢P4Model流表信息。P4控制器包括p4-controller.cc、p4-controller.h,裏面實現了P4Controller這個類。
2.4 網絡拓撲讀取模塊
網絡拓撲讀取模塊是用於讀取網絡拓撲結構,包括p4-topology-reader.h、p4-topology-reader.cc、csma-topology-reader.h、 csma-topology-reader.cc。其中p4-topology-reader.h、p4-topology-reader.cc包括抽象類P4TopologyReader,其定義了網絡鏈路及節點數據結構;csma-topology-reader.h、 csma-topology-reader.cc定義了類CsmaTopologyReader,其繼承於P4TopologyReader,並實例化了其中的虛函數Read()。
2.5 流表下發異常處理模塊
這個模塊用於對下發流表操作進行異常處理,主要包括對調用函數名稱、參數個數及類型做驗證,便於快速定位具體出錯位置,方便運行及調試。這部分包括exception-handle.h、exception-handle.cc,裏面定義了P4Exception。
2.6 其餘部分
其餘部分主要是全局變量以及工具函數,包括global.h,global.cc,helper.h,helper.cc等
3 helper
這裏包括構建P4設備、讀取網絡拓撲、定義fattree拓撲、定義樹形拓撲、自動構建流表項的helper類
3.1 構建P4設備helper類
包括p4-helper.h,p4-helper.cc
3.2 讀取網絡拓撲helper類
包括p4-topology-reader-helper.h,p4-topology-reader-helper.cc
3.3 定義fattree拓撲
包括fattree-topo-helper.h,fattree-topo-helper.cc
3.4 定義樹形拓撲
包括binary-tree-topo-helper.h,binary-tree-topo-helper.cc
3.5 自動構建流表項
包括build-flowtable-helper.h,build-flowtable-helper.cc
4 test
這裏是用於測試的P4程序集合,包括router、silkroad、counter、meter、register等
5 topo
這裏用於存儲網絡拓撲結構定義
6 flowtable
這裏用於存儲P4交換機的流表項