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

#include "punt.p4"

control ingress(inout parsed_packet_t hdr,
                inout local_metadata_t local_metadata,
                inout standard_metadata_t standard_metadata) {
  apply {
    punt.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;
