?? print-lmp.c
字號:
goto trunc; hexdump=FALSE; switch(lmp_obj_header->class_num) { case LMP_OBJ_CC_ID: switch(lmp_obj_ctype) { case LMP_CTYPE_LOC: case LMP_CTYPE_RMT: printf("\n\t Control Channel ID: %u (0x%08x)", EXTRACT_32BITS(obj_tptr), EXTRACT_32BITS(obj_tptr)); break; default: hexdump=TRUE; } break; case LMP_OBJ_LINK_ID: case LMP_OBJ_INTERFACE_ID: switch(lmp_obj_ctype) { case LMP_CTYPE_IPV4_LOC: case LMP_CTYPE_IPV4_RMT: printf("\n\t IPv4 Link ID: %s (0x%08x)", ipaddr_string(obj_tptr), EXTRACT_32BITS(obj_tptr)); break;#ifdef INET6 case LMP_CTYPE_IPV6_LOC: case LMP_CTYPE_IPV6_RMT: printf("\n\t IPv6 Link ID: %s (0x%08x)", ip6addr_string(obj_tptr), EXTRACT_32BITS(obj_tptr)); break;#endif case LMP_CTYPE_UNMD_LOC: case LMP_CTYPE_UNMD_RMT: printf("\n\t Link ID: %u (0x%08x)", EXTRACT_32BITS(obj_tptr), EXTRACT_32BITS(obj_tptr)); break; default: hexdump=TRUE; } break; case LMP_OBJ_MESSAGE_ID: switch(lmp_obj_ctype) { case LMP_CTYPE_1: printf("\n\t Message ID: %u (0x%08x)", EXTRACT_32BITS(obj_tptr), EXTRACT_32BITS(obj_tptr)); break; case LMP_CTYPE_2: printf("\n\t Message ID Ack: %u (0x%08x)", EXTRACT_32BITS(obj_tptr), EXTRACT_32BITS(obj_tptr)); break; default: hexdump=TRUE; } break; case LMP_OBJ_NODE_ID: switch(lmp_obj_ctype) { case LMP_CTYPE_LOC: case LMP_CTYPE_RMT: printf("\n\t Node ID: %s (0x%08x)", ipaddr_string(obj_tptr), EXTRACT_32BITS(obj_tptr)); break; default: hexdump=TRUE; } break; case LMP_OBJ_CONFIG: switch(lmp_obj_ctype) { case LMP_CTYPE_HELLO_CONFIG: printf("\n\t Hello Interval: %u\n\t Hello Dead Interval: %u", EXTRACT_16BITS(obj_tptr), EXTRACT_16BITS(obj_tptr+2)); break; default: hexdump=TRUE; } break; case LMP_OBJ_HELLO: switch(lmp_obj_ctype) { case LMP_CTYPE_HELLO: printf("\n\t Tx Seq: %u, Rx Seq: %u", EXTRACT_32BITS(obj_tptr), EXTRACT_32BITS(obj_tptr+4)); break; default: hexdump=TRUE; } break; case LMP_OBJ_TE_LINK: printf("\n\t Flags: [%s]", bittok2str(lmp_obj_te_link_flag_values, "none", EXTRACT_16BITS(obj_tptr)>>8)); switch(lmp_obj_ctype) { case LMP_CTYPE_IPV4: printf("\n\t Local Link-ID: %s (0x%08x) \ \n\t Remote Link-ID: %s (0x%08x)", ipaddr_string(obj_tptr+4), EXTRACT_32BITS(obj_tptr+4), ipaddr_string(obj_tptr+8), EXTRACT_32BITS(obj_tptr+8)); break; #ifdef INET6 case LMP_CTYPE_IPV6:#endif case LMP_CTYPE_UNMD: default: hexdump=TRUE; } break; case LMP_OBJ_DATA_LINK: printf("\n\t Flags: [%s]", bittok2str(lmp_obj_data_link_flag_values, "none", EXTRACT_16BITS(obj_tptr)>>8)); switch(lmp_obj_ctype) { case LMP_CTYPE_IPV4: case LMP_CTYPE_UNMD: printf("\n\t Local Interface ID: %s (0x%08x) \ \n\t Remote Interface ID: %s (0x%08x)", ipaddr_string(obj_tptr+4), EXTRACT_32BITS(obj_tptr+4), ipaddr_string(obj_tptr+8), EXTRACT_32BITS(obj_tptr+8)); total_subobj_len = lmp_obj_len - 16; offset = 12; while (total_subobj_len > 0 && hexdump == FALSE ) { subobj_type = EXTRACT_16BITS(obj_tptr+offset)>>8; subobj_len = EXTRACT_16BITS(obj_tptr+offset)&0x00FF; printf("\n\t Subobject, Type: %s (%u), Length: %u", tok2str(lmp_data_link_subobj, "Unknown", subobj_type), subobj_type, subobj_len); switch(subobj_type) { case INT_SWITCHING_TYPE_SUBOBJ: printf("\n\t Switching Type: %s (%u)", tok2str(gmpls_switch_cap_values, "Unknown", EXTRACT_16BITS(obj_tptr+offset+2)>>8), EXTRACT_16BITS(obj_tptr+offset+2)>>8); printf("\n\t Encoding Type: %s (%u)", tok2str(gmpls_encoding_values, "Unknown", EXTRACT_16BITS(obj_tptr+offset+2)&0x00FF), EXTRACT_16BITS(obj_tptr+offset+2)&0x00FF); bw.i = EXTRACT_32BITS(obj_tptr+offset+4); printf("\n\t Min Reservable Bandwidth: %.3f Mbps", bw.f*8/1000000); bw.i = EXTRACT_32BITS(obj_tptr+offset+8); printf("\n\t Max Reservable Bandwidth: %.3f Mbps", bw.f*8/1000000); break; case WAVELENGTH_SUBOBJ: printf("\n\t Wavelength: %u", EXTRACT_32BITS(obj_tptr+offset+4)); break; default: /* Any Unknown Subobject ==> Exit loop */ hexdump=TRUE; break; } total_subobj_len-=subobj_len; offset+=subobj_len; } break;#ifdef INET6 case LMP_CTYPE_IPV6:#endif default: hexdump=TRUE; } break; case LMP_OBJ_VERIFY_BEGIN: switch(lmp_obj_ctype) { case LMP_CTYPE_1: printf("\n\t Flags: %s", bittok2str(lmp_obj_begin_verify_flag_values, "none", EXTRACT_16BITS(obj_tptr))); printf("\n\t Verify Interval: %u", EXTRACT_16BITS(obj_tptr+2)); printf("\n\t Data links: %u", EXTRACT_32BITS(obj_tptr+4)); printf("\n\t Encoding type: %s", tok2str(gmpls_encoding_values, "Unknown", *(obj_tptr+8))); printf("\n\t Verify Tranport Mechanism: %u (0x%x) %s", EXTRACT_16BITS(obj_tptr+10), EXTRACT_16BITS(obj_tptr+10), EXTRACT_16BITS(obj_tptr+10)&8000 ? "(Payload test messages capable)" : ""); bw.i = EXTRACT_32BITS(obj_tptr+12); printf("\n\t Transmission Rate: %.3f Mbps",bw.f*8/1000000); printf("\n\t Wavelength: %u", EXTRACT_32BITS(obj_tptr+16)); break; default: hexdump=TRUE; } break; case LMP_OBJ_VERIFY_BEGIN_ACK: switch(lmp_obj_ctype) { case LMP_CTYPE_1: printf("\n\t Verify Dead Interval: %u \ \n\t Verify Transport Response: %u", EXTRACT_16BITS(obj_tptr), EXTRACT_16BITS(obj_tptr+2)); break; default: hexdump=TRUE; } break; case LMP_OBJ_VERIFY_ID: switch(lmp_obj_ctype) { case LMP_CTYPE_1: printf("\n\t Verify ID: %u", EXTRACT_32BITS(obj_tptr)); break; default: hexdump=TRUE; } break; case LMP_OBJ_CHANNEL_STATUS: switch(lmp_obj_ctype) { case LMP_CTYPE_IPV4: case LMP_CTYPE_UNMD: offset = 0; /* Decode pairs: <Interface_ID (4 bytes), Channel_status (4 bytes)> */ while (offset < (lmp_obj_len-(int)sizeof(struct lmp_object_header)) ) { printf("\n\t Interface ID: %s (0x%08x)", ipaddr_string(obj_tptr+offset), EXTRACT_32BITS(obj_tptr+offset)); printf("\n\t\t Active: %s (%u)", (EXTRACT_32BITS(obj_tptr+offset+4)>>31) ? "Allocated" : "Non-allocated", (EXTRACT_32BITS(obj_tptr+offset+4)>>31)); printf("\n\t\t Direction: %s (%u)", (EXTRACT_32BITS(obj_tptr+offset+4)>>30)&0x1 ? "Transmit" : "Receive", (EXTRACT_32BITS(obj_tptr+offset+4)>>30)&0x1); printf("\n\t\t Channel Status: %s (%u)", tok2str(lmp_obj_channel_status_values, "Unknown", EXTRACT_32BITS(obj_tptr+offset+4)&0x3FFFFFF), EXTRACT_32BITS(obj_tptr+offset+4)&0x3FFFFFF); offset+=8; } break;#ifdef INET6 case LMP_CTYPE_IPV6:#endif default: hexdump=TRUE; } break; case LMP_OBJ_CHANNEL_STATUS_REQ: switch(lmp_obj_ctype) { case LMP_CTYPE_IPV4: case LMP_CTYPE_UNMD: offset = 0; while (offset < (lmp_obj_len-(int)sizeof(struct lmp_object_header)) ) { printf("\n\t Interface ID: %s (0x%08x)", ipaddr_string(obj_tptr+offset), EXTRACT_32BITS(obj_tptr+offset)); offset+=4; } break;#ifdef INET6 case LMP_CTYPE_IPV6:#endif default: hexdump=TRUE; } break; case LMP_OBJ_ERROR_CODE: switch(lmp_obj_ctype) { case LMP_CTYPE_BEGIN_VERIFY_ERROR: printf("\n\t Error Code: %s", bittok2str(lmp_obj_begin_verify_error_values, "none", EXTRACT_32BITS(obj_tptr))); break; case LMP_CTYPE_LINK_SUMMARY_ERROR: printf("\n\t Error Code: %s", bittok2str(lmp_obj_link_summary_error_values, "none", EXTRACT_32BITS(obj_tptr))); break; default: hexdump=TRUE; } break; case LMP_OBJ_SERVICE_CONFIG: switch (lmp_obj_ctype) { case LMP_CTYPE_SERVICE_CONFIG_SP: printf("\n\t Flags: %s", bittok2str(lmp_obj_service_config_sp_flag_values, "none", EXTRACT_16BITS(obj_tptr)>>8)); printf("\n\t UNI Version: %u", EXTRACT_16BITS(obj_tptr) & 0x00FF); break; case LMP_CTYPE_SERVICE_CONFIG_CPSA: link_type = EXTRACT_16BITS(obj_tptr)>>8; printf("\n\t Link Type: %s (%u)", tok2str(lmp_sd_service_config_cpsa_link_type_values, "Unknown", link_type), link_type); if (link_type == LMP_SD_SERVICE_CONFIG_CPSA_LINK_TYPE_SDH) { printf("\n\t Signal Type: %s (%u)", tok2str(lmp_sd_service_config_cpsa_signal_type_sdh_values, "Unknown", EXTRACT_16BITS(obj_tptr) & 0x00FF), EXTRACT_16BITS(obj_tptr) & 0x00FF); } if (link_type == LMP_SD_SERVICE_CONFIG_CPSA_LINK_TYPE_SONET) { printf("\n\t Signal Type: %s (%u)", tok2str(lmp_sd_service_config_cpsa_signal_type_sonet_values, "Unknown", EXTRACT_16BITS(obj_tptr) & 0x00FF), EXTRACT_16BITS(obj_tptr) & 0x00FF); } printf("\n\t Transparency: %s", bittok2str(lmp_obj_service_config_cpsa_tp_flag_values, "none", EXTRACT_16BITS(obj_tptr+2)>>8)); printf("\n\t Contiguous Concatenation Types: %s", bittok2str(lmp_obj_service_config_cpsa_cct_flag_values, "none", EXTRACT_16BITS(obj_tptr+2)>>8 & 0x00FF)); EXTRACT_16BITS(obj_tptr+4)); printf("\n\t Maximum NCC: %u", EXTRACT_16BITS(obj_tptr+6)); printf("\n\t Minimum NVC:%u", EXTRACT_16BITS(obj_tptr+8)); printf("\n\t Maximum NVC:%u", EXTRACT_16BITS(obj_tptr+10)); printf("\n\t Local Interface ID: %s (0x%08x)", ipaddr_string(obj_tptr+12), EXTRACT_32BITS(obj_tptr+12)); break; case LMP_CTYPE_SERVICE_CONFIG_TRANSPARENCY_TCM: printf("\n\t Transparency Flags: %s", bittok2str( lmp_obj_service_config_nsa_transparency_flag_values, "none", EXTRACT_32BITS(obj_tptr))); printf("\n\t TCM Monitoring Flags: %s", bittok2str( lmp_obj_service_config_nsa_tcm_flag_values, "none", EXTRACT_16BITS(obj_tptr+6) & 0x00FF)); break; case LMP_CTYPE_SERVICE_CONFIG_NETWORK_DIVERSITY: printf("\n\t Diversity: Flags: %s", bittok2str( lmp_obj_service_config_nsa_network_diversity_flag_values, "none", EXTRACT_16BITS(obj_tptr+2) & 0x00FF)); break; default: hexdump = TRUE; }; break; default: if (vflag <= 1) print_unknown_data(obj_tptr,"\n\t ",obj_tlen); break; } /* do we want to see an additionally hexdump ? */ if (vflag > 1 || hexdump==TRUE) print_unknown_data(tptr+sizeof(sizeof(struct lmp_object_header)),"\n\t ", lmp_obj_len-sizeof(struct lmp_object_header)); tptr+=lmp_obj_len; tlen-=lmp_obj_len; } return;trunc: printf("\n\t\t packet exceeded snapshot");}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -