/* -*- P4_16 -*- */
#ifndef CHECKSUMS_P4
#define CHECKSUMS_P4

#include <core.p4>
#include <v1model.p4>

#include "headers.p4"

/*************************************************************************
*************   C H E C K S U M    V E R I F I C A T I O N   *************
*************************************************************************/

control MyVerifyChecksum(inout headers hdr, inout metadata meta) {
    apply {}
}

/*************************************************************************
**************   C H E C K S U M    C O M P U T A T I O N   **************
*************************************************************************/

control MyComputeChecksum(inout headers  hdr, inout metadata meta) {
    apply {
        update_checksum_with_payload(meta.do_cksum,
		 	{
                hdr.ipv6.src_addr,         /* 128 */
		 		hdr.ipv6.dst_addr,         /* 128 */
                meta.cast_length,          /* 32 */
                24w0,                      /* 24 0's */
                PROTO_ICMP6                /* 8 */
            },
            hdr.icmp6.checksum,
            HashAlgorithm.csum16
        );
    }
}


#endif