Check how wrapping is done in P4
This commit is contained in:
parent
bef2e512f1
commit
1a39c35e3b
4 changed files with 133 additions and 1 deletions
34
doc/plan.org
34
doc/plan.org
|
@ -5274,6 +5274,40 @@ Still using scapy + adjusted diff:
|
||||||
gets
|
gets
|
||||||
|
|
||||||
sum 0xc5f2 (incorrect -> 0xe7cf)
|
sum 0xc5f2 (incorrect -> 0xe7cf)
|
||||||
|
*** 2019-07-16: pcap for debugging tcp
|
||||||
|
pcap/tcp-udp-delta-2019-07-15-1454-h3.pcap
|
||||||
|
pcap/tcp-udp-delta-2019-07-15-1454-h1.pcap
|
||||||
|
*** 2019-07-16: pcap for debugging udp
|
||||||
|
pcap/tcp-udp-delta-2019-07-16-0856-h3.pcap
|
||||||
|
pcap/tcp-udp-delta-2019-07-16-0856-h1.pcap
|
||||||
|
*** 2019-07-16: testing with udp
|
||||||
|
- suspicion: missing some cases in tcp6
|
||||||
|
|
||||||
|
#+BEGIN_CENTER
|
||||||
|
p4@ubuntu:~$ mx h1 "echo V6-OK | socat - UDP6-LISTEN:2342"
|
||||||
|
p4@ubuntu:~/master-thesis/bin$ mx h3 "echo V4-OK | socat - UDP:10.1.1.1:2342"
|
||||||
|
#+END_CENTER
|
||||||
|
|
||||||
|
08:57:19.998299 IP6 (hlim 64, next-header UDP (17) payload length: 14)
|
||||||
|
2001:db8:1::a00:1.59997 > 2001:db8::1.2342: [bad udp cksum 0xd84c ->
|
||||||
|
0xd84b!] UDP, length 6
|
||||||
|
|
||||||
|
**** DONE Result: arp (partly?) missing?
|
||||||
|
CLOSED: [2019-07-16 Tue 11:00]
|
||||||
|
|
||||||
|
**** TODO Result: udp checksum wrong
|
||||||
|
- should be: 0xd84b
|
||||||
|
- is: 0xd84c
|
||||||
|
|
||||||
|
My code is +1 too high
|
||||||
|
|
||||||
|
*** DONE 2019-07-16: understood scapy code
|
||||||
|
CLOSED: [2019-07-16 Tue 11:25]
|
||||||
|
meta.v6sum = (bit<16>) ((((tmp>>8) & 0xff)|tmp<<8) & 0xffff) ;
|
||||||
|
|
||||||
|
This is used to correct endianness!
|
||||||
|
|
||||||
|
-> not needed in our case
|
||||||
|
|
||||||
** The NetPFGA saga
|
** The NetPFGA saga
|
||||||
Problems encountered:
|
Problems encountered:
|
||||||
|
|
48
p4app/wraptest.json
Normal file
48
p4app/wraptest.json
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
{
|
||||||
|
"program": "../p4src/wraptest.p4",
|
||||||
|
"switch": "simple_switch",
|
||||||
|
"compiler": "p4c",
|
||||||
|
"options": "--target bmv2 --arch v1model --std p4-16",
|
||||||
|
"switch_cli": "simple_switch_CLI",
|
||||||
|
"cli": true,
|
||||||
|
"pcap_dump": true,
|
||||||
|
"enable_log": true,
|
||||||
|
"topo_module": {
|
||||||
|
"file_path": "",
|
||||||
|
"module_name": "p4utils.mininetlib.apptopo",
|
||||||
|
"object_name": "AppTopoStrategies"
|
||||||
|
},
|
||||||
|
"controller_module": null,
|
||||||
|
"topodb_module": {
|
||||||
|
"file_path": "",
|
||||||
|
"module_name": "p4utils.utils.topology",
|
||||||
|
"object_name": "Topology"
|
||||||
|
},
|
||||||
|
"mininet_module": {
|
||||||
|
"file_path": "",
|
||||||
|
"module_name": "p4utils.mininetlib.p4net",
|
||||||
|
"object_name": "P4Mininet"
|
||||||
|
},
|
||||||
|
"topology": {
|
||||||
|
"assignment_strategy": "l2",
|
||||||
|
"auto_arp_tables": false,
|
||||||
|
"links": [["h1", "s1"], ["h2", "s1"], ["h3", "s1"], ["h4","s1"]],
|
||||||
|
"hosts": {
|
||||||
|
"h1": {
|
||||||
|
},
|
||||||
|
"h2": {
|
||||||
|
}
|
||||||
|
,
|
||||||
|
"h3": {
|
||||||
|
}
|
||||||
|
,
|
||||||
|
"h4": {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"switches": {
|
||||||
|
"s1": {
|
||||||
|
"cpu_port" : true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -52,7 +52,7 @@ action v6sum() {
|
||||||
tmp = (tmp >> 16) + (tmp & 0xffff);
|
tmp = (tmp >> 16) + (tmp & 0xffff);
|
||||||
// tmp = tmp + (tmp >> 16);
|
// tmp = tmp + (tmp >> 16);
|
||||||
tmp = ~tmp;
|
tmp = ~tmp;
|
||||||
// meta.v6sum = (bit<16>) ((((tmp>>8) & 0xff)|tmp<<8) & 0xffff) ;
|
|
||||||
meta.v6sum = (bit<16>) tmp;
|
meta.v6sum = (bit<16>) tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
50
p4src/wraptest.p4
Normal file
50
p4src/wraptest.p4
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
/* -*- P4_16 -*- */
|
||||||
|
#include <core.p4>
|
||||||
|
#include <v1model.p4>
|
||||||
|
|
||||||
|
#include "headers.p4"
|
||||||
|
#include "parsers.p4"
|
||||||
|
|
||||||
|
control MyIngress(inout headers hdr,
|
||||||
|
inout metadata meta,
|
||||||
|
inout standard_metadata_t standard_metadata) {
|
||||||
|
|
||||||
|
/********************** APPLYING TABLES ***********************************/
|
||||||
|
apply {
|
||||||
|
if(hdr.tcp.isValid()) {
|
||||||
|
/* test wrap around */
|
||||||
|
hdr.tcp.checksum = 0xffff;
|
||||||
|
hdr.tcp.checksum = checksum + 2;
|
||||||
|
}
|
||||||
|
standard_metadata.egress_spec = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
control MyEgress(inout headers hdr,
|
||||||
|
inout metadata meta,
|
||||||
|
inout standard_metadata_t standard_metadata) {
|
||||||
|
apply {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
control MyVerifyChecksum(inout headers hdr, inout metadata meta) {
|
||||||
|
apply {}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
control MyComputeChecksum(inout headers hdr, inout metadata meta) {
|
||||||
|
apply {}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
*********************** S W I T C H *******************************
|
||||||
|
*************************************************************************/
|
||||||
|
|
||||||
|
V1Switch(
|
||||||
|
MyParser(),
|
||||||
|
MyVerifyChecksum(),
|
||||||
|
MyIngress(),
|
||||||
|
MyEgress(),
|
||||||
|
MyComputeChecksum(),
|
||||||
|
MyDeparser()
|
||||||
|
) main;
|
Loading…
Reference in a new issue