Ethereal-dev: [Ethereal-dev] [PATCH] add CRLDP support to packet-ldp.c
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Michael Rozhavsky <mike@xxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 24 Apr 2002 19:27:35 +0000 (UTC)
Hi, Attached patch adds CRLDP support to LDP protocol (see RFC3212). Also it fixes some minor bugs. -- Michael Rozhavsky
Index: packet-ldp.c =================================================================== RCS file: /cvsroot/ethereal/packet-ldp.c,v retrieving revision 1.32 diff -u -r1.32 packet-ldp.c --- packet-ldp.c 2002/04/08 20:30:52 1.32 +++ packet-ldp.c 2002/04/24 16:58:41 @@ -5,6 +5,9 @@ * * Copyright (c) November 2000 by Richard Sharpe <rsharpe@xxxxxxxxxx> * + * CRLDP (RFC3212) is now supported + * - (c) 2002 Michael Rozhavsky <mike[AT]tochna.technion.ac.il> + * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@xxxxxxxxxxxx> * Copyright 1999 Gerald Combs @@ -142,6 +145,34 @@ static int hf_ldp_tlv_fec_vc_intparam_maxcatmcells = -1; static int hf_ldp_tlv_fec_vc_intparam_desc = -1; static int hf_ldp_tlv_fec_vc_intparam_cembytes = -1; +static int hf_ldp_tlv_lspid_act_flg = -1; +static int hf_ldp_tlv_lspid_cr_lsp = -1; +static int hf_ldp_tlv_lspid_ldpid = -1; +static int hf_ldp_tlv_er_hop_loose = -1; +static int hf_ldp_tlv_er_hop_prelen = -1; +static int hf_ldp_tlv_er_hop_prefix4 = -1; +static int hf_ldp_tlv_er_hop_prefix6 = -1; +static int hf_ldp_tlv_er_hop_as = -1; +static int hf_ldp_tlv_er_hop_cr_lsp = -1; +static int hf_ldp_tlv_er_hop_ldpid = -1; +static int hf_ldp_tlv_flags_reserv = -1; +static int hf_ldp_tlv_flags_weight = -1; +static int hf_ldp_tlv_flags_ebs = -1; +static int hf_ldp_tlv_flags_cbs = -1; +static int hf_ldp_tlv_flags_cdr = -1; +static int hf_ldp_tlv_flags_pbs = -1; +static int hf_ldp_tlv_flags_pdr = -1; +static int hf_ldp_tlv_frequency = -1; +static int hf_ldp_tlv_pdr = -1; +static int hf_ldp_tlv_pbs = -1; +static int hf_ldp_tlv_cdr = -1; +static int hf_ldp_tlv_cbs = -1; +static int hf_ldp_tlv_ebs = -1; +static int hf_ldp_tlv_weight = -1; +static int hf_ldp_tlv_set_prio = -1; +static int hf_ldp_tlv_hold_prio = -1; +static int hf_ldp_tlv_route_pinning = -1; +static int hf_ldp_tlv_resource_class = -1; static int ett_ldp = -1; static int ett_ldp_header = -1; static int ett_ldp_ldpid = -1; @@ -185,6 +216,16 @@ #define TLV_ATM_SESSION_PARMS 0x0501 #define TLV_FRAME_RELAY_SESSION_PARMS 0x0502 #define TLV_LABEL_REQUEST_MESSAGE_ID 0x0600 +#define TLV_ER 0x0800 +#define TLV_ER_HOP_IPV4 0x0801 +#define TLV_ER_HOP_IPV6 0x0802 +#define TLV_ER_HOP_AS 0x0803 +#define TLV_ER_HOP_LSPID 0x0804 +#define TLV_TRAFFIC_PARAM 0x0810 +#define TLV_PREEMPTION 0x0820 +#define TLV_LSPID 0x0821 +#define TLV_RESOURCE_CLASS 0x0822 +#define TLV_ROUTE_PINNING 0x0823 #define TLV_VENDOR_PRIVATE_START 0x3E00 #define TLV_VENDOR_PRIVATE_END 0x3EFF @@ -211,6 +252,16 @@ { TLV_ATM_SESSION_PARMS, "ATM Session Parameters TLV"}, { TLV_FRAME_RELAY_SESSION_PARMS, "Frame Relay Session Parameters TLV"}, { TLV_LABEL_REQUEST_MESSAGE_ID, "Label Request Message ID TLV"}, + { TLV_LSPID, "LSP ID TLV"}, + { TLV_ER, "Explicit route TLV"}, + { TLV_ER_HOP_IPV4, "ER hop IPv4 prefix TLV"}, + { TLV_ER_HOP_IPV6, "ER hop IPv6 prefix TLV"}, + { TLV_ER_HOP_AS, "ER hop Autonomous system number prefix TLV"}, + { TLV_TRAFFIC_PARAM, "Traffic parameters TLV"}, + { TLV_PREEMPTION, "Preemption TLV"}, + { TLV_ER_HOP_LSPID, "ER hop LSPID prefix TLV"}, + { TLV_RESOURCE_CLASS, "Resource Class (Color) TLV"}, + { TLV_ROUTE_PINNING, "Route Pinning TLV"}, { TLV_VENDOR_PRIVATE_START, "Vendor Private TLV"}, { TLV_EXPERIMENTAL_START, "Experimental TLV"}, { 0, NULL} @@ -264,8 +315,8 @@ }; static const value_string tlv_unknown_vals[] = { - {0, "Known TLV"}, - {1, "Known TLV"}, + {0, "Known TLV, do not Forward"}, + {1, "Known TLV, do Forward"}, {2, "Unknown TLV, do not Forward"}, {3, "Unknown TLV, do Forward"}, {0, NULL} @@ -274,12 +325,14 @@ #define WILDCARD_FEC 1 #define PREFIX_FEC 2 #define HOST_FEC 3 +#define CRLSP_FEC 4 #define VC_FEC 0x80 /* draft-martini-l2circuit-trans-mpls */ static const value_string fec_types[] = { {WILDCARD_FEC, "Wildcard FEC"}, {PREFIX_FEC, "Prefix FEC"}, {HOST_FEC, "Host Address FEC"}, + {CRLSP_FEC, "CR LSP FEC"}, {VC_FEC, "Virtual Circuit FEC"}, {0, NULL} }; @@ -354,6 +407,31 @@ {0, NULL} }; +static const value_string ldp_act_flg_vals[] = { + {0, "indicates initial LSP setup"}, + {1, "indicates modify LSP"}, + {0, NULL} +}; + +static const value_string route_pinning_vals[] = { + {0, "route pinning is not requested"}, + {1, "route pinning is requested"}, + {0, NULL} +}; + +static const value_string ldp_loose_vals[] = { + {0, "strict hop"}, + {1, "loose hop"}, + {0, NULL} +}; + +static const value_string freq_values[] = { + {0, "Unspecified"}, + {1, "Frequent"}, + {2, "VeryFrequent"}, + {0, NULL} +}; + static const true_false_string tlv_atm_dirbit = { "Bidirectional capability", "Unidirectional capability" @@ -442,12 +520,6 @@ char *str; if (tree) { - - if( rem < 4 ) { - proto_tree_add_text(tree, tvb, offset, rem, "Error processing TLV"); - return; - } - ti=proto_tree_add_text(tree, tvb, offset, rem, "FEC Elements"); val_tree=proto_item_add_subtree(ti, ett_ldp_tlv_val); if(val_tree == NULL) return; @@ -455,10 +527,11 @@ while (rem > 0){ switch (tvb_get_guint8(tvb, offset)) { case WILDCARD_FEC: - ti = proto_tree_add_text(val_tree, tvb, offset, 4, "FEC Element %u", ix); + case CRLSP_FEC: + ti = proto_tree_add_text(val_tree, tvb, offset, 1, "FEC Element %u", ix); fec_tree = proto_item_add_subtree(ti, ett_ldp_fec); if(fec_tree == NULL) return; - proto_tree_add_item(fec_tree, hf_ldp_tlv_fec_wc,tvb, offset, 4, FALSE); + proto_tree_add_item(fec_tree, hf_ldp_tlv_fec_wc,tvb, offset, 1, FALSE); rem -= 1; offset += 1; break; @@ -1159,6 +1232,311 @@ } +void +dissect_tlv_lspid(tvbuff_t *tvb, guint offset,proto_tree *tree, int rem) +{ + proto_tree *ti = NULL, *val_tree = NULL; + + if (tree != NULL) { + if(rem != 8) { + proto_tree_add_text(tree, tvb, offset, rem, + "Error processing TLV"); + return; + } + + ti = proto_tree_add_text(tree, tvb, offset, rem, + "LSP ID"); + val_tree = proto_item_add_subtree(ti, ett_ldp_tlv_val); + + if(val_tree != NULL) { + proto_tree_add_item(val_tree, hf_ldp_tlv_lspid_act_flg, + tvb, offset, 2, FALSE); + offset += 2; + proto_tree_add_item(val_tree, hf_ldp_tlv_lspid_cr_lsp, + tvb, offset, 2, FALSE); + offset += 2; + proto_tree_add_item(val_tree, hf_ldp_tlv_lspid_ldpid, + tvb, offset, 4, FALSE); + } + } +} + +void +dissect_tlv_er_hop_ipv4(tvbuff_t *tvb, guint offset, proto_tree *tree, int rem) +{ + proto_tree *ti = NULL, *val_tree = NULL; + + + if (tree != NULL) { + if(rem != 8) { + proto_tree_add_text(tree, tvb, offset, rem, + "Error processing TLV"); + return; + } + ti = proto_tree_add_text(tree, tvb, offset, rem, "ER HOP IPv4"); + val_tree = proto_item_add_subtree(ti, ett_ldp_tlv_val); + + if(val_tree != NULL) { + proto_tree_add_item(val_tree, hf_ldp_tlv_er_hop_loose, + tvb, offset, 3, FALSE); + offset += 3; + proto_tree_add_item(val_tree, hf_ldp_tlv_er_hop_prelen, + tvb, offset, 1, FALSE); + offset ++; + proto_tree_add_item(val_tree, hf_ldp_tlv_er_hop_prefix4, + tvb, offset, 4, FALSE); + } + } +} + +void +dissect_tlv_er_hop_ipv6(tvbuff_t *tvb, guint offset, proto_tree *tree, int rem) +{ + proto_tree *ti = NULL, *val_tree = NULL; + + if (tree != NULL) { + if(rem != 20) { + proto_tree_add_text(tree, tvb, offset, rem, + "Error processing TLV"); + return; + } + ti = proto_tree_add_text(tree, tvb, offset, rem, "ER HOP IPv6"); + val_tree = proto_item_add_subtree(ti, ett_ldp_tlv_val); + + if(val_tree != NULL) { + proto_tree_add_item(val_tree, hf_ldp_tlv_er_hop_loose, + tvb, offset, 3, FALSE); + offset += 3; + proto_tree_add_item(val_tree, hf_ldp_tlv_er_hop_prelen, + tvb, offset, 1, FALSE); + offset ++; + proto_tree_add_item(val_tree, hf_ldp_tlv_er_hop_prefix6, + tvb, offset, 16, FALSE); + } + } +} + +void +dissect_tlv_er_hop_as(tvbuff_t *tvb, guint offset, proto_tree *tree, int rem) +{ + proto_tree *ti = NULL, *val_tree = NULL; + + if (tree != NULL) { + if(rem != 4) { + proto_tree_add_text(tree, tvb, offset, rem, + "Error processing TLV"); + return; + } + ti = proto_tree_add_text(tree, tvb, offset, rem, "ER HOP AS"); + val_tree = proto_item_add_subtree(ti, ett_ldp_tlv_val); + + if(val_tree != NULL) { + proto_tree_add_item(val_tree, hf_ldp_tlv_er_hop_loose, + tvb, offset, 2, FALSE); + offset += 2; + proto_tree_add_item(val_tree, hf_ldp_tlv_er_hop_as, + tvb, offset, 2, FALSE); + } + } +} + +void +dissect_tlv_er_hop_lspid(tvbuff_t *tvb, guint offset, proto_tree *tree, int rem) +{ + proto_tree *ti = NULL, *val_tree = NULL; + + if (tree != NULL) { + if(rem != 8) { + proto_tree_add_text(tree, tvb, offset, rem, + "Error processing TLV"); + return; + } + ti = proto_tree_add_text(tree, tvb, offset, rem, "ER HOP LSPID"); + val_tree = proto_item_add_subtree(ti, ett_ldp_tlv_val); + + if(val_tree != NULL) { + proto_tree_add_item(val_tree, hf_ldp_tlv_er_hop_loose, + tvb, offset, 2, FALSE); + offset += 2; + proto_tree_add_item(val_tree, hf_ldp_tlv_er_hop_cr_lsp, + tvb, offset, 2, FALSE); + offset += 2; + proto_tree_add_item(val_tree, hf_ldp_tlv_er_hop_ldpid, + tvb, offset, 4, FALSE); + } + } +} + +void +dissect_tlv_traffic(tvbuff_t *tvb, guint offset, proto_tree *tree, int rem) +{ + proto_tree *ti = NULL, *val_tree = NULL; + union { + guint32 val_32; + float val_f; + } conv; + guint8 val_8; + proto_item *pi; + + if (tree != NULL) { + if(rem != 24) { + proto_tree_add_text(tree, tvb, offset, rem, + "Error processing TLV"); + return; + } + ti = proto_tree_add_text(tree, tvb, offset, rem, "Traffic parameters"); + val_tree = proto_item_add_subtree(ti, ett_ldp_tlv_val); + + if(val_tree != NULL) { + /* flags */ + proto_tree_add_item(val_tree, hf_ldp_tlv_flags_reserv, tvb, offset, 1, FALSE); + proto_tree_add_item(val_tree, hf_ldp_tlv_flags_weight, tvb, offset, 1, FALSE); + proto_tree_add_item(val_tree, hf_ldp_tlv_flags_ebs, tvb, offset, 1, FALSE); + proto_tree_add_item(val_tree, hf_ldp_tlv_flags_cbs, tvb, offset, 1, FALSE); + proto_tree_add_item(val_tree, hf_ldp_tlv_flags_cdr, tvb, offset, 1, FALSE); + proto_tree_add_item(val_tree, hf_ldp_tlv_flags_pbs, tvb, offset, 1, FALSE); + proto_tree_add_item(val_tree, hf_ldp_tlv_flags_pdr, tvb, offset, 1, FALSE); + + offset ++; + /* frequency */ + proto_tree_add_item(val_tree, hf_ldp_tlv_frequency, tvb, offset, 1, FALSE); + offset ++; + + /* reserver byte */ + offset ++; + + /* wieght */ + pi = proto_tree_add_item(val_tree, hf_ldp_tlv_weight, tvb, offset, 1, FALSE); + val_8 = tvb_get_guint8(tvb, offset); + if (val_8 == 0) + proto_item_set_text(pi, "Weight: Not applicable"); + offset ++; + + /* PDR */ + conv.val_32 = tvb_get_ntohl (tvb, offset); + proto_tree_add_double_format(val_tree, hf_ldp_tlv_pdr, tvb, offset, + 4, conv.val_f, "PDR: %f Bps", conv.val_f); + offset += 4; + /* PBS */ + conv.val_32 = (float)tvb_get_ntohl (tvb, offset); + proto_tree_add_double_format(val_tree, hf_ldp_tlv_pbs, tvb, offset, + 4, conv.val_f, "PBS: %f Bytes", conv.val_f); + offset += 4; + + /* CDR */ + conv.val_32 = (float)tvb_get_ntohl (tvb, offset); + proto_tree_add_double_format(val_tree, hf_ldp_tlv_cdr, tvb, offset, + 4, conv.val_f, "CDR: %f Bps", conv.val_f); + offset += 4; + + /* CBS */ + conv.val_32 = (float)tvb_get_ntohl (tvb, offset); + proto_tree_add_double_format(val_tree, hf_ldp_tlv_cbs, tvb, offset, + 4, conv.val_f, "CBS: %f Bytes", conv.val_f); + offset += 4; + + /* EBS */ + conv.val_32 = (float)tvb_get_ntohl (tvb, offset); + proto_tree_add_double_format(val_tree, hf_ldp_tlv_ebs, tvb, offset, + 4, conv.val_f, "EBS: %f Bytes", conv.val_f); + + } + } +} + +void +dissect_tlv_route_pinning(tvbuff_t *tvb, guint offset, proto_tree *tree, int rem) +{ + proto_tree *ti = NULL, *val_tree = NULL; + + if (tree != NULL) { + if(rem != 4) { + proto_tree_add_text(tree, tvb, offset, rem, + "Error processing TLV"); + return; + } + ti = proto_tree_add_text(tree, tvb, offset, rem, "Route Pinning"); + val_tree = proto_item_add_subtree(ti, ett_ldp_tlv_val); + + if(val_tree != NULL) { + proto_tree_add_item(val_tree, hf_ldp_tlv_route_pinning, + tvb, offset, 4, FALSE); + } + } +} + + +void +dissect_tlv_resource_class(tvbuff_t *tvb, guint offset, proto_tree *tree, int rem) +{ + proto_tree *ti = NULL, *val_tree = NULL; + + if (tree != NULL) { + if(rem != 4) { + proto_tree_add_text(tree, tvb, offset, rem, + "Error processing TLV"); + return; + } + ti = proto_tree_add_text(tree, tvb, offset, rem, "Resource Class"); + val_tree = proto_item_add_subtree(ti, ett_ldp_tlv_val); + + if(val_tree != NULL) { + proto_tree_add_item(val_tree, hf_ldp_tlv_resource_class, + tvb, offset, 4, FALSE); + } + } +} + + +void +dissect_tlv_preemption(tvbuff_t *tvb, guint offset, proto_tree *tree, int rem) +{ + proto_tree *ti = NULL, *val_tree = NULL; + + if (tree != NULL) { + if(rem != 4) { + proto_tree_add_text(tree, tvb, offset, rem, + "Error processing TLV"); + return; + } + ti = proto_tree_add_text(tree, tvb, offset, rem, "Preemption"); + val_tree = proto_item_add_subtree(ti, ett_ldp_tlv_val); + + if(val_tree != NULL) { + proto_tree_add_item(val_tree, hf_ldp_tlv_set_prio, + tvb, offset, 1, FALSE); + offset += 1; + proto_tree_add_item(val_tree, hf_ldp_tlv_hold_prio, + tvb, offset, 1, FALSE); + } + } +} + +int +dissect_tlv(tvbuff_t *tvb, guint offset, proto_tree *tree, int rem); + +void +dissect_tlv_er(tvbuff_t *tvb, guint offset, proto_tree *tree, int rem) +{ + proto_tree *ti = NULL, *val_tree = NULL; + int len; + + if (tree != NULL) { + ti = proto_tree_add_text(tree, tvb, offset, rem, "Explicit route"); + val_tree = proto_item_add_subtree(ti, ett_ldp_tlv_val); + + if(val_tree != NULL) { + len = 0; + while (rem > 0) { + len = dissect_tlv (tvb, offset, val_tree, rem); + offset += len; + rem -= len; + } + } + } +} + + /* Dissect a TLV and return the number of bytes consumed ... */ int @@ -1312,6 +1690,46 @@ proto_tree_add_item(tlv_tree, hf_ldp_tlv_lbl_req_msg_id, tvb,offset + 4,length, FALSE); break; + case TLV_LSPID: + dissect_tlv_lspid(tvb, offset + 4, tlv_tree, length); + break; + + case TLV_ER: + dissect_tlv_er(tvb, offset + 4, tlv_tree, length); + break; + + case TLV_ER_HOP_IPV4: + dissect_tlv_er_hop_ipv4(tvb, offset + 4, tlv_tree, length); + break; + + case TLV_ER_HOP_IPV6: + dissect_tlv_er_hop_ipv6(tvb, offset +4, tlv_tree, length); + break; + + case TLV_ER_HOP_AS: + dissect_tlv_er_hop_as(tvb, offset + 4, tlv_tree, length); + break; + + case TLV_ER_HOP_LSPID: + dissect_tlv_er_hop_lspid(tvb, offset +4, tlv_tree, length); + break; + + case TLV_TRAFFIC_PARAM: + dissect_tlv_traffic(tvb, offset +4, tlv_tree, length); + break; + + case TLV_PREEMPTION: + dissect_tlv_preemption(tvb, offset +4, tlv_tree, length); + break; + + case TLV_RESOURCE_CLASS: + dissect_tlv_resource_class(tvb, offset +4, tlv_tree, length); + break; + + case TLV_ROUTE_PINNING: + dissect_tlv_route_pinning(tvb, offset +4, tlv_tree, length); + break; + case TLV_VENDOR_PRIVATE_START: if( length < 4 ) /*error, at least Vendor ID*/ proto_tree_add_text(tlv_tree, tvb, offset + 4, length,"Error processing TLV"); @@ -1602,10 +2020,10 @@ { "Hold Time", "ldp.msg.tlv.hello.hold", FT_UINT16, BASE_DEC, NULL, 0x0, "Hello Common Parameters Hold Time", HFILL }}, { &hf_ldp_tlv_val_target, - { "Targeted Hello", "ldp.msg.tlv.hello.targeted", FT_BOOLEAN, 8, TFS(&hello_targeted_vals), 0x80, "Hello Common Parameters Targeted Bit", HFILL }}, + { "Targeted Hello", "ldp.msg.tlv.hello.targeted", FT_UINT16, BASE_HEX, TFS(&hello_targeted_vals), 0x8000, "Hello Common Parameters Targeted Bit", HFILL }}, { &hf_ldp_tlv_val_request, - { "Hello Requested", "ldp,msg.tlv.hello.requested", FT_BOOLEAN, 8, TFS(&hello_requested_vals), 0x40, "Hello Common Parameters Hello Requested Bit", HFILL }}, + { "Hello Requested", "ldp,msg.tlv.hello.requested", FT_UINT16, BASE_HEX, TFS(&hello_requested_vals), 0x4000, "Hello Common Parameters Hello Requested Bit", HFILL }}, { &hf_ldp_tlv_val_res, { "Reserved", "ldp.msg.tlv.hello.res", FT_UINT16, BASE_HEX, NULL, 0x3FFF, "Hello Common Parameters Reserved Field", HFILL }}, @@ -1812,6 +2230,89 @@ {&hf_ldp_tlv_fec_vc_intparam_cembytes, {"Payload Bytes", "ldp.msg.tlv.fec.vc.intparam.cembytes", FT_UINT16, BASE_DEC, NULL, 0x0, "VC FEC Interface Param CEM Payload Bytes", HFILL }}, + + { &hf_ldp_tlv_lspid_act_flg, + { "Action Indicator Flag", "ldp.msg.tlv.lspid.actflg", FT_UINT16, BASE_HEX, VALS(ldp_act_flg_vals), 0x000F, "Action Indicator Flag", HFILL}}, + + { &hf_ldp_tlv_lspid_cr_lsp, + { "Local CR-LSP ID", "ldp.msg.tlv.lspid.locallspid", FT_UINT16, BASE_HEX, NULL, 0x0, "Local CR-LSP ID", HFILL}}, + + { &hf_ldp_tlv_lspid_ldpid, + { "Ingress LSR Router ID", "ldp.msg.tlv.lspid.lsrid", FT_IPv4, BASE_DEC, NULL, 0x0, "Ingress LSR Router ID", HFILL}}, + + { &hf_ldp_tlv_er_hop_loose, + { "Loose route bit", "ldp.msg.tlv.er_hop.loose", FT_UINT24, BASE_HEX, VALS(ldp_loose_vals), 0x800000, "Loose route bit", HFILL}}, + + { &hf_ldp_tlv_er_hop_prelen, + { "Prefix length", "ldp.msg.tlv.er_hop.prefixlen", FT_UINT8, BASE_DEC, NULL, 0x0, "Prefix len", HFILL}}, + + { &hf_ldp_tlv_er_hop_prefix4, + { "IPv4 Address", "ldp.msg.tlv.er_hop.prefix4", FT_IPv4, BASE_DEC, NULL, 0x0, "IPv4 Address", HFILL}}, + { &hf_ldp_tlv_er_hop_prefix6, + { "IPv6 Address", "ldp.msg.tlv.er_hop.prefix6", FT_IPv6, BASE_DEC, NULL, 0x0, "IPv6 Address", HFILL}}, + + { &hf_ldp_tlv_er_hop_as, + { "AS Number", "ldp.msg.tlv.er_hop.as", FT_UINT16, BASE_DEC, NULL, 0x0, "AS Number", HFILL}}, + + { &hf_ldp_tlv_er_hop_cr_lsp, + { "Local CR-LSP ID", "ldp.msg.tlv.er_hop.locallspid", FT_UINT16, BASE_DEC, NULL, 0x0, "Local CR-LSP ID", HFILL}}, + + { &hf_ldp_tlv_er_hop_ldpid, + { "Local CR-LSP ID", "ldp.msg.tlv.er_hop.lsrid", FT_IPv4, BASE_DEC, NULL, 0x0, "Local CR-LSP ID", HFILL}}, + + { &hf_ldp_tlv_flags_reserv, + { "Reserved", "ldp.msg.tlv.flags_reserv", FT_UINT8, BASE_HEX, NULL, 0xC0, "Reserved", HFILL}}, + + { &hf_ldp_tlv_flags_pdr, + { "PDR", "ldp.msg.tlv.flags_pdr", FT_BOOLEAN, 8, NULL, 0x1, "PDR", HFILL}}, + + { &hf_ldp_tlv_flags_pbs, + { "PBS", "ldp.msg.tlv.flags_pbs", FT_BOOLEAN, 8, NULL, 0x2, "PBS", HFILL}}, + + { &hf_ldp_tlv_flags_cdr, + { "CDR", "ldp.msg.tlv.flags_cdr", FT_BOOLEAN, 8, NULL, 0x4, "CDR", HFILL}}, + + { &hf_ldp_tlv_flags_cbs, + { "CBS", "ldp.msg.tlv.flags_cbs", FT_BOOLEAN, 8, NULL, 0x8, "CBS", HFILL}}, + + { &hf_ldp_tlv_flags_ebs, + { "EBS", "ldp.msg.tlv.flags_ebs", FT_BOOLEAN, 8, NULL, 0x10, "EBS", HFILL}}, + + { &hf_ldp_tlv_flags_weight, + { "Weight", "ldp.msg.tlv.flags_weight", FT_BOOLEAN, 8, NULL, 0x20, "Weight", HFILL}}, + + { &hf_ldp_tlv_frequency, + { "Frequency", "ldp.msg.tlv.frequency", FT_UINT8, BASE_DEC, VALS(freq_values), 0, "Frequency", HFILL}}, + + { &hf_ldp_tlv_weight, + { "Weight", "ldp.msg.tlv.weight", FT_UINT8, BASE_DEC, NULL, 0, "weight of the CR-LSP", HFILL}}, + + { &hf_ldp_tlv_pdr, + { "PDR", "ldp.msg.tlv.pdr", FT_DOUBLE, BASE_NONE, NULL, 0, "Peak Data Rate", HFILL}}, + + { &hf_ldp_tlv_pbs, + { "PBS", "ldp.msg.tlv.pbs", FT_DOUBLE, BASE_NONE, NULL, 0, "Peak Burst Size", HFILL}}, + + { &hf_ldp_tlv_cdr, + { "CDR", "ldp.msg.tlv.cdr", FT_DOUBLE, BASE_NONE, NULL, 0, "Committed Data Rate", HFILL}}, + + { &hf_ldp_tlv_cbs, + { "CBS", "ldp.msg.tlv.cbs", FT_DOUBLE, BASE_NONE, NULL, 0, "Committed Burst Size", HFILL}}, + + { &hf_ldp_tlv_ebs, + { "EBS", "ldp.msg.tlv.ebs", FT_DOUBLE, BASE_NONE, NULL, 0, "Excess Burst Size", HFILL}}, + + { &hf_ldp_tlv_set_prio, + { "Set Prio", "ldp.msg.tlv.set_prio", FT_UINT8, BASE_DEC, NULL, 0, "LSP setup priority", HFILL}}, + + { &hf_ldp_tlv_hold_prio, + { "Hold Prio", "ldp.msg.tlv.hold_prio", FT_UINT8, BASE_DEC, NULL, 0, "LSP hold priority", HFILL}}, + + { &hf_ldp_tlv_route_pinning, + { "Route Pinning", "ldp.msg.tlv.route_pinning", FT_UINT32, BASE_DEC, VALS(route_pinning_vals), 0x80000000, "Route Pinning", HFILL}}, + + { &hf_ldp_tlv_resource_class, + { "Resource Class", "ldp.msg.tlv.resource_class", FT_UINT32, BASE_HEX, NULL, 0, "Resource Class (Color)", HFILL}}, };
- Follow-Ups:
- Re: [Ethereal-dev] [PATCH] add CRLDP support to packet-ldp.c
- From: Guy Harris
- Re: [Ethereal-dev] [PATCH] add CRLDP support to packet-ldp.c
- Prev by Date: [Ethereal-dev] PATCH: README.bsd
- Next by Date: Re: [Ethereal-dev] [PATCH] add CRLDP support to packet-ldp.c
- Previous by thread: Re: [Ethereal-dev] PATCH: README.bsd
- Next by thread: Re: [Ethereal-dev] [PATCH] add CRLDP support to packet-ldp.c
- Index(es):