P4学习(四)实验一:Basic Forwarding

news2024/12/24 21:37:17

目录

  • 一.前置知识
  • 二.实验过程记录
    • 1.找到实验文件
    • 2.拓扑图
    • 3.明确实验内容
    • 4.实验初体验
  • 三. 编写解决方案
    • 1.Parse部分
      • 1.1 Code
      • 1.2 知识点解析
    • 2.Ingress部分
      • 2.1 Code
      • 2.2 知识点解析
    • 3.Deparse部分
      • 3.1 Code
      • 3.2 知识点
  • 四.实验完成测试

一.前置知识

  1. Linux基础命令(vim)
  2. V!Model的架构图
  3. P4代码基本结构
  4. P4基本语法
  5. Mininet

二.实验过程记录

1.找到实验文件

在这里插入图片描述

2.拓扑图

在这里插入图片描述

3.明确实验内容

The objective of this exercise is to write a P4 program that implements basic forwarding. To keep things simple, we will just implement forwarding for IPv4.

4.实验初体验

basic.p4初始设置了丢弃所有的数据包,所以一开始会ping不到

  1. 跑起服务
make run

插一个知识点:
"make"是linux的一个工具,通过读取文件makefile来执行操作
所以这里的命令就是:会查找 Makefile 中名为 run 的目标,并执行与之相关的命令。

在这里插入图片描述

  1. 观察数据包传输情况
    在这里插入图片描述
    会发现全部ping不通,也就代表basic.p4中的丢弃所有的包是成功的

  2. 停止服务

make stop
make clean

三. 编写解决方案

1.Parse部分

在这里插入图片描述

Parse采用状态机风格
有三个预定义的状态:start, accept, reject

1.1 Code

在这里插入图片描述

1.2 知识点解析

state xxx{} 定义state "xxxx"
transition xxx; 跳转到state "xxx"

select(){} 和 switch操作一样,不过不需要breakselect(data){
	valA: stateA;
	valB: stateB;
	......
	default: stateDefault;
}

所以本段code的思路是
①先从start这个state开始,直接跳到解析etherHead的部分
②从数据包里提取出Ethernet header
③判断包头中的Type是否为Ipv4
④若是,则跳转到pares_IPv4

2.Ingress部分

Match-Action 的流水线集合

2.1 Code

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

2.2 知识点解析

  1. 定义一个处理IPv4包转发的action,用于更新head的信息
  2. 在表中按照destAddr的lpm进行匹配action
  3. valid是header里的一个隐藏field,isValid可以判断ipv4头是否有效

3.Deparse部分

3.1 Code

在这里插入图片描述

3.2 知识点

①emit 用于将头部字段添加到正在构建的数据包中。
②写与Parse的extract的反逻辑就行

四.实验完成测试

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1394970.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大模型多卡训练原理

背景知识 深度学习涉及大量矩阵运算,而矩阵运算可以并行计算。 一、数据并行 每张卡加载不同的数据,将计算结果合并 存在问题:每个显卡都加载了模型,浪费了一定空间 二、模型并行:适合模型特别大的情况 1、串行计算…

Java Springboot SSE如何判断客户端能否正常接收消息

目录 背景解决方案思路代码代码解释 Java反射知识点补充 背景 当新建一个 emitter 对象的时候, 它的默认超时时间是 30s. SseEmitter emitter new SseEmitter(); 但是很多情况下, 默认30s的时间太短, 需要把 emitter 对象的超时时间设置成不超时, 也就是永久有效. private …

RHEL8 Samba服务器详细配置用户模式

任务: 配置server01为samba服务器,samba服务器的/companydata/sales为共享目录,共享名为sales,里面创建测试文件test_share.tar,创建用户组sales,创建组内用户sale1,要求配置用户模式访问&#…

py爬虫入门笔记(request.get的使用)

文章目录 Day11. 了解浏览器开发者工具2. Get请求http://baidu.com3. Post请求https://fanyi.baidu.com/sug4. 肯德基小作业 Day21. 正则表达式2. 使用re模块3. 爬取豆瓣电影Top250的第一页4. 爬取豆瓣电影Top250所有的250部电影信息 Day31. xpath的使用2. 认识下载照片线程池的…

【翻译】在Qt Designer中创建主窗口(Main Windows)

原文地址:https://doc.qt.io/qt-6/designer-creating-mainwindows.html Qt Designer 可用于为不同用途创建用户界面,并为每个用户界面提供不同类型的模板。主窗口模板用于创建具有菜单栏、工具栏和停靠窗口部件的应用程序窗口。 通过打开文件菜单并选择…

工程档案数字化的意义

工程档案数字化可以提高档案管理效率、节约资源成本、保护档案安全、提高档案可持续性、提升检索与利用的便捷性,促进信息共享与合作,具有重要的意义和价值。 1. 提高档案管理效率:数字化档案可以通过电子方式进行存储、检索和共享&#xff0…

