forked from osmocom/wireshark
L2TP: Add generated PW type field to data packets, etc.
Add a generated item showing the pseudowire type for the session to L2TP data packets. Use ccid instead of tunnel id in the info column for L2TPv3 Consistently use hex for SIDs and CCIDs in L2TPv3 instead of a mix of hex and decimal. Remove some unnecessary whitespace in info column Include the L2-Specific Sublayer length in the L2TP length Put the L2-Specific Sublayer in the L2TP tree instead of the root tree Along with previous commits, fix #16565.
This commit is contained in:
parent
32bce6c8d6
commit
414dab7396
|
@ -1521,7 +1521,7 @@ static int dissect_l2tp_cisco_avps(tvbuff_t *tvb, packet_info *pinfo _U_, proto_
|
|||
switch (avp_type) {
|
||||
case CISCO_ACK:
|
||||
/* process_l2tpv3_control does not set COL_INFO for vendor messages */
|
||||
col_add_fstr(pinfo->cinfo, COL_INFO, "%s - Cisco ACK (tunnel id=%u)", control_msg, l2tp_cntrl_data->ccid);
|
||||
col_add_fstr(pinfo->cinfo, COL_INFO, "%s - Cisco ACK (ccid=%u)", control_msg, l2tp_cntrl_data->ccid);
|
||||
break;
|
||||
|
||||
case CISCO_ASSIGNED_CONNECTION_ID:
|
||||
|
@ -2553,10 +2553,12 @@ process_l2tpv3_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
|||
if (cookie_len == -1)
|
||||
cookie_len = L2TPv3_COOKIE_DEFAULT;
|
||||
|
||||
col_append_fstr(pinfo->cinfo, COL_INFO, "D[S:0x%02X]", sid);
|
||||
col_append_fstr(pinfo->cinfo, COL_INFO, "D[S:0x%08X]", sid);
|
||||
col_set_fence(pinfo->cinfo, COL_INFO);
|
||||
|
||||
proto_tree_add_item(l2tp_tree, hf_l2tp_sid, tvb, idx-4, 4, ENC_BIG_ENDIAN);
|
||||
ti = proto_tree_add_uint(l2tp_tree, hf_l2tp_avp_pseudowire_type, tvb, 0, 0, pw_type);
|
||||
proto_item_set_generated(ti);
|
||||
if (!(tvb_offset_exists(tvb, idx))) {
|
||||
return;
|
||||
}
|
||||
|
@ -2569,7 +2571,7 @@ process_l2tpv3_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
|||
switch(l2_spec){
|
||||
case L2TPv3_L2_SPECIFIC_DEFAULT:
|
||||
if (tree) {
|
||||
ti = proto_tree_add_item(tree, hf_l2tp_l2_spec_def,
|
||||
ti = proto_tree_add_item(l2tp_tree, hf_l2tp_l2_spec_def,
|
||||
tvb, idx, 4, ENC_NA);
|
||||
l2_specific = proto_item_add_subtree(ti, ett_l2tp_l2_spec);
|
||||
|
||||
|
@ -2578,11 +2580,11 @@ process_l2tpv3_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
|||
proto_tree_add_item(l2_specific, hf_l2tp_l2_spec_sequence, tvb,
|
||||
idx + 1, 3, ENC_BIG_ENDIAN);
|
||||
}
|
||||
next_tvb = tvb_new_subset_remaining(tvb, idx + 4);
|
||||
idx += 4;
|
||||
break;
|
||||
case L2TPv3_L2_SPECIFIC_DOCSIS_DMPT:
|
||||
if (tree) {
|
||||
ti = proto_tree_add_item(tree, hf_l2tp_l2_spec_docsis_dmpt,
|
||||
ti = proto_tree_add_item(l2tp_tree, hf_l2tp_l2_spec_docsis_dmpt,
|
||||
tvb, idx, 4, ENC_NA);
|
||||
l2_specific = proto_item_add_subtree(ti, ett_l2tp_l2_spec);
|
||||
|
||||
|
@ -2601,11 +2603,11 @@ process_l2tpv3_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
|||
proto_tree_add_item(l2_specific, hf_l2tp_l2_spec_sequence, tvb,
|
||||
idx + 2, 2, ENC_BIG_ENDIAN);
|
||||
}
|
||||
next_tvb = tvb_new_subset_remaining(tvb, idx + 4);
|
||||
idx += 4;
|
||||
break;
|
||||
case L2TPv3_L2_SPECIFIC_ATM:
|
||||
if (tree) {
|
||||
ti = proto_tree_add_item(tree, hf_l2tp_l2_spec_atm,
|
||||
ti = proto_tree_add_item(l2tp_tree, hf_l2tp_l2_spec_atm,
|
||||
tvb, idx, 4, ENC_NA);
|
||||
l2_specific = proto_item_add_subtree(ti, ett_l2tp_l2_spec);
|
||||
|
||||
|
@ -2627,19 +2629,20 @@ process_l2tpv3_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
|||
proto_tree_add_item(l2_specific, hf_l2tp_l2_spec_sequence, tvb,
|
||||
idx + 1, 3, ENC_BIG_ENDIAN);
|
||||
}
|
||||
next_tvb = tvb_new_subset_remaining(tvb, idx + 4);
|
||||
idx += 4;
|
||||
break;
|
||||
case L2TPv3_L2_SPECIFIC_LAPD:
|
||||
if (tree)
|
||||
proto_tree_add_item(tree, hf_l2tp_lapd_info, tvb, idx + 4, 3, ENC_NA);
|
||||
next_tvb = tvb_new_subset_remaining(tvb, idx + 4 + 3);
|
||||
proto_tree_add_item(l2tp_tree, hf_l2tp_lapd_info, tvb, idx + 4, 3, ENC_NA);
|
||||
idx += 4 + 3;
|
||||
break;
|
||||
case L2TPv3_L2_SPECIFIC_NONE:
|
||||
default:
|
||||
next_tvb = tvb_new_subset_remaining(tvb, idx);
|
||||
break;
|
||||
}
|
||||
|
||||
next_tvb = tvb_new_subset_remaining(tvb, idx);
|
||||
proto_item_set_len(l2tp_item, idx);
|
||||
p_add_proto_data(pinfo->pool, pinfo, proto_l2tp, 0, GUINT_TO_POINTER(pw_type));
|
||||
|
||||
if (!dissector_try_uint_new(pw_type_table, pw_type, next_tvb, pinfo, tree, FALSE, GUINT_TO_POINTER(oam_cell)))
|
||||
|
@ -2743,7 +2746,7 @@ process_l2tpv3_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int
|
|||
|
||||
if ((LENGTH_BIT(control))&&(length==12)) /* ZLB Message */
|
||||
col_add_fstr(pinfo->cinfo, COL_INFO,
|
||||
"%s - ZLB (tunnel id=%u)",
|
||||
"%s - ZLB (ccid=0x%08X)",
|
||||
control_msg , ccid);
|
||||
else
|
||||
{
|
||||
|
@ -2765,7 +2768,7 @@ process_l2tpv3_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int
|
|||
/* We print message type */
|
||||
msg_type = tvb_get_ntohs(tvb, tmp_idx);
|
||||
col_add_fstr(pinfo->cinfo, COL_INFO,
|
||||
"%s - %s (tunnel id=%u)",
|
||||
"%s - %s (ccid=0x%08X)",
|
||||
control_msg ,
|
||||
val_to_str_ext(msg_type, &l2tp_message_type_short_str_vals_ext, "Unknown (%u)"),
|
||||
ccid);
|
||||
|
@ -2776,7 +2779,7 @@ process_l2tpv3_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int
|
|||
* We never pass here except in case of bad l2tp packet!
|
||||
*/
|
||||
col_add_fstr(pinfo->cinfo, COL_INFO,
|
||||
"%s (tunnel id=%u)",
|
||||
"%s (ccid=0x%08X)",
|
||||
control_msg, ccid);
|
||||
}
|
||||
}
|
||||
|
@ -3247,11 +3250,11 @@ proto_register_l2tp(void)
|
|||
NULL, HFILL }},
|
||||
|
||||
{ &hf_l2tp_sid,
|
||||
{ "Session ID","l2tp.sid", FT_UINT32, BASE_DEC, NULL, 0x0,
|
||||
{ "Session ID","l2tp.sid", FT_UINT32, BASE_HEX, NULL, 0x0,
|
||||
NULL, HFILL }},
|
||||
|
||||
{ &hf_l2tp_ccid,
|
||||
{ "Control Connection ID","l2tp.ccid", FT_UINT32, BASE_DEC, NULL, 0x0,
|
||||
{ "Control Connection ID","l2tp.ccid", FT_UINT32, BASE_HEX, NULL, 0x0,
|
||||
NULL, HFILL }},
|
||||
|
||||
{ &hf_l2tp_res,
|
||||
|
|
Loading…
Reference in New Issue