/* \summary: Ethernet printer */
-#ifdef HAVE_CONFIG_H
#include <config.h>
-#endif
#include "netdissect-stdinc.h"
{ ETHERTYPE_PPPOED, "PPPoE D" },
{ ETHERTYPE_PPPOES, "PPPoE S" },
{ ETHERTYPE_EAPOL, "EAPOL" },
- { ETHERTYPE_RRCP, "RRCP" },
+ { ETHERTYPE_REALTEK, "Realtek protocols" },
{ ETHERTYPE_MS_NLB_HB, "MS NLB heartbeat" },
{ ETHERTYPE_JUMBO, "Jumbo" },
{ ETHERTYPE_NSH, "NSH" },
int llc_hdrlen;
struct lladdr_info src, dst;
+ if (length < caplen) {
+ ND_PRINT("[length %u < caplen %u]", length, caplen);
+ nd_print_invalid(ndo);
+ return length;
+ }
if (caplen < ETHER_HDRLEN + switch_tag_len) {
nd_print_trunc(ndo);
return caplen;
}
- if (length < ETHER_HDRLEN + switch_tag_len) {
- nd_print_trunc(ndo);
- return length;
- }
if (print_encap_header != NULL)
(*print_encap_header)(ndo, encap_header_arg);
}
int ret = macsec_print(ndo, &p, &length, &caplen, &hdrlen,
- &src, &dst);
+ &src, &dst);
if (ret == 0) {
/* Payload is encrypted; print it as raw data. */
*/
length_type = GET_BE_U_2(p);
+ ND_ICHECK_U(caplen, <, 2);
length -= 2;
caplen -= 2;
p += 2;
* Cut off the snapshot length to the end of the
* payload.
*/
- nd_push_snapend(ndo, p + length);
+ if (!nd_push_snaplen(ndo, p, length)) {
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: can't push snaplen on buffer stack", __func__);
+ }
if (ndo->ndo_eflag) {
ND_PRINT("802.3");
ND_DEFAULTPRINT(p, caplen);
}
}
+invalid:
return hdrlen;
}
/*
- * Print an Ethernet frame while specyfing a non-standard Ethernet header
+ * Print an Ethernet frame while specifying a non-standard Ethernet header
* length.
* This might be encapsulated within another frame; we might be passed
* a pointer to a function that can print header information for that
eapol_print(ndo, p);
return (1);
- case ETHERTYPE_RRCP:
- rrcp_print(ndo, p, length, src, dst);
+ case ETHERTYPE_REALTEK:
+ rtl_print(ndo, p, length, src, dst);
return (1);
case ETHERTYPE_PPP: