1 /* packet-lmp.c 2 * Routines for LMP packet disassembly 3 * 4 * (c) Copyright Ashok Narayanan <ashokn@cisco.com> 5 * 6 * Wireshark - Network traffic analyzer 7 * By Gerald Combs <gerald@wireshark.org> 8 * Copyright 1998 Gerald Combs 9 * 10 * SPDX-License-Identifier: GPL-2.0-or-later 11 */ 12 13 /* 14 * Code for dissecting the Link Management Protocol (LMP). The latest LMP 15 * specification is in draft-ieft-ccamp-lmp-10.txt. This version also includes 16 * support for dissecting LMP service discovery extensions defined in the 17 * UNI 1.0 specification. 18 * 19 * Support for LMP service discovery extensions added by Manu Pathak 20 * (mapathak@cisco.com), June 2005. 21 * 22 * Support for RFC4207 (SONET/SDH encoding for LMP test messages) added 23 * by Roberto Morro (roberto.morro [AT] tilab.com), August 2007 24 * 25 * Support for (provisional) oif-p0040.010.006 added by Roberto Morro, 26 * August 2007 27 */ 28 29 #include "config.h" 30 31 #include <epan/packet.h> 32 #include <epan/exceptions.h> 33 #include <epan/prefs.h> 34 #include <epan/in_cksum.h> 35 #include <epan/etypes.h> 36 #include <epan/ipproto.h> 37 #include <epan/expert.h> 38 #include <epan/to_str.h> 39 40 #include "packet-ip.h" 41 #include "packet-rsvp.h" 42 43 void proto_register_lmp(void); 44 void proto_reg_handoff_lmp(void); 45 46 static int proto_lmp = -1; 47 48 #define UDP_PORT_LMP_DEFAULT 701 49 50 static gboolean lmp_checksum_config = FALSE; 51 52 static dissector_handle_t lmp_handle; 53 54 /*---------------------------------------------------------------------- 55 * LMP message types 56 */ 57 typedef enum { 58 LMP_MSG_CONFIG=1, 59 LMP_MSG_CONFIG_ACK, 60 LMP_MSG_CONFIG_NACK, 61 LMP_MSG_HELLO, 62 LMP_MSG_BEGIN_VERIFY, 63 LMP_MSG_BEGIN_VERIFY_ACK, 64 LMP_MSG_BEGIN_VERIFY_NACK, 65 LMP_MSG_END_VERIFY, 66 LMP_MSG_END_VERIFY_ACK, 67 LMP_MSG_TEST, 68 LMP_MSG_TEST_STATUS_SUCCESS, 69 LMP_MSG_TEST_STATUS_FAILURE, 70 LMP_MSG_TEST_STATUS_ACK, 71 LMP_MSG_LINK_SUMMARY, 72 LMP_MSG_LINK_SUMMARY_ACK, 73 LMP_MSG_LINK_SUMMARY_NACK, 74 LMP_MSG_CHANNEL_STATUS, 75 LMP_MSG_CHANNEL_STATUS_ACK, 76 LMP_MSG_CHANNEL_STATUS_REQ, 77 LMP_MSG_CHANNEL_STATUS_RESP, 78 LMP_MSG_TRACE_MONITOR, 79 LMP_MSG_TRACE_MONITOR_ACK, 80 LMP_MSG_TRACE_MONITOR_NACK, 81 LMP_MSG_TRACE_MISMATCH, 82 LMP_MSG_TRACE_MISMATCH_ACK, 83 LMP_MSG_TRACE_REQUEST, 84 LMP_MSG_TRACE_REPORT, 85 LMP_MSG_TRACE_REQUEST_NACK, 86 LMP_MSG_INSERT_TRACE, 87 LMP_MSG_INSERT_TRACE_ACK, 88 LMP_MSG_INSERT_TRACE_NACK, 89 LMP_MSG_SERVICE_CONFIG=50, 90 LMP_MSG_SERVICE_CONFIG_ACK, 91 LMP_MSG_SERVICE_CONFIG_NACK, 92 LMP_MSG_DISCOVERY_RESP=241, 93 LMP_MSG_DISCOVERY_RESP_ACK, 94 LMP_MSG_DISCOVERY_RESP_NACK 95 } lmp_message_types; 96 97 static const value_string message_type_vals[] = { 98 {LMP_MSG_CONFIG, "Config Message. "}, 99 {LMP_MSG_CONFIG_ACK, "ConfigAck Message. "}, 100 {LMP_MSG_CONFIG_NACK, "ConfigNack Message. "}, 101 {LMP_MSG_HELLO, "Hello Message. "}, 102 {LMP_MSG_BEGIN_VERIFY, "BeginVerify Message. "}, 103 {LMP_MSG_BEGIN_VERIFY_ACK, "BeginVerifyAck Message. "}, 104 {LMP_MSG_BEGIN_VERIFY_NACK, "BeginVerifyNack Message. "}, 105 {LMP_MSG_END_VERIFY, "EndVerify Message. "}, 106 {LMP_MSG_END_VERIFY_ACK, "EndVerifyAck Message. "}, 107 {LMP_MSG_TEST, "Test Message. "}, 108 {LMP_MSG_TEST_STATUS_SUCCESS, "TestStatusSuccess Message. "}, 109 {LMP_MSG_TEST_STATUS_FAILURE, "TestStatusFailure Message. "}, 110 {LMP_MSG_TEST_STATUS_ACK, "TestStatusAck Message. "}, 111 {LMP_MSG_LINK_SUMMARY, "LinkSummary Message. "}, 112 {LMP_MSG_LINK_SUMMARY_ACK, "LinkSummaryAck Message. "}, 113 {LMP_MSG_LINK_SUMMARY_NACK, "LinkSummaryNack Message. "}, 114 {LMP_MSG_CHANNEL_STATUS, "ChannelStatus Message. "}, 115 {LMP_MSG_CHANNEL_STATUS_ACK, "ChannelStatusAck Message. "}, 116 {LMP_MSG_CHANNEL_STATUS_REQ, "ChannelStatusRequest Message. "}, 117 {LMP_MSG_CHANNEL_STATUS_RESP, "ChannelStatusResponse Message. "}, 118 {LMP_MSG_TRACE_MONITOR, "TraceMonitor Message. "}, 119 {LMP_MSG_TRACE_MONITOR_ACK, "TraceMonitorAck Message. "}, 120 {LMP_MSG_TRACE_MONITOR_NACK, "TraceMonitorNack Message. "}, 121 {LMP_MSG_TRACE_MISMATCH, "TraceMismatch Message. "}, 122 {LMP_MSG_TRACE_MISMATCH_ACK, "TraceMismatchAck Message. "}, 123 {LMP_MSG_TRACE_REQUEST, "TraceRequest Message. "}, 124 {LMP_MSG_TRACE_REPORT, "TraceReport Message. "}, 125 {LMP_MSG_TRACE_REQUEST_NACK, "TraceReportNack Message. "}, 126 {LMP_MSG_INSERT_TRACE, "InsertTrace Message. "}, 127 {LMP_MSG_INSERT_TRACE_ACK, "InsertTraceAck Message. "}, 128 {LMP_MSG_INSERT_TRACE_NACK, "InsertTraceNack Message. "}, 129 {LMP_MSG_SERVICE_CONFIG, "ServiceConfig Message. "}, 130 {LMP_MSG_SERVICE_CONFIG_ACK, "ServiceConfigAck Message. "}, 131 {LMP_MSG_SERVICE_CONFIG_NACK, "ServiceConfigNack Message. "}, 132 {LMP_MSG_DISCOVERY_RESP, "DiscoveryResponse Message. "}, 133 {LMP_MSG_DISCOVERY_RESP_ACK, "DiscoveryResponseAck Message. "}, 134 {LMP_MSG_DISCOVERY_RESP_NACK, "DiscoveryResponseNack Message. "}, 135 {0, NULL} 136 }; 137 138 /*------------------------------------------------------------------------------ 139 * LMP object classes 140 */ 141 #define LMP_CLASS_NULL 0 142 143 #define LMP_CLASS_CCID 1 144 #define LMP_CLASS_NODE_ID 2 145 #define LMP_CLASS_LINK_ID 3 146 #define LMP_CLASS_INTERFACE_ID 4 147 #define LMP_CLASS_MESSAGE_ID 5 148 #define LMP_CLASS_CONFIG 6 149 #define LMP_CLASS_HELLO 7 150 #define LMP_CLASS_BEGIN_VERIFY 8 151 #define LMP_CLASS_BEGIN_VERIFY_ACK 9 152 #define LMP_CLASS_VERIFY_ID 10 153 #define LMP_CLASS_TE_LINK 11 154 #define LMP_CLASS_DATA_LINK 12 155 #define LMP_CLASS_CHANNEL_STATUS 13 156 #define LMP_CLASS_CHANNEL_STATUS_REQUEST 14 157 #define LMP_LAST_CONTIGUOUS_CLASS LMP_CLASS_CHANNEL_STATUS_REQUEST 158 #define LMP_CLASS_ERROR 20 159 #define LMP_CLASS_TRACE 21 160 #define LMP_CLASS_TRACE_REQ 22 161 #define LMP_CLASS_SERVICE_CONFIG 51 162 #define LMP_CLASS_DA_DCN_ADDRESS 248 163 #define LMP_CLASS_LOCAL_LAD_INFO 249 164 #define LMP_CLASS_MAX 250 165 166 static const value_string lmp_class_vals[] = { 167 168 {LMP_CLASS_CCID, "CCID"}, 169 {LMP_CLASS_NODE_ID, "NODE_ID"}, 170 {LMP_CLASS_LINK_ID, "LINK_ID"}, 171 {LMP_CLASS_INTERFACE_ID, "INTERFACE_ID"}, 172 {LMP_CLASS_MESSAGE_ID, "MESSAGE_ID"}, 173 {LMP_CLASS_CONFIG, "CONFIG"}, 174 {LMP_CLASS_HELLO, "HELLO"}, 175 {LMP_CLASS_BEGIN_VERIFY, "BEGIN_VERIFY"}, 176 {LMP_CLASS_BEGIN_VERIFY_ACK, "BEGIN_VERIFY_ACK"}, 177 {LMP_CLASS_VERIFY_ID, "VERIFY_ID"}, 178 {LMP_CLASS_TE_LINK, "TE_LINK"}, 179 {LMP_CLASS_DATA_LINK, "DATA_LINK"}, 180 {LMP_CLASS_CHANNEL_STATUS, "CHANNEL_STATUS"}, 181 {LMP_CLASS_CHANNEL_STATUS_REQUEST, "CHANNEL_STATUS_REQUEST"}, 182 {LMP_CLASS_ERROR, "ERROR"}, 183 {LMP_CLASS_TRACE, "TRACE"}, 184 {LMP_CLASS_TRACE_REQ, "TRACE_REQ"}, 185 {LMP_CLASS_SERVICE_CONFIG, "SERVICE_CONFIG"}, 186 {LMP_CLASS_DA_DCN_ADDRESS, "DA_DCN_ADDRESS"}, 187 {LMP_CLASS_LOCAL_LAD_INFO, "LOCAL_LAD_INFO"}, 188 {0, NULL} 189 }; 190 191 192 /*------------------------------------------------------------------------------ 193 * Other constants & stuff 194 */ 195 196 /* Channel Status */ 197 static const value_string channel_status_str[] = { 198 {1, "Signal Okay (OK)"}, 199 {2, "Signal Degraded (SD)"}, 200 {3, "Signal Failed (SF)"}, 201 {0, NULL} 202 }; 203 static const value_string channel_status_short_str[] = { 204 {1, "OK"}, 205 {2, "SD"}, 206 {3, "SF"}, 207 {0, NULL} 208 }; 209 210 /* Service Discovery Client ServiceConfig object (defined in UNI 1.0) */ 211 212 /* Client Port-Level Service Attribute Object */ 213 214 /* Link Type */ 215 static const value_string service_attribute_link_type_str[] = { 216 {5, "SDH ITU-T G.707"}, 217 {6, "SONET ANSI T1.105"}, 218 {0, NULL} 219 }; 220 221 /* Signal Types for SDH */ 222 static const value_string service_attribute_signal_types_sdh_str[] = { 223 {5, "VC-3"}, 224 {6, "VC-4"}, 225 {7, "STM-0"}, 226 {8, "STM-1"}, 227 {9, "STM-4"}, 228 {10, "STM-16"}, 229 {11, "STM-64"}, 230 {12, "STM-256"}, 231 {0, NULL} 232 }; 233 234 /* Signal Types for SONET */ 235 static const value_string service_attribute_signal_types_sonet_str[] = { 236 {5, "STS-1 SPE"}, 237 {6, "STS-3c SPE"}, 238 {7, "STS-1"}, 239 {8, "STS-3"}, 240 {9, "STS-12"}, 241 {10, "STS-48"}, 242 {11, "STS-192"}, 243 {12, "STS-768"}, 244 {0, NULL} 245 }; 246 247 /* Trace type */ 248 static const value_string lmp_trace_type_str[] = { 249 { 1, "SONET Section Trace (J0 Byte)"}, 250 { 2, "SONET Path Trace (J1 Byte)"}, 251 { 3, "SONET Path Trace (J2 Byte)"}, 252 { 4, "SDH Section Trace (J0 Byte)"}, 253 { 5, "SDH Path Trace (J1 Byte)"}, 254 { 6, "SDH Path Trace (J2 Byte)"}, 255 { 0, NULL} 256 }; 257 258 /* 259 * These values are used by the code that handles the Service Discovery 260 * Client Port-Level Service Attributes Object. 261 */ 262 #define LMP_CLASS_SERVICE_CONFIG_CPSA_SIGNAL_TYPES_SDH 5 263 #define LMP_CLASS_SERVICE_CONFIG_CPSA_SIGNAL_TYPES_SONET 6 264 265 /*------------------------------------------------------------------------------ 266 * LMP Filter values 267 */ 268 269 enum hf_lmp_filter_keys { 270 271 /* Message types ---------------- */ 272 LMPF_MSG, 273 274 LMPF_MSG_CONFIG, 275 LMPF_MSG_CONFIG_ACK, 276 LMPF_MSG_CONFIG_NACK, 277 LMPF_MSG_HELLO, 278 LMPF_MSG_BEGIN_VERIFY, 279 LMPF_MSG_BEGIN_VERIFY_ACK, 280 LMPF_MSG_BEGIN_VERIFY_NACK, 281 LMPF_MSG_END_VERIFY, 282 LMPF_MSG_END_VERIFY_ACK, 283 LMPF_MSG_TEST, 284 LMPF_MSG_TEST_STATUS_SUCCESS, 285 LMPF_MSG_TEST_STATUS_FAILURE, 286 LMPF_MSG_TEST_STATUS_ACK, 287 LMPF_MSG_LINK_SUMMARY, 288 LMPF_MSG_LINK_SUMMARY_ACK, 289 LMPF_MSG_LINK_SUMMARY_NACK, 290 LMPF_MSG_CHANNEL_STATUS, 291 LMPF_MSG_CHANNEL_STATUS_ACK, 292 LMPF_MSG_CHANNEL_STATUS_REQ, 293 LMPF_MSG_CHANNEL_STATUS_RESP, 294 LMPF_MSG_TRACE_MONITOR, 295 LMPF_MSG_TRACE_MONITOR_ACK, 296 LMPF_MSG_TRACE_MONITOR_NACK, 297 LMPF_MSG_TRACE_MISMATCH, 298 LMPF_MSG_TRACE_MISMATCH_ACK, 299 LMPF_MSG_TRACE_REQUEST, 300 LMPF_MSG_TRACE_REPORT, 301 LMPF_MSG_TRACE_REQUEST_NACK, 302 LMPF_MSG_INSERT_TRACE, 303 LMPF_MSG_INSERT_TRACE_ACK, 304 LMPF_MSG_INSERT_TRACE_NACK, 305 LMPF_MSG_SERVICE_CONFIG, 306 LMPF_MSG_SERVICE_CONFIG_ACK, 307 LMPF_MSG_SERVICE_CONFIG_NACK, 308 LMPF_MSG_DISCOVERY_RESP, 309 LMPF_MSG_DISCOVERY_RESP_ACK, 310 LMPF_MSG_DISCOVERY_RESP_NACK, 311 312 LMPF_MSG_MAX, 313 314 /* LMP Message Header Fields ------------------ */ 315 LMPF_HDR_FLAGS, 316 LMPF_HDR_FLAGS_CC_DOWN, 317 LMPF_HDR_FLAGS_REBOOT, 318 319 /* LMP Object Class Filters -------------------- */ 320 LMPF_OBJECT, 321 322 LMPF_CLASS_CCID, 323 LMPF_CLASS_NODE_ID, 324 LMPF_CLASS_LINK_ID, 325 LMPF_CLASS_INTERFACE_ID, 326 LMPF_CLASS_MESSAGE_ID, 327 LMPF_CLASS_CONFIG, 328 LMPF_CLASS_HELLO, 329 LMPF_CLASS_BEGIN_VERIFY, 330 LMPF_CLASS_BEGIN_VERIFY_ACK, 331 LMPF_CLASS_VERIFY_ID, 332 LMPF_CLASS_TE_LINK, 333 LMPF_CLASS_DATA_LINK, 334 LMPF_CLASS_CHANNEL_STATUS, 335 LMPF_CLASS_CHANNEL_STATUS_REQUEST, 336 LMPF_CLASS_ERROR, 337 LMPF_CLASS_TRACE, 338 LMPF_CLASS_TRACE_REQ, 339 LMPF_CLASS_SERVICE_CONFIG, 340 LMPF_CLASS_DA_DCN_ADDRESS, 341 LMPF_CLASS_LOCAL_LAD_INFO, 342 343 LMPF_VAL_CTYPE, 344 LMPF_VAL_LOCAL_CCID, 345 LMPF_VAL_REMOTE_CCID, 346 LMPF_VAL_LOCAL_NODE_ID, 347 LMPF_VAL_REMOTE_NODE_ID, 348 LMPF_VAL_LOCAL_LINK_ID_IPV4, 349 LMPF_VAL_LOCAL_LINK_ID_IPV6, 350 LMPF_VAL_LOCAL_LINK_ID_UNNUM, 351 LMPF_VAL_REMOTE_LINK_ID_IPV4, 352 LMPF_VAL_REMOTE_LINK_ID_IPV6, 353 LMPF_VAL_REMOTE_LINK_ID_UNNUM, 354 LMPF_VAL_LOCAL_INTERFACE_ID_IPV4, 355 LMPF_VAL_LOCAL_INTERFACE_ID_IPV6, 356 LMPF_VAL_LOCAL_INTERFACE_ID_UNNUM, 357 LMPF_VAL_REMOTE_INTERFACE_ID_IPV4, 358 LMPF_VAL_REMOTE_INTERFACE_ID_IPV6, 359 LMPF_VAL_REMOTE_INTERFACE_ID_UNNUM, 360 LMPF_VAL_CHANNEL_STATUS_INTERFACE_ID_IPV4, 361 LMPF_VAL_CHANNEL_STATUS_INTERFACE_ID_IPV6, 362 LMPF_VAL_CHANNEL_STATUS_INTERFACE_ID_UNNUM, 363 LMPF_VAL_MESSAGE_ID, 364 LMPF_VAL_MESSAGE_ID_ACK, 365 LMPF_VAL_CONFIG_HELLO, 366 LMPF_VAL_CONFIG_HELLO_DEAD, 367 LMPF_VAL_HELLO_TXSEQ, 368 LMPF_VAL_HELLO_RXSEQ, 369 370 LMPF_VAL_BEGIN_VERIFY_FLAGS, 371 LMPF_VAL_BEGIN_VERIFY_FLAGS_ALL_LINKS, 372 LMPF_VAL_BEGIN_VERIFY_FLAGS_LINK_TYPE, 373 LMPF_VAL_BEGIN_VERIFY_INTERVAL, 374 LMPF_VAL_BEGIN_VERIFY_ENCTYPE, 375 LMPF_VAL_BEGIN_VERIFY_TRANSPORT, 376 LMPF_VAL_BEGIN_VERIFY_TRANSMISSION_RATE, 377 LMPF_VAL_BEGIN_VERIFY_WAVELENGTH, 378 LMPF_VAL_VERIFY_ID, 379 380 LMPF_VAL_TE_LINK_FLAGS, 381 LMPF_VAL_TE_LINK_FLAGS_FAULT_MGMT, 382 LMPF_VAL_TE_LINK_FLAGS_LINK_VERIFY, 383 LMPF_VAL_TE_LINK_LOCAL_IPV4, 384 LMPF_VAL_TE_LINK_LOCAL_IPV6, 385 LMPF_VAL_TE_LINK_LOCAL_UNNUM, 386 LMPF_VAL_TE_LINK_REMOTE_IPV4, 387 LMPF_VAL_TE_LINK_REMOTE_IPV6, 388 LMPF_VAL_TE_LINK_REMOTE_UNNUM, 389 390 LMPF_VAL_DATA_LINK_FLAGS, 391 LMPF_VAL_DATA_LINK_FLAGS_PORT, 392 LMPF_VAL_DATA_LINK_FLAGS_ALLOCATED, 393 LMPF_VAL_DATA_LINK_LOCAL_IPV4, 394 LMPF_VAL_DATA_LINK_LOCAL_IPV6, 395 LMPF_VAL_DATA_LINK_LOCAL_UNNUM, 396 LMPF_VAL_DATA_LINK_REMOTE_IPV4, 397 LMPF_VAL_DATA_LINK_REMOTE_IPV6, 398 LMPF_VAL_DATA_LINK_REMOTE_UNNUM, 399 LMPF_VAL_DATA_LINK_SUBOBJ, 400 LMPF_VAL_DATA_LINK_SUBOBJ_SWITCHING_TYPE, 401 LMPF_VAL_DATA_LINK_SUBOBJ_LSP_ENCODING, 402 403 LMPF_VAL_ERROR, 404 LMPF_VAL_ERROR_VERIFY_UNSUPPORTED_LINK, 405 LMPF_VAL_ERROR_VERIFY_UNWILLING, 406 LMPF_VAL_ERROR_VERIFY_TRANSPORT, 407 LMPF_VAL_ERROR_VERIFY_TE_LINK_ID, 408 LMPF_VAL_ERROR_VERIFY_UNKNOWN_CTYPE, 409 LMPF_VAL_ERROR_SUMMARY_BAD_PARAMETERS, 410 LMPF_VAL_ERROR_SUMMARY_RENEGOTIATE, 411 LMPF_VAL_ERROR_SUMMARY_BAD_TE_LINK, 412 LMPF_VAL_ERROR_SUMMARY_BAD_DATA_LINK, 413 LMPF_VAL_ERROR_SUMMARY_UNKNOWN_TEL_CTYPE, 414 LMPF_VAL_ERROR_SUMMARY_UNKNOWN_DL_CTYPE, 415 LMPF_VAL_ERROR_SUMMARY_BAD_REMOTE_LINK_ID, 416 LMPF_VAL_ERROR_CONFIG_BAD_PARAMETERS, 417 LMPF_VAL_ERROR_CONFIG_RENEGOTIATE, 418 LMPF_VAL_ERROR_CONFIG_BAD_CCID, 419 LMPF_VAL_ERROR_TRACE_UNSUPPORTED_TYPE, 420 LMPF_VAL_ERROR_TRACE_INVALID_MSG, 421 LMPF_VAL_ERROR_TRACE_UNKNOWN_CTYPE, 422 LMPF_VAL_ERROR_LAD_AREA_ID_MISMATCH, 423 LMPF_VAL_ERROR_LAD_TCP_ID_MISMATCH, 424 LMPF_VAL_ERROR_LAD_DA_DCN_MISMATCH, 425 LMPF_VAL_ERROR_LAD_CAPABILITY_MISMATCH, 426 LMPF_VAL_ERROR_LAD_UNKNOWN_CTYPE, 427 428 LMPF_VAL_TRACE_LOCAL_TYPE, 429 LMPF_VAL_TRACE_LOCAL_LEN, 430 LMPF_VAL_TRACE_LOCAL_MSG, 431 LMPF_VAL_TRACE_REMOTE_TYPE, 432 LMPF_VAL_TRACE_REMOTE_LEN, 433 LMPF_VAL_TRACE_REMOTE_MSG, 434 435 LMPF_VAL_TRACE_REQ_TYPE, 436 437 LMPF_VAL_SERVICE_CONFIG_SP_FLAGS, 438 LMPF_VAL_SERVICE_CONFIG_SP_FLAGS_RSVP, 439 LMPF_VAL_SERVICE_CONFIG_SP_FLAGS_LDP, 440 LMPF_VAL_SERVICE_CONFIG_CPSA_TP_FLAGS, 441 LMPF_VAL_SERVICE_CONFIG_CPSA_TP_FLAGS_PATH_OVERHEAD, 442 LMPF_VAL_SERVICE_CONFIG_CPSA_TP_FLAGS_LINE_OVERHEAD, 443 LMPF_VAL_SERVICE_CONFIG_CPSA_TP_FLAGS_SECTION_OVERHEAD, 444 LMPF_VAL_SERVICE_CONFIG_CPSA_CCT_FLAGS, 445 LMPF_VAL_SERVICE_CONFIG_CPSA_CCT_FLAGS_CC_SUPPORTED, 446 LMPF_VAL_SERVICE_CONFIG_CPSA_MIN_NCC, 447 LMPF_VAL_SERVICE_CONFIG_CPSA_MAX_NCC, 448 LMPF_VAL_SERVICE_CONFIG_CPSA_MIN_NVC, 449 LMPF_VAL_SERVICE_CONFIG_CPSA_MAX_NVC, 450 LMPF_VAL_SERVICE_CONFIG_CPSA_INTERFACE_ID, 451 LMPF_VAL_SERVICE_CONFIG_NSA_TRANSPARENCY_FLAGS, 452 LMPF_VAL_SERVICE_CONFIG_NSA_TRANSPARENCY_FLAGS_SOH, 453 LMPF_VAL_SERVICE_CONFIG_NSA_TRANSPARENCY_FLAGS_LOH, 454 LMPF_VAL_SERVICE_CONFIG_NSA_TCM_FLAGS, 455 LMPF_VAL_SERVICE_CONFIG_NSA_TCM_FLAGS_TCM_SUPPORTED, 456 LMPF_VAL_SERVICE_CONFIG_NSA_NETWORK_DIVERSITY_FLAGS, 457 LMPF_VAL_SERVICE_CONFIG_NSA_NETWORK_DIVERSITY_FLAGS_NODE, 458 LMPF_VAL_SERVICE_CONFIG_NSA_NETWORK_DIVERSITY_FLAGS_LINK, 459 LMPF_VAL_SERVICE_CONFIG_NSA_NETWORK_DIVERSITY_FLAGS_SRLG, 460 461 LMPF_VAL_LOCAL_DA_DCN_ADDR, 462 LMPF_VAL_REMOTE_DA_DCN_ADDR, 463 464 LMPF_VAL_LOCAL_LAD_INFO_NODE_ID, 465 LMPF_VAL_LOCAL_LAD_INFO_AREA_ID, 466 LMPF_VAL_LOCAL_LAD_INFO_TE_LINK_ID, 467 LMPF_VAL_LOCAL_LAD_INFO_COMPONENT_ID, 468 LMPF_VAL_LOCAL_LAD_INFO_SC_PC_ID, 469 LMPF_VAL_LOCAL_LAD_INFO_SC_PC_ADDR, 470 471 LMPF_VAL_LAD_INFO_SUBOBJ, 472 LMPF_VAL_LAD_INFO_SUBOBJ_PRI_AREA_ID, 473 LMPF_VAL_LAD_INFO_SUBOBJ_PRI_RC_PC_ID, 474 LMPF_VAL_LAD_INFO_SUBOBJ_PRI_RC_PC_ADDR, 475 LMPF_VAL_LAD_INFO_SUBOBJ_SEC_AREA_ID, 476 LMPF_VAL_LAD_INFO_SUBOBJ_SEC_RC_PC_ID, 477 LMPF_VAL_LAD_INFO_SUBOBJ_SEC_RC_PC_ADDR, 478 LMPF_VAL_LAD_INFO_SUBOBJ_SWITCHING_TYPE, 479 LMPF_VAL_LAD_INFO_SUBOBJ_LSP_ENCODING, 480 481 LMPF_CHECKSUM, 482 LMPF_CHECKSUM_STATUS, 483 484 LMPF_MAX 485 }; 486 487 static int hf_lmp_filter[LMPF_MAX]; 488 static int hf_lmp_data; 489 490 /* Generated from convert_proto_tree_add_text.pl */ 491 static int hf_lmp_maximum_reservable_bandwidth = -1; 492 static int hf_lmp_verify_transport_mechanism = -1; 493 static int hf_lmp_interface_id_ipv6 = -1; 494 static int hf_lmp_minimum_reservable_bandwidth = -1; 495 static int hf_lmp_object_length = -1; 496 static int hf_lmp_interface_id_unnumbered = -1; 497 static int hf_lmp_signal_types_sdh = -1; 498 static int hf_lmp_link_type = -1; 499 static int hf_lmp_number_of_data_links = -1; 500 static int hf_lmp_version = -1; 501 static int hf_lmp_interface_id_ipv4 = -1; 502 static int hf_lmp_header_length = -1; 503 static int hf_lmp_uni_version = -1; 504 static int hf_lmp_subobject_type = -1; 505 static int hf_lmp_object_class = -1; 506 static int hf_lmp_negotiable = -1; 507 static int hf_lmp_signal_types_sonet = -1; 508 static int hf_lmp_header_flags = -1; 509 static int hf_lmp_verify_interval = -1; 510 static int hf_lmp_wavelength = -1; 511 static int hf_lmp_channel_status = -1; 512 static int hf_lmp_verifydeadinterval = -1; 513 static int hf_lmp_data_link_remote_id_ipv6 = -1; 514 static int hf_lmp_link = -1; 515 static int hf_lmp_subobject_length = -1; 516 static int hf_lmp_transmission_rate = -1; 517 static int hf_lmp_verify_transport_response = -1; 518 static int hf_lmp_data_link_local_id_ipv6 = -1; 519 static int hf_lmp_free_timeslots = -1; 520 521 static expert_field ei_lmp_checksum_incorrect = EI_INIT; 522 static expert_field ei_lmp_invalid_msg_type = EI_INIT; 523 static expert_field ei_lmp_invalid_class = EI_INIT; 524 static expert_field ei_lmp_trace_len = EI_INIT; 525 static expert_field ei_lmp_obj_len = EI_INIT; 526 527 static int 528 lmp_valid_class(int lmp_class) 529 { 530 /* Contiguous classes */ 531 if (lmp_class > LMP_CLASS_NULL && lmp_class <= LMP_LAST_CONTIGUOUS_CLASS) 532 return 1; 533 534 /* Noncontiguous classes */ 535 if (lmp_class == LMP_CLASS_ERROR || 536 lmp_class == LMP_CLASS_TRACE || 537 lmp_class == LMP_CLASS_TRACE_REQ || 538 lmp_class == LMP_CLASS_SERVICE_CONFIG || 539 lmp_class == LMP_CLASS_DA_DCN_ADDRESS || 540 lmp_class == LMP_CLASS_LOCAL_LAD_INFO) 541 return 1; 542 543 return 0; 544 } 545 546 static int 547 lmp_msg_to_filter_num(int msg_type) 548 { 549 if (msg_type <= LMP_MSG_INSERT_TRACE_NACK) 550 return LMPF_MSG + msg_type; 551 552 switch (msg_type) { 553 case LMP_MSG_SERVICE_CONFIG: 554 return LMPF_MSG_SERVICE_CONFIG; 555 556 case LMP_MSG_SERVICE_CONFIG_ACK: 557 return LMPF_MSG_SERVICE_CONFIG_ACK; 558 559 case LMP_MSG_SERVICE_CONFIG_NACK: 560 return LMPF_MSG_SERVICE_CONFIG_NACK; 561 562 case LMP_MSG_DISCOVERY_RESP: 563 return LMPF_MSG_DISCOVERY_RESP; 564 565 case LMP_MSG_DISCOVERY_RESP_ACK: 566 return LMPF_MSG_DISCOVERY_RESP_ACK; 567 568 case LMP_MSG_DISCOVERY_RESP_NACK: 569 return LMPF_MSG_DISCOVERY_RESP_NACK; 570 571 default: 572 return -1; 573 } 574 } 575 576 577 static int 578 lmp_class_to_filter_num(int lmp_class) 579 { 580 581 /* 582 * The contiguous values can all be handled in the same way. The ERROR and 583 * Service Config objects, whose C-Type values are not contiguously assigned, 584 * must be handled separately. 585 */ 586 switch (lmp_class) { 587 588 case LMP_CLASS_CCID: 589 case LMP_CLASS_NODE_ID: 590 case LMP_CLASS_LINK_ID: 591 case LMP_CLASS_INTERFACE_ID: 592 case LMP_CLASS_MESSAGE_ID: 593 case LMP_CLASS_CONFIG: 594 case LMP_CLASS_HELLO: 595 case LMP_CLASS_BEGIN_VERIFY: 596 case LMP_CLASS_BEGIN_VERIFY_ACK: 597 case LMP_CLASS_VERIFY_ID: 598 case LMP_CLASS_TE_LINK: 599 case LMP_CLASS_DATA_LINK: 600 case LMP_CLASS_CHANNEL_STATUS: 601 case LMP_CLASS_CHANNEL_STATUS_REQUEST: 602 return LMPF_OBJECT + lmp_class; 603 604 case LMP_CLASS_ERROR: 605 return LMPF_CLASS_ERROR; 606 607 case LMP_CLASS_TRACE: 608 return LMPF_CLASS_TRACE; 609 610 case LMP_CLASS_TRACE_REQ: 611 return LMPF_CLASS_TRACE_REQ; 612 613 case LMP_CLASS_SERVICE_CONFIG: 614 return LMPF_CLASS_SERVICE_CONFIG; 615 616 case LMP_CLASS_DA_DCN_ADDRESS: 617 return LMPF_CLASS_DA_DCN_ADDRESS; 618 619 case LMP_CLASS_LOCAL_LAD_INFO: 620 return LMPF_CLASS_LOCAL_LAD_INFO; 621 622 default: 623 return -1; 624 } 625 } 626 627 628 /*------------------------------------------------------------------------------ 629 * LMP Subtrees 630 * 631 * We have two types of subtrees - a statically defined, constant set and 632 * a class set - one for each class. The static ones are before all the class ones 633 */ 634 enum { 635 LMP_TREE_MAIN, 636 LMP_TREE_HEADER, 637 LMP_TREE_HEADER_FLAGS, 638 LMP_TREE_OBJECT_HEADER, 639 LMP_TREE_ERROR_FLAGS, 640 LMP_TREE_BEGIN_VERIFY_FLAGS, 641 LMP_TREE_BEGIN_VERIFY_TRANSPORT_FLAGS, 642 LMP_TREE_TE_LINK_FLAGS, 643 LMP_TREE_DATA_LINK_FLAGS, 644 LMP_TREE_DATA_LINK_SUBOBJ, 645 LMP_TREE_CHANNEL_STATUS_ID, 646 LMP_TREE_SERVICE_CONFIG_SP_FLAGS, 647 LMP_TREE_SERVICE_CONFIG_CPSA_TP_FLAGS, 648 LMP_TREE_SERVICE_CONFIG_CPSA_CCT_FLAGS, 649 LMP_TREE_SERVICE_CONFIG_NSA_TRANSPARENCY_FLAGS, 650 LMP_TREE_SERVICE_CONFIG_NSA_TCM_FLAGS, 651 LMP_TREE_SERVICE_CONFIG_NSA_NETWORK_DIVERSITY_FLAGS, 652 LMP_TREE_LAD_INFO_SUBOBJ, 653 654 LMP_TREE_CLASS_START 655 }; 656 657 #define NUM_LMP_SUBTREES (LMP_TREE_CLASS_START + LMP_CLASS_MAX) 658 659 static gint lmp_subtree[NUM_LMP_SUBTREES]; 660 661 static int lmp_class_to_subtree(int lmp_class) 662 { 663 if (lmp_valid_class(lmp_class)) { 664 if (lmp_class == LMP_CLASS_SERVICE_CONFIG) { 665 return lmp_subtree[LMP_TREE_CLASS_START + LMP_CLASS_SERVICE_CONFIG]; 666 } 667 if (lmp_class == LMP_CLASS_DA_DCN_ADDRESS) { 668 return lmp_subtree[LMP_TREE_CLASS_START + LMP_CLASS_DA_DCN_ADDRESS]; 669 } 670 if (lmp_class == LMP_CLASS_LOCAL_LAD_INFO) { 671 return lmp_subtree[LMP_TREE_CLASS_START + LMP_CLASS_LOCAL_LAD_INFO]; 672 } 673 674 return lmp_subtree[LMP_TREE_CLASS_START + lmp_class]; 675 } 676 return -1; 677 } 678 679 static const true_false_string tfs_active_monitoring_not_allocated = { "Allocated - Active Monitoring", "Not Allocated" }; 680 681 /*------------------------------------------------------------------------------ 682 * Da code 683 */ 684 685 static int 686 dissect_lmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) 687 { 688 int offset = 0; 689 proto_tree *lmp_tree = NULL, *ti, *ti2; 690 proto_tree *lmp_header_tree; 691 proto_tree *lmp_object_tree; 692 proto_tree *lmp_object_header_tree; 693 proto_tree *lmp_subobj_tree; 694 proto_item *hidden_item, *msg_item; 695 696 guint8 message_type; 697 vec_t cksum_vec[1]; 698 int j, k, l, len; 699 int msg_length; 700 int obj_length; 701 int mylen; 702 int offset2; 703 704 col_set_str(pinfo->cinfo, COL_PROTOCOL, "LMP"); 705 col_clear(pinfo->cinfo, COL_INFO); 706 707 message_type = tvb_get_guint8(tvb, offset+3); 708 col_add_str(pinfo->cinfo, COL_INFO, 709 val_to_str(message_type, message_type_vals, "Unknown (%u). ")); 710 711 if (tree) { 712 static int * const header_flags[] = { 713 &hf_lmp_filter[LMPF_HDR_FLAGS_CC_DOWN], 714 &hf_lmp_filter[LMPF_HDR_FLAGS_REBOOT], 715 NULL 716 }; 717 718 msg_length = tvb_get_ntohs(tvb, offset+4); 719 ti = proto_tree_add_item(tree, proto_lmp, tvb, offset, msg_length, ENC_NA); 720 lmp_tree = proto_item_add_subtree(ti, lmp_subtree[LMP_TREE_MAIN]); 721 lmp_header_tree = proto_tree_add_subtree_format( 722 lmp_tree, tvb, offset, 12, 723 lmp_subtree[LMP_TREE_HEADER], NULL, "LMP Header. %s", 724 val_to_str(message_type, message_type_vals, "Unknown Message (%u). ")); 725 proto_tree_add_item(lmp_header_tree, hf_lmp_version, tvb, offset, 1, ENC_BIG_ENDIAN); 726 727 proto_tree_add_bitmask(lmp_header_tree, tvb, offset+2, hf_lmp_header_flags, lmp_subtree[LMP_TREE_HEADER_FLAGS], header_flags, ENC_NA); 728 msg_item = proto_tree_add_uint(lmp_header_tree, hf_lmp_filter[LMPF_MSG], tvb, 729 offset+3, 1, message_type); 730 proto_tree_add_uint_format_value(lmp_header_tree, hf_lmp_header_length, tvb, offset+4, 2, msg_length, "%d bytes", 731 msg_length); 732 /* if (LMPF_MSG + message_type < LMPF_MSG_MAX && message_type > 0) {*/ 733 /* this "if" is still a hack, but compared to the former one at least correct */ 734 if ((message_type >= LMP_MSG_CONFIG && message_type <= LMP_MSG_CHANNEL_STATUS_RESP) || 735 (message_type >= LMP_MSG_SERVICE_CONFIG && message_type <= LMP_MSG_SERVICE_CONFIG_NACK) || 736 (message_type >= LMP_MSG_DISCOVERY_RESP && message_type <= LMP_MSG_DISCOVERY_RESP_NACK) ) { 737 hidden_item = proto_tree_add_boolean(lmp_header_tree, 738 hf_lmp_filter[lmp_msg_to_filter_num(message_type)], 739 tvb, offset+3, 1, 1); 740 proto_item_set_hidden(hidden_item); 741 } else { 742 expert_add_info_format(pinfo, msg_item, &ei_lmp_invalid_msg_type, 743 "Invalid message type: %u", message_type); 744 return tvb_captured_length(tvb); 745 } 746 747 if (lmp_checksum_config) { 748 if (!pinfo->fragmented && (int) tvb_captured_length(tvb) >= msg_length) { 749 /* The packet isn't part of a fragmented datagram and isn't truncated, so we can checksum it. */ 750 SET_CKSUM_VEC_TVB(cksum_vec[0], tvb, 0, msg_length); 751 proto_tree_add_checksum(lmp_header_tree, tvb, offset+6, hf_lmp_filter[LMPF_CHECKSUM], hf_lmp_filter[LMPF_CHECKSUM_STATUS], &ei_lmp_checksum_incorrect, pinfo, 752 in_cksum(cksum_vec, 1), ENC_BIG_ENDIAN, PROTO_CHECKSUM_VERIFY|PROTO_CHECKSUM_IN_CKSUM); 753 } else { 754 proto_tree_add_checksum(lmp_header_tree, tvb, offset+6, hf_lmp_filter[LMPF_CHECKSUM], hf_lmp_filter[LMPF_CHECKSUM_STATUS], &ei_lmp_checksum_incorrect, pinfo, 0, ENC_BIG_ENDIAN, PROTO_CHECKSUM_NO_FLAGS); 755 } 756 } else { 757 proto_tree_add_checksum(lmp_header_tree, tvb, offset+6, hf_lmp_filter[LMPF_CHECKSUM], hf_lmp_filter[LMPF_CHECKSUM_STATUS], &ei_lmp_checksum_incorrect, pinfo, 0, ENC_BIG_ENDIAN, PROTO_CHECKSUM_NOT_PRESENT); 758 } 759 760 offset += 8; 761 len = 8; 762 while (len < msg_length) { 763 guint8 lmp_class; 764 guint8 type; 765 guint8 negotiable; 766 int filter_num; 767 proto_item* trace_item; 768 769 obj_length = tvb_get_ntohs(tvb, offset+2); 770 if (obj_length == 0) { 771 proto_tree_add_expert(tree, pinfo, &ei_lmp_obj_len, tvb, offset+2, 2); 772 break; 773 } 774 lmp_class = tvb_get_guint8(tvb, offset+1); 775 type = tvb_get_guint8(tvb, offset); 776 negotiable = (type >> 7); type &= 0x7f; 777 hidden_item = proto_tree_add_uint(lmp_tree, hf_lmp_filter[LMPF_OBJECT], tvb, 778 offset, 1, lmp_class); 779 proto_item_set_generated(hidden_item); 780 filter_num = lmp_class_to_filter_num(lmp_class); 781 if (filter_num != -1 && lmp_valid_class(lmp_class)) { 782 ti = proto_tree_add_item(lmp_tree, 783 hf_lmp_filter[filter_num], 784 tvb, offset, obj_length, ENC_NA); /* all possibilities are FT_NONE */ 785 } else { 786 expert_add_info_format(pinfo, hidden_item, &ei_lmp_invalid_class, 787 "Invalid class: %u", lmp_class); 788 return tvb_captured_length(tvb); 789 } 790 lmp_object_tree = proto_item_add_subtree(ti, lmp_class_to_subtree(lmp_class)); 791 792 lmp_object_header_tree = proto_tree_add_subtree_format(lmp_object_tree, tvb, offset, 4, 793 lmp_subtree[LMP_TREE_OBJECT_HEADER], &ti2, 794 "Header. Class %d, C-Type %d, Length %d, %s", 795 lmp_class, type, obj_length, 796 negotiable ? "Negotiable" : "Not Negotiable"); 797 798 proto_tree_add_item(lmp_object_header_tree, hf_lmp_negotiable, tvb, offset, 1, ENC_NA); 799 proto_tree_add_item(lmp_object_header_tree, hf_lmp_object_length, tvb, offset+2, 2, ENC_BIG_ENDIAN); 800 proto_tree_add_item(lmp_object_header_tree, hf_lmp_object_class, tvb, offset+1, 1, ENC_BIG_ENDIAN); 801 proto_tree_add_uint(lmp_object_header_tree, hf_lmp_filter[LMPF_VAL_CTYPE], 802 tvb, offset, 1, type); 803 offset2 = offset+4; 804 mylen = obj_length - 4; 805 806 switch (lmp_class) { 807 808 case LMP_CLASS_NULL: 809 break; 810 811 case LMP_CLASS_CCID: 812 switch(type) { 813 814 case 1: 815 l = LMPF_VAL_LOCAL_CCID; 816 proto_item_append_text(ti, ": %d", tvb_get_ntohl(tvb, offset2)); 817 proto_tree_add_item(lmp_object_tree, hf_lmp_filter[l], tvb, 818 offset2, 4, ENC_BIG_ENDIAN); 819 break; 820 821 case 2: 822 l = LMPF_VAL_REMOTE_CCID; 823 proto_item_append_text(ti, ": %d", tvb_get_ntohl(tvb, offset2)); 824 proto_tree_add_item(lmp_object_tree, hf_lmp_filter[l], tvb, 825 offset2, 4, ENC_BIG_ENDIAN); 826 break; 827 default: 828 proto_tree_add_item(lmp_object_tree, hf_lmp_data, tvb, offset2, mylen, ENC_NA); 829 break; 830 } 831 break; 832 833 case LMP_CLASS_NODE_ID: 834 switch(type) { 835 836 case 1: 837 l = LMPF_VAL_LOCAL_NODE_ID; 838 proto_item_append_text(ti, ": %s", tvb_ip_to_str(pinfo->pool, tvb, offset2)); 839 proto_tree_add_item(lmp_object_tree, hf_lmp_filter[l], tvb, 840 offset2, 4, ENC_BIG_ENDIAN); 841 break; 842 843 case 2: 844 l = LMPF_VAL_REMOTE_NODE_ID; 845 proto_item_append_text(ti, ": %s", tvb_ip_to_str(pinfo->pool, tvb, offset2)); 846 proto_tree_add_item(lmp_object_tree, hf_lmp_filter[l], tvb, 847 offset2, 4, ENC_BIG_ENDIAN); 848 break; 849 850 default: 851 proto_tree_add_item(lmp_object_tree, hf_lmp_data, tvb, offset2, mylen, ENC_NA); 852 break; 853 } 854 break; 855 856 case LMP_CLASS_LINK_ID: 857 858 switch(type) { 859 860 case 1: 861 case 2: 862 l = (type == 1)? LMPF_VAL_LOCAL_LINK_ID_IPV4: 863 LMPF_VAL_REMOTE_LINK_ID_IPV4; 864 proto_item_append_text(ti, ": IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset2)); 865 proto_tree_add_item(lmp_object_tree, hf_lmp_filter[l], tvb, 866 offset2, 4, ENC_BIG_ENDIAN); 867 break; 868 869 case 3: 870 case 4: 871 l = (type == 3)? LMPF_VAL_LOCAL_LINK_ID_IPV6: 872 LMPF_VAL_REMOTE_LINK_ID_IPV6; 873 proto_item_append_text(ti, ": IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset2)); 874 proto_tree_add_item(lmp_object_tree, hf_lmp_filter[l], tvb, 875 offset2, 16, ENC_NA); 876 break; 877 case 5: 878 case 6: 879 l = (type == 5)? LMPF_VAL_LOCAL_LINK_ID_UNNUM: 880 LMPF_VAL_REMOTE_LINK_ID_UNNUM; 881 proto_item_append_text(ti, ": Unnumbered %d", 882 tvb_get_ntohl(tvb, offset2)); 883 proto_tree_add_item(lmp_object_tree, hf_lmp_filter[l], tvb, 884 offset2, 4, ENC_BIG_ENDIAN); 885 break; 886 887 default: 888 proto_tree_add_item(lmp_object_tree, hf_lmp_data, tvb, offset2, mylen, ENC_NA); 889 break; 890 } 891 break; 892 893 case LMP_CLASS_INTERFACE_ID: 894 895 switch(type) { 896 897 case 1: 898 case 2: 899 l = (type == 1)? LMPF_VAL_LOCAL_INTERFACE_ID_IPV4: 900 LMPF_VAL_REMOTE_INTERFACE_ID_IPV4; 901 proto_item_append_text(ti, ": IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset2)); 902 proto_tree_add_item(lmp_object_tree, hf_lmp_filter[l], tvb, 903 offset2, 4, ENC_BIG_ENDIAN); 904 break; 905 906 case 3: 907 case 4: 908 l = (type == 3)? LMPF_VAL_LOCAL_INTERFACE_ID_IPV6: 909 LMPF_VAL_REMOTE_INTERFACE_ID_IPV6; 910 proto_item_append_text(ti, ": IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset2)); 911 proto_tree_add_item(lmp_object_tree, hf_lmp_filter[l], tvb, 912 offset2, 16, ENC_NA); 913 break; 914 915 case 5: 916 case 6: 917 l = (type == 5)? LMPF_VAL_LOCAL_INTERFACE_ID_UNNUM: 918 LMPF_VAL_REMOTE_INTERFACE_ID_UNNUM; 919 proto_item_append_text(ti, ": Unnumbered %d", 920 tvb_get_ntohl(tvb, offset2)); 921 proto_tree_add_item(lmp_object_tree, hf_lmp_filter[l], tvb, 922 offset2, 4, ENC_BIG_ENDIAN); 923 break; 924 925 default: 926 proto_tree_add_item(lmp_object_tree, hf_lmp_data, tvb, offset2, mylen, ENC_NA); 927 break; 928 } 929 break; 930 931 case LMP_CLASS_MESSAGE_ID: 932 933 switch(type) { 934 935 case 1: 936 937 l = LMPF_VAL_MESSAGE_ID; 938 proto_item_append_text(ti, ": %d", tvb_get_ntohl(tvb, offset2)); 939 proto_tree_add_item(lmp_object_tree, hf_lmp_filter[l], tvb, 940 offset2, 4, ENC_BIG_ENDIAN); 941 break; 942 943 case 2: 944 l = LMPF_VAL_MESSAGE_ID_ACK; 945 proto_item_append_text(ti, ": %d", tvb_get_ntohl(tvb, offset2)); 946 proto_tree_add_item(lmp_object_tree, hf_lmp_filter[l], tvb, 947 offset2, 4, ENC_BIG_ENDIAN); 948 break; 949 950 default: 951 proto_tree_add_item(lmp_object_tree, hf_lmp_data, tvb, offset2, mylen, ENC_NA); 952 break; 953 } 954 break; 955 956 case LMP_CLASS_CONFIG: 957 958 switch(type) { 959 960 case 1: 961 proto_item_append_text(ti, ": HelloInterval: %d, HelloDeadInterval: %d", 962 tvb_get_ntohs(tvb, offset2), 963 tvb_get_ntohs(tvb, offset2+2)); 964 proto_tree_add_item(lmp_object_tree, 965 hf_lmp_filter[LMPF_VAL_CONFIG_HELLO], 966 tvb, offset2, 2, ENC_BIG_ENDIAN); 967 proto_tree_add_item(lmp_object_tree, 968 hf_lmp_filter[LMPF_VAL_CONFIG_HELLO_DEAD], 969 tvb, offset2+2, 2, ENC_BIG_ENDIAN); 970 break; 971 972 default: 973 proto_tree_add_item(lmp_object_tree, hf_lmp_data, tvb, offset2, mylen, ENC_NA); 974 break; 975 } 976 break; 977 978 case LMP_CLASS_HELLO: 979 980 switch(type) { 981 982 case 1: 983 proto_item_append_text(ti, ": TxSeq %d, RxSeq: %d", 984 tvb_get_ntohl(tvb, offset2), 985 tvb_get_ntohl(tvb, offset2+4)); 986 proto_tree_add_item(lmp_object_tree, 987 hf_lmp_filter[LMPF_VAL_HELLO_TXSEQ], 988 tvb, offset2, 4, ENC_BIG_ENDIAN); 989 proto_tree_add_item(lmp_object_tree, 990 hf_lmp_filter[LMPF_VAL_HELLO_RXSEQ], 991 tvb, offset2+4, 4, ENC_BIG_ENDIAN); 992 break; 993 994 default: 995 proto_tree_add_item(lmp_object_tree, hf_lmp_data, tvb, offset2, mylen, ENC_NA); 996 break; 997 } 998 break; 999 1000 case LMP_CLASS_BEGIN_VERIFY: 1001 1002 switch(type) { 1003 1004 case 1: 1005 { 1006 float transmission_rate; 1007 static int * const verify_flags[] = { 1008 &hf_lmp_filter[LMPF_VAL_BEGIN_VERIFY_FLAGS_ALL_LINKS], 1009 &hf_lmp_filter[LMPF_VAL_BEGIN_VERIFY_FLAGS_LINK_TYPE], 1010 NULL 1011 }; 1012 1013 proto_tree_add_bitmask(lmp_object_tree, tvb, offset2, hf_lmp_filter[LMPF_VAL_BEGIN_VERIFY_FLAGS], lmp_subtree[LMP_TREE_BEGIN_VERIFY_FLAGS], verify_flags, ENC_BIG_ENDIAN); 1014 1015 proto_tree_add_item(lmp_object_tree, hf_lmp_verify_interval, tvb, offset2+2, 2, ENC_BIG_ENDIAN); 1016 proto_tree_add_item(lmp_object_tree, hf_lmp_number_of_data_links, tvb, offset2+4, 4, ENC_BIG_ENDIAN); 1017 proto_tree_add_item(lmp_object_tree, 1018 hf_lmp_filter[LMPF_VAL_BEGIN_VERIFY_ENCTYPE], 1019 tvb, offset2+8, 1, ENC_BIG_ENDIAN); 1020 proto_tree_add_item(lmp_object_tree, hf_lmp_verify_transport_mechanism, tvb, offset2+10, 2, ENC_BIG_ENDIAN); 1021 transmission_rate = tvb_get_ntohieee_float(tvb, offset2+12)*8/1000000; 1022 proto_tree_add_float_format_value(lmp_object_tree, hf_lmp_transmission_rate, tvb, offset2+12, 4, 1023 transmission_rate, "%.3f Mbps", transmission_rate); 1024 proto_tree_add_item(lmp_object_tree, hf_lmp_wavelength, tvb, offset2+16, 4, ENC_BIG_ENDIAN); 1025 } 1026 break; 1027 1028 default: 1029 proto_tree_add_item(lmp_object_tree, hf_lmp_data, tvb, offset2, mylen, ENC_NA); 1030 break; 1031 } 1032 break; 1033 1034 case LMP_CLASS_BEGIN_VERIFY_ACK: 1035 1036 switch(type) { 1037 1038 case 1: 1039 proto_item_append_text(ti, ": VerifyDeadInterval: %d, TransportResponse: 0x%0x", 1040 tvb_get_ntohs(tvb, offset2), 1041 tvb_get_ntohs(tvb, offset2+2)); 1042 proto_tree_add_item(lmp_object_tree, hf_lmp_verifydeadinterval, tvb, offset2, 2, ENC_BIG_ENDIAN); 1043 proto_tree_add_item(lmp_object_tree, hf_lmp_verify_transport_response, tvb, offset2+2, 2, ENC_BIG_ENDIAN); 1044 break; 1045 1046 default: 1047 proto_tree_add_item(lmp_object_tree, hf_lmp_data, tvb, offset2, mylen, ENC_NA); 1048 break; 1049 } 1050 break; 1051 1052 case LMP_CLASS_VERIFY_ID: 1053 1054 switch(type) { 1055 1056 case 1: 1057 proto_item_append_text(ti, ": %d", 1058 tvb_get_ntohl(tvb, offset2)); 1059 proto_tree_add_item(lmp_object_tree, 1060 hf_lmp_filter[LMPF_VAL_VERIFY_ID], 1061 tvb, offset2, 4, 1062 ENC_BIG_ENDIAN); 1063 break; 1064 default: 1065 proto_tree_add_item(lmp_object_tree, hf_lmp_data, tvb, offset2, mylen, ENC_NA); 1066 break; 1067 } 1068 break; 1069 1070 case LMP_CLASS_TE_LINK: 1071 { 1072 static int * const link_flags[] = { 1073 &hf_lmp_filter[LMPF_VAL_TE_LINK_FLAGS_FAULT_MGMT], 1074 &hf_lmp_filter[LMPF_VAL_TE_LINK_FLAGS_LINK_VERIFY], 1075 NULL 1076 }; 1077 1078 ti2 = proto_tree_add_bitmask(lmp_object_tree, tvb, offset2, hf_lmp_filter[LMPF_VAL_TE_LINK_FLAGS], lmp_subtree[LMP_TREE_TE_LINK_FLAGS], link_flags, ENC_NA); 1079 l = tvb_get_guint8(tvb, offset2); 1080 proto_item_append_text(ti2, ": %s%s", 1081 (l&0x01) ? "Fault-Mgmt-Supported " : "", 1082 (l&0x02) ? "Link-Verification-Supported " : ""); 1083 1084 switch(type) { 1085 1086 case 1: 1087 proto_item_append_text(ti, ": IPv4: Local %s, Remote %s", 1088 tvb_ip_to_str(pinfo->pool, tvb, offset2+4), 1089 tvb_ip_to_str(pinfo->pool, tvb, offset2+8)); 1090 proto_tree_add_item(lmp_object_tree, 1091 hf_lmp_filter[LMPF_VAL_TE_LINK_LOCAL_IPV4], 1092 tvb, offset2+4, 4, ENC_BIG_ENDIAN); 1093 proto_tree_add_item(lmp_object_tree, 1094 hf_lmp_filter[LMPF_VAL_TE_LINK_REMOTE_IPV4], 1095 tvb, offset2+8, 4, ENC_BIG_ENDIAN); 1096 break; 1097 1098 case 2: 1099 proto_item_append_text(ti, ": IPv6: Local %s, Remote %s", 1100 tvb_ip6_to_str(pinfo->pool, tvb, offset2+4), 1101 tvb_ip6_to_str(pinfo->pool, tvb, offset2+20)); 1102 proto_tree_add_item(lmp_object_tree, 1103 hf_lmp_filter[LMPF_VAL_TE_LINK_LOCAL_IPV6], 1104 tvb, offset2+4, 16, ENC_NA); 1105 proto_tree_add_item(lmp_object_tree, 1106 hf_lmp_filter[LMPF_VAL_TE_LINK_REMOTE_IPV6], 1107 tvb, offset2+20, 16, ENC_NA); 1108 break; 1109 1110 case 3: 1111 proto_item_append_text(ti, ": Unnumbered: Local %d, Remote %d", 1112 tvb_get_ntohl(tvb, offset2+4), 1113 tvb_get_ntohl(tvb, offset2+8)); 1114 1115 proto_tree_add_item(lmp_object_tree, 1116 hf_lmp_filter[LMPF_VAL_TE_LINK_LOCAL_UNNUM], 1117 tvb, offset2+4, 4, ENC_BIG_ENDIAN); 1118 1119 proto_tree_add_item(lmp_object_tree, 1120 hf_lmp_filter[LMPF_VAL_TE_LINK_REMOTE_UNNUM], 1121 tvb, offset2+8, 4, ENC_BIG_ENDIAN); 1122 break; 1123 default: 1124 proto_tree_add_item(lmp_object_tree, hf_lmp_data, tvb, offset2, mylen, ENC_NA); 1125 break; 1126 } 1127 } 1128 break; 1129 1130 case LMP_CLASS_DATA_LINK: 1131 { 1132 static int * const link_flags[] = { 1133 &hf_lmp_filter[LMPF_VAL_DATA_LINK_FLAGS_PORT], 1134 &hf_lmp_filter[LMPF_VAL_DATA_LINK_FLAGS_ALLOCATED], 1135 NULL 1136 }; 1137 1138 ti2 = proto_tree_add_bitmask(lmp_object_tree, tvb, offset2, hf_lmp_filter[LMPF_VAL_DATA_LINK_FLAGS], lmp_subtree[LMP_TREE_DATA_LINK_FLAGS], link_flags, ENC_NA); 1139 l = tvb_get_guint8(tvb, offset2); 1140 proto_item_append_text(ti2, ": %s%s", 1141 (l&0x01) ? "Interface-Type-Port " : "Interface-Type-Component-Link ", 1142 (l&0x02) ? "Allocated " : "Unallocated "); 1143 switch(type) { 1144 1145 case 1: 1146 proto_item_append_text(ti, ": IPv4: Local %s, Remote %s", 1147 tvb_ip_to_str(pinfo->pool, tvb, offset2+4), 1148 tvb_ip_to_str(pinfo->pool, tvb, offset2+8)); 1149 1150 proto_tree_add_item(lmp_object_tree, 1151 hf_lmp_filter[LMPF_VAL_DATA_LINK_LOCAL_IPV4], 1152 tvb, offset2+4, 4, ENC_BIG_ENDIAN); 1153 1154 proto_tree_add_item(lmp_object_tree, 1155 hf_lmp_filter[LMPF_VAL_DATA_LINK_REMOTE_IPV4], 1156 tvb, offset2+8, 4, ENC_BIG_ENDIAN); 1157 l = 12; 1158 break; 1159 1160 case 2: 1161 proto_item_append_text(ti, ": IPv6: Local %s, Remote %s", 1162 tvb_ip6_to_str(pinfo->pool, tvb, offset2+4), 1163 tvb_ip6_to_str(pinfo->pool, tvb, offset2+8)); 1164 proto_tree_add_item(lmp_object_tree, hf_lmp_data_link_local_id_ipv6, tvb, offset2+4, 16, ENC_NA); 1165 proto_tree_add_item(lmp_object_tree, hf_lmp_data_link_remote_id_ipv6, tvb, offset2+20, 16, ENC_NA); 1166 l = 36; 1167 break; 1168 1169 case 3: 1170 proto_item_append_text(ti, ": Unnumbered: Local %d, Remote %d", 1171 tvb_get_ntohl(tvb, offset2+4), 1172 tvb_get_ntohl(tvb, offset2+8)); 1173 proto_tree_add_item(lmp_object_tree, 1174 hf_lmp_filter[LMPF_VAL_DATA_LINK_LOCAL_UNNUM], 1175 tvb, offset2+4, 4, ENC_BIG_ENDIAN); 1176 proto_tree_add_item(lmp_object_tree, hf_lmp_filter[LMPF_VAL_DATA_LINK_REMOTE_UNNUM], 1177 tvb, offset2+8, 4, ENC_BIG_ENDIAN); 1178 l = 12; 1179 break; 1180 1181 default: 1182 proto_tree_add_item(lmp_object_tree, hf_lmp_data, tvb, offset2, mylen, ENC_NA); 1183 break; 1184 } 1185 1186 while (l < obj_length - 4) { 1187 float bandwidth; 1188 1189 mylen = tvb_get_guint8(tvb, offset2+l+1); 1190 ti2 = proto_tree_add_item(lmp_object_tree, 1191 hf_lmp_filter[LMPF_VAL_DATA_LINK_SUBOBJ], 1192 tvb, offset2+l, mylen, ENC_NA); 1193 lmp_subobj_tree = proto_item_add_subtree(ti2, 1194 lmp_subtree[LMP_TREE_DATA_LINK_SUBOBJ]); 1195 proto_tree_add_item(lmp_subobj_tree, hf_lmp_subobject_type, tvb, offset2+l, 1, ENC_BIG_ENDIAN); 1196 1197 proto_tree_add_item(lmp_subobj_tree, hf_lmp_subobject_length, tvb, offset2+l+1, 1, ENC_BIG_ENDIAN); 1198 switch(tvb_get_guint8(tvb, offset2+l)) { 1199 1200 case 1: 1201 1202 proto_item_set_text(ti2, "Interface Switching Capability: " 1203 "Switching Cap: %s, Encoding Type: %s, " 1204 "Min BW: %.3f Mbps, Max BW: %.3f Mbps", 1205 rval_to_str(tvb_get_guint8(tvb, offset2+l+2), 1206 gmpls_switching_type_rvals, "Unknown (%d)"), 1207 rval_to_str(tvb_get_guint8(tvb, offset2+l+3), 1208 gmpls_lsp_enc_rvals, "Unknown (%d)"), 1209 tvb_get_ntohieee_float(tvb, offset2+l+4)*8/1000000, 1210 tvb_get_ntohieee_float(tvb, offset2+l+8)*8/1000000); 1211 proto_tree_add_item(lmp_subobj_tree, 1212 hf_lmp_filter[LMPF_VAL_DATA_LINK_SUBOBJ_SWITCHING_TYPE], 1213 tvb, offset2+l+2, 1, ENC_BIG_ENDIAN); 1214 proto_tree_add_item(lmp_subobj_tree, 1215 hf_lmp_filter[LMPF_VAL_DATA_LINK_SUBOBJ_LSP_ENCODING], 1216 tvb, offset2+l+3, 1, ENC_BIG_ENDIAN); 1217 bandwidth = tvb_get_ntohieee_float(tvb, offset2+l+4)*8/1000000; 1218 proto_tree_add_float_format_value(lmp_subobj_tree, hf_lmp_minimum_reservable_bandwidth, tvb, offset2+l+4, 4, 1219 bandwidth, "%.3f Mbps", bandwidth); 1220 bandwidth = tvb_get_ntohieee_float(tvb, offset2+l+8)*8/1000000; 1221 proto_tree_add_float_format_value(lmp_subobj_tree, hf_lmp_maximum_reservable_bandwidth, tvb, offset2+l+8, 4, 1222 bandwidth, "%.3f Mbps", bandwidth); 1223 break; 1224 1225 case 2: 1226 proto_item_set_text(ti2, "Wavelength: %d", 1227 tvb_get_ntohl(tvb, offset2+l+2)); 1228 proto_tree_add_item(lmp_subobj_tree, hf_lmp_wavelength, tvb, offset2+l+4, 4, ENC_BIG_ENDIAN); 1229 break; 1230 1231 default: 1232 proto_tree_add_item(lmp_subobj_tree, hf_lmp_data, tvb, offset2+l, 1233 tvb_get_guint8(tvb, offset2+l+1), ENC_NA); 1234 break; 1235 } 1236 if (tvb_get_guint8(tvb, offset2+l+1) == 0) 1237 break; 1238 1239 l += tvb_get_guint8(tvb, offset2+l+1); 1240 } 1241 } 1242 break; 1243 1244 case LMP_CLASS_CHANNEL_STATUS: 1245 1246 k = 0; j = 0; 1247 1248 switch(type) { 1249 1250 case 1: 1251 case 3: 1252 k = 8; break; 1253 1254 case 2: 1255 k = 20; break; 1256 } 1257 1258 if (!k) 1259 break; 1260 1261 for (l=0; l<obj_length - 4; ) { 1262 1263 lmp_subobj_tree = proto_tree_add_subtree(lmp_object_tree, tvb, offset2+l, k, 1264 lmp_subtree[LMP_TREE_CHANNEL_STATUS_ID], &ti2, "Interface-Id"); 1265 switch(type) { 1266 1267 case 1: 1268 if (j < 4) 1269 proto_item_append_text(ti, ": [IPv4-%s", 1270 tvb_ip_to_str(pinfo->pool, tvb, offset2+l)); 1271 proto_item_append_text(ti2, ": IPv4 %s", 1272 tvb_ip_to_str(pinfo->pool, tvb, offset2+l)); 1273 proto_tree_add_item(lmp_subobj_tree, hf_lmp_interface_id_ipv4, tvb, offset2+l, 4, ENC_BIG_ENDIAN); 1274 l += 4; 1275 break; 1276 1277 case 2: 1278 if (j < 4) 1279 proto_item_append_text(ti, ": [IPv6-%s", tvb_ip6_to_str(pinfo->pool, tvb, offset2+l)); 1280 proto_item_append_text(ti2, ": IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset2+l)); 1281 proto_tree_add_item(lmp_subobj_tree, hf_lmp_interface_id_ipv6, tvb, offset2, 16, ENC_NA); 1282 l += 16; 1283 break; 1284 1285 case 3: 1286 if (j < 4) 1287 proto_item_append_text(ti, ": [Unnum-%d", 1288 tvb_get_ntohl(tvb, offset2+l)); 1289 proto_item_append_text(ti, ": Unnumbered %d", 1290 tvb_get_ntohl(tvb, offset2+l)); 1291 proto_tree_add_item(lmp_subobj_tree, hf_lmp_interface_id_unnumbered, tvb, offset2+l, 4, ENC_BIG_ENDIAN); 1292 l += 4; 1293 break; 1294 1295 default: 1296 proto_tree_add_item(lmp_object_tree, hf_lmp_data, tvb, offset2+l, obj_length-4-l, ENC_NA); 1297 break; 1298 } 1299 if (l == obj_length - 4) break; 1300 1301 proto_tree_add_item(lmp_subobj_tree, hf_lmp_link, tvb, offset2+l, 4, ENC_NA); 1302 if (j < 4) 1303 proto_item_append_text(ti, "-%s,%s], ", 1304 tvb_get_guint8(tvb, offset2+l) & 0x80 ? "Act" : "NA", 1305 val_to_str(tvb_get_ntohl(tvb, offset2+l) & 0x7fffffff, 1306 channel_status_short_str, "UNK (%u).")); 1307 proto_item_append_text(ti2, ": %s, ", 1308 tvb_get_guint8(tvb, offset2+l) & 0x80 ? "Active" : "Not Active"); 1309 proto_tree_add_item(lmp_subobj_tree, hf_lmp_channel_status, tvb, offset2+l, 4, ENC_BIG_ENDIAN); 1310 proto_item_append_text(ti2, "%s", val_to_str(tvb_get_ntohl(tvb, offset2+l) & 0x7fffffff, 1311 channel_status_str, "Unknown (%u). ")); 1312 j++; 1313 l += 4; 1314 if (j==4 && l < obj_length - 4) 1315 proto_item_append_text(ti, " ..."); 1316 } 1317 break; 1318 1319 case LMP_CLASS_CHANNEL_STATUS_REQUEST: 1320 for (l=0; l<obj_length - 4; ) { 1321 switch(type) { 1322 case 1: 1323 proto_tree_add_item(lmp_object_tree, hf_lmp_filter[LMPF_VAL_CHANNEL_STATUS_INTERFACE_ID_IPV4], 1324 tvb, offset2+l, 4, ENC_BIG_ENDIAN); 1325 l += 4; 1326 break; 1327 1328 case 2: 1329 proto_tree_add_item(lmp_object_tree, hf_lmp_filter[LMPF_VAL_CHANNEL_STATUS_INTERFACE_ID_IPV6], 1330 tvb, offset2+l, 16, ENC_NA); 1331 l += 16; 1332 break; 1333 1334 case 3: 1335 proto_tree_add_item(lmp_object_tree, hf_lmp_filter[LMPF_VAL_CHANNEL_STATUS_INTERFACE_ID_UNNUM], 1336 tvb, offset2+l, 4, ENC_BIG_ENDIAN); 1337 l += 4; 1338 break; 1339 1340 default: 1341 proto_tree_add_item(lmp_object_tree, hf_lmp_data, tvb, offset2+l, obj_length-4-l, ENC_NA); 1342 l = obj_length - 4; 1343 break; 1344 } 1345 } 1346 break; 1347 1348 case LMP_CLASS_ERROR: 1349 l = tvb_get_ntohl(tvb, offset2); 1350 ti2 = proto_tree_add_uint(lmp_object_tree, hf_lmp_filter[LMPF_VAL_ERROR], 1351 tvb, offset2, 4, l); 1352 1353 switch(type) { 1354 1355 case 1: 1356 { 1357 static int * const error_flags[] = { 1358 &hf_lmp_filter[LMPF_VAL_ERROR_VERIFY_UNSUPPORTED_LINK], 1359 &hf_lmp_filter[LMPF_VAL_ERROR_VERIFY_UNWILLING], 1360 &hf_lmp_filter[LMPF_VAL_ERROR_VERIFY_TRANSPORT], 1361 &hf_lmp_filter[LMPF_VAL_ERROR_VERIFY_TE_LINK_ID], 1362 NULL 1363 }; 1364 1365 proto_tree_add_bitmask(lmp_object_tree, tvb, offset2, hf_lmp_filter[LMPF_VAL_ERROR], lmp_subtree[LMP_TREE_ERROR_FLAGS], error_flags, ENC_NA); 1366 1367 proto_item_append_text(ti, ": BEGIN_VERIFY_ERROR: %s%s%s%s", 1368 (l&0x01) ? "Unsupported-Link " : "", 1369 (l&0x02) ? "Unwilling" : "", 1370 (l&0x04) ? "Unsupported-Transport" : "", 1371 (l&0x08) ? "TE-Link-ID" : ""); 1372 } 1373 break; 1374 1375 case 2: 1376 { 1377 static int * const error_flags[] = { 1378 &hf_lmp_filter[LMPF_VAL_ERROR_SUMMARY_BAD_PARAMETERS], 1379 &hf_lmp_filter[LMPF_VAL_ERROR_SUMMARY_RENEGOTIATE], 1380 &hf_lmp_filter[LMPF_VAL_ERROR_SUMMARY_BAD_TE_LINK], 1381 &hf_lmp_filter[LMPF_VAL_ERROR_SUMMARY_BAD_DATA_LINK], 1382 &hf_lmp_filter[LMPF_VAL_ERROR_SUMMARY_UNKNOWN_TEL_CTYPE], 1383 &hf_lmp_filter[LMPF_VAL_ERROR_SUMMARY_UNKNOWN_DL_CTYPE], 1384 NULL 1385 }; 1386 1387 proto_tree_add_bitmask(lmp_object_tree, tvb, offset2, hf_lmp_filter[LMPF_VAL_ERROR], lmp_subtree[LMP_TREE_ERROR_FLAGS], error_flags, ENC_NA); 1388 1389 proto_item_append_text(ti, ": LINK_SUMMARY_ERROR: %s%s%s%s%s%s", 1390 (l&0x01) ? "Unacceptable-Params " : "", 1391 (l&0x02) ? "Renegotiate" : "", 1392 (l&0x04) ? "Bad-TE-Link" : "", 1393 (l&0x08) ? "Bad-Data-Link" : "", 1394 (l&0x10) ? "Bad-TE-Link-CType" : "", 1395 (l&0x20) ? "Bad-Data-Link-CType" : ""); 1396 } 1397 break; 1398 1399 case 3: 1400 { 1401 static int * const error_flags[] = { 1402 &hf_lmp_filter[LMPF_VAL_ERROR_TRACE_UNSUPPORTED_TYPE], 1403 &hf_lmp_filter[LMPF_VAL_ERROR_TRACE_INVALID_MSG], 1404 &hf_lmp_filter[LMPF_VAL_ERROR_TRACE_UNKNOWN_CTYPE], 1405 NULL 1406 }; 1407 1408 proto_tree_add_bitmask(lmp_object_tree, tvb, offset2, hf_lmp_filter[LMPF_VAL_ERROR], lmp_subtree[LMP_TREE_ERROR_FLAGS], error_flags, ENC_NA); 1409 1410 proto_item_append_text(ti, ": TRACE_ERROR: %s%s%s", 1411 (l&0x01) ? "Unsupported Trace Type " : "", 1412 (l&0x02) ? "Invalid Trace Message" : "", 1413 (l&0x10) ? "Unknown Object C-Type" : ""); 1414 } 1415 break; 1416 1417 case 4: 1418 { 1419 static int * const error_flags[] = { 1420 &hf_lmp_filter[LMPF_VAL_ERROR_LAD_AREA_ID_MISMATCH], 1421 &hf_lmp_filter[LMPF_VAL_ERROR_LAD_TCP_ID_MISMATCH], 1422 &hf_lmp_filter[LMPF_VAL_ERROR_LAD_DA_DCN_MISMATCH], 1423 &hf_lmp_filter[LMPF_VAL_ERROR_LAD_CAPABILITY_MISMATCH], 1424 &hf_lmp_filter[LMPF_VAL_ERROR_LAD_UNKNOWN_CTYPE], 1425 NULL 1426 }; 1427 1428 proto_tree_add_bitmask(lmp_object_tree, tvb, offset2, hf_lmp_filter[LMPF_VAL_ERROR], lmp_subtree[LMP_TREE_ERROR_FLAGS], error_flags, ENC_NA); 1429 1430 proto_item_append_text(ti, ": LAD_ERROR: %s%s%s%s%s", 1431 (l&0x01) ? "Domain Routing Area ID mismatch" : "", 1432 (l&0x02) ? "TCP ID mismatch" : "", 1433 (l&0x04) ? "DA DCN mismatch" : "", 1434 (l&0x08) ? "Capability mismatch" : "", 1435 (l&0x10) ? "Unknown Object C-Type" : ""); 1436 } 1437 break; 1438 1439 default: 1440 proto_item_append_text(ti, ": UNKNOWN_ERROR (%d): 0x%04x", type, l); 1441 proto_tree_add_item(lmp_object_tree, hf_lmp_data, tvb, offset2, mylen, ENC_NA); 1442 break; 1443 } 1444 break; 1445 1446 case LMP_CLASS_TRACE: 1447 switch (type) { 1448 case 1: 1449 l = tvb_get_ntohs(tvb, offset2); 1450 proto_tree_add_uint(lmp_object_tree, 1451 hf_lmp_filter[LMPF_VAL_TRACE_LOCAL_TYPE], 1452 tvb, offset2, 2, l); 1453 proto_item_append_text(lmp_object_tree, ": %s", 1454 val_to_str(l, lmp_trace_type_str, "Unknown (%d)")); 1455 1456 l = tvb_get_ntohs(tvb, offset2+2); 1457 trace_item = proto_tree_add_uint(lmp_object_tree, 1458 hf_lmp_filter[LMPF_VAL_TRACE_LOCAL_LEN], 1459 tvb, offset2+2, 2, l); 1460 if (l && l <= obj_length - 8) { 1461 proto_item_append_text(lmp_object_tree, " = %s", 1462 tvb_format_text(pinfo->pool, tvb, offset2+4, l)); 1463 proto_tree_add_string(lmp_object_tree, 1464 hf_lmp_filter[LMPF_VAL_TRACE_LOCAL_MSG], 1465 tvb, offset2+4, l, tvb_format_text(pinfo->pool, tvb, 1466 offset2+4,l)); 1467 } 1468 else 1469 expert_add_info(pinfo, trace_item, &ei_lmp_trace_len); 1470 break; 1471 1472 case 2: 1473 l = tvb_get_ntohs(tvb, offset2); 1474 proto_tree_add_uint(lmp_object_tree, 1475 hf_lmp_filter[LMPF_VAL_TRACE_REMOTE_TYPE], 1476 tvb, offset2, 2, l); 1477 proto_item_append_text(lmp_object_tree, ": %s", 1478 val_to_str(l, lmp_trace_type_str, "Unknown (%d)")); 1479 1480 l = tvb_get_ntohs(tvb, offset2+2); 1481 proto_tree_add_uint(lmp_object_tree, 1482 hf_lmp_filter[LMPF_VAL_TRACE_REMOTE_LEN], 1483 tvb, offset2+2, 2, l); 1484 proto_item_append_text(lmp_object_tree, " = %s", 1485 tvb_format_text(pinfo->pool, tvb, offset2+4, l)); 1486 proto_tree_add_string(lmp_object_tree, 1487 hf_lmp_filter[LMPF_VAL_TRACE_REMOTE_MSG], 1488 tvb, offset2+4, l, tvb_format_text(pinfo->pool, tvb, offset2+4,l)); 1489 break; 1490 1491 default: 1492 proto_tree_add_item(lmp_object_tree, hf_lmp_data, tvb, offset2, mylen, ENC_NA); 1493 break; 1494 1495 } 1496 break; 1497 1498 case LMP_CLASS_TRACE_REQ: 1499 switch (type) { 1500 case 1: 1501 l = tvb_get_ntohs(tvb, offset2); 1502 proto_tree_add_uint(lmp_object_tree, 1503 hf_lmp_filter[LMPF_VAL_TRACE_REQ_TYPE], 1504 tvb, offset2, 2, l); 1505 proto_item_append_text(lmp_object_tree, ": %s", 1506 val_to_str(l, lmp_trace_type_str, "Unknown (%d)")); 1507 break; 1508 1509 default: 1510 proto_tree_add_item(lmp_object_tree, hf_lmp_data, tvb, offset2, mylen, ENC_NA); 1511 break; 1512 1513 } 1514 break; 1515 1516 case LMP_CLASS_SERVICE_CONFIG: 1517 1518 /* Support for the ServiceConfig object defined in the UNI 1.0 spec */ 1519 switch (type) { 1520 1521 case 1: 1522 { 1523 1524 static int * const sp_flags[] = { 1525 &hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_SP_FLAGS_RSVP], 1526 &hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_SP_FLAGS_LDP], 1527 NULL 1528 }; 1529 1530 /* Supported Signaling Protocols Object */ 1531 1532 /* Signaling Protocols */ 1533 proto_tree_add_bitmask(lmp_object_tree, tvb, offset2, hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_SP_FLAGS], lmp_subtree[LMP_TREE_SERVICE_CONFIG_SP_FLAGS], sp_flags, ENC_NA); 1534 l = tvb_get_guint8(tvb, offset2); 1535 1536 proto_item_append_text(ti2, ": %s %s", 1537 (l & 0x01) ? "RSVP-based UNI signaling supported " : "", 1538 (l & 0x02) ? "LDP-based UNI signaling supported " : ""); 1539 1540 /* UNI version */ 1541 proto_tree_add_item(lmp_object_tree, hf_lmp_uni_version, tvb, offset2+1, 1, ENC_BIG_ENDIAN); 1542 } 1543 break; 1544 1545 case 2: 1546 { 1547 static int * const tp_flags[] = { 1548 &hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_CPSA_TP_FLAGS_PATH_OVERHEAD], 1549 &hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_CPSA_TP_FLAGS_LINE_OVERHEAD], 1550 &hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_CPSA_TP_FLAGS_SECTION_OVERHEAD], 1551 NULL 1552 }; 1553 1554 static int * const cct_flags[] = { 1555 &hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_CPSA_CCT_FLAGS_CC_SUPPORTED], 1556 NULL 1557 }; 1558 1559 /* Client Port-Level Service Attributes Object */ 1560 1561 /* Link Type */ 1562 proto_tree_add_item(lmp_object_tree, hf_lmp_link_type, tvb, offset2, 1, ENC_BIG_ENDIAN); 1563 1564 proto_item_append_text(lmp_object_tree, "%s", 1565 val_to_str(tvb_get_guint8(tvb, offset2), 1566 service_attribute_link_type_str, 1567 "Unknown (%u). ")); 1568 1569 l = tvb_get_guint8(tvb, offset2+1); 1570 /* Signal type for SDH */ 1571 if (l == LMP_CLASS_SERVICE_CONFIG_CPSA_SIGNAL_TYPES_SDH) { 1572 /* Signal types for an SDH link */ 1573 proto_tree_add_item(lmp_object_tree, hf_lmp_signal_types_sdh, tvb, offset2+1, 1, ENC_BIG_ENDIAN); 1574 1575 proto_item_append_text(lmp_object_tree, "%s", 1576 val_to_str(tvb_get_guint8(tvb, offset2+1), 1577 service_attribute_signal_types_sdh_str, 1578 "Unknown (%u). ")); 1579 } 1580 1581 if (l == LMP_CLASS_SERVICE_CONFIG_CPSA_SIGNAL_TYPES_SONET) { 1582 /* Signal types for a SONET link */ 1583 proto_tree_add_item(lmp_object_tree, hf_lmp_signal_types_sonet, tvb, offset2+1, 1, ENC_BIG_ENDIAN); 1584 1585 proto_item_append_text(lmp_object_tree, "%s", 1586 val_to_str(tvb_get_guint8(tvb, offset2+1), 1587 service_attribute_signal_types_sonet_str, 1588 "Unknown (%u). ")); 1589 } 1590 1591 /* TP Transparency */ 1592 proto_tree_add_bitmask(lmp_object_tree, tvb, offset2+2, hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_CPSA_TP_FLAGS], lmp_subtree[LMP_TREE_SERVICE_CONFIG_CPSA_TP_FLAGS], tp_flags, ENC_NA); 1593 1594 l = tvb_get_guint8(tvb, offset2+2); 1595 proto_item_append_text(ti2, ": %s%s%s", 1596 (l & 0x01) ? "Path/VC Overhead Transparency " : "", 1597 (l & 0x02) ? "Line/MS Overhead Transparency " : "", 1598 (l & 0x04) ? "Section/RS Overhead Transparency " : ""); 1599 1600 /* Contiguous Concatenation Types */ 1601 proto_tree_add_bitmask(lmp_object_tree, tvb, offset2+3, hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_CPSA_CCT_FLAGS], lmp_subtree[LMP_TREE_SERVICE_CONFIG_CPSA_CCT_FLAGS], cct_flags, ENC_NA); 1602 1603 /* Min and Max NCC */ 1604 proto_item_append_text(ti, ": Minimum NCC: %d, Maximum NCC: %d", 1605 tvb_get_ntohs(tvb, offset2+4), 1606 tvb_get_ntohs(tvb, offset2+6)); 1607 1608 proto_tree_add_item(lmp_object_tree, 1609 hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_CPSA_MIN_NCC], 1610 tvb, offset2+4, 2, ENC_BIG_ENDIAN); 1611 1612 proto_tree_add_item(lmp_object_tree, 1613 hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_CPSA_MAX_NCC], 1614 tvb, offset2+6, 2, ENC_BIG_ENDIAN); 1615 1616 /* Min and Max NVC */ 1617 proto_item_append_text(ti, ": Minimum NVC: %d, Maximum NVC: %d", 1618 tvb_get_ntohs(tvb, offset2+8), 1619 tvb_get_ntohs(tvb, offset2+10)); 1620 1621 proto_tree_add_item(lmp_object_tree, 1622 hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_CPSA_MIN_NVC], 1623 tvb, offset2+8, 2, ENC_BIG_ENDIAN); 1624 1625 proto_tree_add_item(lmp_object_tree, 1626 hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_CPSA_MAX_NVC], 1627 tvb, offset2+10, 2, ENC_BIG_ENDIAN); 1628 1629 /* Local interface ID */ 1630 proto_item_append_text(ti, ": Local Interface ID %s", 1631 tvb_ip_to_str(pinfo->pool, tvb, offset2+12)); 1632 1633 proto_tree_add_item(lmp_object_tree, 1634 hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_CPSA_INTERFACE_ID], 1635 tvb, offset2+12, 4, ENC_BIG_ENDIAN); 1636 } 1637 break; 1638 1639 case 3: 1640 { 1641 static int * const t_flags[] = { 1642 &hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_NSA_TRANSPARENCY_FLAGS_SOH], 1643 &hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_NSA_TRANSPARENCY_FLAGS_LOH], 1644 NULL 1645 }; 1646 1647 static int * const tcm_flags[] = { 1648 &hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_NSA_TCM_FLAGS_TCM_SUPPORTED], 1649 NULL 1650 }; 1651 1652 /* Network Transparency Support and TCM Monitoring Object */ 1653 1654 /* Transparency */ 1655 proto_tree_add_bitmask(lmp_object_tree, tvb, offset2, hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_NSA_TRANSPARENCY_FLAGS], lmp_subtree[LMP_TREE_SERVICE_CONFIG_NSA_TRANSPARENCY_FLAGS], t_flags, ENC_BIG_ENDIAN); 1656 l = tvb_get_ntohl(tvb, offset2); 1657 proto_item_append_text(ti2, ": %s %s", 1658 (l & 0x01) ? "Standard SOH/RSOH transparency supported " : "", 1659 (l & 0x02) ? "Standard LOH/MSOH transparency supported " : ""); 1660 1661 /* TCM Monitoring */ 1662 proto_tree_add_bitmask(lmp_object_tree, tvb, offset2+7, hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_NSA_TCM_FLAGS], lmp_subtree[LMP_TREE_SERVICE_CONFIG_NSA_TCM_FLAGS], tcm_flags, ENC_BIG_ENDIAN); 1663 l = tvb_get_guint8(tvb, offset2+7); 1664 proto_item_append_text(ti2, ": %s", 1665 (l & 0x01) ? "Transparent Support of TCM available " : ""); 1666 } 1667 break; 1668 1669 case 4: 1670 { 1671 static int * const diversity_flags[] = { 1672 &hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_NSA_NETWORK_DIVERSITY_FLAGS_NODE], 1673 &hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_NSA_NETWORK_DIVERSITY_FLAGS_LINK], 1674 &hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_NSA_NETWORK_DIVERSITY_FLAGS_SRLG], 1675 NULL 1676 }; 1677 1678 /* Network Diversity Object */ 1679 proto_tree_add_bitmask(lmp_object_tree, tvb, offset2+3, hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_NSA_NETWORK_DIVERSITY_FLAGS], lmp_subtree[LMP_TREE_SERVICE_CONFIG_NSA_NETWORK_DIVERSITY_FLAGS], diversity_flags, ENC_BIG_ENDIAN); 1680 l = tvb_get_guint8(tvb,offset2+3); 1681 proto_item_append_text(ti2, ": %s%s%s", 1682 (l & 0x01) ? "Node Diversity is supported " : "", 1683 (l & 0x02) ? "Link Diversity is supported " : "", 1684 (l & 0x04) ? "SRLG Diversity is supported " : ""); 1685 1686 } 1687 break; 1688 1689 default: 1690 /* Unknown type in Service Config object */ 1691 proto_tree_add_item(lmp_object_tree, hf_lmp_data, tvb, offset2, mylen, ENC_NA); 1692 break; 1693 } 1694 break; 1695 1696 case LMP_CLASS_DA_DCN_ADDRESS: 1697 switch(type) { 1698 1699 case 1: 1700 proto_item_append_text(ti, ": %s", tvb_ip_to_str(pinfo->pool, tvb, offset2)); 1701 proto_tree_add_item(lmp_object_tree, hf_lmp_filter[LMPF_VAL_LOCAL_DA_DCN_ADDR], tvb, 1702 offset2, 4, ENC_BIG_ENDIAN); 1703 break; 1704 1705 case 2: 1706 proto_item_append_text(ti, ": %s", tvb_ip_to_str(pinfo->pool, tvb, offset2)); 1707 proto_tree_add_item(lmp_object_tree, hf_lmp_filter[LMPF_VAL_REMOTE_DA_DCN_ADDR], tvb, 1708 offset2, 4, ENC_BIG_ENDIAN); 1709 break; 1710 1711 default: 1712 proto_tree_add_item(lmp_object_tree, hf_lmp_data, tvb, offset2, mylen, ENC_NA); 1713 break; 1714 } 1715 break; 1716 1717 1718 case LMP_CLASS_LOCAL_LAD_INFO: 1719 switch(type) { 1720 case 1: 1721 proto_item_append_text(ti, ": IPv4"); 1722 proto_tree_add_item(lmp_object_tree, 1723 hf_lmp_filter[LMPF_VAL_LOCAL_LAD_INFO_NODE_ID], 1724 tvb, offset2, 4, ENC_BIG_ENDIAN); 1725 proto_tree_add_item(lmp_object_tree, 1726 hf_lmp_filter[LMPF_VAL_LOCAL_LAD_INFO_AREA_ID], 1727 tvb, offset2+4, 4, ENC_BIG_ENDIAN); 1728 proto_tree_add_item(lmp_object_tree, 1729 hf_lmp_filter[LMPF_VAL_LOCAL_LAD_INFO_TE_LINK_ID], 1730 tvb, offset2+8, 4, ENC_BIG_ENDIAN); 1731 proto_tree_add_item(lmp_object_tree, 1732 hf_lmp_filter[LMPF_VAL_LOCAL_LAD_INFO_COMPONENT_ID], 1733 tvb, offset2+12, 4, ENC_BIG_ENDIAN); 1734 proto_tree_add_item(lmp_object_tree, 1735 hf_lmp_filter[LMPF_VAL_LOCAL_LAD_INFO_SC_PC_ID], 1736 tvb, offset2+16, 4, ENC_BIG_ENDIAN); 1737 proto_tree_add_item(lmp_object_tree, 1738 hf_lmp_filter[LMPF_VAL_LOCAL_LAD_INFO_SC_PC_ADDR], 1739 tvb, offset2+20, 4, ENC_BIG_ENDIAN); 1740 l = 24; 1741 while (l < obj_length - 4) { 1742 mylen = tvb_get_guint8(tvb, offset2+l+1); 1743 ti2 = proto_tree_add_item(lmp_object_tree, 1744 hf_lmp_filter[LMPF_VAL_LAD_INFO_SUBOBJ], 1745 tvb, offset2+l, mylen, ENC_NA); 1746 lmp_subobj_tree = proto_item_add_subtree(ti2, 1747 lmp_subtree[LMP_TREE_LAD_INFO_SUBOBJ]); 1748 proto_tree_add_item(lmp_subobj_tree, hf_lmp_subobject_type, tvb, offset2+l, 1, ENC_BIG_ENDIAN); 1749 1750 if (mylen == 0 || l + mylen > obj_length - 4) { 1751 proto_tree_add_uint_format_value(lmp_object_tree, hf_lmp_subobject_length, tvb, offset2+l+1, 1, 1752 mylen, "%d (Invalid)", mylen); 1753 break; 1754 } 1755 else 1756 proto_tree_add_item(lmp_subobj_tree, hf_lmp_subobject_length, tvb, offset2+l+1, 1, ENC_BIG_ENDIAN); 1757 1758 switch(tvb_get_guint8(tvb, offset2+l)) { 1759 1760 case 250: 1761 proto_item_set_text(ti2, "Primary Routing Controller: " 1762 "Area ID: %s, RC PC ID: %s, " 1763 "RC PC Addr: %s", 1764 tvb_ip_to_str(pinfo->pool, tvb, offset2+l+4), 1765 tvb_ip_to_str(pinfo->pool, tvb, offset2+l+8), 1766 tvb_ip_to_str(pinfo->pool, tvb, offset2+l+12)); 1767 proto_tree_add_item(lmp_subobj_tree, 1768 hf_lmp_filter[LMPF_VAL_LAD_INFO_SUBOBJ_PRI_AREA_ID], 1769 tvb, offset2+l+4, 4, ENC_BIG_ENDIAN); 1770 proto_tree_add_item(lmp_subobj_tree, 1771 hf_lmp_filter[LMPF_VAL_LAD_INFO_SUBOBJ_PRI_RC_PC_ID], 1772 tvb, offset2+l+8, 4, ENC_BIG_ENDIAN); 1773 proto_tree_add_item(lmp_subobj_tree, 1774 hf_lmp_filter[LMPF_VAL_LAD_INFO_SUBOBJ_PRI_RC_PC_ADDR], 1775 tvb, offset2+l+12, 4, ENC_BIG_ENDIAN); 1776 break; 1777 1778 case 251: 1779 proto_item_set_text(ti2, "Secondary Routing Controller: " 1780 "Area ID: %s, RC PC ID: %s, " 1781 "RC PC Addr: %s", 1782 tvb_ip_to_str(pinfo->pool, tvb, offset2+l+4), 1783 tvb_ip_to_str(pinfo->pool, tvb, offset2+l+8), 1784 tvb_ip_to_str(pinfo->pool, tvb, offset2+l+12)); 1785 proto_tree_add_item(lmp_subobj_tree, 1786 hf_lmp_filter[LMPF_VAL_LAD_INFO_SUBOBJ_SEC_AREA_ID], 1787 tvb, offset2+l+4, 4, ENC_BIG_ENDIAN); 1788 proto_tree_add_item(lmp_subobj_tree, 1789 hf_lmp_filter[LMPF_VAL_LAD_INFO_SUBOBJ_SEC_RC_PC_ID], 1790 tvb, offset2+l+8, 4, ENC_BIG_ENDIAN); 1791 proto_tree_add_item(lmp_subobj_tree, 1792 hf_lmp_filter[LMPF_VAL_LAD_INFO_SUBOBJ_SEC_RC_PC_ADDR], 1793 tvb, offset2+l+12, 4, ENC_BIG_ENDIAN); 1794 break; 1795 1796 case 252: 1797 proto_item_set_text(ti2, "SONET/SDH Layer Capability: " 1798 "Switching Cap: %s, Encoding Type: %s", 1799 rval_to_str(tvb_get_guint8(tvb, offset2+l+4), 1800 gmpls_switching_type_rvals, "Unknown (%d)"), 1801 rval_to_str(tvb_get_guint8(tvb, offset2+l+5), 1802 gmpls_lsp_enc_rvals, "Unknown (%d)")); 1803 proto_tree_add_item(lmp_subobj_tree, 1804 hf_lmp_filter[LMPF_VAL_LAD_INFO_SUBOBJ_SWITCHING_TYPE], 1805 tvb, offset2+l+4, 1, ENC_BIG_ENDIAN); 1806 proto_tree_add_item(lmp_subobj_tree, 1807 hf_lmp_filter[LMPF_VAL_LAD_INFO_SUBOBJ_LSP_ENCODING], 1808 tvb, offset2+l+5, 1, ENC_BIG_ENDIAN); 1809 1810 for (j = 0; j < (mylen - 8) / 4; j++) { 1811 proto_tree_add_uint_format(lmp_subobj_tree, hf_lmp_free_timeslots, tvb, offset2+l+8+(j*4), 4, 1812 tvb_get_ntoh24(tvb, offset2+l+9+(j*4)), "%s: %d free timeslots", 1813 val_to_str_ext(tvb_get_guint8(tvb, offset2+l+8+(j*4)), 1814 &gmpls_sonet_signal_type_str_ext, 1815 "Unknown Signal Type (%d)"), 1816 tvb_get_ntoh24(tvb, offset2+l+9+(j*4))); 1817 } 1818 break; 1819 1820 default: 1821 proto_tree_add_item(lmp_subobj_tree, hf_lmp_data, tvb, offset2+l, 1822 tvb_get_guint8(tvb, offset2+l+1), ENC_NA); 1823 break; 1824 } 1825 if (tvb_get_guint8(tvb, offset2+l+1) == 0) 1826 break; 1827 1828 l += tvb_get_guint8(tvb, offset2+l+1); 1829 } 1830 1831 break; 1832 1833 default: 1834 proto_tree_add_item(lmp_object_tree, hf_lmp_data, tvb, offset2, mylen, ENC_NA); 1835 break; 1836 } 1837 break; 1838 1839 1840 1841 default: 1842 proto_tree_add_item(lmp_object_tree, hf_lmp_data, tvb, offset2, mylen, ENC_NA); 1843 break; 1844 } 1845 1846 offset += obj_length; 1847 len += obj_length; 1848 1849 } /* while */ 1850 } /* tree */ 1851 1852 return tvb_captured_length(tvb); 1853 } 1854 1855 static void 1856 register_lmp_prefs (void) 1857 { 1858 module_t *lmp_module; 1859 1860 lmp_module = prefs_register_protocol(proto_lmp, NULL); 1861 1862 prefs_register_bool_preference( 1863 lmp_module, "checksum", "LMP checksum field", 1864 "Whether LMP contains a checksum which can be checked", &lmp_checksum_config); 1865 prefs_register_obsolete_preference(lmp_module, "version"); 1866 } 1867 1868 void 1869 proto_register_lmp(void) 1870 { 1871 static gint *ett[NUM_LMP_SUBTREES]; 1872 int i; 1873 1874 static hf_register_info lmpf_info[] = { 1875 1876 /* Message type number */ 1877 {&hf_lmp_filter[LMPF_MSG], 1878 { "Message Type", "lmp.msg", FT_UINT8, BASE_DEC, VALS(message_type_vals), 0x0, 1879 NULL, HFILL }}, 1880 1881 /* Message type shorthands */ 1882 {&hf_lmp_filter[LMPF_MSG_CONFIG], 1883 { "Config Message", "lmp.msg.config", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1884 NULL, HFILL }}, 1885 1886 {&hf_lmp_filter[LMPF_MSG_CONFIG_ACK], 1887 { "ConfigAck Message", "lmp.msg.configack", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1888 NULL, HFILL }}, 1889 1890 {&hf_lmp_filter[LMPF_MSG_CONFIG_NACK], 1891 { "ConfigNack Message", "lmp.msg.confignack", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1892 NULL, HFILL }}, 1893 1894 {&hf_lmp_filter[LMPF_MSG_HELLO], 1895 { "HELLO Message", "lmp.msg.hello", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1896 NULL, HFILL }}, 1897 1898 {&hf_lmp_filter[LMPF_MSG_BEGIN_VERIFY], 1899 { "BeginVerify Message", "lmp.msg.beginverify", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1900 NULL, HFILL }}, 1901 1902 {&hf_lmp_filter[LMPF_MSG_BEGIN_VERIFY_ACK], 1903 { "BeginVerifyAck Message", "lmp.msg.beginverifyack", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1904 NULL, HFILL }}, 1905 1906 {&hf_lmp_filter[LMPF_MSG_BEGIN_VERIFY_NACK], 1907 { "BeginVerifyNack Message", "lmp.msg.beginverifynack", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1908 NULL, HFILL }}, 1909 1910 {&hf_lmp_filter[LMPF_MSG_END_VERIFY], 1911 { "EndVerify Message", "lmp.msg.endverify", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1912 NULL, HFILL }}, 1913 1914 {&hf_lmp_filter[LMPF_MSG_END_VERIFY_ACK], 1915 { "EndVerifyAck Message", "lmp.msg.endverifyack", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1916 NULL, HFILL }}, 1917 1918 {&hf_lmp_filter[LMPF_MSG_TEST], 1919 { "Test Message", "lmp.msg.test", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1920 NULL, HFILL }}, 1921 1922 {&hf_lmp_filter[LMPF_MSG_TEST_STATUS_SUCCESS], 1923 { "TestStatusSuccess Message", "lmp.msg.teststatussuccess", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1924 NULL, HFILL }}, 1925 1926 {&hf_lmp_filter[LMPF_MSG_TEST_STATUS_FAILURE], 1927 { "TestStatusFailure Message", "lmp.msg.teststatusfailure", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1928 NULL, HFILL }}, 1929 1930 {&hf_lmp_filter[LMPF_MSG_TEST_STATUS_ACK], 1931 { "TestStatusAck Message", "lmp.msg.teststatusack", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1932 NULL, HFILL }}, 1933 1934 {&hf_lmp_filter[LMPF_MSG_LINK_SUMMARY], 1935 { "LinkSummary Message", "lmp.msg.linksummary", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1936 NULL, HFILL }}, 1937 1938 {&hf_lmp_filter[LMPF_MSG_LINK_SUMMARY_ACK], 1939 { "LinkSummaryAck Message", "lmp.msg.linksummaryack", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1940 NULL, HFILL }}, 1941 1942 {&hf_lmp_filter[LMPF_MSG_LINK_SUMMARY_NACK], 1943 { "LinkSummaryNack Message", "lmp.msg.linksummarynack", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1944 NULL, HFILL }}, 1945 1946 {&hf_lmp_filter[LMPF_MSG_CHANNEL_STATUS], 1947 { "ChannelStatus Message", "lmp.msg.channelstatus", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1948 NULL, HFILL }}, 1949 1950 {&hf_lmp_filter[LMPF_MSG_CHANNEL_STATUS_ACK], 1951 { "ChannelStatusAck Message", "lmp.msg.channelstatusack", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1952 NULL, HFILL }}, 1953 1954 {&hf_lmp_filter[LMPF_MSG_CHANNEL_STATUS_REQ], 1955 { "ChannelStatusRequest Message", "lmp.msg.channelstatusrequest", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1956 NULL, HFILL }}, 1957 1958 {&hf_lmp_filter[LMPF_MSG_CHANNEL_STATUS_RESP], 1959 { "ChannelStatusResponse Message", "lmp.msg.channelstatusresponse", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1960 NULL, HFILL }}, 1961 1962 {&hf_lmp_filter[LMPF_MSG_TRACE_MONITOR], 1963 { "TraceMonitor Message", "lmp.msg.tracemonitor", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1964 NULL, HFILL }}, 1965 1966 {&hf_lmp_filter[LMPF_MSG_TRACE_MONITOR_ACK], 1967 { "TraceMonitorAck Message", "lmp.msg.tracemonitorack", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1968 NULL, HFILL }}, 1969 1970 {&hf_lmp_filter[LMPF_MSG_TRACE_MONITOR_NACK], 1971 { "TraceMonitorNack Message", "lmp.msg.tracemonitornack", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1972 NULL, HFILL }}, 1973 1974 {&hf_lmp_filter[LMPF_MSG_TRACE_MISMATCH], 1975 { "TraceMismatch Message", "lmp.msg.tracemismatch", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1976 NULL, HFILL }}, 1977 1978 {&hf_lmp_filter[LMPF_MSG_TRACE_MISMATCH_ACK], 1979 { "TraceMismatchAck Message", "lmp.msg.tracemismatchack", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1980 NULL, HFILL }}, 1981 1982 {&hf_lmp_filter[LMPF_MSG_TRACE_REQUEST], 1983 { "TraceRequest Message", "lmp.msg.tracerequest", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1984 NULL, HFILL }}, 1985 1986 {&hf_lmp_filter[LMPF_MSG_TRACE_REPORT], 1987 { "TraceReport Message", "lmp.msg.tracereport", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1988 NULL, HFILL }}, 1989 1990 {&hf_lmp_filter[LMPF_MSG_TRACE_REQUEST_NACK], 1991 { "TraceRequestNack Message", "lmp.msg.tracerequestnack", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1992 NULL, HFILL }}, 1993 1994 {&hf_lmp_filter[LMPF_MSG_INSERT_TRACE], 1995 { "InsertTrace Message", "lmp.msg.inserttrace", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 1996 NULL, HFILL }}, 1997 1998 {&hf_lmp_filter[LMPF_MSG_INSERT_TRACE_ACK], 1999 { "InsertTraceAck Message", "lmp.msg.inserttraceack", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 2000 NULL, HFILL }}, 2001 2002 {&hf_lmp_filter[LMPF_MSG_INSERT_TRACE_NACK], 2003 { "InsertTraceNack Message", "lmp.msg.inserttracenack", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 2004 NULL, HFILL }}, 2005 2006 {&hf_lmp_filter[LMPF_MSG_SERVICE_CONFIG], 2007 { "ServiceConfig Message", "lmp.msg.serviceconfig", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 2008 NULL, HFILL }}, 2009 2010 {&hf_lmp_filter[LMPF_MSG_SERVICE_CONFIG_ACK], 2011 { "ServiceConfigAck Message", "lmp.msg.serviceconfigack", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 2012 NULL, HFILL }}, 2013 2014 {&hf_lmp_filter[LMPF_MSG_SERVICE_CONFIG_NACK], 2015 { "ServiceConfigNack Message", "lmp.msg.serviceconfignack", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 2016 NULL, HFILL }}, 2017 2018 {&hf_lmp_filter[LMPF_MSG_DISCOVERY_RESP], 2019 { "DiscoveryResponse Message", "lmp.msg.discoveryresp", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 2020 NULL, HFILL }}, 2021 2022 {&hf_lmp_filter[LMPF_MSG_DISCOVERY_RESP_ACK], 2023 { "DiscoveryResponseAck Message", "lmp.msg.discoveryrespack", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 2024 NULL, HFILL }}, 2025 2026 {&hf_lmp_filter[LMPF_MSG_DISCOVERY_RESP_NACK], 2027 { "DiscoveryResponseNack Message", "lmp.msg.discoveryrespnack", FT_BOOLEAN, BASE_NONE, NULL, 0x0, 2028 NULL, HFILL }}, 2029 2030 /* LMP Message Header Fields ------------------- */ 2031 2032 {&hf_lmp_filter[LMPF_HDR_FLAGS], 2033 { "LMP Header - Flags", "lmp.hdr.flags", FT_UINT8, BASE_DEC, NULL, 0x0, 2034 NULL, HFILL }}, 2035 2036 {&hf_lmp_filter[LMPF_HDR_FLAGS_CC_DOWN], 2037 { "ControlChannelDown", "lmp.hdr.ccdown", FT_BOOLEAN, 8, NULL, 0x01, 2038 NULL, HFILL }}, 2039 2040 {&hf_lmp_filter[LMPF_HDR_FLAGS_REBOOT], 2041 { "Reboot", "lmp.hdr.reboot", FT_BOOLEAN, 8, NULL, 0x02, 2042 NULL, HFILL }}, 2043 2044 /* LMP object class filters ------------------------------- */ 2045 2046 {&hf_lmp_filter[LMPF_OBJECT], 2047 { "LOCAL_CCID", "lmp.object", FT_UINT8, BASE_DEC, NULL, 0x0, 2048 NULL, HFILL }}, 2049 2050 {&hf_lmp_filter[LMPF_CLASS_CCID], 2051 { "CCID", "lmp.obj.ccid", FT_NONE, BASE_NONE, NULL, 0x0, 2052 NULL, HFILL }}, 2053 {&hf_lmp_filter[LMPF_CLASS_NODE_ID], 2054 { "NODE_ID", "lmp.obj.Nodeid", FT_NONE, BASE_NONE, NULL, 0x0, 2055 NULL, HFILL }}, 2056 {&hf_lmp_filter[LMPF_CLASS_LINK_ID], 2057 { "LINK_ID", "lmp.obj.linkid", FT_NONE, BASE_NONE, NULL, 0x0, 2058 NULL, HFILL }}, 2059 {&hf_lmp_filter[LMPF_CLASS_INTERFACE_ID], 2060 { "INTERFACE_ID", "lmp.obj.interfaceid", FT_NONE, BASE_NONE, NULL, 0x0, 2061 NULL, HFILL }}, 2062 {&hf_lmp_filter[LMPF_CLASS_MESSAGE_ID], 2063 { "MESSAGE_ID", "lmp.obj.messageid", FT_NONE, BASE_NONE, NULL, 0x0, 2064 NULL, HFILL }}, 2065 {&hf_lmp_filter[LMPF_CLASS_CONFIG], 2066 { "CONFIG", "lmp.obj.config", FT_NONE, BASE_NONE, NULL, 0x0, 2067 NULL, HFILL }}, 2068 {&hf_lmp_filter[LMPF_CLASS_HELLO], 2069 { "HELLO", "lmp.obj.hello", FT_NONE, BASE_NONE, NULL, 0x0, 2070 NULL, HFILL }}, 2071 {&hf_lmp_filter[LMPF_CLASS_BEGIN_VERIFY], 2072 { "BEGIN_VERIFY", "lmp.obj.begin_verify", FT_NONE, BASE_NONE, NULL, 0x0, 2073 NULL, HFILL }}, 2074 {&hf_lmp_filter[LMPF_CLASS_BEGIN_VERIFY_ACK], 2075 { "BEGIN_VERIFY_ACK", "lmp.obj.begin_verify_ack", FT_NONE, BASE_NONE, NULL, 0x0, 2076 NULL, HFILL }}, 2077 {&hf_lmp_filter[LMPF_CLASS_VERIFY_ID], 2078 { "VERIFY_ID", "lmp.obj.verifyid", FT_NONE, BASE_NONE, NULL, 0x0, 2079 NULL, HFILL }}, 2080 2081 {&hf_lmp_filter[LMPF_CLASS_TE_LINK], 2082 { "TE_LINK", "lmp.obj.te_link", FT_NONE, BASE_NONE, NULL, 0x0, 2083 NULL, HFILL }}, 2084 {&hf_lmp_filter[LMPF_CLASS_DATA_LINK], 2085 { "DATA_LINK", "lmp.obj.data_link", FT_NONE, BASE_NONE, NULL, 0x0, 2086 NULL, HFILL }}, 2087 2088 {&hf_lmp_filter[LMPF_CLASS_CHANNEL_STATUS], 2089 { "CHANNEL_STATUS", "lmp.obj.channel_status", FT_NONE, BASE_NONE, NULL, 0x0, 2090 NULL, HFILL }}, 2091 2092 {&hf_lmp_filter[LMPF_CLASS_CHANNEL_STATUS_REQUEST], 2093 { "CHANNEL_STATUS_REQUEST", "lmp.obj.channel_status_request", FT_NONE, BASE_NONE, NULL, 0x0, 2094 NULL, HFILL }}, 2095 2096 {&hf_lmp_filter[LMPF_CLASS_ERROR], 2097 { "ERROR", "lmp.obj.error", FT_NONE, BASE_NONE, NULL, 0x0, 2098 NULL, HFILL }}, 2099 2100 {&hf_lmp_filter[LMPF_CLASS_TRACE], 2101 { "TRACE", "lmp.obj.trace", FT_NONE, BASE_NONE, NULL, 0x0, 2102 NULL, HFILL }}, 2103 2104 {&hf_lmp_filter[LMPF_CLASS_TRACE_REQ], 2105 { "TRACE REQ", "lmp.obj.trace_req", FT_NONE, BASE_NONE, NULL, 0x0, 2106 NULL, HFILL }}, 2107 2108 {&hf_lmp_filter[LMPF_CLASS_SERVICE_CONFIG], 2109 { "SERVICE_CONFIG", "lmp.obj.serviceconfig", FT_NONE, BASE_NONE, NULL, 0x0, 2110 NULL, HFILL }}, 2111 2112 {&hf_lmp_filter[LMPF_CLASS_DA_DCN_ADDRESS], 2113 { "DA_DCN_ADDRESS", "lmp.obj.dadcnaddr", FT_NONE, BASE_NONE, NULL, 0x0, 2114 NULL, HFILL }}, 2115 2116 {&hf_lmp_filter[LMPF_CLASS_LOCAL_LAD_INFO], 2117 { "LOCAL_LAD_INFO", "lmp.obj.localladinfo", FT_NONE, BASE_NONE, NULL, 0x0, 2118 NULL, HFILL }}, 2119 2120 /* Other LMP Value Filters ------------------------------ */ 2121 2122 {&hf_lmp_filter[LMPF_VAL_CTYPE], 2123 { "Object C-Type", "lmp.obj.ctype", FT_UINT8, BASE_DEC, NULL, 0x0, 2124 NULL, HFILL }}, 2125 2126 {&hf_lmp_filter[LMPF_VAL_LOCAL_CCID], 2127 { "Local CCID Value", "lmp.local_ccid", FT_UINT32, BASE_DEC, NULL, 0x0, 2128 NULL, HFILL }}, 2129 {&hf_lmp_filter[LMPF_VAL_REMOTE_CCID], 2130 { "Remote CCID Value", "lmp.remote_ccid", FT_UINT32, BASE_DEC, NULL, 0x0, 2131 NULL, HFILL }}, 2132 2133 {&hf_lmp_filter[LMPF_VAL_LOCAL_NODE_ID], 2134 { "Local Node ID Value", "lmp.local_nodeid", FT_IPv4, BASE_NONE, NULL, 0x0, 2135 NULL, HFILL }}, 2136 {&hf_lmp_filter[LMPF_VAL_REMOTE_NODE_ID], 2137 { "Remote Node ID Value", "lmp.remote_nodeid", FT_IPv4, BASE_NONE, NULL, 0x0, 2138 NULL, HFILL }}, 2139 2140 {&hf_lmp_filter[LMPF_VAL_LOCAL_LINK_ID_IPV4], 2141 { "Local Link ID - IPv4", "lmp.local_linkid_ipv4", FT_IPv4, BASE_NONE, NULL, 0x0, 2142 NULL, HFILL }}, 2143 {&hf_lmp_filter[LMPF_VAL_LOCAL_LINK_ID_IPV6], 2144 { "Local Link ID - IPv6", "lmp.local_linkid_ipv6", FT_IPv6, BASE_NONE, NULL, 0x0, 2145 NULL, HFILL }}, 2146 {&hf_lmp_filter[LMPF_VAL_LOCAL_LINK_ID_UNNUM], 2147 { "Local Link ID - Unnumbered", "lmp.local_linkid_unnum", FT_UINT32, BASE_DEC, NULL, 0x0, 2148 NULL, HFILL }}, 2149 {&hf_lmp_filter[LMPF_VAL_REMOTE_LINK_ID_IPV4], 2150 { "Remote Link ID - IPv4", "lmp.remote_linkid_ipv4", FT_IPv4, BASE_NONE, NULL, 0x0, 2151 NULL, HFILL }}, 2152 {&hf_lmp_filter[LMPF_VAL_REMOTE_LINK_ID_IPV6], 2153 { "Remote Link ID - IPv6", "lmp.remote_linkid_ipv6", FT_IPv6, BASE_NONE, NULL, 0x0, 2154 NULL, HFILL }}, 2155 {&hf_lmp_filter[LMPF_VAL_REMOTE_LINK_ID_UNNUM], 2156 { "Remote Link ID - Unnumbered", "lmp.remote_linkid_unnum", FT_UINT32, BASE_DEC, NULL, 0x0, 2157 NULL, HFILL }}, 2158 2159 {&hf_lmp_filter[LMPF_VAL_LOCAL_INTERFACE_ID_IPV4], 2160 { "Local Interface ID - IPv4", "lmp.local_interfaceid_ipv4", FT_IPv4, BASE_NONE, NULL, 0x0, 2161 NULL, HFILL }}, 2162 {&hf_lmp_filter[LMPF_VAL_LOCAL_INTERFACE_ID_IPV6], 2163 { "Local Interface ID - IPv6", "lmp.local_interfaceid_ipv6", FT_IPv6, BASE_NONE, NULL, 0x0, 2164 NULL, HFILL }}, 2165 {&hf_lmp_filter[LMPF_VAL_LOCAL_INTERFACE_ID_UNNUM], 2166 { "Local Interface ID - Unnumbered", "lmp.local_interfaceid_unnum", FT_UINT32, BASE_DEC, NULL, 0x0, 2167 NULL, HFILL }}, 2168 {&hf_lmp_filter[LMPF_VAL_REMOTE_INTERFACE_ID_IPV4], 2169 { "Remote Interface ID - IPv4", "lmp.remote_interfaceid_ipv4", FT_IPv4, BASE_NONE, NULL, 0x0, 2170 NULL, HFILL }}, 2171 {&hf_lmp_filter[LMPF_VAL_REMOTE_INTERFACE_ID_IPV6], 2172 { "Remote Interface ID - IPv6", "lmp.remote_interfaceid_ipv6", FT_IPv6, BASE_NONE, NULL, 0x0, 2173 NULL, HFILL }}, 2174 {&hf_lmp_filter[LMPF_VAL_REMOTE_INTERFACE_ID_UNNUM], 2175 { "Remote Interface ID - Unnumbered", "lmp.remote_interfaceid_unnum", FT_UINT32, BASE_DEC, NULL, 0x0, 2176 NULL, HFILL }}, 2177 {&hf_lmp_filter[LMPF_VAL_CHANNEL_STATUS_INTERFACE_ID_IPV4], 2178 { "Interface ID: IPv4", "lmp.channel_status_interfaceid_ipv4", FT_IPv4, BASE_NONE, NULL, 0x0, 2179 NULL, HFILL }}, 2180 {&hf_lmp_filter[LMPF_VAL_CHANNEL_STATUS_INTERFACE_ID_IPV6], 2181 { "Interface ID: IPv6", "lmp.channel_status_interfaceid_ipv6", FT_IPv6, BASE_NONE, NULL, 0x0, 2182 NULL, HFILL }}, 2183 {&hf_lmp_filter[LMPF_VAL_CHANNEL_STATUS_INTERFACE_ID_UNNUM], 2184 { "Interface ID: Unnumbered", "lmp.channel_status_interfaceid_unnum", FT_UINT32, BASE_DEC, NULL, 0x0, 2185 NULL, HFILL }}, 2186 {&hf_lmp_filter[LMPF_VAL_MESSAGE_ID], 2187 { "Message-ID Value", "lmp.messageid", FT_UINT32, BASE_DEC, NULL, 0x0, 2188 NULL, HFILL }}, 2189 {&hf_lmp_filter[LMPF_VAL_MESSAGE_ID_ACK], 2190 { "Message-ID Ack Value", "lmp.messageid_ack", FT_UINT32, BASE_DEC, NULL, 0x0, 2191 NULL, HFILL }}, 2192 2193 {&hf_lmp_filter[LMPF_VAL_CONFIG_HELLO], 2194 { "HelloInterval", "lmp.hellointerval", FT_UINT32, BASE_DEC, NULL, 0x0, 2195 NULL, HFILL }}, 2196 {&hf_lmp_filter[LMPF_VAL_CONFIG_HELLO_DEAD], 2197 { "HelloDeadInterval", "lmp.hellodeadinterval", FT_UINT32, BASE_DEC, NULL, 0x0, 2198 NULL, HFILL }}, 2199 2200 {&hf_lmp_filter[LMPF_VAL_HELLO_TXSEQ], 2201 { "TxSeqNum", "lmp.txseqnum", FT_UINT32, BASE_DEC, NULL, 0x0, 2202 NULL, HFILL }}, 2203 {&hf_lmp_filter[LMPF_VAL_HELLO_RXSEQ], 2204 { "RxSeqNum", "lmp.rxseqnum", FT_UINT32, BASE_DEC, NULL, 0x0, 2205 NULL, HFILL }}, 2206 2207 {&hf_lmp_filter[LMPF_VAL_BEGIN_VERIFY_FLAGS], 2208 { "Flags", "lmp.begin_verify.flags", FT_UINT16, BASE_HEX, NULL, 0x0, 2209 NULL, HFILL }}, 2210 {&hf_lmp_filter[LMPF_VAL_BEGIN_VERIFY_FLAGS_ALL_LINKS], 2211 { "Verify All Links", "lmp.begin_verify.all_links", 2212 FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }}, 2213 {&hf_lmp_filter[LMPF_VAL_BEGIN_VERIFY_FLAGS_LINK_TYPE], 2214 { "Data Link Type", "lmp.begin_verify.link_type", 2215 FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }}, 2216 {&hf_lmp_filter[LMPF_VAL_BEGIN_VERIFY_ENCTYPE], 2217 { "Encoding Type", "lmp.begin_verify.enctype", 2218 FT_UINT8, BASE_DEC|BASE_RANGE_STRING, RVALS(gmpls_lsp_enc_rvals), 0x0, 2219 NULL, HFILL }}, 2220 {&hf_lmp_filter[LMPF_VAL_VERIFY_ID], 2221 { "Verify-ID", "lmp.verifyid", FT_UINT32, BASE_DEC, NULL, 0x0, 2222 NULL, HFILL }}, 2223 2224 {&hf_lmp_filter[LMPF_VAL_TE_LINK_FLAGS], 2225 { "TE-Link Flags", "lmp.te_link_flags", FT_UINT8, BASE_HEX, NULL, 0x0, 2226 NULL, HFILL }}, 2227 {&hf_lmp_filter[LMPF_VAL_TE_LINK_FLAGS_FAULT_MGMT], 2228 { "Fault Management Supported", "lmp.te_link.fault_mgmt", 2229 FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }}, 2230 {&hf_lmp_filter[LMPF_VAL_TE_LINK_FLAGS_LINK_VERIFY], 2231 { "Link Verification Supported", "lmp.te_link.link_verify", 2232 FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }}, 2233 {&hf_lmp_filter[LMPF_VAL_TE_LINK_LOCAL_IPV4], 2234 { "TE-Link Local ID - IPv4", "lmp.te_link.local_ipv4", FT_IPv4, BASE_NONE, NULL, 0x0, 2235 NULL, HFILL }}, 2236 {&hf_lmp_filter[LMPF_VAL_TE_LINK_LOCAL_IPV6], 2237 { "TE-Link Local ID - IPv6", "lmp.te_link.local_ipv6", FT_IPv6, BASE_NONE, NULL, 0x0, 2238 NULL, HFILL }}, 2239 {&hf_lmp_filter[LMPF_VAL_TE_LINK_LOCAL_UNNUM], 2240 { "TE-Link Local ID - Unnumbered", "lmp.te_link.local_unnum", FT_UINT32, BASE_DEC, NULL, 0x0, 2241 NULL, HFILL }}, 2242 {&hf_lmp_filter[LMPF_VAL_TE_LINK_REMOTE_IPV4], 2243 { "TE-Link Remote ID - IPv4", "lmp.te_link.remote_ipv4", FT_IPv4, BASE_NONE, NULL, 0x0, 2244 NULL, HFILL }}, 2245 {&hf_lmp_filter[LMPF_VAL_TE_LINK_REMOTE_IPV6], 2246 { "TE-Link Remote ID - IPv6", "lmp.te_link.remote_ipv6", FT_IPv6, BASE_NONE, NULL, 0x0, 2247 NULL, HFILL }}, 2248 {&hf_lmp_filter[LMPF_VAL_TE_LINK_REMOTE_UNNUM], 2249 { "TE-Link Remote ID - Unnumbered", "lmp.te_link.remote_unnum", FT_UINT32, BASE_DEC, NULL, 0x0, 2250 NULL, HFILL }}, 2251 2252 {&hf_lmp_filter[LMPF_VAL_DATA_LINK_FLAGS], 2253 { "Data-Link Flags", "lmp.data_link_flags", FT_UINT8, BASE_HEX, NULL, 0x0, 2254 NULL, HFILL }}, 2255 {&hf_lmp_filter[LMPF_VAL_DATA_LINK_FLAGS_PORT], 2256 { "Data-Link is Individual Port", "lmp.data_link.port", 2257 FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }}, 2258 {&hf_lmp_filter[LMPF_VAL_DATA_LINK_FLAGS_ALLOCATED], 2259 { "Data-Link is Allocated", "lmp.data_link.link_verify", 2260 FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }}, 2261 {&hf_lmp_filter[LMPF_VAL_DATA_LINK_LOCAL_IPV4], 2262 { "Data-Link Local ID - IPv4", "lmp.data_link.local_ipv4", FT_IPv4, BASE_NONE, NULL, 0x0, 2263 NULL, HFILL }}, 2264 {&hf_lmp_filter[LMPF_VAL_DATA_LINK_LOCAL_UNNUM], 2265 { "Data-Link Local ID - Unnumbered", "lmp.data_link.local_unnum", FT_UINT32, BASE_DEC, NULL, 0x0, 2266 NULL, HFILL }}, 2267 {&hf_lmp_filter[LMPF_VAL_DATA_LINK_REMOTE_IPV4], 2268 { "Data-Link Remote ID - IPv4", "lmp.data_link.remote_ipv4", FT_IPv4, BASE_NONE, NULL, 0x0, 2269 NULL, HFILL }}, 2270 {&hf_lmp_filter[LMPF_VAL_DATA_LINK_REMOTE_UNNUM], 2271 { "Data-Link Remote ID - Unnumbered", "lmp.data_link.remote_unnum", FT_UINT32, BASE_DEC, NULL, 0x0, 2272 NULL, HFILL }}, 2273 {&hf_lmp_filter[LMPF_VAL_DATA_LINK_SUBOBJ], 2274 { "Subobject", "lmp.data_link_subobj", FT_NONE, BASE_NONE, NULL, 0x0, 2275 NULL, HFILL }}, 2276 {&hf_lmp_filter[LMPF_VAL_DATA_LINK_SUBOBJ_SWITCHING_TYPE], 2277 { "Interface Switching Capability", "lmp.data_link_switching", FT_UINT8, BASE_DEC|BASE_RANGE_STRING, 2278 RVALS(gmpls_switching_type_rvals), 0x0, NULL, HFILL }}, 2279 {&hf_lmp_filter[LMPF_VAL_DATA_LINK_SUBOBJ_LSP_ENCODING], 2280 { "LSP Encoding Type", "lmp.data_link_encoding", FT_UINT8, BASE_DEC|BASE_RANGE_STRING, 2281 RVALS(gmpls_lsp_enc_rvals), 0x0, NULL, HFILL }}, 2282 2283 {&hf_lmp_filter[LMPF_VAL_ERROR], 2284 { "Error Code", "lmp.error", FT_UINT32, BASE_HEX, NULL, 0x0, 2285 NULL, HFILL }}, 2286 2287 {&hf_lmp_filter[LMPF_VAL_ERROR_VERIFY_UNSUPPORTED_LINK], 2288 { "Verification - Unsupported for this TE-Link", "lmp.error.verify_unsupported_link", 2289 FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }}, 2290 {&hf_lmp_filter[LMPF_VAL_ERROR_VERIFY_UNWILLING], 2291 { "Verification - Unwilling to Verify at this time", "lmp.error.verify_unwilling", 2292 FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }}, 2293 {&hf_lmp_filter[LMPF_VAL_ERROR_VERIFY_TRANSPORT], 2294 { "Verification - Transport Unsupported", "lmp.error.verify_unsupported_transport", 2295 FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }}, 2296 {&hf_lmp_filter[LMPF_VAL_ERROR_VERIFY_TE_LINK_ID], 2297 { "Verification - TE Link ID Configuration Error", "lmp.error.verify_te_link_id", 2298 FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }}, 2299 2300 {&hf_lmp_filter[LMPF_VAL_ERROR_VERIFY_UNKNOWN_CTYPE], 2301 { "Verification - Unknown Object C-Type", "lmp.error.verify_unknown_ctype", 2302 FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }}, 2303 2304 {&hf_lmp_filter[LMPF_VAL_ERROR_SUMMARY_BAD_PARAMETERS], 2305 { "Summary - Unacceptable non-negotiable parameters", "lmp.error.summary_bad_params", 2306 FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }}, 2307 {&hf_lmp_filter[LMPF_VAL_ERROR_SUMMARY_RENEGOTIATE], 2308 { "Summary - Renegotiate Parameter", "lmp.error.summary_renegotiate", 2309 FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }}, 2310 {&hf_lmp_filter[LMPF_VAL_ERROR_SUMMARY_BAD_TE_LINK], 2311 { "Summary - Bad TE Link Object", "lmp.error.summary_bad_te_link", 2312 FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }}, 2313 {&hf_lmp_filter[LMPF_VAL_ERROR_SUMMARY_BAD_DATA_LINK], 2314 { "Summary - Bad Data Link Object", "lmp.error.summary_bad_data_link", 2315 FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }}, 2316 {&hf_lmp_filter[LMPF_VAL_ERROR_SUMMARY_UNKNOWN_TEL_CTYPE], 2317 { "Summary - Bad TE Link C-Type", "lmp.error.summary_unknown_tel_ctype", 2318 FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }}, 2319 {&hf_lmp_filter[LMPF_VAL_ERROR_SUMMARY_UNKNOWN_DL_CTYPE], 2320 { "Summary - Bad Data Link C-Type", "lmp.error.summary_unknown_dl_ctype", 2321 FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }}, 2322 {&hf_lmp_filter[LMPF_VAL_ERROR_SUMMARY_BAD_REMOTE_LINK_ID], 2323 { "Summary - Bad Remote Link ID", "lmp.error.summary_bad_remote_link_id", 2324 FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }}, 2325 {&hf_lmp_filter[LMPF_VAL_ERROR_CONFIG_BAD_PARAMETERS], 2326 { "Config - Unacceptable non-negotiable parameters", "lmp.error.config_bad_params", 2327 FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }}, 2328 {&hf_lmp_filter[LMPF_VAL_ERROR_CONFIG_RENEGOTIATE], 2329 { "Config - Renegotiate Parameter", "lmp.error.config_renegotiate", 2330 FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }}, 2331 {&hf_lmp_filter[LMPF_VAL_ERROR_CONFIG_BAD_CCID], 2332 { "Config - Bad CC ID", "lmp.error.config_bad_ccid", 2333 FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }}, 2334 {&hf_lmp_filter[LMPF_VAL_ERROR_TRACE_UNSUPPORTED_TYPE], 2335 { "Trace - Unsupported trace type", "lmp.error.trace_unsupported_type", 2336 FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }}, 2337 {&hf_lmp_filter[LMPF_VAL_ERROR_TRACE_INVALID_MSG], 2338 { "Trace - Invalid Trace Message", "lmp.error.trace_invalid_msg", 2339 FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }}, 2340 {&hf_lmp_filter[LMPF_VAL_ERROR_TRACE_UNKNOWN_CTYPE], 2341 { "Trace - Unknown Object C-Type", "lmp.error.trace_unknown_ctype", 2342 FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }}, 2343 {&hf_lmp_filter[LMPF_VAL_ERROR_LAD_AREA_ID_MISMATCH], 2344 { "LAD - Domain Routing Area ID Mismatch detected", "lmp.error.lad_area_id_mismatch", 2345 FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }}, 2346 {&hf_lmp_filter[LMPF_VAL_ERROR_LAD_TCP_ID_MISMATCH], 2347 { "LAD - TCP ID Mismatch detected", "lmp.error.lad_tcp_id_mismatch", 2348 FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }}, 2349 {&hf_lmp_filter[LMPF_VAL_ERROR_LAD_DA_DCN_MISMATCH], 2350 { "LAD - DA DCN Mismatch detected", "lmp.error.lad_da_dcn_mismatch", 2351 FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }}, 2352 {&hf_lmp_filter[LMPF_VAL_ERROR_LAD_CAPABILITY_MISMATCH], 2353 { "LAD - Capability Mismatch detected", "lmp.error.lad_capability_mismatch", 2354 FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }}, 2355 {&hf_lmp_filter[LMPF_VAL_ERROR_LAD_UNKNOWN_CTYPE], 2356 { "LAD - Unknown Object C-Type", "lmp.error.lad_unknown_ctype", 2357 FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }}, 2358 2359 {&hf_lmp_filter[LMPF_VAL_TRACE_LOCAL_TYPE], 2360 { "Local Trace Type", "lmp.trace.local_type", FT_UINT16, BASE_DEC, 2361 VALS(lmp_trace_type_str), 0x0, NULL, HFILL }}, 2362 {&hf_lmp_filter[LMPF_VAL_TRACE_LOCAL_LEN], 2363 { "Local Trace Length", "lmp.trace.local_length", FT_UINT16, BASE_DEC, 2364 NULL, 0x0, NULL, HFILL }}, 2365 {&hf_lmp_filter[LMPF_VAL_TRACE_LOCAL_MSG], 2366 { "Local Trace Message", "lmp.trace.local_msg", FT_STRING, BASE_NONE, 2367 NULL, 0x0, NULL, HFILL }}, 2368 {&hf_lmp_filter[LMPF_VAL_TRACE_REMOTE_TYPE], 2369 { "Remote Trace Type", "lmp.trace.remote_type", FT_UINT16, BASE_DEC, 2370 VALS(lmp_trace_type_str), 0x0, NULL, HFILL }}, 2371 {&hf_lmp_filter[LMPF_VAL_TRACE_REMOTE_LEN], 2372 { "Remote Trace Length", "lmp.trace.remote_length", FT_UINT16, BASE_DEC, 2373 NULL, 0x0, NULL, HFILL }}, 2374 {&hf_lmp_filter[LMPF_VAL_TRACE_REMOTE_MSG], 2375 { "Remote Trace Message", "lmp.trace.remote_msg", FT_STRING, BASE_NONE, 2376 NULL, 0x0, NULL, HFILL }}, 2377 2378 {&hf_lmp_filter[LMPF_VAL_TRACE_REQ_TYPE], 2379 { "Trace Type", "lmp.trace_req.type", FT_UINT16, BASE_DEC, 2380 VALS(lmp_trace_type_str), 0x0, NULL, HFILL }}, 2381 2382 {&hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_SP_FLAGS], 2383 { "Service Config - Supported Signalling Protocols", 2384 "lmp.service_config.sp", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}}, 2385 2386 {&hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_SP_FLAGS_RSVP], 2387 { "RSVP is supported", "lmp.service_config.sp.rsvp", 2388 FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL}}, 2389 2390 {&hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_SP_FLAGS_LDP], 2391 { "LDP is supported", "lmp.service_config.sp.ldp", 2392 FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL}}, 2393 2394 {&hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_CPSA_TP_FLAGS], 2395 { "Client Port Service Attributes", "lmp.service_config.cpsa", 2396 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}}, 2397 2398 {&hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_CPSA_TP_FLAGS_PATH_OVERHEAD], 2399 { "Path/VC Overhead Transparency Supported", 2400 "lmp.service_config.cpsa.path_overhead", 2401 FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL}}, 2402 2403 {&hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_CPSA_TP_FLAGS_LINE_OVERHEAD], 2404 { "Line/MS Overhead Transparency Supported", 2405 "lmp.service_config.cpsa.line_overhead", 2406 FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL}}, 2407 2408 {&hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_CPSA_TP_FLAGS_SECTION_OVERHEAD], 2409 { "Section/RS Overhead Transparency Supported", 2410 "lmp.service_config.cpsa.section_overhead", 2411 FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL}}, 2412 2413 {&hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_CPSA_CCT_FLAGS], 2414 { "Contiguous Concatenation Types", "lmp.service_config.cct", 2415 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}}, 2416 2417 {&hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_CPSA_CCT_FLAGS_CC_SUPPORTED], 2418 { "Contiguous Concatenation Types Supported", 2419 "lmp.service_config.cpsa.line_overhead", 2420 FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL}}, 2421 2422 {&hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_CPSA_MIN_NCC], 2423 { "Minimum Number of Contiguously Concatenated Components", 2424 "lmp.service_config.cpsa.min_ncc", 2425 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}}, 2426 2427 {&hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_CPSA_MAX_NCC], 2428 { "Maximum Number of Contiguously Concatenated Components", 2429 "lmp.service_config.cpsa.max_ncc", 2430 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}}, 2431 2432 {&hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_CPSA_MIN_NVC], 2433 { "Maximum Number of Contiguously Concatenated Components", 2434 "lmp.service_config.cpsa.min_nvc", 2435 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}}, 2436 2437 {&hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_CPSA_MAX_NVC], 2438 { "Minimum Number of Virtually Concatenated Components", 2439 "lmp.service_config.cpsa.max_nvc", 2440 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}}, 2441 2442 {&hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_CPSA_INTERFACE_ID], 2443 { "Local interface id of the client interface referred to", 2444 "lmp.service_config.cpsa.local_ifid", 2445 FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL}}, 2446 2447 {&hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_NSA_TRANSPARENCY_FLAGS], 2448 { "Network Transparency Flags", 2449 "lmp.service_config.nsa.transparency", 2450 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}}, 2451 2452 {&hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_NSA_TRANSPARENCY_FLAGS_SOH], 2453 { "Standard SOH/RSOH transparency supported", 2454 "lmp.service_config.nsa.transparency.soh", 2455 FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL}}, 2456 2457 {&hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_NSA_TRANSPARENCY_FLAGS_LOH], 2458 { "Standard LOH/MSOH transparency supported", 2459 "lmp.service_config.nsa.transparency.loh", 2460 FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL}}, 2461 2462 {&hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_NSA_TCM_FLAGS], 2463 { "TCM Monitoring", 2464 "lmp.service_config.nsa.tcm", 2465 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}}, 2466 2467 {&hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_NSA_TCM_FLAGS_TCM_SUPPORTED], 2468 { "TCM Monitoring Supported", 2469 "lmp.service_config.nsa.transparency.tcm", 2470 FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL}}, 2471 2472 {&hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_NSA_NETWORK_DIVERSITY_FLAGS], 2473 { "Network Diversity Flags", 2474 "lmp.service_config.nsa.diversity", 2475 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}}, 2476 2477 {&hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_NSA_NETWORK_DIVERSITY_FLAGS_NODE], 2478 { "Node diversity supported", 2479 "lmp.service_config.nsa.diversity.node", 2480 FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL}}, 2481 2482 {&hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_NSA_NETWORK_DIVERSITY_FLAGS_LINK], 2483 { "Link diversity supported", 2484 "lmp.service_config.nsa.diversity.link", 2485 FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL}}, 2486 2487 {&hf_lmp_filter[LMPF_VAL_SERVICE_CONFIG_NSA_NETWORK_DIVERSITY_FLAGS_SRLG], 2488 { "SRLG diversity supported", 2489 "lmp.service_config.nsa.diversity.srlg", 2490 FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL}}, 2491 2492 {&hf_lmp_filter[LMPF_VAL_LOCAL_DA_DCN_ADDR], 2493 { "Local DA DCN Address", "lmp.local_da_dcn_addr", FT_IPv4, BASE_NONE, NULL, 0x0, 2494 NULL, HFILL }}, 2495 {&hf_lmp_filter[LMPF_VAL_REMOTE_DA_DCN_ADDR], 2496 { "Remote DA DCN Address", "lmp.remote_da_dcn_addr", FT_IPv4, BASE_NONE, NULL, 0x0, 2497 NULL, HFILL }}, 2498 2499 {&hf_lmp_filter[LMPF_VAL_LOCAL_LAD_INFO_NODE_ID], 2500 { "Node ID", "lmp.local_lad_node_id", FT_IPv4, BASE_NONE, NULL, 0x0, 2501 NULL, HFILL }}, 2502 {&hf_lmp_filter[LMPF_VAL_LOCAL_LAD_INFO_AREA_ID], 2503 { "Area ID", "lmp.local_lad_area_id", FT_IPv4, BASE_NONE, NULL, 0x0, 2504 NULL, HFILL }}, 2505 {&hf_lmp_filter[LMPF_VAL_LOCAL_LAD_INFO_TE_LINK_ID], 2506 { "TE Link ID", "lmp.local_lad_telink_id", FT_UINT32, BASE_DEC, NULL, 0x0, 2507 NULL, HFILL }}, 2508 {&hf_lmp_filter[LMPF_VAL_LOCAL_LAD_INFO_COMPONENT_ID], 2509 { "Component Link ID", "lmp.local_lad_comp_id", FT_UINT32, BASE_DEC, NULL, 0x0, 2510 NULL, HFILL }}, 2511 {&hf_lmp_filter[LMPF_VAL_LOCAL_LAD_INFO_SC_PC_ID], 2512 { "SC PC ID", "lmp.local_lad_sc_pc_id", FT_IPv4, BASE_NONE, NULL, 0x0, 2513 NULL, HFILL }}, 2514 {&hf_lmp_filter[LMPF_VAL_LOCAL_LAD_INFO_SC_PC_ADDR], 2515 { "SC PC Address", "lmp.local_lad_sc_pc_addr", FT_IPv4, BASE_NONE, NULL, 0x0, 2516 NULL, HFILL }}, 2517 {&hf_lmp_filter[LMPF_VAL_LAD_INFO_SUBOBJ], 2518 { "Subobject", "lmp.lad_info_subobj", FT_NONE, BASE_NONE, NULL, 0x0, 2519 NULL, HFILL }}, 2520 {&hf_lmp_filter[LMPF_VAL_LAD_INFO_SUBOBJ_PRI_AREA_ID], 2521 { "SC PC Address", "lmp.lad_pri_area_id", FT_IPv4, BASE_NONE, NULL, 0x0, 2522 NULL, HFILL }}, 2523 {&hf_lmp_filter[LMPF_VAL_LAD_INFO_SUBOBJ_PRI_RC_PC_ID], 2524 { "SC PC Address", "lmp.lad_pri_rc_pc_id", FT_IPv4, BASE_NONE, NULL, 0x0, 2525 NULL, HFILL }}, 2526 {&hf_lmp_filter[LMPF_VAL_LAD_INFO_SUBOBJ_PRI_RC_PC_ADDR], 2527 { "SC PC Address", "lmp.lad_pri_rc_pc_addr", FT_IPv4, BASE_NONE, NULL, 0x0, 2528 NULL, HFILL }}, 2529 {&hf_lmp_filter[LMPF_VAL_LAD_INFO_SUBOBJ_SEC_AREA_ID], 2530 { "SC PC Address", "lmp.lad_sec_area_id", FT_IPv4, BASE_NONE, NULL, 0x0, 2531 NULL, HFILL }}, 2532 {&hf_lmp_filter[LMPF_VAL_LAD_INFO_SUBOBJ_SEC_RC_PC_ID], 2533 { "SC PC Address", "lmp.lad_sec_rc_pc_id", FT_IPv4, BASE_NONE, NULL, 0x0, 2534 NULL, HFILL }}, 2535 {&hf_lmp_filter[LMPF_VAL_LAD_INFO_SUBOBJ_SEC_RC_PC_ADDR], 2536 { "SC PC Address", "lmp.lad_sec_rc_pc_addr", FT_IPv4, BASE_NONE, NULL, 0x0, 2537 NULL, HFILL }}, 2538 {&hf_lmp_filter[LMPF_VAL_LAD_INFO_SUBOBJ_SWITCHING_TYPE], 2539 { "Interface Switching Capability", "lmp.lad_switching", FT_UINT8, BASE_DEC|BASE_RANGE_STRING, 2540 RVALS(gmpls_switching_type_rvals), 0x0, NULL, HFILL }}, 2541 {&hf_lmp_filter[LMPF_VAL_LAD_INFO_SUBOBJ_LSP_ENCODING], 2542 { "LSP Encoding Type", "lmp.lad_encoding", FT_UINT8, BASE_DEC|BASE_RANGE_STRING, 2543 RVALS(gmpls_lsp_enc_rvals), 0x0, NULL, HFILL }}, 2544 {&hf_lmp_filter[LMPF_CHECKSUM], 2545 { "Message Checksum", "lmp.checksum", FT_UINT16, BASE_HEX, NULL, 0x0, 2546 NULL, HFILL }}, 2547 {&hf_lmp_filter[LMPF_CHECKSUM_STATUS], 2548 { "Checksum Status", "lmp.checksum.status", FT_UINT8, BASE_NONE, VALS(proto_checksum_vals), 0x0, 2549 NULL, HFILL }}, 2550 {&hf_lmp_data, 2551 { "Data", "lmp.data", FT_BYTES, BASE_NONE, NULL, 0x0, 2552 NULL, HFILL }}, 2553 2554 /* Generated from convert_proto_tree_add_text.pl */ 2555 { &hf_lmp_version, { "LMP Version", "lmp.version", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }}, 2556 { &hf_lmp_header_flags, { "Flags", "lmp.header_flags", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }}, 2557 { &hf_lmp_header_length, { "Length", "lmp.header_length", FT_UINT16, BASE_DEC|BASE_UNIT_STRING, &units_byte_bytes, 0x0, NULL, HFILL }}, 2558 { &hf_lmp_negotiable, { "Negotiable", "lmp.negotiable", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x80, NULL, HFILL }}, 2559 { &hf_lmp_object_length, { "Length", "lmp.object_length", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }}, 2560 { &hf_lmp_object_class, { "Object Class", "lmp.object_class", FT_UINT8, BASE_DEC, VALS(lmp_class_vals), 0x0, NULL, HFILL }}, 2561 { &hf_lmp_verify_interval, { "Verify Interval", "lmp.verify_interval", FT_UINT16, BASE_DEC|BASE_UNIT_STRING, &units_milliseconds, 0x0, NULL, HFILL }}, 2562 { &hf_lmp_number_of_data_links, { "Number of Data Links", "lmp.number_of_data_links", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }}, 2563 { &hf_lmp_verify_transport_mechanism, { "Verify Transport Mechanism", "lmp.verify_transport_mechanism", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }}, 2564 { &hf_lmp_transmission_rate, { "Transmission Rate", "lmp.transmission_rate", FT_FLOAT, BASE_NONE, NULL, 0x0, NULL, HFILL }}, 2565 { &hf_lmp_wavelength, { "Wavelength", "lmp.wavelength", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }}, 2566 { &hf_lmp_verifydeadinterval, { "VerifyDeadInterval", "lmp.verifydeadinterval", FT_UINT16, BASE_DEC|BASE_UNIT_STRING, &units_milliseconds, 0x0, NULL, HFILL }}, 2567 { &hf_lmp_verify_transport_response, { "Verify Transport Response", "lmp.verify_transport_response", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }}, 2568 { &hf_lmp_data_link_local_id_ipv6, { "Data-Link Local ID - IPv6", "lmp.data_link.local_ipv6", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL }}, 2569 { &hf_lmp_data_link_remote_id_ipv6, { "Data-Link Remote ID - IPv6", "lmp.data_link.remote_ipv6", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL }}, 2570 { &hf_lmp_subobject_type, { "Subobject Type", "lmp.subobject_type", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }}, 2571 { &hf_lmp_subobject_length, { "Subobject Length", "lmp.subobject_length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }}, 2572 { &hf_lmp_minimum_reservable_bandwidth, { "Minimum Reservable Bandwidth", "lmp.minimum_reservable_bandwidth", FT_FLOAT, BASE_NONE, NULL, 0x0, NULL, HFILL }}, 2573 { &hf_lmp_maximum_reservable_bandwidth, { "Maximum Reservable Bandwidth", "lmp.maximum_reservable_bandwidth", FT_FLOAT, BASE_NONE, NULL, 0x0, NULL, HFILL }}, 2574 { &hf_lmp_interface_id_ipv4, { "Interface ID - IPv4", "lmp.interface_id.ipv4", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }}, 2575 { &hf_lmp_interface_id_ipv6, { "Interface ID - IPv6", "lmp.interface_id.ipv6", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL }}, 2576 { &hf_lmp_interface_id_unnumbered, { "Interface ID - Unnumbered", "lmp.interface_id.id_unnumbered", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }}, 2577 { &hf_lmp_link, { "Link", "lmp.link", FT_BOOLEAN, 32, TFS(&tfs_active_monitoring_not_allocated), 0x80000000, NULL, HFILL }}, 2578 { &hf_lmp_channel_status, { "Channel Status", "lmp.channel_status", FT_UINT32, BASE_DEC, VALS(channel_status_str), 0x7fffffff, NULL, HFILL }}, 2579 { &hf_lmp_uni_version, { "UNI Version", "lmp.uni_version", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }}, 2580 { &hf_lmp_link_type, { "Link Type", "lmp.link_type", FT_UINT8, BASE_DEC, VALS(service_attribute_link_type_str), 0x0, NULL, HFILL }}, 2581 { &hf_lmp_signal_types_sdh, { "Signal Types", "lmp.signal_types", FT_UINT8, BASE_DEC, VALS(service_attribute_signal_types_sdh_str), 0x0, NULL, HFILL }}, 2582 { &hf_lmp_signal_types_sonet, { "Signal Types", "lmp.signal_types", FT_UINT8, BASE_DEC, VALS(service_attribute_signal_types_sonet_str), 0x0, NULL, HFILL }}, 2583 { &hf_lmp_free_timeslots, { "Free timeslots", "lmp.free_timeslots", FT_UINT24, BASE_DEC, NULL, 0x0, NULL, HFILL }}, 2584 }; 2585 2586 static ei_register_info ei[] = { 2587 { &ei_lmp_checksum_incorrect, { "lmp.checksum.incorrect", PI_PROTOCOL, PI_WARN, "Incorrect checksum", EXPFILL }}, 2588 { &ei_lmp_invalid_msg_type, { "lmp.invalid_msg_type", PI_PROTOCOL, PI_WARN, "Invalid message type", EXPFILL }}, 2589 { &ei_lmp_invalid_class, { "lmp.invalid_class", PI_PROTOCOL, PI_WARN, "Invalid class", EXPFILL }}, 2590 { &ei_lmp_trace_len, { "lmp.trace.len_invalid", PI_PROTOCOL, PI_WARN, "Invalid Trace Length", EXPFILL }}, 2591 { &ei_lmp_obj_len, { "lmp.obj.len_invalid", PI_PROTOCOL, PI_WARN, "Invalid Object Length", EXPFILL }} 2592 }; 2593 2594 expert_module_t* expert_lmp; 2595 2596 for (i=0; i<NUM_LMP_SUBTREES; i++) { 2597 lmp_subtree[i] = -1; 2598 ett[i] = &lmp_subtree[i]; 2599 } 2600 2601 2602 proto_lmp = proto_register_protocol("Link Management Protocol (LMP)", "LMP", "lmp"); 2603 2604 expert_lmp = expert_register_protocol(proto_lmp); 2605 expert_register_field_array(expert_lmp, ei, array_length(ei)); 2606 2607 proto_register_field_array(proto_lmp, lmpf_info, array_length(lmpf_info)); 2608 proto_register_subtree_array(ett, array_length(ett)); 2609 2610 register_lmp_prefs(); 2611 } 2612 2613 void 2614 proto_reg_handoff_lmp(void) 2615 { 2616 lmp_handle = create_dissector_handle(dissect_lmp, proto_lmp); 2617 dissector_add_uint_with_preference("udp.port", UDP_PORT_LMP_DEFAULT, lmp_handle); 2618 } 2619 2620 /* 2621 * Editor modelines - https://www.wireshark.org/tools/modelines.html 2622 * 2623 * Local variables: 2624 * c-basic-offset: 4 2625 * tab-width: 8 2626 * indent-tabs-mode: nil 2627 * End: 2628 * 2629 * vi: set shiftwidth=4 tabstop=8 expandtab: 2630 * :indentSize=4:tabSize=8:noTabs=true: 2631 */ 2632