diff options
author | Jaap Keuter <jaap.keuter@xs4all.nl> | 2009-11-07 19:41:58 +0000 |
---|---|---|
committer | Jaap Keuter <jaap.keuter@xs4all.nl> | 2009-11-07 19:41:58 +0000 |
commit | 71a48b6dbf1a446f474965a3c579fe39d8669014 (patch) | |
tree | 31c2b2c6446aadc0832b842bcb23a7626e34f33a /epan/dissectors/packet-l2tp.c | |
parent | 2ffc23cd8b15863b3ea43f6b2df27552d54c4ba6 (diff) |
From Alex Volinsky:
This enhancement implements dissector for Downstream DOCSIS (Data over Cable)
frames, embedded into MPEG packets and encapsulated into L2TPv3 over IP
(DEPI/D-MPT encapsulation). This type of encapsulation is used in Modular Cable
Modem Termination System (M-CMTS) architecture for head-end components that
comply with DOCSIS.
DEPI, the Downstream External PHY Interface, is the interface between the
M-CMTS Core and the EQAM. More specifically, it is an IP Tunnel between the MAC
and PHY in a Modular CMTS system.
L2TPv3 is described in RFC3931.
DOCSIS DEPI data packet transport mechanism is described CM-SP-DEPI-I03-060728
(Downstream External PHY Interface - CableLabs specification)
The format of MPEG packet carrying DOCSIS data is described in
CM-SP-DRFI-I07-081209 (Data-Over-Cable Service Interface Specifications -
CableLabs specification).
svn path=/trunk/; revision=30857
Diffstat (limited to 'epan/dissectors/packet-l2tp.c')
-rw-r--r-- | epan/dissectors/packet-l2tp.c | 52 |
1 files changed, 49 insertions, 3 deletions
diff --git a/epan/dissectors/packet-l2tp.c b/epan/dissectors/packet-l2tp.c index c5d0973cb5..c224d18cc7 100644 --- a/epan/dissectors/packet-l2tp.c +++ b/epan/dissectors/packet-l2tp.c @@ -79,7 +79,10 @@ static int hf_l2tp_ccid = -1; static int hf_l2tp_cookie = -1; static int hf_l2tp_l2_spec_def = -1; static int hf_l2tp_l2_spec_atm = -1; +static int hf_l2tp_l2_spec_docsis_dmpt = -1; +static int hf_l2tp_l2_spec_v = -1; static int hf_l2tp_l2_spec_s = -1; +static int hf_l2tp_l2_spec_flow_id = -1; static int hf_l2tp_l2_spec_sequence = -1; static int hf_l2tp_l2_spec_t = -1; static int hf_l2tp_l2_spec_g = -1; @@ -121,6 +124,9 @@ static int hf_l2tp_cisco_avp_type = -1; #define CIRCUIT_STATUS_BIT(msg_info) (msg_info & 0x0001) /* Circuit Status */ #define CIRCUIT_TYPE_BIT(msg_info) (msg_info & 0x0001) /* Circuit Condition */ +/* DOCSIS DMPT Sub-Layer Header definitions */ +#define FLOW_ID_MASK 0x0E + static gint ett_l2tp = -1; static gint ett_l2tp_ctrl = -1; static gint ett_l2tp_avp = -1; @@ -142,7 +148,8 @@ static enum_val_t l2tpv3_cookies[] = { #define L2TPv3_PROTOCOL_IP 4 #define L2TPv3_PROTOCOL_MPLS 5 #define L2TPv3_PROTOCOL_AAL5 6 -#define L2TPv3_PROTOCOL_LAPD 7 +#define L2TPv3_PROTOCOL_LAPD 7 +#define L2TPv3_PROTOCOL_DOCSIS_DMPT 8 static enum_val_t l2tpv3_protocols[] = { {"eth", "Ethernet", L2TPv3_PROTOCOL_ETH}, @@ -152,7 +159,8 @@ static enum_val_t l2tpv3_protocols[] = { {"ip", "IP", L2TPv3_PROTOCOL_IP}, {"mpls", "MPLS", L2TPv3_PROTOCOL_MPLS}, {"aal5", "AAL5", L2TPv3_PROTOCOL_AAL5}, - {"lapd", "LAPD", L2TPv3_PROTOCOL_LAPD}, + {"lapd", "LAPD", L2TPv3_PROTOCOL_LAPD}, + {"docsis-dmpt", "DOCSIS-DMPT", L2TPv3_PROTOCOL_DOCSIS_DMPT}, {NULL, NULL, 0} }; @@ -160,12 +168,14 @@ static enum_val_t l2tpv3_protocols[] = { #define L2TPv3_L2_SPECIFIC_DEFAULT 1 #define L2TPv3_L2_SPECIFIC_ATM 2 #define L2TPv3_L2_SPECIFIC_LAPD 3 +#define L2TPv3_L2_SPECIFIC_DOCSIS_DMPT 4 static enum_val_t l2tpv3_l2_specifics[] = { {"none", "None", L2TPv3_L2_SPECIFIC_NONE}, {"default", "Default L2-Specific", L2TPv3_L2_SPECIFIC_DEFAULT}, {"atm", "ATM-Specific", L2TPv3_L2_SPECIFIC_ATM}, {"lapd", "LAPD-Specific", L2TPv3_L2_SPECIFIC_LAPD}, + {"dmpt", "DOCSIS DMPT-Specific", L2TPv3_L2_SPECIFIC_DOCSIS_DMPT}, {NULL, NULL, 0} }; @@ -574,6 +584,7 @@ static dissector_handle_t mpls_handle; static dissector_handle_t atm_oam_handle; static dissector_handle_t llc_handle; static dissector_handle_t lapd_handle; +static dissector_handle_t mp2t_handle; static dissector_handle_t data_handle; /* @@ -1395,6 +1406,26 @@ process_l2tpv3_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, } next_tvb = tvb_new_subset_remaining(tvb, index + l2tpv3_cookie + 4); break; + case L2TPv3_L2_SPECIFIC_DOCSIS_DMPT: + if (tree) { + ti = proto_tree_add_item(tree, hf_l2tp_l2_spec_docsis_dmpt, + tvb, index + l2tpv3_cookie, 4, FALSE); + l2_specific = proto_item_add_subtree(ti, ett_l2tp_l2_spec); + + proto_tree_add_item(l2_specific, hf_l2tp_l2_spec_v, tvb, + index + l2tpv3_cookie,1, FALSE); + + proto_tree_add_item(l2_specific, hf_l2tp_l2_spec_s, tvb, + index + l2tpv3_cookie,1, FALSE); + + proto_tree_add_item(l2_specific, hf_l2tp_l2_spec_flow_id, tvb, + index + l2tpv3_cookie,1, FALSE); + + proto_tree_add_item(l2_specific, hf_l2tp_l2_spec_sequence, tvb, + index + l2tpv3_cookie + 2,2, FALSE); + } + next_tvb = tvb_new_subset_remaining(tvb, index + l2tpv3_cookie + 4); + break; case L2TPv3_L2_SPECIFIC_ATM: if (tree) { ti = proto_tree_add_item(tree, hf_l2tp_l2_spec_atm, @@ -1456,6 +1487,9 @@ process_l2tpv3_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, case L2TPv3_PROTOCOL_MPLS: call_dissector(mpls_handle, next_tvb, pinfo, tree); break; + case L2TPv3_PROTOCOL_DOCSIS_DMPT: + call_dissector(mp2t_handle, next_tvb, pinfo, tree); + break; case L2TPv3_PROTOCOL_AAL5: if (oam_cell) { call_dissector(atm_oam_handle, next_tvb, pinfo, tree); @@ -2024,6 +2058,14 @@ proto_register_l2tp(void) { "ATM-Specific Sublayer","lt2p.l2_spec_atm", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }}, + { &hf_l2tp_l2_spec_docsis_dmpt, + { "DOCSIS DMPT - Specific Sublayer","lt2p.l2_spec_docsis_dmpt", FT_NONE, BASE_NONE, NULL, 0x0, + NULL, HFILL }}, + + { &hf_l2tp_l2_spec_v, + { "V-bit","lt2p.l2_spec_v", FT_BOOLEAN, 8, NULL, 0x80, + "VCCV Bit", HFILL }}, + { &hf_l2tp_l2_spec_s, { "S-bit","lt2p.l2_spec_s", FT_BOOLEAN, 8, NULL, 0x40, "Sequence Bit", HFILL }}, @@ -2044,6 +2086,10 @@ proto_register_l2tp(void) { "U-bit","lt2p.l2_spec_u", FT_BOOLEAN, 8, NULL, 0x01, "C/R Bit", HFILL }}, + { &hf_l2tp_l2_spec_flow_id, + { "Flow ID","lt2p.l2_spec_flow_id", FT_UINT8, BASE_HEX, NULL, FLOW_ID_MASK, + NULL, HFILL }}, + { &hf_l2tp_l2_spec_sequence, { "Sequence Number","lt2p.l2_spec_sequence", FT_UINT24, BASE_DEC, NULL, 0x0, NULL, HFILL }}, @@ -2127,6 +2173,6 @@ proto_reg_handoff_l2tp(void) atm_oam_handle = find_dissector("atm_oam_cell"); llc_handle = find_dissector("llc"); lapd_handle = find_dissector("lapd"); - + mp2t_handle = find_dissector("mp2t"); data_handle = find_dissector("data"); } |