【学习笔记】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

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

  2. 输入sfc的请求:(例如)

    // create the first input request
    
    branch port_knocking qos ipsg
    
    assign_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 python
      
      p4_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程序了!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

K_Haki

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值