// Copyright (c) 2017, Google Inc.
//
// P4_16 specification for vrf instance.
// Note: This code has not been tested and is expected to contain bugs.

#include "vrf.p4"

control ingress(inout parsed_packet_t hdr,
                inout local_metadata_t local_metadata,
                inout standard_metadata_t standard_metadata) {
  apply {
    vrf.apply(hdr, local_metadata, standard_metadata);
  }
} // end ingress

control egress(inout parsed_packet_t hdr,
               inout local_metadata_t local_metadata,
               inout standard_metadata_t standard_metadata) {
  apply { }
}

control verify_checksum(in parsed_packet_t hdr,
                        inout local_metadata_t local_metadata) {
  apply { }
}

control compute_checksum(inout parsed_packet_t hdr,
                         inout local_metadata_t local_metadata) {
  apply { }
}

V1Switch(pkt_parser(), verify_checksum(), ingress(), egress(),
         compute_checksum(), pkt_deparser()) main;
