#ifndef NICO_EGRESS
#define NICO_EGRESS


/********************** ROUTING (egress definiton) TABLES ***********************************/

action set_egress_port (port_t out_port) {
    #ifndef _SUME_SWITCH_P4_
    standard_metadata.egress_spec = out_port;
    #else
    sume_metadata.dst_port = out_port;
    #endif
}

action set_egress_port_and_mac (port_t out_port, mac_addr_t mac_addr) {
    hdr.ethernet.dst_addr = mac_addr;
    set_egress_port(out_port);
}

table v6_networks {
    key = {
        hdr.ipv6.dst_addr: lpm;
    }
    actions = {
		set_egress_port;
		set_egress_port_and_mac;
        controller_debug;
        controller_reply;
        controller_debug_table_id;
        NoAction;
    }
    size = ROUTING_TABLE_SIZE;

    default_action = controller_debug_table_id(TABLE_V6_NETWORKS);
}

table v4_networks {
    key = {
        hdr.ipv4.dst_addr: lpm;
        }
    actions = {
		set_egress_port;
		set_egress_port_and_mac;
        controller_debug;
        controller_debug_table_id;
        NoAction;
    }
    size = ROUTING_TABLE_SIZE;
    default_action = controller_debug_table_id(TABLE_V4_NETWORKS);
}
#endif