企业网盘的价值:为什么企业需要它?

企业网盘因其主打的文件管理协作功能,正好符合信息时代高速发展下企业的需要,能够帮助企业集中管理文件数据,提供便捷的文件协作服务,一跃成为近两年企业服务类产品榜单中的一匹黑马。 企业网盘真的这么好用吗?企业真…

ant-desgin的table的上移、下移

文章目录 html部分函数部分 html部分 <a-table :columns"columns" :data-source"dataList" :loading"listLoading" :pagination"false"><template #bodyCell"{ column, record, index }"><template v-if&qu…

class_10:this关键字

this关键字是指向调用对象的指针 #include <iostream> #include <iostream> using namespace std;class Car{ public://成员数据string brand; //品牌int year; //年限//构造函数名与类名相同Car(string brand,int year){cout<<"构造函数中&#…

字面量(java)

字面量类型&#xff1a; 整数类型&#xff1a;不带小数的数字&#xff0c;如666、-88 小数类型&#xff1a;带小数点的数字&#xff0c;如13.14、-5.21 字符串类型&#xff1a;用双引号引起来的内容&#xff0c;如"HelloWorld"&#xff0c;""," &q…

HCIA交换技术

VLAN的作用&#xff08;只记录MAC&#xff09;&#xff1a; 路由器和交换机协同工作&#xff0c;为了解决广播域带来的问题&#xff0c;人们引入了VLAN&#xff08;virtual local area network&#xff09;&#xff0c;即虚拟局域网技术&#xff1a;通过在交换机上部署VLAN&…

【软件测试】学习笔记-精准测试

软件测试行业从最开始的手工测试到自动化测试&#xff0c;从黑盒测试到白盒测试&#xff0c;测试理念和技术都发生了日新月异的变化。现如今&#xff0c;几乎所有的软件公司都有一套强大且复杂的自动化测试用例&#xff0c;用来夜以继日地保证产品的正确性和稳定性。 然而&…

Nginx的access_log 状态码499的问题排查

前提&#xff1a;公司的项目网站&#xff0c;运行环境是lnmp环境下 一、起因 如下图&#xff0c;网站请求超过60s(如&#xff1a;导出半年的报表数据到excel)时&#xff0c;报如下错误&#xff0c;且浏览器上没有返回值 二、发展 查找nginx和php-fpm都没有报错日志。于是先把…

万字讲解新一代分布式任务调度框架Power-job

1、简介 Power-Job 的设计目标是成为企业级的分布式任务调度平台&#xff0c;整个公司统一部署调度中心 power-job-server&#xff0c;旗下所有业务线应用只需要依赖 power-job-worker 即可接入调度中心获取任务调度与分布式计算能力。 Power-job官方网址&#xff1a;http:/…

ELK 分离式日志

目录 一.ELK组件 ElasticSearch&#xff1a; Kiabana&#xff1a; Logstash&#xff1a; 可以添加的其它组件&#xff1a; ELK 的工作原理&#xff1a; 二.部署ELK 节点都设置Java环境: 每台都可以部署 Elasticsearch 软件&#xff1a; 修改elasticsearch主配置文件&…

QT-QML2048小游戏

QT-QML2048小游戏 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 import QtQuick 2.2 import QtQuick.Controls 1.1 import QtQuick.Controls.Styles 1.1 import QtQuick.Dialogs 1.1 import QtQuick.Window 2.1 import "2048.js" as MyScriptAp…

使用pyechart创建折线图

import json from pyecharts.charts import Line from pyecharts import options# 首先使用文件打开数据 f_us open(Desktop/python/Project/数据可视化/美国.txt,r,encoding"UTF-8") f_rb open(Desktop/python/Project/数据可视化/日本.txt,r,encoding"UTF-8…

基于springboot+vue的蜗牛兼职网的设计与实现系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

Pypputeer自动化

Pyppeteer简介 pyppeteer 是 Python 语言的一个库&#xff0c;它是对 Puppeteer 的一个非官方端口&#xff0c;Puppeteer 是一个 Node 库&#xff0c;Puppeteer是Google基于Node.js开发的一个工具&#xff0c;它提供了一种高层次的 API 来通过 DevTools 协议控制 Chrome 或 Ch…

【XTuner 大模型单卡低成本微调实战】学习笔记

参考学习教程【XTuner 大模型单卡低成本微调实战】 理论 Finetune简介 大语言模型 微调模式 增量预训练 指令跟随微调 LoRA和QLoRA Xtuner介绍 实战 自定义微调 用 Medication QA 数据集进行微调 将数据转为 XTuner 的数据格式 目标格式&#xff1a;(.jsonL) 写提示词请C…