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 <[EMAIL PROTECTED]>
  *
+ * CRLDP (RFC3212) is now supported
+ *   - (c) 2002 Michael Rozhavsky <mike[AT]tochna.technion.ac.il>
+ *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <[EMAIL PROTECTED]>
  * 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}},
 
   };
 

Reply via email to