+ switch(lmp_obj_ctype) {
+ case LMP_CTYPE_1:
+ if (obj_tlen != 4) {
+ ND_PRINT(" (not correct for object)");
+ break;
+ }
+ ND_PRINT("\n\t Verify Dead Interval: %u"
+ "\n\t Verify Transport Response: %u",
+ GET_BE_U_2(obj_tptr),
+ GET_BE_U_2(obj_tptr + 2));
+ break;
+
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case LMP_OBJ_VERIFY_ID:
+ switch(lmp_obj_ctype) {
+ case LMP_CTYPE_1:
+ if (obj_tlen != 4) {
+ ND_PRINT(" (not correct for object)");
+ break;
+ }
+ ND_PRINT("\n\t Verify ID: %u",
+ GET_BE_U_4(obj_tptr));
+ break;
+
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case LMP_OBJ_CHANNEL_STATUS:
+ switch(lmp_obj_ctype) {
+ case LMP_CTYPE_IPV4:
+ offset = 0;
+ /* Decode pairs: <Interface_ID (4 bytes), Channel_status (4 bytes)> */
+ while (offset+8 <= obj_tlen) {
+ ND_PRINT("\n\t Interface ID: %s (0x%08x)",
+ GET_IPADDR_STRING(obj_tptr+offset),
+ GET_BE_U_4(obj_tptr + offset));
+
+ ND_PRINT("\n\t\t Active: %s (%u)",
+ (GET_BE_U_4(obj_tptr + offset + 4)>>31) ?
+ "Allocated" : "Non-allocated",
+ (GET_BE_U_4(obj_tptr + offset + 4)>>31));
+
+ ND_PRINT("\n\t\t Direction: %s (%u)",
+ (GET_BE_U_4(obj_tptr + offset + 4)>>30)&0x1 ?
+ "Transmit" : "Receive",
+ (GET_BE_U_4(obj_tptr + offset + 4)>>30)&0x1);
+
+ ND_PRINT("\n\t\t Channel Status: %s (%u)",
+ tok2str(lmp_obj_channel_status_values,
+ "Unknown",
+ GET_BE_U_4(obj_tptr + offset + 4)&0x3FFFFFF),
+ GET_BE_U_4(obj_tptr + offset + 4)&0x3FFFFFF);
+ offset+=8;
+ }
+ break;
+
+ case LMP_CTYPE_IPV6:
+ offset = 0;
+ /* Decode pairs: <Interface_ID (16 bytes), Channel_status (4 bytes)> */
+ while (offset+20 <= obj_tlen) {
+ ND_PRINT("\n\t Interface ID: %s (0x%08x)",
+ GET_IP6ADDR_STRING(obj_tptr+offset),
+ GET_BE_U_4(obj_tptr + offset));
+
+ ND_PRINT("\n\t\t Active: %s (%u)",
+ (GET_BE_U_4(obj_tptr + offset + 16)>>31) ?
+ "Allocated" : "Non-allocated",
+ (GET_BE_U_4(obj_tptr + offset + 16)>>31));
+
+ ND_PRINT("\n\t\t Direction: %s (%u)",
+ (GET_BE_U_4(obj_tptr + offset + 16)>>30)&0x1 ?
+ "Transmit" : "Receive",
+ (GET_BE_U_4(obj_tptr + offset + 16)>>30)&0x1);
+
+ ND_PRINT("\n\t\t Channel Status: %s (%u)",
+ tok2str(lmp_obj_channel_status_values,
+ "Unknown",
+ GET_BE_U_4(obj_tptr + offset + 16)&0x3FFFFFF),
+ GET_BE_U_4(obj_tptr + offset + 16)&0x3FFFFFF);
+ offset+=20;
+ }
+ break;
+
+ case LMP_CTYPE_UNMD:
+ offset = 0;
+ /* Decode pairs: <Interface_ID (4 bytes), Channel_status (4 bytes)> */
+ while (offset+8 <= obj_tlen) {
+ ND_PRINT("\n\t Interface ID: %u (0x%08x)",
+ GET_BE_U_4(obj_tptr + offset),
+ GET_BE_U_4(obj_tptr + offset));
+
+ ND_PRINT("\n\t\t Active: %s (%u)",
+ (GET_BE_U_4(obj_tptr + offset + 4)>>31) ?
+ "Allocated" : "Non-allocated",
+ (GET_BE_U_4(obj_tptr + offset + 4)>>31));
+
+ ND_PRINT("\n\t\t Direction: %s (%u)",
+ (GET_BE_U_4(obj_tptr + offset + 4)>>30)&0x1 ?
+ "Transmit" : "Receive",
+ (GET_BE_U_4(obj_tptr + offset + 4)>>30)&0x1);
+
+ ND_PRINT("\n\t\t Channel Status: %s (%u)",
+ tok2str(lmp_obj_channel_status_values,
+ "Unknown",
+ GET_BE_U_4(obj_tptr + offset + 4)&0x3FFFFFF),
+ GET_BE_U_4(obj_tptr + offset + 4)&0x3FFFFFF);
+ offset+=8;
+ }
+ break;
+
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case LMP_OBJ_CHANNEL_STATUS_REQ:
+ switch(lmp_obj_ctype) {
+ case LMP_CTYPE_IPV4:
+ offset = 0;
+ while (offset+4 <= obj_tlen) {
+ ND_PRINT("\n\t Interface ID: %s (0x%08x)",
+ GET_IPADDR_STRING(obj_tptr+offset),
+ GET_BE_U_4(obj_tptr + offset));
+ offset+=4;
+ }
+ break;
+
+ case LMP_CTYPE_IPV6:
+ offset = 0;
+ while (offset+16 <= obj_tlen) {
+ ND_PRINT("\n\t Interface ID: %s (0x%08x)",
+ GET_IP6ADDR_STRING(obj_tptr+offset),
+ GET_BE_U_4(obj_tptr + offset));
+ offset+=16;
+ }
+ break;
+
+ case LMP_CTYPE_UNMD:
+ offset = 0;
+ while (offset+4 <= obj_tlen) {
+ ND_PRINT("\n\t Interface ID: %u (0x%08x)",
+ GET_BE_U_4(obj_tptr + offset),
+ GET_BE_U_4(obj_tptr + offset));
+ offset+=4;
+ }
+ break;
+
+ default:
+ hexdump=TRUE;
+ }
+ break;
+