+notes; Try shifting the cast into the parser
This commit is contained in:
parent
0bd12260c6
commit
0ca0b94b1c
4 changed files with 22 additions and 7 deletions
23
doc/plan.org
23
doc/plan.org
|
@ -67,6 +67,21 @@
|
||||||
| | - P4 checksum_with_payload | |
|
| | - P4 checksum_with_payload | |
|
||||||
| | - Reading scapy / inet6 | |
|
| | - Reading scapy / inet6 | |
|
||||||
| | - Further checksum tests -> required everywhere in IPv6 | |
|
| | - Further checksum tests -> required everywhere in IPv6 | |
|
||||||
|
| | - (partial) NDP working in controller | |
|
||||||
|
| | - icmp6 echo request working in controller | |
|
||||||
|
| | - Hosts can ping6 the switch | |
|
||||||
|
| | - Ran into P4 casting bug: https://github.com/p4lang/p4c/issues/1765 | |
|
||||||
|
| | | |
|
||||||
|
| | Next target: | |
|
||||||
|
| | - Focus on enabling the "Internet" with ICMP6 translation | |
|
||||||
|
| | | |
|
||||||
|
| | Next steps: | |
|
||||||
|
| | - Investigate again into checksumming with payload in P4 | |
|
||||||
|
| | - Answering icmp6 echo request *in* in the switch | |
|
||||||
|
| | - Translate icmp6 to icmp | |
|
||||||
|
| | - Translate icmp to icmp6 | |
|
||||||
|
| | | |
|
||||||
|
| | | |
|
||||||
| | | |
|
| | | |
|
||||||
| | | |
|
| | | |
|
||||||
| 2019-03-08 | NAT46 1:1 table ICMP, ICMPv6 working | |
|
| 2019-03-08 | NAT46 1:1 table ICMP, ICMPv6 working | |
|
||||||
|
@ -113,10 +128,10 @@
|
||||||
**** DONE Parse icmp
|
**** DONE Parse icmp
|
||||||
**** DONE Parse icmpv6
|
**** DONE Parse icmpv6
|
||||||
**** DONE Add (static) egress configuration
|
**** DONE Add (static) egress configuration
|
||||||
**** TODO Calculate ICMP6 checksums
|
**** DONE Calculate ICMP6 checksums in controller
|
||||||
***** Need to include the payload!?!!
|
***** Need to include the payload!?!!
|
||||||
**** TODO Implement minimal neighbor discovery
|
**** DONE Implement minimal neighbor discovery in controller
|
||||||
***** TODO For the switch
|
***** DONE For the switch
|
||||||
****** DONE Register IPv6 address in table
|
****** DONE Register IPv6 address in table
|
||||||
****** DONE Parse ICMPv6 up to neighbor solicitation -> no: checksum problem
|
****** DONE Parse ICMPv6 up to neighbor solicitation -> no: checksum problem
|
||||||
****** DONE Use NDP (Neighbor Solicitation (NDP) , Neighbor Advertisement (NDP)) -> no: controller
|
****** DONE Use NDP (Neighbor Solicitation (NDP) , Neighbor Advertisement (NDP)) -> no: controller
|
||||||
|
@ -165,7 +180,7 @@ multicast address of the target address."
|
||||||
******* associate the "node" with the multicast group ID
|
******* associate the "node" with the multicast group ID
|
||||||
***** If destination is within ff02::1:ff00:0/104, multicast
|
***** If destination is within ff02::1:ff00:0/104, multicast
|
||||||
|
|
||||||
**** TODO Make switch answer icmp6 echo request for
|
**** DONE Make switch answer icmp6 echo request for
|
||||||
**** TODO Make switch answer icmp echo request for
|
**** TODO Make switch answer icmp echo request for
|
||||||
**** TODO Add default route for v6 and v4 hosts
|
**** TODO Add default route for v6 and v4 hosts
|
||||||
**** TODO Translate icmp <-> icmp6
|
**** TODO Translate icmp <-> icmp6
|
||||||
|
|
|
@ -21,13 +21,11 @@ control MyVerifyChecksum(inout headers hdr, inout metadata meta) {
|
||||||
|
|
||||||
control MyComputeChecksum(inout headers hdr, inout metadata meta) {
|
control MyComputeChecksum(inout headers hdr, inout metadata meta) {
|
||||||
apply {
|
apply {
|
||||||
bit<32> icmp6_len = (bit<32>) hdr.ipv6.payload_length;
|
|
||||||
|
|
||||||
update_checksum_with_payload(meta.calc_icmp6_checksum,
|
update_checksum_with_payload(meta.calc_icmp6_checksum,
|
||||||
{
|
{
|
||||||
hdr.ipv6.src_addr, /* 128 */
|
hdr.ipv6.src_addr, /* 128 */
|
||||||
hdr.ipv6.dst_addr, /* 128 */
|
hdr.ipv6.dst_addr, /* 128 */
|
||||||
icmp6_len, /* 32 */
|
meta.cast_length, /* 32 */
|
||||||
24w0, /* 24 0's */
|
24w0, /* 24 0's */
|
||||||
PROTO_ICMP6 /* 8 */
|
PROTO_ICMP6 /* 8 */
|
||||||
},
|
},
|
||||||
|
|
|
@ -133,6 +133,7 @@ struct metadata {
|
||||||
port_t ingress_port;
|
port_t ingress_port;
|
||||||
task_t task;
|
task_t task;
|
||||||
bit<16> tcp_length;
|
bit<16> tcp_length;
|
||||||
|
bit<32> cast_length;
|
||||||
bool calc_icmp6_checksum;
|
bool calc_icmp6_checksum;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,7 @@ parser MyParser(packet_in packet,
|
||||||
state ipv6 {
|
state ipv6 {
|
||||||
packet.extract(hdr.ipv6);
|
packet.extract(hdr.ipv6);
|
||||||
meta.tcp_length = hdr.ipv6.payload_length;
|
meta.tcp_length = hdr.ipv6.payload_length;
|
||||||
|
meta.cast_length = (<bit32>) hdr.ipv6.payload_length;
|
||||||
|
|
||||||
transition select(hdr.ipv6.next_header){
|
transition select(hdr.ipv6.next_header){
|
||||||
PROTO_TCP: tcp;
|
PROTO_TCP: tcp;
|
||||||
|
|
Loading…
Reference in a new issue