[ONOS-7238] fix ICMP checksum error of fabric.p4
Change-Id: I921504ccdb295488bbea8636f412137bbab0d8f5
diff --git a/pipelines/fabric/src/main/resources/include/checksum.p4 b/pipelines/fabric/src/main/resources/include/checksum.p4
index 9931090..00b4e70 100644
--- a/pipelines/fabric/src/main/resources/include/checksum.p4
+++ b/pipelines/fabric/src/main/resources/include/checksum.p4
@@ -38,14 +38,6 @@
hdr.ipv4.hdr_checksum,
HashAlgorithm.csum16
);
- update_checksum(hdr.icmp.isValid(),
- {
- hdr.icmp.icmp_type,
- hdr.icmp.icmp_code
- },
- hdr.icmp.checksum,
- HashAlgorithm.csum16
- );
}
}
@@ -70,14 +62,6 @@
hdr.ipv4.hdr_checksum,
HashAlgorithm.csum16
);
- verify_checksum(hdr.icmp.isValid(),
- {
- hdr.icmp.icmp_type,
- hdr.icmp.icmp_code
- },
- hdr.icmp.checksum,
- HashAlgorithm.csum16
- );
}
}
diff --git a/pipelines/fabric/src/main/resources/include/header.p4 b/pipelines/fabric/src/main/resources/include/header.p4
index b243c94..c36f5a0 100644
--- a/pipelines/fabric/src/main/resources/include/header.p4
+++ b/pipelines/fabric/src/main/resources/include/header.p4
@@ -108,6 +108,9 @@
bit<8> icmp_type;
bit<8> icmp_code;
bit<16> checksum;
+ bit<16> identifier;
+ bit<16> sequence_number;
+ bit<64> timestamp;
}
//Custom metadata definition
diff --git a/pipelines/fabric/src/main/resources/include/parser.p4 b/pipelines/fabric/src/main/resources/include/parser.p4
index 0e13cfd..d191ff9 100644
--- a/pipelines/fabric/src/main/resources/include/parser.p4
+++ b/pipelines/fabric/src/main/resources/include/parser.p4
@@ -143,6 +143,7 @@
packet.emit(hdr.ipv6);
packet.emit(hdr.tcp);
packet.emit(hdr.udp);
+ packet.emit(hdr.icmp);
}
}
diff --git a/pipelines/fabric/src/main/resources/p4c-out/bmv2/fabric.json b/pipelines/fabric/src/main/resources/p4c-out/bmv2/fabric.json
index 79089dc..151fca7 100644
--- a/pipelines/fabric/src/main/resources/p4c-out/bmv2/fabric.json
+++ b/pipelines/fabric/src/main/resources/p4c-out/bmv2/fabric.json
@@ -126,7 +126,10 @@
"fields" : [
["icmp_type", 8, false],
["icmp_code", 8, false],
- ["checksum", 16, false]
+ ["checksum", 16, false],
+ ["identifier", 16, false],
+ ["sequence_number", 16, false],
+ ["timestamp", 64, false]
]
},
{
@@ -1410,7 +1413,7 @@
"column" : 8,
"source_fragment" : "FabricDeparser"
},
- "order" : ["packet_in", "ethernet", "vlan_tag", "inner_vlan_tag", "mpls", "arp", "ipv4", "ipv6", "tcp", "udp"]
+ "order" : ["packet_in", "ethernet", "vlan_tag", "inner_vlan_tag", "mpls", "arp", "ipv4", "ipv6", "tcp", "udp", "icmp"]
}
],
"meter_arrays" : [],
@@ -1525,7 +1528,7 @@
"id" : 0,
"source_info" : {
"filename" : "./include/checksum.p4",
- "line" : 56,
+ "line" : 48,
"column" : 8,
"source_fragment" : "verify_checksum(hdr.ipv4.isValid(), ..."
},
@@ -1582,27 +1585,6 @@
"id" : 1,
"source_info" : {
"filename" : "./include/checksum.p4",
- "line" : 73,
- "column" : 8,
- "source_fragment" : "verify_checksum(hdr.icmp.isValid(), ..."
- },
- "algo" : "csum16",
- "input" : [
- {
- "type" : "field",
- "value" : ["icmp", "icmp_type"]
- },
- {
- "type" : "field",
- "value" : ["icmp", "icmp_code"]
- }
- ]
- },
- {
- "name" : "calc_1",
- "id" : 2,
- "source_info" : {
- "filename" : "./include/checksum.p4",
"line" : 24,
"column" : 8,
"source_fragment" : "update_checksum(hdr.ipv4.isValid(), ..."
@@ -1654,27 +1636,6 @@
"value" : ["ipv4", "dst_addr"]
}
]
- },
- {
- "name" : "calc_2",
- "id" : 3,
- "source_info" : {
- "filename" : "./include/checksum.p4",
- "line" : 41,
- "column" : 8,
- "source_fragment" : "update_checksum(hdr.icmp.isValid(), ..."
- },
- "algo" : "csum16",
- "input" : [
- {
- "type" : "field",
- "value" : ["icmp", "icmp_type"]
- },
- {
- "type" : "field",
- "value" : ["icmp", "icmp_code"]
- }
- ]
}
],
"learn_lists" : [],
@@ -5260,23 +5221,9 @@
{
"name" : "cksum_0",
"id" : 1,
- "target" : ["icmp", "checksum"],
- "type" : "generic",
- "calculation" : "calc_0"
- },
- {
- "name" : "cksum_1",
- "id" : 2,
"target" : ["ipv4", "hdr_checksum"],
"type" : "generic",
- "calculation" : "calc_1"
- },
- {
- "name" : "cksum_2",
- "id" : 3,
- "target" : ["icmp", "checksum"],
- "type" : "generic",
- "calculation" : "calc_2"
+ "calculation" : "calc_0"
}
],
"force_arith" : [],