Split of checksumming of bmv2
This commit is contained in:
parent
52215d21fb
commit
e9997964cd
5 changed files with 204 additions and 204 deletions
|
@ -422,6 +422,15 @@
|
|||
| | | |
|
||||
| | | |
|
||||
| 2019-07-11 | | |
|
||||
| | Meeting Laurent | |
|
||||
| | | |
|
||||
| | - Delta diff in P4 from v4 -> v6: checksum working | |
|
||||
| | - Investigating why NDP doesn't work | |
|
||||
| | | |
|
||||
| | - compile to netpfga: open impl error | |
|
||||
| | - netpfga: icmp6/ndp might not work | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | Integrated org-documentation into latex / export working | |
|
||||
| | https://bastibe.de/2014-09-23-org-cite.html | |
|
||||
| | http://viveks.info/org-mode-academic-writing-bibliographies-org-ref/ | |
|
||||
|
|
176
p4src/checksum_bmv2.p4
Normal file
176
p4src/checksum_bmv2.p4
Normal file
|
@ -0,0 +1,176 @@
|
|||
/* -*- P4_16 -*- */
|
||||
#ifndef CHECKSUMS_P4
|
||||
#define CHECKSUMS_P4
|
||||
|
||||
#include <core.p4>
|
||||
#include <v1model.p4>
|
||||
|
||||
#include "headers.p4"
|
||||
|
||||
update_checksum_with_payload(meta.chk_icmp6 == 1,
|
||||
{
|
||||
hdr.ipv6.src_addr, /* 128 */
|
||||
hdr.ipv6.dst_addr, /* 128 */
|
||||
meta.cast_length, /* 32 */
|
||||
24w0, /* 24 0's */
|
||||
PROTO_ICMP6, /* 8 */
|
||||
hdr.icmp6.type, /* 8 */
|
||||
hdr.icmp6.code /* 8 */
|
||||
},
|
||||
hdr.icmp6.checksum,
|
||||
HashAlgorithm.csum16
|
||||
);
|
||||
|
||||
/* checksumming for icmp6_na_ns_option */
|
||||
update_checksum_with_payload(meta.chk_icmp6_na_ns == 1,
|
||||
{
|
||||
hdr.ipv6.src_addr, /* 128 */
|
||||
hdr.ipv6.dst_addr, /* 128 */
|
||||
meta.cast_length, /* 32 */
|
||||
24w0, /* 24 0's */
|
||||
PROTO_ICMP6, /* 8 */
|
||||
hdr.icmp6.type, /* 8 */
|
||||
hdr.icmp6.code, /* 8 */
|
||||
|
||||
hdr.icmp6_na_ns.router,
|
||||
hdr.icmp6_na_ns.solicitated,
|
||||
hdr.icmp6_na_ns.override,
|
||||
hdr.icmp6_na_ns.reserved,
|
||||
hdr.icmp6_na_ns.target_addr,
|
||||
|
||||
hdr.icmp6_option_link_layer_addr.type,
|
||||
hdr.icmp6_option_link_layer_addr.ll_length,
|
||||
hdr.icmp6_option_link_layer_addr.mac_addr
|
||||
},
|
||||
hdr.icmp6.checksum,
|
||||
HashAlgorithm.csum16
|
||||
);
|
||||
|
||||
update_checksum_with_payload(meta.chk_icmp == 1,
|
||||
{
|
||||
hdr.icmp.type,
|
||||
hdr.icmp.code
|
||||
},
|
||||
hdr.icmp.checksum,
|
||||
HashAlgorithm.csum16
|
||||
);
|
||||
|
||||
update_checksum(meta.chk_ipv4 == 1,
|
||||
{
|
||||
hdr.ipv4.version,
|
||||
hdr.ipv4.ihl,
|
||||
hdr.ipv4.diff_serv,
|
||||
hdr.ipv4.ecn,
|
||||
hdr.ipv4.totalLen,
|
||||
hdr.ipv4.identification,
|
||||
hdr.ipv4.flags,
|
||||
hdr.ipv4.fragOffset,
|
||||
hdr.ipv4.ttl,
|
||||
hdr.ipv4.protocol,
|
||||
hdr.ipv4.src_addr,
|
||||
hdr.ipv4.dst_addr
|
||||
},
|
||||
hdr.ipv4.hdrChecksum,
|
||||
HashAlgorithm.csum16
|
||||
);
|
||||
|
||||
update_checksum_with_payload(meta.chk_udp_v4 == 1,
|
||||
{
|
||||
hdr.ipv4.src_addr,
|
||||
hdr.ipv4.dst_addr,
|
||||
8w0,
|
||||
hdr.ipv4.protocol,
|
||||
meta.length_without_ip_header,
|
||||
|
||||
// UDP header
|
||||
hdr.udp.src_port,
|
||||
hdr.udp.dst_port,
|
||||
hdr.udp.payload_length
|
||||
},
|
||||
hdr.udp.checksum,
|
||||
HashAlgorithm.csum16
|
||||
);
|
||||
|
||||
update_checksum_with_payload(meta.chk_udp_v6 == 1,
|
||||
{
|
||||
hdr.ipv6.src_addr, /* 128 */
|
||||
hdr.ipv6.dst_addr, /* 128 */
|
||||
meta.length_without_ip_header, /* 32 */
|
||||
24w0, /* 24 */
|
||||
hdr.ipv6.next_header, /* 8 */
|
||||
/* total: 324 */
|
||||
|
||||
// UDP header
|
||||
hdr.udp.src_port, /* 16 */
|
||||
hdr.udp.dst_port, /* 16 */
|
||||
hdr.udp.payload_length /* 16 */
|
||||
/* all: 372 */
|
||||
|
||||
},
|
||||
hdr.udp.checksum,
|
||||
HashAlgorithm.csum16
|
||||
);
|
||||
|
||||
update_checksum_with_payload(meta.chk_tcp_v4 == 1,
|
||||
{
|
||||
hdr.ipv4.src_addr,
|
||||
hdr.ipv4.dst_addr,
|
||||
8w0,
|
||||
hdr.ipv4.protocol,
|
||||
meta.length_without_ip_header,
|
||||
|
||||
// TCP header
|
||||
hdr.tcp.src_port,
|
||||
hdr.tcp.dst_port,
|
||||
hdr.tcp.seqNo,
|
||||
hdr.tcp.ackNo,
|
||||
hdr.tcp.data_offset,
|
||||
hdr.tcp.res,
|
||||
hdr.tcp.cwr,
|
||||
hdr.tcp.ece,
|
||||
hdr.tcp.urg,
|
||||
hdr.tcp.ack,
|
||||
hdr.tcp.psh,
|
||||
hdr.tcp.rst,
|
||||
hdr.tcp.syn,
|
||||
hdr.tcp.fin,
|
||||
hdr.tcp.window,
|
||||
hdr.tcp.urgentPtr
|
||||
},
|
||||
hdr.tcp.checksum,
|
||||
HashAlgorithm.csum16
|
||||
);
|
||||
|
||||
update_checksum_with_payload(meta.chk_tcp_v6 == 1,
|
||||
{
|
||||
hdr.ipv6.src_addr,
|
||||
hdr.ipv6.dst_addr,
|
||||
meta.length_without_ip_header,
|
||||
24w0,
|
||||
hdr.ipv6.next_header,
|
||||
|
||||
// TCP header
|
||||
hdr.tcp.src_port,
|
||||
hdr.tcp.dst_port,
|
||||
hdr.tcp.seqNo,
|
||||
hdr.tcp.ackNo,
|
||||
hdr.tcp.data_offset,
|
||||
hdr.tcp.res,
|
||||
hdr.tcp.cwr,
|
||||
hdr.tcp.ece,
|
||||
hdr.tcp.urg,
|
||||
hdr.tcp.ack,
|
||||
hdr.tcp.psh,
|
||||
hdr.tcp.rst,
|
||||
hdr.tcp.syn,
|
||||
hdr.tcp.fin,
|
||||
hdr.tcp.window,
|
||||
hdr.tcp.urgentPtr
|
||||
},
|
||||
hdr.tcp.checksum,
|
||||
HashAlgorithm.csum16);
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif
|
|
@ -142,19 +142,9 @@ control MyVerifyChecksum(inout headers hdr, inout metadata meta) {
|
|||
|
||||
control MyComputeChecksum(inout headers hdr, inout metadata meta) {
|
||||
apply {
|
||||
update_checksum(meta.chk_icmp6 == 1,
|
||||
{
|
||||
hdr.ipv6.src_addr, /* 128 */
|
||||
hdr.ipv6.dst_addr, /* 128 */
|
||||
meta.cast_length, /* 32 */
|
||||
24w0, /* 24 0's */
|
||||
PROTO_ICMP6, /* 8 */
|
||||
hdr.icmp6.type, /* 8 */
|
||||
hdr.icmp6.code /* 8 */
|
||||
},
|
||||
hdr.icmp6.checksum,
|
||||
HashAlgorithm.csum16
|
||||
);
|
||||
#ifndef _SUME_SWITCH_P4_
|
||||
#include "checksum_bmv2.p4"
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,191 +0,0 @@
|
|||
/* -*- 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.chk_icmp6 == 1,
|
||||
{
|
||||
hdr.ipv6.src_addr, /* 128 */
|
||||
hdr.ipv6.dst_addr, /* 128 */
|
||||
meta.cast_length, /* 32 */
|
||||
24w0, /* 24 0's */
|
||||
PROTO_ICMP6, /* 8 */
|
||||
hdr.icmp6.type, /* 8 */
|
||||
hdr.icmp6.code /* 8 */
|
||||
},
|
||||
hdr.icmp6.checksum,
|
||||
HashAlgorithm.csum16
|
||||
);
|
||||
|
||||
/* checksumming for icmp6_na_ns_option */
|
||||
update_checksum_with_payload(meta.chk_icmp6_na_ns == 1,
|
||||
{
|
||||
hdr.ipv6.src_addr, /* 128 */
|
||||
hdr.ipv6.dst_addr, /* 128 */
|
||||
meta.cast_length, /* 32 */
|
||||
24w0, /* 24 0's */
|
||||
PROTO_ICMP6, /* 8 */
|
||||
hdr.icmp6.type, /* 8 */
|
||||
hdr.icmp6.code, /* 8 */
|
||||
|
||||
hdr.icmp6_na_ns.router,
|
||||
hdr.icmp6_na_ns.solicitated,
|
||||
hdr.icmp6_na_ns.override,
|
||||
hdr.icmp6_na_ns.reserved,
|
||||
hdr.icmp6_na_ns.target_addr,
|
||||
|
||||
hdr.icmp6_option_link_layer_addr.type,
|
||||
hdr.icmp6_option_link_layer_addr.ll_length,
|
||||
hdr.icmp6_option_link_layer_addr.mac_addr
|
||||
},
|
||||
hdr.icmp6.checksum,
|
||||
HashAlgorithm.csum16
|
||||
);
|
||||
|
||||
update_checksum_with_payload(meta.chk_icmp == 1,
|
||||
{
|
||||
hdr.icmp.type,
|
||||
hdr.icmp.code
|
||||
},
|
||||
hdr.icmp.checksum,
|
||||
HashAlgorithm.csum16
|
||||
);
|
||||
|
||||
update_checksum(meta.chk_ipv4 == 1,
|
||||
{
|
||||
hdr.ipv4.version,
|
||||
hdr.ipv4.ihl,
|
||||
hdr.ipv4.diff_serv,
|
||||
hdr.ipv4.ecn,
|
||||
hdr.ipv4.totalLen,
|
||||
hdr.ipv4.identification,
|
||||
hdr.ipv4.flags,
|
||||
hdr.ipv4.fragOffset,
|
||||
hdr.ipv4.ttl,
|
||||
hdr.ipv4.protocol,
|
||||
hdr.ipv4.src_addr,
|
||||
hdr.ipv4.dst_addr
|
||||
},
|
||||
hdr.ipv4.hdrChecksum,
|
||||
HashAlgorithm.csum16
|
||||
);
|
||||
|
||||
update_checksum_with_payload(meta.chk_udp_v4 == 1,
|
||||
{
|
||||
hdr.ipv4.src_addr,
|
||||
hdr.ipv4.dst_addr,
|
||||
8w0,
|
||||
hdr.ipv4.protocol,
|
||||
meta.length_without_ip_header,
|
||||
|
||||
// UDP header
|
||||
hdr.udp.src_port,
|
||||
hdr.udp.dst_port,
|
||||
hdr.udp.payload_length
|
||||
},
|
||||
hdr.udp.checksum,
|
||||
HashAlgorithm.csum16
|
||||
);
|
||||
|
||||
update_checksum_with_payload(meta.chk_udp_v6 == 1,
|
||||
{
|
||||
hdr.ipv6.src_addr, /* 128 */
|
||||
hdr.ipv6.dst_addr, /* 128 */
|
||||
meta.length_without_ip_header, /* 32 */
|
||||
24w0, /* 24 */
|
||||
hdr.ipv6.next_header, /* 8 */
|
||||
/* total: 324 */
|
||||
|
||||
// UDP header
|
||||
hdr.udp.src_port, /* 16 */
|
||||
hdr.udp.dst_port, /* 16 */
|
||||
hdr.udp.payload_length /* 16 */
|
||||
/* all: 372 */
|
||||
|
||||
},
|
||||
hdr.udp.checksum,
|
||||
HashAlgorithm.csum16
|
||||
);
|
||||
|
||||
update_checksum_with_payload(meta.chk_tcp_v4 == 1,
|
||||
{
|
||||
hdr.ipv4.src_addr,
|
||||
hdr.ipv4.dst_addr,
|
||||
8w0,
|
||||
hdr.ipv4.protocol,
|
||||
meta.length_without_ip_header,
|
||||
|
||||
// TCP header
|
||||
hdr.tcp.src_port,
|
||||
hdr.tcp.dst_port,
|
||||
hdr.tcp.seqNo,
|
||||
hdr.tcp.ackNo,
|
||||
hdr.tcp.data_offset,
|
||||
hdr.tcp.res,
|
||||
hdr.tcp.cwr,
|
||||
hdr.tcp.ece,
|
||||
hdr.tcp.urg,
|
||||
hdr.tcp.ack,
|
||||
hdr.tcp.psh,
|
||||
hdr.tcp.rst,
|
||||
hdr.tcp.syn,
|
||||
hdr.tcp.fin,
|
||||
hdr.tcp.window,
|
||||
hdr.tcp.urgentPtr
|
||||
},
|
||||
hdr.tcp.checksum,
|
||||
HashAlgorithm.csum16
|
||||
);
|
||||
|
||||
update_checksum_with_payload(meta.chk_tcp_v6 == 1,
|
||||
{
|
||||
hdr.ipv6.src_addr,
|
||||
hdr.ipv6.dst_addr,
|
||||
meta.length_without_ip_header,
|
||||
24w0,
|
||||
hdr.ipv6.next_header,
|
||||
|
||||
// TCP header
|
||||
hdr.tcp.src_port,
|
||||
hdr.tcp.dst_port,
|
||||
hdr.tcp.seqNo,
|
||||
hdr.tcp.ackNo,
|
||||
hdr.tcp.data_offset,
|
||||
hdr.tcp.res,
|
||||
hdr.tcp.cwr,
|
||||
hdr.tcp.ece,
|
||||
hdr.tcp.urg,
|
||||
hdr.tcp.ack,
|
||||
hdr.tcp.psh,
|
||||
hdr.tcp.rst,
|
||||
hdr.tcp.syn,
|
||||
hdr.tcp.fin,
|
||||
hdr.tcp.window,
|
||||
hdr.tcp.urgentPtr
|
||||
},
|
||||
hdr.tcp.checksum,
|
||||
HashAlgorithm.csum16);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endif
|
|
@ -626,6 +626,22 @@ control MyEgress(inout headers hdr,
|
|||
}
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
************* 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) {
|
||||
#include "checksum_bmv2.p4"
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
*********************** S W I T C H *******************************
|
||||
*************************************************************************/
|
||||
|
|
Loading…
Reference in a new issue