/* -*- P4_16 -*- */ #include #include #include "headers.p4" #include "parsers.p4" #include "checksums.p4" #include "settings.p4" /************************************************************************* ************** I N G R E S S P R O C E S S I N G ******************* *************************************************************************/ control MyIngress(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { /********************** ROUTING (egress definiton) TABLES ***********************************/ action set_egress_port (port_t out_port) { standard_metadata.egress_spec = out_port; } table v6_routing { key = { hdr.ipv6.dst_addr: lpm; } actions = { set_egress_port; NoAction; } size = ROUTING_TABLE_SIZE; default_action = NoAction; } table v4_routing { key = { hdr.ipv4.dst_addr: lpm; } actions = { set_egress_port; NoAction; } size = ROUTING_TABLE_SIZE; default_action = NoAction; } apply { v6_routing.apply() v4_routing.apply() } } /************************************************************************* **************** E G R E S S P R O C E S S I N G ******************* *************************************************************************/ control MyEgress(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { apply { /* set tcp header valid after modifying it -- keep this in mind*/ // hdr.tcp.setValid(); } } /************************************************************************* *********************** S W I T C H ******************************* *************************************************************************/ V1Switch( MyParser(), MyVerifyChecksum(), MyIngress(), MyEgress(), MyComputeChecksum(), MyDeparser() ) main;