Add correct parsers
This commit is contained in:
parent
0c68b1b82c
commit
597d10b33f
25
doc/plan.org
25
doc/plan.org
|
@ -4112,7 +4112,7 @@ Fragmented ICMP/ICMPv6 packets will not be translated by IP/ICMP translators.
|
||||||
**** TODO Security issue: not checking checksums before
|
**** TODO Security issue: not checking checksums before
|
||||||
- Could be implemented
|
- Could be implemented
|
||||||
|
|
||||||
** Log various
|
** TODO Log various
|
||||||
*** 2019-06-06
|
*** 2019-06-06
|
||||||
No device seen after loading modules after reboot - netfpga.
|
No device seen after loading modules after reboot - netfpga.
|
||||||
Trying to reprogram
|
Trying to reprogram
|
||||||
|
@ -8028,8 +8028,29 @@ netpfga_dummy.p4(20): warning: >>: shifting value with 8 bits by 11
|
||||||
netpfga_dummy.p4(20): warning: >>: shifting value with 8 bits by 11
|
netpfga_dummy.p4(20): warning: >>: shifting value with 8 bits by 11
|
||||||
sume_metadata.dst_port = (bit<8>) hdr.ethernet.ethertype >> 11;
|
sume_metadata.dst_port = (bit<8>) hdr.ethernet.ethertype >> 11;
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
*** TODO 2019-07-29: set egress based on
|
*** TODO 2019-07-29: set egress based on v4/v6 header: v7.1
|
||||||
|
**** ipv4: no output anywhere (only sent package seen)
|
||||||
|
**** ipv6: no output anywhere (only sent package seen)
|
||||||
|
**** arp: no output anywhere (only sent package seen)
|
||||||
|
**** log
|
||||||
|
#+BEGIN_CENTER
|
||||||
|
nico@ESPRIMO-P956:~$ sudo tcpdump -lni enp2s0f1
|
||||||
|
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
|
||||||
|
listening on enp2s0f1, link-type EN10MB (Ethernet), capture size 262144 bytes
|
||||||
|
16:17:23.691885 IP 10.0.0.200 > 10.0.0.1: ICMP echo request, id 16038, seq 1, length 64
|
||||||
|
16:17:24.710323 IP 10.0.0.200 > 10.0.0.1: ICMP echo request, id 16038, seq 2, length 64
|
||||||
|
16:18:16.198657 IP6 2001:db8:42::42 > 2001:db8:42::1: ICMP6, echo request, seq 1, length 64
|
||||||
|
16:18:17.222343 IP6 2001:db8:42::42 > 2001:db8:42::1: ICMP6, echo request, seq 2, length 64
|
||||||
|
16:20:25.296638 IP6 2001:db8:42::42 > ff02::1:ff00:6000: ICMP6, neighbor solicitation, who has 2001:db8:42::6000, length 32
|
||||||
|
16:20:26.310284 IP6 2001:db8:42::42 > ff02::1:ff00:6000: ICMP6, neighbor solicitation, who has 2001:db8:42::6000, length 32
|
||||||
|
16:20:27.334276 IP6 2001:db8:42::42 > ff02::1:ff00:6000: ICMP6, neighbor solicitation, who has 2001:db8:42::6000, length 32
|
||||||
|
16:20:37.660293 ARP, Request who-has 10.0.0.250 tell 10.0.0.200, length 28
|
||||||
|
16:20:38.662166 ARP, Request who-has 10.0.0.250 tell 10.0.0.200, length 28
|
||||||
|
16:20:39.686165 ARP, Request who-has 10.0.0.250 tell 10.0.0.200, length 28
|
||||||
|
|
||||||
#+END_CENTER
|
#+END_CENTER
|
||||||
|
**** 2019-07-29: found bug in PARSER!!!!
|
||||||
|
|
||||||
** The NetPFGA saga
|
** The NetPFGA saga
|
||||||
Problems encountered:
|
Problems encountered:
|
||||||
- The logfile for a compile run is 10k+ lines
|
- The logfile for a compile run is 10k+ lines
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
#ifndef PORT_BY_IP_ENDING
|
||||||
|
#define PORT_BY_IP_ENDING
|
||||||
|
|
||||||
|
|
||||||
|
if(hdr.ipv6.isValid()) {
|
||||||
|
set_egress_port((bit<8>) (hdr.ipv6.dst_addr & 0xff));
|
||||||
|
}
|
||||||
|
if(hdr.ipv4.isValid()) {
|
||||||
|
set_egress_port((bit<8>) (hdr.ipv4.dst_addr & 0xff));
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -20,12 +20,15 @@ parser RealParser(
|
||||||
out digest_data_t digest_data,
|
out digest_data_t digest_data,
|
||||||
inout sume_metadata_t standard_metadata) {
|
inout sume_metadata_t standard_metadata) {
|
||||||
|
|
||||||
state start {
|
|
||||||
packet.extract(hdr.ethernet);
|
#include "parsers.p4"
|
||||||
// meta.unused = 0;
|
|
||||||
digest_data.unused = 0;
|
// state start {
|
||||||
transition accept;
|
// packet.extract(hdr.ethernet);
|
||||||
}
|
// digest_data.unused = 0;
|
||||||
|
// transition accept;
|
||||||
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Xilinx_MaxPacketRegion(1024)
|
@Xilinx_MaxPacketRegion(1024)
|
||||||
|
@ -90,6 +93,16 @@ control TopPipe(
|
||||||
* Deparser
|
* Deparser
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
control RealDeParser(
|
||||||
|
packet_out packet,
|
||||||
|
in Parsed_packet hdr,
|
||||||
|
in user_metadata_t meta,
|
||||||
|
inout digest_data_t digest_data,
|
||||||
|
inout sume_metadata_t sume_metadata) {
|
||||||
|
|
||||||
|
#include "deparser.p4"
|
||||||
|
}
|
||||||
|
|
||||||
@Xilinx_MaxPacketRegion(1024)
|
@Xilinx_MaxPacketRegion(1024)
|
||||||
control TopDeparser(
|
control TopDeparser(
|
||||||
packet_out b,
|
packet_out b,
|
||||||
|
@ -98,9 +111,12 @@ control TopDeparser(
|
||||||
inout digest_data_t digest_data,
|
inout digest_data_t digest_data,
|
||||||
inout sume_metadata_t sume_metadata) {
|
inout sume_metadata_t sume_metadata) {
|
||||||
|
|
||||||
|
RealDeParser() realdeparser;
|
||||||
|
|
||||||
apply {
|
apply {
|
||||||
b.emit(p.ethernet);
|
realdeparser.apply(b, p, user_metadata, digest_data, sume_metadata);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************************
|
/********************************************************************************
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
meta.v6sum = 0;
|
meta.v6sum = 0;
|
||||||
meta.headerdiff = 0;
|
meta.headerdiff = 0;
|
||||||
|
|
||||||
#ifdef _SUME_SWITCH_P4_
|
#ifdef _SUME_SWITCH_P4_
|
||||||
digest_data.unused = 0; /* avoid compiler warning */
|
digest_data.unused = 0; /* avoid compiler warning */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue