*/
-#ifndef lint
-static const char rcsid[] _U_ =
- "@(#) $Header: /tcpdump/master/tcpdump/print-lmp.c,v 1.11 2007-08-02 17:32:49 hannes Exp $";
-#endif
-
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
struct lmp_common_header {
u_int8_t version_res[2];
- u_int8_t flags;
+ u_int8_t flags;
u_int8_t msg_type;
u_int8_t length[2];
u_int8_t reserved[2];
};
#define LMP_VERSION 1
-#define LMP_EXTRACT_VERSION(x) (((x)&0xf0)>>4)
+#define LMP_EXTRACT_VERSION(x) (((x)&0xf0)>>4)
static const struct tok lmp_header_flag_values[] = {
{ 0x01, "Control Channel Down"},
{ 0, NULL}
};
-/*
+/*
* LMP object header
*
* 0 1 2 3
* | |
* // (object contents) //
* | |
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
struct lmp_object_header {
#define LMP_OBJ_NODE_ID 2
#define LMP_OBJ_LINK_ID 3
#define LMP_OBJ_INTERFACE_ID 4
-#define LMP_OBJ_MESSAGE_ID 5
+#define LMP_OBJ_MESSAGE_ID 5
#define LMP_OBJ_CONFIG 6
#define LMP_OBJ_HELLO 7
#define LMP_OBJ_VERIFY_BEGIN 8
#define LMP_CTYPE_LOC 1
#define LMP_CTYPE_RMT 2
#define LMP_CTYPE_UNMD 3
-
+
#define LMP_CTYPE_IPV4_LOC 1
#define LMP_CTYPE_IPV4_RMT 2
#define LMP_CTYPE_IPV6_LOC 3
#define LMP_CTYPE_IPV6_RMT 4
-#define LMP_CTYPE_UNMD_LOC 5
-#define LMP_CTYPE_UNMD_RMT 6
+#define LMP_CTYPE_UNMD_LOC 5
+#define LMP_CTYPE_UNMD_RMT 6
#define LMP_CTYPE_1 1
#define LMP_CTYPE_2 2
#define LMP_CTYPE_SERVICE_CONFIG_TRANSPARENCY_TCM 3
#define LMP_CTYPE_SERVICE_CONFIG_NETWORK_DIVERSITY 4
-/*
+/*
* Different link types allowed in the Client Port Service Attributes
* subobject defined for LMP Service Discovery in the UNI 1.0 spec
*/
int link_type;
union { /* int to float conversion buffer */
- float f;
+ float f;
u_int32_t i;
} bw;
hexdump=TRUE;
}
break;
-
+
case LMP_OBJ_HELLO:
switch(lmp_obj_ctype) {
case LMP_CTYPE_HELLO:
default:
hexdump=TRUE;
}
- break;
-
+ 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)",
+ 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
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)",
+ 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;
+
+ total_subobj_len = lmp_obj_len - 16;
offset = 12;
while (total_subobj_len > 0 && hexdump == FALSE ) {
subobj_type = EXTRACT_16BITS(obj_tptr+offset)>>8;
switch(subobj_type) {
case INT_SWITCHING_TYPE_SUBOBJ:
printf("\n\t Switching Type: %s (%u)",
- tok2str(gmpls_switch_cap_values,
- "Unknown",
+ 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",
+ 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);
bw.i = EXTRACT_32BITS(obj_tptr+offset+8);
printf("\n\t Max Reservable Bandwidth: %.3f Mbps",
bw.f*8/1000000);
- break;
+ break;
case WAVELENGTH_SUBOBJ:
printf("\n\t Wavelength: %u",
EXTRACT_32BITS(obj_tptr+offset+4));
total_subobj_len-=subobj_len;
offset+=subobj_len;
}
-
+
break;
-#ifdef INET6
+#ifdef INET6
case LMP_CTYPE_IPV6:
#endif
default:
hexdump=TRUE;
}
- break;
-
+ break;
+
case LMP_OBJ_VERIFY_BEGIN:
switch(lmp_obj_ctype) {
case LMP_CTYPE_1:
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",
+ printf("\n\t Verify Transport 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)" : "");
+ 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;
-
+ 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",
+ 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;
-
+ 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;
-
+ break;
+
case LMP_OBJ_CHANNEL_STATUS:
switch(lmp_obj_ctype) {
case LMP_CTYPE_IPV4:
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) ?
+
+ 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 ?
+
+ 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);
-
+ (EXTRACT_32BITS(obj_tptr+offset+4)>>30)&0x1);
+
printf("\n\t\t Channel Status: %s (%u)",
tok2str(lmp_obj_channel_status_values,
"Unknown",
offset+=8;
}
break;
-#ifdef INET6
+#ifdef INET6
case LMP_CTYPE_IPV6:
#endif
default:
hexdump=TRUE;
}
- break;
-
+ break;
+
case LMP_OBJ_CHANNEL_STATUS_REQ:
switch(lmp_obj_ctype) {
case LMP_CTYPE_IPV4:
offset+=4;
}
break;
-#ifdef INET6
+#ifdef INET6
case LMP_CTYPE_IPV6:
#endif
default:
hexdump=TRUE;
}
- break;
-
+ break;
+
case LMP_OBJ_ERROR_CODE:
switch(lmp_obj_ctype) {
case LMP_CTYPE_BEGIN_VERIFY_ERROR:
"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,
default:
hexdump=TRUE;
}
- break;
+ 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",
+ "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,
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,
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));
-
+
printf("\n\t Minimum NCC: %u",
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,
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,
default:
if (vflag <= 1)
- print_unknown_data(obj_tptr,"\n\t ",obj_tlen);
+ print_unknown_data(gndo,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 ",
+ print_unknown_data(gndo,tptr+sizeof(struct lmp_object_header),"\n\t ",
lmp_obj_len-sizeof(struct lmp_object_header));
tptr+=lmp_obj_len;
trunc:
printf("\n\t\t packet exceeded snapshot");
}
+/*
+ * Local Variables:
+ * c-style: whitesmith
+ * c-basic-offset: 8
+ * End:
+ */