diff options
author | Guy Harris <guy@alum.mit.edu> | 2003-04-22 05:35:54 +0000 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2003-04-22 05:35:54 +0000 |
commit | e3c76dd07e3ea9bf1a3a0045c602f4f0d4acc4aa (patch) | |
tree | 20311f3c3ca312b5c478620d22a484adc809a54e /packet-rsvp.c | |
parent | 7d29272f54cb4a3e81f51ab2ee3d042471443e0e (diff) |
From Akira Endoh:
- fix the bug by dissecting the Flags field in RRO IPv4/IPv6/label sub-object
(The 1.80 version of packet-rsvp.c dissects the wrong field in a packet.)
- erase unnecessary commas when displaying RRO IPv4 sub-object
- add support for displaying the error value, written explanation in ERROR
object
- add support for draft-ietf-mpls-nodeid-subobject-00.txt
svn path=/trunk/; revision=7524
Diffstat (limited to 'packet-rsvp.c')
-rw-r--r-- | packet-rsvp.c | 271 |
1 files changed, 198 insertions, 73 deletions
diff --git a/packet-rsvp.c b/packet-rsvp.c index 7b826caee4..3deb7ebf8e 100644 --- a/packet-rsvp.c +++ b/packet-rsvp.c @@ -3,7 +3,7 @@ * * (c) Copyright Ashok Narayanan <ashokn@cisco.com> * - * $Id: packet-rsvp.c,v 1.80 2003/01/28 23:56:40 guy Exp $ + * $Id: packet-rsvp.c,v 1.81 2003/04/22 05:35:54 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -299,7 +299,40 @@ enum rsvp_error_types { RSVP_ERROR_NOTIFY }; -static value_string rsvp_error_vals[] = { +enum { + RSVP_AC_ERROR_DELAY_BOUND_ERROR = 1, + RSVP_AC_ERROR_BANDWITH_UNAVAILABLE, + RSVP_AC_ERROR_LARGE_MTU +}; + +enum { + RSVP_TRAFFIC_CONTROL_ERROR_SERVICE_CONFLICT = 1, + RSVP_TRAFFIC_CONTROL_ERROR_SERVIEC_UNSUPPORTED, + RSVP_TRAFFIC_CONTROL_ERROR_BAD_FLOWSPEC, + RSVP_TRAFFIC_CONTROL_ERROR_BAD_TSPEC, + RSVP_TRAFFIC_CONTROL_ERROR_BAD_ADSPEC +}; + +enum { + RSVP_ROUTING_ERROR_BAD_ERO = 1, + RSVP_ROUTING_ERROR_BAD_STRICT, + RSVP_ROUTING_ERROR_BAD_LOOSE, + RSVP_ROUTING_ERROR_BAD_INITIAL_SUBOBJ, + RSVP_ROUTING_ERROR_NO_ROUTE, + RSVP_ROUTING_ERROR_UNACCEPTABLE_LABEL, + RSVP_ROUTING_ERROR_RRO_LOOP, + RSVP_ROUTING_ERROR_NON_RSVP_CAPABLE_ROUTER, + RSVP_ROUTING_ERROR_LABEL_ALLOC_FAIL, + RSVP_ROUTING_ERROR_UNSUPPORTED_L3PID +}; + +enum { + RSVP_NOTIFY_ERROR_RRO_TOO_LARGE = 1, + RSVP_NOTIFY_ERROR_RRO_NOTIFICATION, + RSVP_NOTIFY_ERROR_RRO_TUNNEL_LOCAL_REPAIRED +}; + +static value_string rsvp_error_codes[] = { {RSVP_ERROR_CONFIRM, "Confirmation"}, {RSVP_ERROR_ADMISSION, "Admission Control Failure "}, {RSVP_ERROR_POLICY, "Policy Control Failure"}, @@ -320,6 +353,44 @@ static value_string rsvp_error_vals[] = { {0, NULL} }; +static value_string rsvp_admission_control_error_vals[] = { + {RSVP_AC_ERROR_DELAY_BOUND_ERROR, "Delay bound cannot be met"}, + {RSVP_AC_ERROR_BANDWITH_UNAVAILABLE, "Requested bandwidth unavailable"}, + {RSVP_AC_ERROR_LARGE_MTU, "MTU in flowspec larger than interface MTU"}, + {0, NULL} +}; + +static value_string rsvp_traffic_control_error_vals[] = { + {RSVP_TRAFFIC_CONTROL_ERROR_SERVICE_CONFLICT, "Service conflict"}, + {RSVP_TRAFFIC_CONTROL_ERROR_SERVIEC_UNSUPPORTED, "Service unsupported"}, + {RSVP_TRAFFIC_CONTROL_ERROR_BAD_FLOWSPEC, "Bad Flowspec value"}, + {RSVP_TRAFFIC_CONTROL_ERROR_BAD_TSPEC, "Bad Tspec value"}, + {RSVP_TRAFFIC_CONTROL_ERROR_BAD_ADSPEC, "Bad Adspec value"}, + {0, NULL} +}; + +static value_string rsvp_routing_error_vals[] = { + {RSVP_ROUTING_ERROR_BAD_ERO, "Bad EXPLICIT_ROUTE object"}, + {RSVP_ROUTING_ERROR_BAD_STRICT, "Bad strict node"}, + {RSVP_ROUTING_ERROR_BAD_LOOSE, "Bad loose node"}, + {RSVP_ROUTING_ERROR_BAD_INITIAL_SUBOBJ, "Bad initial subobject"}, + {RSVP_ROUTING_ERROR_NO_ROUTE, "No route available toward destination"}, + {RSVP_ROUTING_ERROR_UNACCEPTABLE_LABEL, "Unacceptable label value"}, + {RSVP_ROUTING_ERROR_RRO_LOOP, "RRO indicated routing loops"}, + {RSVP_ROUTING_ERROR_NON_RSVP_CAPABLE_ROUTER, "non-RSVP-capable router stands in the path"}, + {RSVP_ROUTING_ERROR_LABEL_ALLOC_FAIL, "MPLS label allocation failure"}, + {RSVP_ROUTING_ERROR_UNSUPPORTED_L3PID, "Unsupported L3PID"}, + {0, NULL} +}; + +static value_string rsvp_notify_error_vals[] = { + {RSVP_NOTIFY_ERROR_RRO_TOO_LARGE, "RRO too large for MTU"}, + {RSVP_NOTIFY_ERROR_RRO_NOTIFICATION, "RRO Notification"}, + {RSVP_NOTIFY_ERROR_RRO_TUNNEL_LOCAL_REPAIRED, "Tunnel locally repaired"}, + {0, NULL} +}; + + /* * Defines the reservation style plus style-specific information that * is not a FLOWSPEC or FILTER_SPEC object, in a RESV message. @@ -1319,6 +1390,48 @@ dissect_rsvp_time_values (proto_tree *ti, tvbuff_t *tvb, } /*------------------------------------------------------------------------------ + * Error value field in ERROR object + *------------------------------------------------------------------------------*/ +static guint16 +dissect_rsvp_error_value (proto_tree *ti, tvbuff_t *tvb, + int offset, guint8 error_code) +{ + guint16 error_val; + value_string *rsvp_error_vals = NULL; + + error_val = tvb_get_ntohs(tvb, offset); + switch (error_code) { + case RSVP_ERROR_ADMISSION: + rsvp_error_vals = rsvp_admission_control_error_vals; + break; + case RSVP_ERROR_TRAFFIC: + rsvp_error_vals = rsvp_traffic_control_error_vals; + break; + case RSVP_ERROR_ROUTING: + rsvp_error_vals = rsvp_routing_error_vals; + break; + case RSVP_ERROR_NOTIFY: + rsvp_error_vals = rsvp_notify_error_vals; + } + switch (error_code) { + case RSVP_ERROR_ADMISSION: + case RSVP_ERROR_TRAFFIC: + case RSVP_ERROR_NOTIFY: + case RSVP_ERROR_ROUTING: + if ((error_val & 0xc0) == 0) { + proto_tree_add_text(ti, tvb, offset, 2, + "Error value: %u - %s", error_val, + val_to_str(error_val, rsvp_error_vals, "Unknown (%d)")); + break; + } + default: + proto_tree_add_text(ti, tvb, offset, 2, + "Error value: %u", error_val); + } + return error_val; +} + +/*------------------------------------------------------------------------------ * ERROR *------------------------------------------------------------------------------*/ static void @@ -1339,6 +1452,7 @@ dissect_rsvp_error (proto_tree *ti, tvbuff_t *tvb, switch(type) { case 1: { guint8 error_code; + guint16 error_val; proto_tree_add_text(rsvp_object_tree, tvb, offset+3, 1, "C-type: 1 - IPv4"); @@ -1351,19 +1465,17 @@ dissect_rsvp_error (proto_tree *ti, tvbuff_t *tvb, error_code = tvb_get_guint8(tvb, offset2+5); proto_tree_add_text(rsvp_object_tree, tvb, offset2+5, 1, "Error code: %u - %s", error_code, - val_to_str(error_code, rsvp_error_vals, "Unknown (%d)")); - proto_tree_add_text(rsvp_object_tree, tvb, offset2+6, 2, - "Error value: %u", - tvb_get_ntohs(tvb, offset2+6)); + val_to_str(error_code, rsvp_error_codes, "Unknown (%d)")); + error_val = dissect_rsvp_error_value(rsvp_object_tree, tvb, offset2+6, error_code); proto_item_set_text(ti, "ERROR: IPv4, Error code: %s, Value: %d, Error Node: %s", - val_to_str(error_code, rsvp_error_vals, "Unknown (%d)"), - tvb_get_ntohs(tvb, offset2+6), - ip_to_str(tvb_get_ptr(tvb, offset2, 4))); + val_to_str(error_code, rsvp_error_codes, "Unknown (%d)"), + error_val, ip_to_str(tvb_get_ptr(tvb, offset2, 4))); break; } case 2: { guint8 error_code; + guint16 error_val; proto_tree_add_text(rsvp_object_tree, tvb, offset+3, 1, "C-type: 2 - IPv6"); @@ -1375,17 +1487,16 @@ dissect_rsvp_error (proto_tree *ti, tvbuff_t *tvb, tvb_get_guint8(tvb, offset2+16)); error_code = tvb_get_guint8(tvb, offset2+17); proto_tree_add_text(rsvp_object_tree, tvb, offset2+17, 1, - "Error code: %u - %s", error_code, - val_to_str(error_code, rsvp_error_vals, "Unknown")); - proto_tree_add_text(rsvp_object_tree, tvb, offset2+18, 2, - "Error value: %u", - tvb_get_ntohs(tvb, offset2+18)); + "Error code: %u - %s", + error_code = tvb_get_guint8(tvb, offset2+17), + val_to_str(error_code, rsvp_error_codes, "Unknown")); + error_val = dissect_rsvp_error_value(ti, tvb, offset2+18, error_code); break; } - case 3: -{ + case 3: { guint8 error_code; + guint16 error_val; proto_tree_add_text(rsvp_object_tree, tvb, offset+3, 1, "C-type: 3 - IPv4 IF-ID"); @@ -1398,19 +1509,13 @@ dissect_rsvp_error (proto_tree *ti, tvbuff_t *tvb, error_code = tvb_get_guint8(tvb, offset2+5); proto_tree_add_text(rsvp_object_tree, tvb, offset2+5, 1, "Error code: %u - %s", error_code, - val_to_str(error_code, rsvp_error_vals, "Unknown (%d)")); - proto_tree_add_text(rsvp_object_tree, tvb, offset2+6, 2, - "Error value: %u", - tvb_get_ntohs(tvb, offset2+6)); - + val_to_str(error_code, rsvp_error_codes, "Unknown (%d)")); + error_val = dissect_rsvp_error_value(ti, tvb, offset2+6, error_code); proto_item_set_text(ti, "ERROR: IPv4 IF-ID, Error code: %s, Value: %d, Control Node: %s. ", - val_to_str(error_code, rsvp_error_vals, "Unknown (%d)"), - tvb_get_ntohs(tvb, offset2+6), - ip_to_str(tvb_get_ptr(tvb, offset2, 4))); - + val_to_str(error_code, rsvp_error_codes, "Unknown (%d)"), + error_val, ip_to_str(tvb_get_ptr(tvb, offset2, 4))); dissect_rsvp_ifid_tlv(ti, rsvp_object_tree, tvb, offset+12, obj_length, TREE(TT_ERROR_SUBOBJ)); - break; } @@ -2721,7 +2826,7 @@ dissect_rsvp_ero_rro_subobjects (proto_tree *ti, proto_tree *rsvp_object_tree, tvbuff_t *tvb, int offset, int obj_length, int class) { - int i, j, k, l; + int i, j, k, l, flags; proto_tree *ti2, *rsvp_ro_subtree, *rsvp_rro_flags_subtree; int tree_type; @@ -2744,10 +2849,10 @@ dissect_rsvp_ero_rro_subobjects (proto_tree *ti, proto_tree *rsvp_object_tree, k = tvb_get_guint8(tvb, offset+l) & 0x80; ti2 = proto_tree_add_text(rsvp_object_tree, tvb, offset+l, 8, - "IPv4 Subobject - %s, %s", + "IPv4 Subobject - %s%s", ip_to_str(tvb_get_ptr(tvb, offset+l+2, 4)), class == RSVP_CLASS_EXPLICIT_ROUTE ? - (k ? "Loose" : "Strict") : ""); + (k ? ", Loose" : ", Strict") : ""); rsvp_ro_subtree = proto_item_add_subtree(ti2, tree_type); if (class == RSVP_CLASS_EXPLICIT_ROUTE) @@ -2764,36 +2869,45 @@ dissect_rsvp_ero_rro_subobjects (proto_tree *ti, proto_tree *rsvp_object_tree, proto_tree_add_text(rsvp_ro_subtree, tvb, offset+l+6, 1, "Prefix length: %u", tvb_get_guint8(tvb, offset+l+6)); + if (i < 4) { + proto_item_append_text(ti, "IPv4 %s%s", + ip_to_str(tvb_get_ptr(tvb, offset+l+2, 4)), + k ? " [L]" : ""); + } if (class == RSVP_CLASS_RECORD_ROUTE) { - if (k&0x01) proto_item_append_text(ti2, ", Local Protection Available"); - if (k&0x02) proto_item_append_text(ti2, ", Local Protection In Use"); - if (k&0x04) proto_item_append_text(ti2, ", Backup BW Avail"); - if (k&0x08) proto_item_append_text(ti2, ", Backup is Next-Next-Hop"); + flags = tvb_get_guint8(tvb, offset+l+7); + if (flags&0x10) { + proto_item_append_text(ti, " (Node-id)"); + proto_item_append_text(ti2, " (Node-id)"); + } + if (flags&0x01) proto_item_append_text(ti2, ", Local Protection Available"); + if (flags&0x02) proto_item_append_text(ti2, ", Local Protection In Use"); + if (flags&0x04) proto_item_append_text(ti2, ", Backup BW Avail"); + if (flags&0x08) proto_item_append_text(ti2, ", Backup is Next-Next-Hop"); ti2 = proto_tree_add_text(rsvp_ro_subtree, tvb, offset+l+7, 1, - "Flags: 0x%08x", k); + "Flags: 0x%02x", flags); rsvp_rro_flags_subtree = proto_item_add_subtree(ti2, TREE(TT_RECORD_ROUTE_SUBOBJ_FLAGS)); proto_tree_add_text(rsvp_rro_flags_subtree, tvb, offset+l+7, 1, - decode_boolean_bitfield(k, 0x01, 8, + decode_boolean_bitfield(flags, 0x01, 8, "Local Protection Available", "Local Protection Not Available")); proto_tree_add_text(rsvp_rro_flags_subtree, tvb, offset+l+7, 1, - decode_boolean_bitfield(k, 0x02, 8, + decode_boolean_bitfield(flags, 0x02, 8, "Local Protection In Use", "Local Protection Not In Use")); proto_tree_add_text(rsvp_rro_flags_subtree, tvb, offset+l+7, 1, - decode_boolean_bitfield(k, 0x04, 8, + decode_boolean_bitfield(flags, 0x04, 8, "Bandwidth Protection Available", "Bandwidth Protection Not Available")); proto_tree_add_text(rsvp_rro_flags_subtree, tvb, offset+l+7, 1, - decode_boolean_bitfield(k, 0x08, 8, + decode_boolean_bitfield(flags, 0x08, 8, "Node Protection Available", "Node Protection Not Available")); - } - if (i < 4) { - proto_item_append_text(ti, "IPv4 %s%s", - ip_to_str(tvb_get_ptr(tvb, offset+l+2, 4)), - k ? " [L]":""); + proto_tree_add_text(rsvp_rro_flags_subtree, tvb, offset+l+7, 1, + decode_boolean_bitfield(flags, 0x10, 8, + "Address Specifies a Node-id Address", + "Address Doesn't Specify a Node-id Address")); } break; @@ -2819,34 +2933,43 @@ dissect_rsvp_ero_rro_subobjects (proto_tree *ti, proto_tree *rsvp_object_tree, proto_tree_add_text(rsvp_ro_subtree, tvb, offset+l+18, 1, "Prefix length: %u", tvb_get_guint8(tvb, offset+l+18)); + if (i < 4) { + proto_item_append_text(ti, "IPv6 [...]%s", k ? " [L]":""); + } if (class == RSVP_CLASS_RECORD_ROUTE) { - if (k&0x01) proto_item_append_text(ti2, ", Local Protection Available"); - if (k&0x02) proto_item_append_text(ti2, ", Local Protection In Use"); - if (k&0x04) proto_item_append_text(ti2, ", Backup BW Avail"); - if (k&0x08) proto_item_append_text(ti2, ", Backup is Next-Next-Hop"); + flags = tvb_get_guint8(tvb, offset+l+19); + if (flags&0x10) { + proto_item_append_text(ti, " (Node-id)"); + proto_item_append_text(ti2, " (Node-id)"); + } + if (flags&0x01) proto_item_append_text(ti2, ", Local Protection Available"); + if (flags&0x02) proto_item_append_text(ti2, ", Local Protection In Use"); + if (flags&0x04) proto_item_append_text(ti2, ", Backup BW Avail"); + if (flags&0x08) proto_item_append_text(ti2, ", Backup is Next-Next-Hop"); ti2 = proto_tree_add_text(rsvp_ro_subtree, tvb, offset+l+19, 1, - "Flags: 0x%08x", k); + "Flags: 0x%02x", flags); rsvp_rro_flags_subtree = proto_item_add_subtree(ti2, TREE(TT_RECORD_ROUTE_SUBOBJ_FLAGS)); proto_tree_add_text(rsvp_rro_flags_subtree, tvb, offset+l+19, 1, - decode_boolean_bitfield(k, 0x01, 8, + decode_boolean_bitfield(flags, 0x01, 8, "Local Protection Available", "Local Protection Not Available")); proto_tree_add_text(rsvp_rro_flags_subtree, tvb, offset+l+19, 1, - decode_boolean_bitfield(k, 0x02, 8, + decode_boolean_bitfield(flags, 0x02, 8, "Local Protection In Use", "Local Protection Not In Use")); proto_tree_add_text(rsvp_rro_flags_subtree, tvb, offset+l+19, 1, - decode_boolean_bitfield(k, 0x04, 8, + decode_boolean_bitfield(flags, 0x04, 8, "Backup Tunnel Has Bandwidth", "Backup Tunnel Does Not Have Bandwidth")); proto_tree_add_text(rsvp_rro_flags_subtree, tvb, offset+l+19, 1, - decode_boolean_bitfield(k, 0x08, 8, + decode_boolean_bitfield(flags, 0x08, 8, "Backup Tunnel Goes To Next-Next-Hop", "Backup Tunnel Goes To Next-Hop")); - } - if (i < 4) { - proto_item_append_text(ti, "IPv6 [...]%s", k ? " [L]":""); + proto_tree_add_text(rsvp_rro_flags_subtree, tvb, offset+l+19, 1, + decode_boolean_bitfield(flags, 0x10, 8, + "Address Specifies a Node-id Address", + "Address Doesn't Specify a Node-id Address")); } break; @@ -2870,28 +2993,29 @@ dissect_rsvp_ero_rro_subobjects (proto_tree *ti, proto_tree *rsvp_object_tree, "Length: %u", tvb_get_guint8(tvb, offset+l+1)); if (class == RSVP_CLASS_RECORD_ROUTE) { - if (k&0x01) proto_item_append_text(ti2, ", Local Protection Available"); - if (k&0x02) proto_item_append_text(ti2, ", Local Protection In Use"); - if (k&0x04) proto_item_append_text(ti2, ", Backup BW Avail"); - if (k&0x08) proto_item_append_text(ti2, ", Backup is Next-Next-Hop"); + flags = tvb_get_guint8(tvb, offset+l+2); + if (flags&0x01) proto_item_append_text(ti2, ", Local Protection Available"); + if (flags&0x02) proto_item_append_text(ti2, ", Local Protection In Use"); + if (flags&0x04) proto_item_append_text(ti2, ", Backup BW Avail"); + if (flags&0x08) proto_item_append_text(ti2, ", Backup is Next-Next-Hop"); ti2 = proto_tree_add_text(rsvp_ro_subtree, tvb, offset+l+2, 1, - "Flags: 0x%08x", k); + "Flags: 0x%02x", flags); rsvp_rro_flags_subtree = proto_item_add_subtree(ti2, TREE(TT_RECORD_ROUTE_SUBOBJ_FLAGS)); proto_tree_add_text(rsvp_rro_flags_subtree, tvb, offset+l+2, 1, - decode_boolean_bitfield(k, 0x01, 8, + decode_boolean_bitfield(flags, 0x01, 8, "Local Protection Available", "Local Protection Not Available")); proto_tree_add_text(rsvp_rro_flags_subtree, tvb, offset+l+2, 1, - decode_boolean_bitfield(k, 0x02, 8, + decode_boolean_bitfield(flags, 0x02, 8, "Local Protection In Use", "Local Protection Not In Use")); proto_tree_add_text(rsvp_rro_flags_subtree, tvb, offset+l+2, 1, - decode_boolean_bitfield(k, 0x04, 8, + decode_boolean_bitfield(flags, 0x04, 8, "Backup Tunnel Has Bandwidth", "Backup Tunnel Does Not Have Bandwidth")); proto_tree_add_text(rsvp_rro_flags_subtree, tvb, offset+l+2, 1, - decode_boolean_bitfield(k, 0x08, 8, + decode_boolean_bitfield(flags, 0x08, 8, "Backup Tunnel Goes To Next-Next-Hop", "Backup Tunnel Goes To Next-Hop")); } @@ -2928,28 +3052,29 @@ dissect_rsvp_ero_rro_subobjects (proto_tree *ti, proto_tree *rsvp_object_tree, "Length: %u", tvb_get_guint8(tvb, offset+l+1)); if (class == RSVP_CLASS_RECORD_ROUTE) { - if (k&0x01) proto_item_append_text(ti2, ", Local Protection Available"); - if (k&0x02) proto_item_append_text(ti2, ", Local Protection In Use"); - if (k&0x04) proto_item_append_text(ti2, ", Backup BW Avail"); - if (k&0x08) proto_item_append_text(ti2, ", Backup is Next-Next-Hop"); + flags = tvb_get_guint8(tvb, offset+l+2); + if (flags&0x01) proto_item_append_text(ti2, ", Local Protection Available"); + if (flags&0x02) proto_item_append_text(ti2, ", Local Protection In Use"); + if (flags&0x04) proto_item_append_text(ti2, ", Backup BW Avail"); + if (flags&0x08) proto_item_append_text(ti2, ", Backup is Next-Next-Hop"); ti2 = proto_tree_add_text(rsvp_ro_subtree, tvb, offset+l+2, 1, - "Flags: 0x%08x", k); + "Flags: 0x%02x", flags); rsvp_rro_flags_subtree = proto_item_add_subtree(ti2, TREE(TT_RECORD_ROUTE_SUBOBJ_FLAGS)); proto_tree_add_text(rsvp_rro_flags_subtree, tvb, offset+l+2, 1, - decode_boolean_bitfield(k, 0x01, 8, + decode_boolean_bitfield(flags, 0x01, 8, "Local Protection Available", "Local Protection Not Available")); proto_tree_add_text(rsvp_rro_flags_subtree, tvb, offset+l+2, 1, - decode_boolean_bitfield(k, 0x02, 8, + decode_boolean_bitfield(flags, 0x02, 8, "Local Protection In Use", "Local Protection Not In Use")); proto_tree_add_text(rsvp_rro_flags_subtree, tvb, offset+l+2, 1, - decode_boolean_bitfield(k, 0x04, 8, + decode_boolean_bitfield(flags, 0x04, 8, "Backup Tunnel Has Bandwidth", "Backup Tunnel Does Not Have Bandwidth")); proto_tree_add_text(rsvp_rro_flags_subtree, tvb, offset+l+2, 1, - decode_boolean_bitfield(k, 0x08, 8, + decode_boolean_bitfield(flags, 0x08, 8, "Backup Tunnel Goes To Next-Next-Hop", "Backup Tunnel Goes To Next-Hop")); } |