flexsai/p4/p4src/example/example.p4 (57 lines of code) (raw):

//----------------------------------------- //------- User code example --------------- //----------------------------------------- #include <core.p4> #include <sai_model.p4> #include <sai_headers.p4> #include "metadata.p4" #include "parser.p4" #define VHOST_TABLE_SIZE 256 #define PORTNUM 32 control control_in_port(inout Headers_t headers, inout user_metadata_t user_meta, inout standard_metadata_t standard_metadata, inout in_port_metadata_t in_port_meta){ action set_bridge(sai_object_id_t tunnel_id, sai_ip4_t underlay_dip, sai_object_id_t bridge_id){ set_bridge_id(bridge_id); } action to_router(sai_object_id_t router_id) { go_to_router(router_id); } action to_port(sai_object_id_t port_id) { go_to_port(port_id); } table table_ex1{ key = { in_port_meta.ingress_port :exact; } actions = {set_bridge;} size = PORTNUM; } table table_ex2{ key = { headers.ip.v4.dst_addr :exact; } actions = {to_router;to_port;} size=VHOST_TABLE_SIZE; } // pipe apply{ table_ex1.apply(); table_ex2.apply(); } } control control_out_port(inout Headers_t headers, inout user_metadata_t user_meta, inout standard_metadata_t standard_metadata, inout out_port_metadata_t out_port_meta){ apply{} } control control_in_rif(inout Headers_t headers, inout user_metadata_t user_meta, inout standard_metadata_t standard_metadata, inout in_rif_metadata_t in_rif_meta){ apply{} } control control_out_rif(inout Headers_t headers, inout user_metadata_t user_meta, inout standard_metadata_t standard_metadata, inout out_rif_metadata_t out_rif_meta){ apply{} } SaiSwitch( Parser(), control_in_port(), control_out_port(), control_in_rif(), control_out_rif(), Deparser() ) main;