【学习笔记】Ubuntu上复现P4SC
项目开发代码复现的曲折之路
首先要先安装一个Ubuntu系统
- 每次安装新系统都得至少疯两天,每台电脑都不一样,没办法按照哪一篇CSDN一步一步地完全按照好一个新系统,期间会出现各种各样的问题,需要疯狂地查阅不同问题的资料,至少需要查阅几十篇的CSDN,认真看其中的至少十篇
反正就是!好烦好烦要秃啦秃啦!!!
终于安装好了!!!我以为可以开始运行代码了,于是发现,游戏才刚刚开始…
这一篇是我将找到的两篇比较有用的CSDN结合起来,再加上我自己遇到的其他问题的一些解决办法,总结出来的一篇Ubuntu安装笔记,此篇适用于安装win+ubuntu双系统,非U盘安装,电脑属于UEFI模式的朋友们看!
在这在这
欢迎来到Ubuntu!
在Ubuntu上clone github的仓库
- 直接git clone是真的无敌慢,而且容易超时或者出现其他一些七七八八的问题,于是
- 先安装一个 Fastgithub 来加速
- 最简单的办法,没有之一:发送任意内容邮件给fastgithub@qq.com ,他就会给你回复邮件,里面有百度网盘地址和提取码,就可以下载fastgithub了
- 下载之后再ubuntu上进行解压
unzip xxx(压缩包文件名)
- 但是有时候还是不行,正在找解决办法
浅学习且试用一下 P4SC
安装P4SC:先P4环境自动配置
- 运行
.sh
的文件时要用 sh 命令 - git clone 报错(-110)时,尝试关掉所有代理,再试试看
- 如果还是不行那就直接依次输入这三条指令+回车,再进行clone操作即可
export GIT_TRACE_PACKET=1
export GIT_TRACE=1
export GIT_CURL_VERBOSE=1
- 克隆完仓库后执行下面的脚本
install_bmv2.sh
- 安装“行为模型”,P4软件开关;install_p4c-bm.sh
- 安装“P4C-BM”,P4-14前端编译器;install_p4c.sh
- 安装最先进的P4前端编译器“P4C”。- 然后环境配置就结束啦!
继续安装P4SC
首先要注意一下自己系统的python版本:ubuntu自带py2;可以用以下命令查看以及更改:
python2 --version
(查看当前python2版本)python3 --version
(查看当前python3版本)python --version
(查看当前python默认版本)echo alias python=python2 >> ~/.bashrc
(在修改python的默认版本为python2)source ~/.bashrc
(source用于使刚修改的文件立即生效)
安装py-dag:
git clone https://github.com/thieman/py-dag.git
cd py-dag/
python setup.py install
- 完蛋!这里似乎好像也会出什么小问题来着,我操作完写的这篇,给忘记了SOS!!
- 遇到问题再说吧!有时候遇到问题搜索不到的,可以科学上网到谷歌看一看,结果比较多
安装依赖项
- 依赖项都写在
requirements.txt
里面,但是有些会出问题,看看具体安装哪个库出问题了,请到这里去寻找答案,有关库的安装问题都写在里面
pip install -r requirements.txt
运行P4SC
快速入门:
在命令行执行:
./p4sc_CLI.py
接着会出现p4scCmd>
,即可输入下一步的sfc请求输入sfc的请求:(例如)
// create the first input requestbranch port_knocking qos ipsgassign_dir test end_of_sfc// create the second input request assign_dir test before nat ecmp before ecmp hashes before ipsg qos before qos nat before l2_forward nat end_of_sfc// generate the P4 program run
成功运行,发现在
backend
文件下,生成了一个P4文件运行清理环境:
./reset.sh
(虽然有的会提示找不到文件,但是已经将生成的文件都删除)Over!
详细解释一下:
./p4sc_CLI.py
是用于构造SFC请求(将SFC请求输入)- 假设
p4sc_CLI.py
将在test/
生成请求;我们习惯于在test/
中用converter.py
去合并这些请求- ./converter.py -d test/`
- 该命令将所有的SFC功能请求合并起来产生一个
result.txt
generator.py
用于制作输出P4程序:- 其输入为类似于
result.txt
的中端SFC文件 ./generator -f test/result.txt
产生并输出P4程序在backend文件内(backend/switch.p4
)
- 其输入为类似于
将NF集成到P4SC中:
编写用于实现专用NF的P4程序,并放入
backend/blocks
中例如,编写了一个名为
skeleton.p4
的程序:action nop() {} action _drop() {drop(); } action set_nhop(port) {modify_field(standard_metadata.egress_spec, port); }// Table definition table skeleton_t {reads {ipv4.dstAddr: lpm;}actions {nop; _drop; set_nhop;} }// Control flow definition // this control flow is invoked in ingress pipeline control skeleton_ctrl { if (valid(ipv4)) {apply(skeletion_t);} }
在
backend/blocks/includes.p4
里面添加自己的P4代码:例如:最下面那行,将我自己的这个
#include "skeleton.p4"
语句添加到include.p4
中#include "hash.p4" #include "ipsg.p4" #include "nat.p4" #include "ecmp.p4" #include "meter.p4" #include "qos.p4" #include "basic_monitor.p4" #include "heavy_hitter.p4" #include "ipv4_forward.p4" #include "l2_forward.p4" #include "tayga.p4" // I invoke my block here: #include "skeleton.p4"
给自己的NF起一个名字(例如
Skeleton
)并且在frontend/includes.py
里面声明它:像这样:(带有#的是注释行,它的下一行就是我添加的地方)
#!/usr/bin/env pythonp4_ing_code_map = {'port_knocking': 'process_port_knocking','qos' : 'process_ingress_qos_map','ipsg' : 'process_ip_sourceguard','ipv4_forward' : 'process_ipv4_forward','l2_forward' : 'process_l2_forward','nat' : 'process_ingress_nat','ecmp' : 'process_ecmp','meter_index' : 'process_meter_index','hashes' : 'process_hashes','meter_action' : 'process_meter_action','basic_monitor': 'process_basic_monitor','heavy_hitter' : 'process_heavy_hitter',# I add the control flow code of my new block here:'Skeleton' : 'skeleton_ctrl' }p4_eg_code_map = {'qos' : 'process_egress_qos_map','nat' : 'process_egress_nat', }nfs = ['port_knocking', 'qos', 'ipsg', 'ipv4_forward', 'l2_forward','nat', 'ecmp', 'meter_index', 'hashes', 'meter_action', 'basic_monitor', 'heavy_hitter', 'Skeleton'] # and also append my block name to nfs
OK啦!到这里已经做好使用P4SC的前置工作,也已经学会如何使用P4SC来为自己所用了,可以自己编写SFC并生成P4程序了!!!
【学习笔记】Ubuntu上复现P4SC相关推荐
- 2020年Yann Lecun深度学习笔记(上)
2020年Yann Lecun深度学习笔记(上)
- sv_labs学习笔记——sv_lab5_上(System Verilog)
本节将介绍lab5的第一部分,主要总结一般设计学习与思考的方式与需要着重学习的点,同时以lab5作为参考,分析数据流流向,验证组件的通信与抽象化,实现的整体思路. sv_labs学习笔记--sv_la ...
- SiamRPN论文学习笔记(上)
SiamRPN论文学习笔记(上) 引言 SiamRPN的网络结构 孪生子网络部分 区域候选子网络部分 RPN的诞生 区域候选子网络 训练阶段 两阶段训练 anchors尺寸设置 分类分支中anchor ...
- 小狐狸横版游戏开发学习笔记(上)
小狐狸横版游戏开发学习笔记(上) 目录 小狐狸横版游戏开发学习笔记(上) 1.关于如何创建Tilemap 2.关于地图格子之间出现间隙的问题 3.如何设置自己想要的控制按键 4.如何解决玩家移动过程中 ...
- [网摘学习]在Ubuntu上安装和配置OpenStack Nova之二
再收藏一份Openstack的文章,这两天的操作与此相同.但其中出现的问题还需要查找原因.待个人继续学习研究. 原文参考:http://www.linuxde.net/2011/11/1599.htm ...
- SpringMVC框架--学习笔记(上)
1.SpringMVC入门程序: (1)导入jar包:spring核心jar包.spring-webmvc整合Jar包 (2)配置前端控制器:web.xml文件中 <?xml version=& ...
- 《商业洞察力30讲》学习笔记(上)
[洞察力]| 作者 / Edison Zhou 这是恰童鞋骚年的第197篇原创文章 学习洞察力,也是新时代IT人员的一门进阶必修课... 1学习背景 2019年下半年至今,在领导的推荐下学习了刘润老师 ...
- 【学习笔记】JSP学习笔记(上)
我是灼灼,一只初学Java的大一金渐层. 向往余秀华和狄兰·托马斯的疯狂,时常沉溺于将情感以诗相寄:追逐过王尔德.王小波的文字,后陷于毛姆和斯蒂芬·金不可自拔:热爱文学的浪潮,白日梦到底却总在现实里清 ...
- 计算机组成原理学习笔记(上)
计算机系统概论 计算机发展历程 原始计算工具 中国人的智慧之光 机械式计算机 西方人的智慧 机电式计算机 电子计算机 1,最古老的计算工具:算筹 2,冈特计算尺 3,达芬奇机械式计算机 4,1642年 ...
最新文章
- Android上的MVP:如何组织显示层的内容
- 剑桥少儿英语预备级教案(上) unit8 How many doors?
- 编程软件python中的if用法-适合Python初学者的一些编程技巧
- makefile多目录的.c 格式.cpp混合编译
- python交互窗口怎么才能不连着上一个程序_python实现启动一个外部程序,并且不阻塞当前进程...
- root cause of error messagw for a mixed usage of 01 and 03
- 首发不同文件的md5碰撞真正方法——有图(视频教程加工具)非暴力碰撞!
- pyqt5 判断lineedit是否为空_是否注意过 isEmpty 和 isBlank 区别?
- 数据分析学习笔记1---zip(),numpy.where
- MAC编译jogl/gluegen很顺利
- mysql8 json_table_新特性解读 | MySQL 8.0 json到表的转换
- C++MFC实现win10标准计算器
- 快速获取SAS数据集观测数
- OpenCV入门(七)快速学会OpenCV6色彩空间
- AI绘画能取代设计师吗?
- 获取所有复选框选中状态的id
- paperpass论文查重
- Openwrt无线和有线基本配置方法以及luci管理界面安装
- 新服务器或者vps如何挂载硬盘(安装硬盘)教程
- SVN客户端简明使用教程