+ netbeui_print(ndo, control, p, length);
+ return (hdrlen);
+ }
+#endif
+ if (ssap == LLCSAP_ISONS && dsap == LLCSAP_ISONS
+ && control == LLC_UI) {
+ isoclns_print(ndo, p, length, caplen);
+ return (hdrlen);
+ }
+
+ if (!ndo->ndo_eflag) {
+ if (ssap == dsap) {
+ if (esrc == NULL || edst == NULL)
+ ND_PRINT((ndo, "%s ", tok2str(llc_values, "Unknown DSAP 0x%02x", dsap)));
+ else
+ ND_PRINT((ndo, "%s > %s %s ",
+ etheraddr_string(ndo, esrc),
+ etheraddr_string(ndo, edst),
+ tok2str(llc_values, "Unknown DSAP 0x%02x", dsap)));
+ } else {
+ if (esrc == NULL || edst == NULL)
+ ND_PRINT((ndo, "%s > %s ",
+ tok2str(llc_values, "Unknown SSAP 0x%02x", ssap),
+ tok2str(llc_values, "Unknown DSAP 0x%02x", dsap)));
+ else
+ ND_PRINT((ndo, "%s %s > %s %s ",
+ etheraddr_string(ndo, esrc),
+ tok2str(llc_values, "Unknown SSAP 0x%02x", ssap),
+ etheraddr_string(ndo, edst),
+ tok2str(llc_values, "Unknown DSAP 0x%02x", dsap)));
+ }
+ }
+
+ if (is_u) {
+ ND_PRINT((ndo, "Unnumbered, %s, Flags [%s], length %u",
+ tok2str(llc_cmd_values, "%02x", LLC_U_CMD(control)),
+ tok2str(llc_flag_values,"?",(ssap_field & LLC_GSAP) | (control & LLC_U_POLL)),
+ length + hdrlen));
+
+ if ((control & ~LLC_U_POLL) == LLC_XID) {
+ if (*p == LLC_XID_FI) {
+ ND_PRINT((ndo, ": %02x %02x", p[1], p[2]));
+ return (hdrlen);
+ }
+ }
+ } else {
+ if ((control & LLC_S_FMT) == LLC_S_FMT) {
+ ND_PRINT((ndo, "Supervisory, %s, rcv seq %u, Flags [%s], length %u",
+ tok2str(llc_supervisory_values,"?",LLC_S_CMD(control)),
+ LLC_IS_NR(control),
+ tok2str(llc_flag_values,"?",(ssap_field & LLC_GSAP) | (control & LLC_IS_POLL)),
+ length + hdrlen));
+ return (hdrlen); /* no payload to print */
+ } else {
+ ND_PRINT((ndo, "Information, send seq %u, rcv seq %u, Flags [%s], length %u",
+ LLC_I_NS(control),
+ LLC_IS_NR(control),
+ tok2str(llc_flag_values,"?",(ssap_field & LLC_GSAP) | (control & LLC_IS_POLL)),
+ length + hdrlen));
+ }
+ }
+ return (-hdrlen);
+}
+
+static const struct tok *
+oui_to_struct_tok(uint32_t orgcode)
+{
+ const struct tok *tok = null_values;
+ const struct oui_tok *otp;
+
+ for (otp = &oui_to_tok[0]; otp->tok != NULL; otp++) {
+ if (otp->oui == orgcode) {
+ tok = otp->tok;
+ break;
+ }
+ }
+ return (tok);
+}
+
+int
+snap_print(netdissect_options *ndo, const u_char *p, u_int length, u_int caplen,
+ const u_char *esrc, const u_char *edst, u_int bridge_pad)
+{
+ uint32_t orgcode;
+ register u_short et;
+ register int ret;