Add support for ethernet IP protocol

The SRv6 network programming defines a new IP protocol number [1].

The new protocol number is used in the Next Header field of an IPv6 header
or any extension header indicates that the payload is an Ethernet.

IANA has assigned 143 as the protocol number of ethernet [2].

The SRv6 packet has the following format:
IPv6 HDR + SRH + Ethernet HDR + IPv4/IPv6 packet

This patch allows TCPDUMP to dissect such SRv6 packets.

[1] https://tools.ietf.org/html/draft-ietf-spring-srv6-network-programming-16#section-9.1
[2] https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml

Signed-off-by: Ahmed Abdelsalam <ahabdels@gmail.com>
This commit is contained in:
Ahmed Abdelsalam 2020-08-07 15:02:16 +00:00 committed by fxlb
parent 58d8b5d435
commit 1103418a18
6 changed files with 16 additions and 0 deletions

View File

@ -50,6 +50,7 @@ const struct tok ipproto_values[] = {
{ IPPROTO_PGM, "PGM" },
{ IPPROTO_SCTP, "SCTP" },
{ IPPROTO_MOBILITY, "Mobility" },
{ IPPROTO_ETHERNET, "Ethernet" },
{ 0, NULL }
};

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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

Binary file not shown.