+
+/*
+ * Print Realtek packets
+ */
+void
+rtl_print(netdissect_options *ndo,
+ const u_char *cp,
+ u_int length _U_,
+ const struct lladdr_info *src,
+ const struct lladdr_info *dst)
+{
+ uint8_t rtl_proto;
+
+ ndo->ndo_protocol = "rtl";
+
+ if (src != NULL && dst != NULL) {
+ ND_PRINT("%s > %s, ",
+ (src->addr_string)(ndo, src->addr),
+ (dst->addr_string)(ndo, dst->addr));
+ }
+
+ rtl_proto = GET_U_1(cp + RTL_FRAME_TYPE_OFFSET);
+
+ switch (rtl_proto & RTL_FRAME_TYPE_MASK) {
+
+ case RTL_FRAME_TYPE_SUBTYPE:
+ /*
+ * Test the subtype.
+ */
+ switch (rtl_proto & RTL_FRAME_SUBTYPE_MASK) {
+
+ case RTL_FRAME_SUBTYPE_RRCP:
+ rrcp_print(ndo, cp);
+ break;
+
+ case RTL_FRAME_SUBTYPE_REP:
+ /*
+ * REP packets have no payload.
+ */
+ ND_PRINT("REP");
+ break;
+
+ case RTL_FRAME_SUBTYPE_RLDP:
+ /*
+ * RLDP packets have no payload.
+ */
+ ND_PRINT("RLDP");
+ break;
+
+ case RTL_FRAME_SUBTYPE_XXX_DSA:
+ ND_PRINT("Realtek 8-byte DSA tag");
+ break;
+
+ default:
+ ND_PRINT("Realtek unknown subtype 0x%01x",
+ rtl_proto & RTL_FRAME_SUBTYPE_MASK);
+ break;
+ }
+ break;
+
+ case RTL_FRAME_TYPE_8306_DSA:
+ ND_PRINT("Realtek RTL8306 4-byte DSA tag");
+ break;
+
+ case RTL_FRAME_TYPE_8366RB_DSA:
+ ND_PRINT("Realtek RTL8366RB 4-byte DSA tag");
+ break;
+
+ default:
+ ND_PRINT("Realtek unknown type 0x%01x",
+ (rtl_proto & RTL_FRAME_TYPE_MASK) >> RTL_FRAME_TYPE_SHIFT);
+ break;
+ }
+}