* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
+/* \summary: Marvell Extended Distributed Switch Architecture (MEDSA) printer */
+
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
-#include <tcpdump-stdinc.h>
+#include <netdissect-stdinc.h>
-#include "interface.h"
+#include "netdissect.h"
#include "ether.h"
#include "ethertype.h"
-#include "extract.h" /* must come after interface.h */
+#include "addrtoname.h"
+#include "extract.h"
static const char tstr[] = "[|MEDSA]";
{ 0, NULL },
};
-static void medsa_print_full(netdissect_options *ndo,
- const struct medsa_pkthdr *medsa,
- u_int caplen)
+static void
+medsa_print_full(netdissect_options *ndo,
+ const struct medsa_pkthdr *medsa,
+ u_int caplen)
{
u_char tag = TAG(medsa);
void
medsa_print(netdissect_options *ndo,
- const u_char *bp, u_int length, u_int caplen)
+ const u_char *bp, u_int length, u_int caplen,
+ const struct lladdr_info *src, const struct lladdr_info *dst)
{
- register const struct ether_header *ep;
const struct medsa_pkthdr *medsa;
u_short ether_type;
medsa = (const struct medsa_pkthdr *)bp;
- ep = (const struct ether_header *)(bp - sizeof(*ep));
ND_TCHECK(*medsa);
if (!ndo->ndo_eflag)
ether_type = EXTRACT_16BITS(&medsa->ether_type);
if (ether_type <= ETHERMTU) {
/* Try to print the LLC-layer header & higher layers */
- if (llc_print(ndo, bp, length, caplen, ESRC(ep), EDST(ep)) < 0)
- /* ether_type not known, print raw packet */
- ND_DEFAULTPRINT(bp, caplen);
+ if (llc_print(ndo, bp, length, caplen, src, dst) < 0) {
+ /* packet type not known, print raw packet */
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(bp, caplen);
+ }
} else {
if (ndo->ndo_eflag)
ND_PRINT((ndo, "ethertype %s (0x%04x) ",
tok2str(ethertype_values, "Unknown",
ether_type),
ether_type));
-
- ethertype_print(ndo, ether_type, bp, length, caplen);
+ if (ethertype_print(ndo, ether_type, bp, length, caplen, src, dst) == 0) {
+ /* ether_type not known, print raw packet */
+ if (!ndo->ndo_eflag)
+ ND_PRINT((ndo, "ethertype %s (0x%04x) ",
+ tok2str(ethertype_values, "Unknown",
+ ether_type),
+ ether_type));
+
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(bp, caplen);
+ }
}
return;
trunc: