diff --git a/ipproto.c b/ipproto.c index 58ceeeba..a3b0714a 100644 --- a/ipproto.c +++ b/ipproto.c @@ -50,6 +50,7 @@ const struct tok ipproto_values[] = { { IPPROTO_PGM, "PGM" }, { IPPROTO_SCTP, "SCTP" }, { IPPROTO_MOBILITY, "Mobility" }, + { IPPROTO_ETHERNET, "Ethernet" }, { 0, NULL } }; diff --git a/ipproto.h b/ipproto.h index 845cf008..baec4bdc 100644 --- a/ipproto.h +++ b/ipproto.h @@ -140,3 +140,6 @@ extern const char *netdb_protoname (const uint8_t); #ifndef IPPROTO_MOBILITY #define IPPROTO_MOBILITY 135 #endif +#ifndef IPPROTO_ETHERNET +#define IPPROTO_ETHERNET 143 /* TEMPORARY - registered 2020-01-31, expires 2021-01-31 */ +#endif diff --git a/print-ip-demux.c b/print-ip-demux.c index 7df0f709..8b53187c 100644 --- a/print-ip-demux.c +++ b/print-ip-demux.c @@ -208,6 +208,16 @@ again: pgm_print(ndo, bp, length, iph); break; + case IPPROTO_ETHERNET: + if (ver == 6) + ether_print(ndo, bp, length, ND_BYTES_AVAILABLE_AFTER(bp), NULL, NULL); + else { + ND_PRINT("[%s requires IPv6]", + tok2str(ipproto_values,"unknown",nh)); + nd_print_invalid(ndo); + } + break; + case IPPROTO_NONE: ND_PRINT("no next header"); break; diff --git a/tests/TESTLIST b/tests/TESTLIST index 90fc31d2..8da36269 100644 --- a/tests/TESTLIST +++ b/tests/TESTLIST @@ -285,6 +285,7 @@ ipv6-bad-version ipv6-bad-version.pcap ipv6-bad-version.out ipv6-routing-header ipv6-routing-header.pcap ipv6-routing-header.out -v ipv6-srh-ext-header ipv6-srh-ext-header.pcap ipv6-srh-ext-header.out -v ipv6-srh-insert-cksum ipv6-srh-insert-cksum.pcap ipv6-srh-insert-cksum.out -v +ipv6-srh-ipproto-ether ipv6-srh-ipproto-ether.pcap ipv6-srh-ipproto-ether.out -ev # Loopback/CTP test case loopback loopback.pcap loopback.out diff --git a/tests/ipv6-srh-ipproto-ether.out b/tests/ipv6-srh-ipproto-ether.out new file mode 100644 index 00000000..96a99bc7 --- /dev/null +++ b/tests/ipv6-srh-ipproto-ether.out @@ -0,0 +1 @@ + 1 15:07:04.802036 be:f5:06:09:44:74 > d6:67:19:4e:0f:4f, ethertype IPv6 (0x86dd), length 196: (flowlabel 0xde027, hlim 63, next-header Routing (43) payload length: 142) a::1 > c::2: srcrt (len=2, type=4, segleft=0, last-entry=0, flags=0x0, tag=0, [0]c::2) ae:64:42:3b:5b:9a > 1e:1d:df:cd:54:7a, ethertype IPv6 (0x86dd), length 118: (flowlabel 0xde027, hlim 64, next-header ICMPv6 (58) payload length: 64) a::2 > e::2: [icmp6 sum ok] ICMP6, echo request, id 18516, seq 1339 diff --git a/tests/ipv6-srh-ipproto-ether.pcap b/tests/ipv6-srh-ipproto-ether.pcap new file mode 100644 index 00000000..30181e4d Binary files /dev/null and b/tests/ipv6-srh-ipproto-ether.pcap differ