P4-learning——recirculate

本文档展示了一个使用P4语言编写的交换机配置,该配置在数据包即将离开(egress)交换机时将其循环回设备进行处理。通过定义一个名为set_mytos的动作和相应的表set_tos,实现了根据IP包的TOS字段来调整其值并重新注入到交换机。此外,还包含了ingress和egress控制平面,用于处理包的入站和出站逻辑,包括修改源MAC地址、目的MAC地址、TTL以及校验和计算。测试部分说明了如何使用mininet进行网络部署和包捕获,以验证P4程序的功能。

数据包循环

数据包将要从egress出去时再循环进入交换机

p4文件

#include <core.p4>
#include <v1model.p4>
typedef bit<48> macAddr_t;
typedef bit<9> egressSpec_t;
  
header ethernet_t {
   
   
    bit<48> dstAddr;
    bit<48> srcAddr;
    bit<16> etherType;
}
 
header ipv4_t {
   
   
    bit<4>  version;
    bit<4>  ihl;
    bit<8>  diffserv;
    bit<16> totalLen;
    bit<16> identification;
    bit<3>  flags;
    bit<13> fragOffset;
    bit<8>  ttl;
    bit<8>  protocol;
    bit<16> hdrChecksum;
    bit<32> srcAddr;
    bit<32> dstAddr;
}
 
struct metadata {
   
   
}
 
struct headers {
   
   
    @name(".ethernet")
    ethernet_t ethernet;
    @name(".ipv4")
    ipv4_t     ipv4;
}
 
parser ParserImpl(packet_in packet, out headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) {
   
   

    @name(".parse_ethernet") state parse_ethernet {
   
   
        packet.extract(hdr.ethernet);
        transition select(hdr.ethernet.etherType) {
   
   
            16w0x800: parse_ipv4;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值