P4_02语言基础hello world

github link

https://github.com/anonymity12/tutorials

code

#include <core.p4>
#include <v1model.p4>
struct metadata {}
struct headers {}
/*S1 : 解析开始*/
parser MyParser(packet_in packet, 
   out headers hdr,
   inout metadata meta,
   inout standard_metadata_t standard_metadata) {

    state start { transition accept; }
}
/*S2 校验和检查,其实啥也没有做,因为apply里为空*/
control MyVerifyChecksum(inout headers hdr, inout metadata meta) {   apply {  }   }
/*S3: 入口逻辑,用if else实现port1->2, & port2->port1 的逻辑*/
control MyIngress(inout headers hdr,
   inout metadata meta,
   inout standard_metadata_t standard_metadata) {
  /*
  S3.1用if else实现port1->2, & port2->port1 的逻辑
  */
   apply {
        if (standard_metadata.ingress_port == 1) {
            standard_metadata.egress_spec = 2;
        } else if (standard_metadata.ingress_port == 2) {
            standard_metadata.egress_spec = 1;
        }
    }
}
/*S4,剩下的逻辑也是什么也没有做*/
control MyEgress(inout headers hdr,
   inout metadata meta,
   inout standard_metadata_t standard_metadata) {
    apply {  }
}

control MyComputeChecksum(inout headers hdr, inout metadata meta) {
     apply { }
}

control MyDeparser(packet_out packet, in headers hdr) {
    apply { }
}
/*S5, 交换机初始化*/
V1Switch(
   MyParser(),
   MyVerifyChecksum(), 
   MyIngress(), 
   MyEgress(), 
   MyComputeChecksum(), 
   MyDeparser()
) main;

after using table

#include <core.p4>
#include <v1model.p4>
struct metadata {}
struct headers {}

parser MyParser(packet_in packet, out headers hdr,
   inout metadata meta,
   inout standard_metadata_t standard_metadata) {
    state start { transition accept; }
}

control MyIngress(inout headers hdr, inout metadata meta,
   inout standard_metadata_t standard_metadata) {
    action set_egress_spec(bit<9> port) {
        standard_metadata.egress_spec = port;
    }
/*就是在这里升级了,不再使用if else,而是使用table
我们后面会好好讲述table 的使用*/
    table forward {
        key = { standard_metadata.ingress_port: exact; }
        actions = {
            set_egress_spec;
            NoAction;
        }
        size = 1024;
        default_action = NoAction();
    }
    apply {   forward.apply();   }
control MyEgress(inout headers hdr,
   inout metadata meta,
   inout standard_metadata_t standard_metadata) {
    apply {  }
}

control MyVerifyChecksum(inout headers hdr, inout metadata meta) {   apply { }   }

control MyComputeChecksum(inout headers hdr, inout metadata meta) {   apply { }   }

control MyDeparser(packet_out packet, in headers hdr) {
    apply { }
}

V1Switch( MyParser(), MyVerifyChecksum(), MyIngress(), MyEgress(), 
MyComputeChecksum(), MyDeparser() ) main;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值