ICMP: Fix Interface Information Object printing

s/Interface Identification Object/Interface Information Object/
(Reference: RFC5837. Interface Identification Object is in RFC8335.)
Also in some variable names.
Use IANA name for the 'ICMP Extension Object Classes' value 2.
This implies updates to avoid printing 'Object' twice.
Use texts from RFC '7. IANA Considerations' for Interface Roles.
Fix indentations in output.

Update some test outputs accordingly.

This is a follow-up to dbf0433fef.
This commit is contained in:
Francois-Xavier Le Bail 2023-12-19 14:03:48 +01:00
parent b97d7389c4
commit 09fd9f02b7
4 changed files with 33 additions and 33 deletions

View File

@ -294,17 +294,17 @@ struct icmp_multipart_ext_object_header_t {
};
static const struct tok icmp_multipart_ext_obj_values[] = {
{ 1, "MPLS Stack Entry" },
{ 2, "Interface Identification" },
{ 1, "MPLS Stack Entry Object" },
{ 2, "Interface Information Object" },
{ 0, NULL}
};
/* rfc5837 */
static const struct tok icmp_interface_identification_role_values[] = {
{ 0, "the IP interface upon which a datagram arrived"},
{ 1, "the sub-IP component of an IP interface upon which a datagram arrived"},
{ 2, "the IP interface through which the datagram would have been forwarded had it been forwardable"},
{ 3, "the IP next hop to which the datagram would have been forwarded"},
static const struct tok icmp_interface_information_role_values[] = {
{ 0, "Incoming IP Interface"},
{ 1, "Sub-IP Component of Incoming IP Interface"},
{ 2, "Outgoing IP Interface"},
{ 3, "IP Next hop"},
{ 0, NULL }
};
@ -316,7 +316,7 @@ Interface IP Address Sub-Object
+-------+-------+-------+-------+
| IP Address ....
*/
struct icmp_interface_identification_ipaddr_subobject_t {
struct icmp_interface_information_ipaddr_subobject_t {
nd_uint16_t afi;
nd_uint16_t reserved;
nd_uint32_t ip_addr;
@ -329,7 +329,7 @@ octet 0 1 63
| length | interface name octets 1-63 |
+--------+-----------................-----------------+
*/
struct icmp_interface_identification_ifname_subobject_t {
struct icmp_interface_information_ifname_subobject_t {
nd_uint8_t length;
nd_byte if_name[63];
};
@ -791,7 +791,7 @@ icmp_print(netdissect_options *ndo, const u_char *bp, u_int plen,
obj_ctype = GET_U_1(icmp_multipart_ext_object_header->ctype);
obj_tptr += sizeof(struct icmp_multipart_ext_object_header_t);
ND_PRINT("\n\t %s Object (%u), Class-Type: %u, length %u",
ND_PRINT("\n\t %s (%u), Class-Type: %u, length %u",
tok2str(icmp_multipart_ext_obj_values,"unknown",obj_class_num),
obj_class_num,
obj_ctype,
@ -844,21 +844,21 @@ icmp_print(netdissect_options *ndo, const u_char *bp, u_int plen,
name_flag = (obj_ctype & 0x2) >> 1;
mtu_flag = (obj_ctype & 0x1);
ND_PRINT("\n\t\t This object describes %s",
tok2str(icmp_interface_identification_role_values,
ND_PRINT("\n\t Interface Role: %s",
tok2str(icmp_interface_information_role_values,
"an unknown interface role",interface_role));
offset = obj_tptr;
if (if_index_flag) {
ND_PRINT("\n\t\t Interface Index: %u", GET_BE_U_4(offset));
ND_PRINT("\n\t Interface Index: %u", GET_BE_U_4(offset));
offset += 4;
}
if (ipaddr_flag) {
const struct icmp_interface_identification_ipaddr_subobject_t *ipaddr_subobj;
const struct icmp_interface_information_ipaddr_subobject_t *ipaddr_subobj;
ND_PRINT("\n\t\t IP Address sub-object: ");
ipaddr_subobj = (const struct icmp_interface_identification_ipaddr_subobject_t *) offset;
ND_PRINT("\n\t IP Address sub-object: ");
ipaddr_subobj = (const struct icmp_interface_information_ipaddr_subobject_t *) offset;
switch (GET_BE_U_2(ipaddr_subobj->afi)) {
case 1:
ND_PRINT("%s", GET_IPADDR_STRING(ipaddr_subobj->ip_addr));
@ -876,11 +876,11 @@ icmp_print(netdissect_options *ndo, const u_char *bp, u_int plen,
}
if (name_flag) {
uint8_t inft_name_length_field;
const struct icmp_interface_identification_ifname_subobject_t *ifname_subobj;
const struct icmp_interface_information_ifname_subobject_t *ifname_subobj;
ifname_subobj = (const struct icmp_interface_identification_ifname_subobject_t *) offset;
ifname_subobj = (const struct icmp_interface_information_ifname_subobject_t *) offset;
inft_name_length_field = GET_U_1(ifname_subobj->length);
ND_PRINT("\n\t\t Interface Name");
ND_PRINT("\n\t Interface Name");
if (inft_name_length_field == 0) {
ND_PRINT(" [length %u]", inft_name_length_field);
nd_print_invalid(ndo);
@ -904,7 +904,7 @@ icmp_print(netdissect_options *ndo, const u_char *bp, u_int plen,
offset += inft_name_length_field;
}
if (mtu_flag) {
ND_PRINT("\n\t\t MTU: %u", GET_BE_U_4(offset));
ND_PRINT("\n\t MTU: %u", GET_BE_U_4(offset));
offset += 4;
}
break;

View File

@ -3,8 +3,8 @@
(tos 0x0, ttl 1, id 42321, offset 0, flags [none], proto UDP (17), length 40)
12.4.4.4.42315 > 12.1.1.1.33440: [bad udp cksum 0x1000 -> 0xbad0!] UDP, length 12
ICMP Multi-Part extension v2
Interface Identification Object (2), Class-Type: 14, length 80
This object describes the IP interface upon which a datagram arrived
Interface Index: 15
IP Address sub-object: 10.10.10.10
Interface Name [length 63 != N x 4] (invalid) [|icmp]
Interface Information Object (2), Class-Type: 14, length 80
Interface Role: Incoming IP Interface
Interface Index: 15
IP Address sub-object: 10.10.10.10
Interface Name [length 63 != N x 4] (invalid) [|icmp]

View File

@ -3,8 +3,8 @@
IP (tos 0x0, ttl 1, id 42321, offset 0, flags [none], proto UDP (17), length 40)
12.4.4.4.42315 > 12.1.1.1.33440: UDP, length 12
ICMP Multi-Part extension v2, checksum 0x246c (correct), length 84
Interface Identification Object (2), Class-Type: 14, length 80
This object describes the IP interface upon which a datagram arrived
Interface Index: 15
IP Address sub-object: 10.10.10.10
Interface Name, length 64: This-is-the-name-of-the-Interface-that-we-are-looking-for-[:-)]
Interface Information Object (2), Class-Type: 14, length 80
Interface Role: Incoming IP Interface
Interface Index: 15
IP Address sub-object: 10.10.10.10
Interface Name, length 64: This-is-the-name-of-the-Interface-that-we-are-looking-for-[:-)]

View File

@ -3,6 +3,6 @@
IP (tos 0x0, ttl 1, id 42321, offset 0, flags [none], proto UDP (17), length 40, bad cksum f76a (->db81)!)
8.15.4.4.42315 > 12.223.32.1.33440: UDP, length 12
ICMP Multi-Part extension v2
Interface Identification Object (2), Class-Type: 2, length 8016
This object describes the IP interface upon which a datagram arrived
Interface Name [length 0] (invalid) [|icmp]
Interface Information Object (2), Class-Type: 2, length 8016
Interface Role: Incoming IP Interface
Interface Name [length 0] (invalid) [|icmp]