mirror of
https://git.rtems.org/rtems-libbsd/
synced 2025-10-14 16:01:05 +08:00
Update to FreeBSD head 2018-02-01
Git mirror commit d079ae0442af8fa3cfd6d7ede190d04e64a2c0d4. Update #3472.
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
#include "rtems-bsd-tcpdump-namespace.h"
|
||||
#endif /* __rtems__ */
|
||||
/*
|
||||
* Copyright (c) 1998-2004 Hannes Gredler <hannes@tcpdump.org>
|
||||
* Copyright (c) 1998-2004 Hannes Gredler <hannes@gredler.at>
|
||||
* The TCPDUMP project
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -37,6 +37,7 @@
|
||||
/*
|
||||
* packet format documented at
|
||||
* http://www.rhyshaden.com/eigrp.htm
|
||||
* RFC 7868
|
||||
*/
|
||||
|
||||
struct eigrp_common_header {
|
||||
@@ -252,6 +253,12 @@ eigrp_print(netdissect_options *ndo, register const u_char *pptr, register u_int
|
||||
|
||||
/* ok they seem to want to know everything - lets fully decode it */
|
||||
|
||||
if (len < sizeof(struct eigrp_common_header)) {
|
||||
ND_PRINT((ndo, "EIGRP %s, length: %u (too short, < %u)",
|
||||
tok2str(eigrp_opcode_values, "unknown (%u)",eigrp_com_header->opcode),
|
||||
len, (u_int) sizeof(struct eigrp_common_header)));
|
||||
return;
|
||||
}
|
||||
tlen=len-sizeof(struct eigrp_common_header);
|
||||
|
||||
/* FIXME print other header info */
|
||||
@@ -292,6 +299,11 @@ eigrp_print(netdissect_options *ndo, register const u_char *pptr, register u_int
|
||||
eigrp_tlv_type,
|
||||
eigrp_tlv_len));
|
||||
|
||||
if (eigrp_tlv_len < sizeof(struct eigrp_tlv_header)) {
|
||||
ND_PRINT((ndo, " (too short, < %u)",
|
||||
(u_int) sizeof(struct eigrp_tlv_header)));
|
||||
break;
|
||||
}
|
||||
tlv_tptr=tptr+sizeof(struct eigrp_tlv_header);
|
||||
tlv_tlen=eigrp_tlv_len-sizeof(struct eigrp_tlv_header);
|
||||
|
||||
@@ -302,6 +314,11 @@ eigrp_print(netdissect_options *ndo, register const u_char *pptr, register u_int
|
||||
|
||||
case EIGRP_TLV_GENERAL_PARM:
|
||||
tlv_ptr.eigrp_tlv_general_parm = (const struct eigrp_tlv_general_parm_t *)tlv_tptr;
|
||||
if (tlv_tlen < sizeof(*tlv_ptr.eigrp_tlv_general_parm)) {
|
||||
ND_PRINT((ndo, " (too short, < %u)",
|
||||
(u_int) (sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_general_parm))));
|
||||
break;
|
||||
}
|
||||
|
||||
ND_PRINT((ndo, "\n\t holdtime: %us, k1 %u, k2 %u, k3 %u, k4 %u, k5 %u",
|
||||
EXTRACT_16BITS(tlv_ptr.eigrp_tlv_general_parm->holdtime),
|
||||
@@ -314,6 +331,11 @@ eigrp_print(netdissect_options *ndo, register const u_char *pptr, register u_int
|
||||
|
||||
case EIGRP_TLV_SW_VERSION:
|
||||
tlv_ptr.eigrp_tlv_sw_version = (const struct eigrp_tlv_sw_version_t *)tlv_tptr;
|
||||
if (tlv_tlen < sizeof(*tlv_ptr.eigrp_tlv_sw_version)) {
|
||||
ND_PRINT((ndo, " (too short, < %u)",
|
||||
(u_int) (sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_sw_version))));
|
||||
break;
|
||||
}
|
||||
|
||||
ND_PRINT((ndo, "\n\t IOS version: %u.%u, EIGRP version %u.%u",
|
||||
tlv_ptr.eigrp_tlv_sw_version->ios_major,
|
||||
@@ -324,6 +346,11 @@ eigrp_print(netdissect_options *ndo, register const u_char *pptr, register u_int
|
||||
|
||||
case EIGRP_TLV_IP_INT:
|
||||
tlv_ptr.eigrp_tlv_ip_int = (const struct eigrp_tlv_ip_int_t *)tlv_tptr;
|
||||
if (tlv_tlen < sizeof(*tlv_ptr.eigrp_tlv_ip_int)) {
|
||||
ND_PRINT((ndo, " (too short, < %u)",
|
||||
(u_int) (sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_ip_int))));
|
||||
break;
|
||||
}
|
||||
|
||||
bit_length = tlv_ptr.eigrp_tlv_ip_int->plen;
|
||||
if (bit_length > 32) {
|
||||
@@ -353,6 +380,11 @@ eigrp_print(netdissect_options *ndo, register const u_char *pptr, register u_int
|
||||
|
||||
case EIGRP_TLV_IP_EXT:
|
||||
tlv_ptr.eigrp_tlv_ip_ext = (const struct eigrp_tlv_ip_ext_t *)tlv_tptr;
|
||||
if (tlv_tlen < sizeof(*tlv_ptr.eigrp_tlv_ip_ext)) {
|
||||
ND_PRINT((ndo, " (too short, < %u)",
|
||||
(u_int) (sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_ip_ext))));
|
||||
break;
|
||||
}
|
||||
|
||||
bit_length = tlv_ptr.eigrp_tlv_ip_ext->plen;
|
||||
if (bit_length > 32) {
|
||||
@@ -390,6 +422,11 @@ eigrp_print(netdissect_options *ndo, register const u_char *pptr, register u_int
|
||||
|
||||
case EIGRP_TLV_AT_CABLE_SETUP:
|
||||
tlv_ptr.eigrp_tlv_at_cable_setup = (const struct eigrp_tlv_at_cable_setup_t *)tlv_tptr;
|
||||
if (tlv_tlen < sizeof(*tlv_ptr.eigrp_tlv_at_cable_setup)) {
|
||||
ND_PRINT((ndo, " (too short, < %u)",
|
||||
(u_int) (sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_at_cable_setup))));
|
||||
break;
|
||||
}
|
||||
|
||||
ND_PRINT((ndo, "\n\t Cable-range: %u-%u, Router-ID %u",
|
||||
EXTRACT_16BITS(&tlv_ptr.eigrp_tlv_at_cable_setup->cable_start),
|
||||
@@ -399,6 +436,11 @@ eigrp_print(netdissect_options *ndo, register const u_char *pptr, register u_int
|
||||
|
||||
case EIGRP_TLV_AT_INT:
|
||||
tlv_ptr.eigrp_tlv_at_int = (const struct eigrp_tlv_at_int_t *)tlv_tptr;
|
||||
if (tlv_tlen < sizeof(*tlv_ptr.eigrp_tlv_at_int)) {
|
||||
ND_PRINT((ndo, " (too short, < %u)",
|
||||
(u_int) (sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_at_int))));
|
||||
break;
|
||||
}
|
||||
|
||||
ND_PRINT((ndo, "\n\t Cable-Range: %u-%u, nexthop: ",
|
||||
EXTRACT_16BITS(&tlv_ptr.eigrp_tlv_at_int->cable_start),
|
||||
@@ -422,6 +464,11 @@ eigrp_print(netdissect_options *ndo, register const u_char *pptr, register u_int
|
||||
|
||||
case EIGRP_TLV_AT_EXT:
|
||||
tlv_ptr.eigrp_tlv_at_ext = (const struct eigrp_tlv_at_ext_t *)tlv_tptr;
|
||||
if (tlv_tlen < sizeof(*tlv_ptr.eigrp_tlv_at_ext)) {
|
||||
ND_PRINT((ndo, " (too short, < %u)",
|
||||
(u_int) (sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_at_ext))));
|
||||
break;
|
||||
}
|
||||
|
||||
ND_PRINT((ndo, "\n\t Cable-Range: %u-%u, nexthop: ",
|
||||
EXTRACT_16BITS(&tlv_ptr.eigrp_tlv_at_ext->cable_start),
|
||||
|
Reference in New Issue
Block a user