blob: 1971a298d76938d32ea8f8f49ca3d69386228f34 [file] [log] [blame]
Carmelo Casconec8d34862017-07-30 00:48:23 -04001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2017-present Open Networking Foundation
Carmelo Casconec8d34862017-07-30 00:48:23 -04003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Carmelo Casconeca94bcf2017-10-27 14:16:59 -070017#ifndef __CHECKSUMS__
18#define __CHECKSUMS__
19
Yi Tseng21629932017-06-06 11:17:43 -070020#include "headers.p4"
Yi Tseng21629932017-06-06 11:17:43 -070021
Carmelo Casconeca94bcf2017-10-27 14:16:59 -070022control verify_checksum_control(inout headers_t hdr,
23 inout local_metadata_t local_metadata) {
Yi Tseng21629932017-06-06 11:17:43 -070024 apply {
Carmelo Casconeca94bcf2017-10-27 14:16:59 -070025 // Assume checksum is always correct.
Yi Tseng21629932017-06-06 11:17:43 -070026 }
27}
28
Carmelo Casconeca94bcf2017-10-27 14:16:59 -070029control compute_checksum_control(inout headers_t hdr,
30 inout local_metadata_t local_metadata) {
Yi Tseng21629932017-06-06 11:17:43 -070031 apply {
Jonghwan Hyun6777d532018-11-18 20:50:16 +090032 update_checksum(hdr.ipv4.isValid(),
33 {
34 hdr.ipv4.version,
35 hdr.ipv4.ihl,
36 hdr.ipv4.dscp,
37 hdr.ipv4.ecn,
38 hdr.ipv4.len,
39 hdr.ipv4.identification,
40 hdr.ipv4.flags,
41 hdr.ipv4.frag_offset,
42 hdr.ipv4.ttl,
43 hdr.ipv4.protocol,
44 hdr.ipv4.src_addr,
45 hdr.ipv4.dst_addr
46 },
47 hdr.ipv4.hdr_checksum,
48 HashAlgorithm.csum16
49 );
50
51 // Need to recompute for the cloned packet.
52 //TODO: https://github.com/p4lang/p4app/issues/43#issuecomment-378061934
53 #ifdef __INT_HEADERS__
54 update_checksum(hdr.report_ipv4.isValid(),
55 {
56 hdr.report_ipv4.version,
57 hdr.report_ipv4.ihl,
58 hdr.report_ipv4.dscp,
59 hdr.report_ipv4.ecn,
60 hdr.report_ipv4.len,
61 hdr.report_ipv4.identification,
62 hdr.report_ipv4.flags,
63 hdr.report_ipv4.frag_offset,
64 hdr.report_ipv4.ttl,
65 hdr.report_ipv4.protocol,
66 hdr.report_ipv4.src_addr,
67 hdr.report_ipv4.dst_addr
68 },
69 hdr.report_ipv4.hdr_checksum,
70 HashAlgorithm.csum16
71 );
72 #endif // __INT_HEADERS__
Yi Tseng21629932017-06-06 11:17:43 -070073 }
74}
Carmelo Cascone837e6452017-07-19 20:35:22 -040075
Yi Tseng21629932017-06-06 11:17:43 -070076#endif