项目开发代码复现的曲折之路

首先要先安装一个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

快速入门:

  1. 在命令行执行:./p4sc_CLI.py 接着会出现p4scCmd> ,即可输入下一步的sfc请求

  2. 输入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
    
  3. 成功运行,发现在backend文件下,生成了一个P4文件

  4. 运行清理环境:./reset.sh (虽然有的会提示找不到文件,但是已经将生成的文件都删除)

  5. Over!

详细解释一下:

  1. ./p4sc_CLI.py 是用于构造SFC请求(将SFC请求输入)
  2. 假设p4sc_CLI.py 将在test/生成请求;我们习惯于在test/ 中用converter.py 去合并这些请求
    • ./converter.py -d test/`
    • 该命令将所有的SFC功能请求合并起来产生一个result.txt
  3. generator.py 用于制作输出P4程序:
    • 其输入为类似于result.txt 的中端SFC文件
    • ./generator -f test/result.txt 产生并输出P4程序在backend文件内(backend/switch.p4

将NF集成到P4SC中:

  1. 编写用于实现专用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);}
      }
      
  2. 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"
      
  3. 给自己的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相关推荐

  1. 2020年Yann Lecun深度学习笔记(上)

    2020年Yann Lecun深度学习笔记(上)

  2. sv_labs学习笔记——sv_lab5_上(System Verilog)

    本节将介绍lab5的第一部分,主要总结一般设计学习与思考的方式与需要着重学习的点,同时以lab5作为参考,分析数据流流向,验证组件的通信与抽象化,实现的整体思路. sv_labs学习笔记--sv_la ...

  3. SiamRPN论文学习笔记(上)

    SiamRPN论文学习笔记(上) 引言 SiamRPN的网络结构 孪生子网络部分 区域候选子网络部分 RPN的诞生 区域候选子网络 训练阶段 两阶段训练 anchors尺寸设置 分类分支中anchor ...

  4. 小狐狸横版游戏开发学习笔记(上)

    小狐狸横版游戏开发学习笔记(上) 目录 小狐狸横版游戏开发学习笔记(上) 1.关于如何创建Tilemap 2.关于地图格子之间出现间隙的问题 3.如何设置自己想要的控制按键 4.如何解决玩家移动过程中 ...

  5. [网摘学习]在Ubuntu上安装和配置OpenStack Nova之二

    再收藏一份Openstack的文章,这两天的操作与此相同.但其中出现的问题还需要查找原因.待个人继续学习研究. 原文参考:http://www.linuxde.net/2011/11/1599.htm ...

  6. SpringMVC框架--学习笔记(上)

    1.SpringMVC入门程序: (1)导入jar包:spring核心jar包.spring-webmvc整合Jar包 (2)配置前端控制器:web.xml文件中 <?xml version=& ...

  7. 《商业洞察力30讲》学习笔记(上)

    [洞察力]| 作者 / Edison Zhou 这是恰童鞋骚年的第197篇原创文章 学习洞察力,也是新时代IT人员的一门进阶必修课... 1学习背景 2019年下半年至今,在领导的推荐下学习了刘润老师 ...

  8. 【学习笔记】JSP学习笔记(上)

    我是灼灼,一只初学Java的大一金渐层. 向往余秀华和狄兰·托马斯的疯狂,时常沉溺于将情感以诗相寄:追逐过王尔德.王小波的文字,后陷于毛姆和斯蒂芬·金不可自拔:热爱文学的浪潮,白日梦到底却总在现实里清 ...

  9. 计算机组成原理学习笔记(上)

    计算机系统概论 计算机发展历程 原始计算工具 中国人的智慧之光 机械式计算机 西方人的智慧 机电式计算机 电子计算机 1,最古老的计算工具:算筹 2,冈特计算尺 3,达芬奇机械式计算机 4,1642年 ...

最新文章

  1. Android上的MVP:如何组织显示层的内容
  2. 剑桥少儿英语预备级教案(上) unit8 How many doors?
  3. 编程软件python中的if用法-适合Python初学者的一些编程技巧
  4. makefile多目录的.c 格式.cpp混合编译
  5. python交互窗口怎么才能不连着上一个程序_python实现启动一个外部程序,并且不阻塞当前进程...
  6. root cause of error messagw for a mixed usage of 01 and 03
  7. 首发不同文件的md5碰撞真正方法——有图(视频教程加工具)非暴力碰撞!
  8. pyqt5 判断lineedit是否为空_是否注意过 isEmpty 和 isBlank 区别?
  9. 数据分析学习笔记1---zip(),numpy.where
  10. MAC编译jogl/gluegen很顺利
  11. mysql8 json_table_新特性解读 | MySQL 8.0 json到表的转换
  12. C++MFC实现win10标准计算器
  13. 快速获取SAS数据集观测数
  14. OpenCV入门(七)快速学会OpenCV6色彩空间
  15. AI绘画能取代设计师吗?
  16. 获取所有复选框选中状态的id
  17. paperpass论文查重
  18. Openwrt无线和有线基本配置方法以及luci管理界面安装
  19. 新服务器或者vps如何挂载硬盘(安装硬盘)教程
  20. SVN客户端简明使用教程

热门文章

  1. manjaro开机黑屏
  2. [ZT]中国内地高学历技术工程师十个心酸的瞬间
  3. 直播带货为什么这么火
  4. 亚马逊AWS云主机(Rathat)安装docker
  5. 机器学习之各种熵的总结
  6. Java程序员进阶架构师推荐阅读书籍
  7. FinChat.io,金融领域的chatgpt
  8. 淘宝版本nginx部署
  9. Aert_Log: 设计一个精简易用的日志
  10. BNU10878:下载测速