+ return (hdrlen);
+}
+
+/*
+ * Print EtherTalk/TokenTalk packets (or FDDITalk, or whatever it's called
+ * when it runs over FDDI; yes, I've seen FDDI captures with AppleTalk
+ * packets in them).
+ */
+void
+atalk_print(netdissect_options *ndo,
+ const u_char *bp, u_int length)
+{
+ const struct atDDP *dp;
+ u_short snet;
+
+ ndo->ndo_protocol = "atalk";
+ if(!ndo->ndo_eflag)
+ ND_PRINT("AT ");
+
+ if (length < ddpSize) {
+ ND_PRINT(" [|ddp %u]", length);
+ return;
+ }
+ if (!ND_TTEST_LEN(bp, ddpSize)) {
+ ND_PRINT(" [|ddp]");
+ return;
+ }
+ dp = (const struct atDDP *)bp;
+ snet = EXTRACT_BE_U_2(dp->srcNet);
+ ND_PRINT("%s.%s", ataddr_string(ndo, snet, EXTRACT_U_1(dp->srcNode)),
+ ddpskt_string(ndo, EXTRACT_U_1(dp->srcSkt)));
+ ND_PRINT(" > %s.%s: ",
+ ataddr_string(ndo, EXTRACT_BE_U_2(dp->dstNet), EXTRACT_U_1(dp->dstNode)),
+ ddpskt_string(ndo, EXTRACT_U_1(dp->dstSkt)));
+ bp += ddpSize;
+ length -= ddpSize;
+ ddp_print(ndo, bp, length, EXTRACT_U_1(dp->type), snet, EXTRACT_U_1(dp->srcNode), EXTRACT_U_1(dp->srcSkt));