这里讲的是如何使用NS4进行你自己的网络模拟实验,具体包括需要编写哪些程序,需要进行哪些操作。
需要根据实际应用场景定义网络拓扑结构,关于网络拓扑格式可参考网络拓扑定义
定义好的网络拓扑文件需保存在topo目录下
$bash creat_nf.sh demo
进入demo.p4编写相应的处理逻辑,并采用p4c-bmv2将demo.p4编译成demo.json
编写mtype .txt
进入model/global.h中添加该P4程序功能无符号整数值
unsigned const int DEMO = 1000;
进入model/global.cc 添加路径信息以及P4功能名字与无符号整数值的对应关系
在void P4GlobalVar::SetP4MatchTypeJsonPath()函数中,添加
if(P4GlobalVar::g_networkFunc==DEMO)
{
P4GlobalVar::g_p4JsonPath=P4GlobalVar::g_nfDir+"demo/demo.json";
P4GlobalVar::g_p4MatchTypePath=P4GlobalVar::g_nfDir + "demo/mtype.txt";
}
在void P4GlobalVar::InitNfStrUintMap()函数中,添加
P4GlobalVar::g_nfStrUintMap["DEMO"]=DEMO;
需要对每个P4交换机构建其需要的流表项,将构建的流表项文件保存在flowtable目录下,流表项文件命名为对应交换机的编号
可参考examples/p4-demo.cc和examples/p4-topo-test.cc编写需要的example程序
然后修改examples/wscript,使得obj0.source等于新定义的example程序,例如新定义example程序名为p4-my-example.cc,则可按照下面方式更改:
obj0.source = ['p4-my-example.cc']
启动下列命令编译运行
#./waf --run "src/ns4/examples/p4-example"