summaryrefslogtreecommitdiff
path: root/epan
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2015-04-02 23:11:51 -0400
committerAnders Broman <a.broman58@gmail.com>2015-06-25 16:42:28 +0000
commit74e526f1965d8bfd573105e06986e41e97c1d781 (patch)
tree8e77b744f290ee1eabb56ce7fed1e8e826c22b31 /epan
parentacc581081e84c93e878a678fbb3655aba253607a (diff)
downloadwireshark-74e526f1965d8bfd573105e06986e41e97c1d781.tar.gz
Add proper "Decode As" mechanism for L2TPv3 subdissectors instead of preference.
Change-Id: I87f6f9f40e1c33148de43b53a8881d51416f5d2c Reviewed-on: https://code.wireshark.org/review/7898 Reviewed-by: Michael Mann <mmann78@netscape.net> Petri-Dish: Michael Mann <mmann78@netscape.net> Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan')
-rw-r--r--epan/dissectors/packet-chdlc.c2
-rw-r--r--epan/dissectors/packet-ehdlc.c6
-rw-r--r--epan/dissectors/packet-eth.c2
-rw-r--r--epan/dissectors/packet-fr.c2
-rw-r--r--epan/dissectors/packet-ip.c2
-rw-r--r--epan/dissectors/packet-l2tp.c143
-rw-r--r--epan/dissectors/packet-l2tp.h12
-rw-r--r--epan/dissectors/packet-lapd.c3
-rw-r--r--epan/dissectors/packet-mp2t.c2
-rw-r--r--epan/dissectors/packet-mpls.c2
-rw-r--r--epan/dissectors/packet-ppp.c2
11 files changed, 81 insertions, 97 deletions
diff --git a/epan/dissectors/packet-chdlc.c b/epan/dissectors/packet-chdlc.c
index c038a5ccc2..f6214b9271 100644
--- a/epan/dissectors/packet-chdlc.c
+++ b/epan/dissectors/packet-chdlc.c
@@ -33,6 +33,7 @@
#include "packet-ppp.h"
#include "packet-ip.h"
#include "packet-juniper.h"
+#include "packet-l2tp.h"
#include <epan/expert.h>
/*
@@ -259,6 +260,7 @@ proto_reg_handoff_chdlc(void)
dissector_add_uint("wtap_encap", WTAP_ENCAP_CHDLC, chdlc_handle);
dissector_add_uint("wtap_encap", WTAP_ENCAP_CHDLC_WITH_PHDR, chdlc_handle);
dissector_add_uint("juniper.proto", JUNIPER_PROTO_CHDLC, chdlc_handle);
+ dissector_add_uint("l2tp.pw_type", L2TPv3_PROTOCOL_CHDLC, chdlc_handle);
}
diff --git a/epan/dissectors/packet-ehdlc.c b/epan/dissectors/packet-ehdlc.c
index 44f5a190b8..e16d2fa840 100644
--- a/epan/dissectors/packet-ehdlc.c
+++ b/epan/dissectors/packet-ehdlc.c
@@ -30,6 +30,7 @@
#include <epan/packet.h>
#include <epan/xdlc.h>
+#include "packet-l2tp.h"
void proto_register_ehdlc(void);
void proto_reg_handoff_ehdlc(void);
@@ -317,9 +318,14 @@ proto_register_ehdlc(void)
void
proto_reg_handoff_ehdlc(void)
{
+ dissector_handle_t ehdlc_handle;
+
sub_handles[SUB_RSL] = find_dissector("gsm_abis_rsl");
sub_handles[SUB_OML] = find_dissector("gsm_abis_oml");
sub_handles[SUB_DATA] = find_dissector("data");
+
+ ehdlc_handle = create_dissector_handle( dissect_ehdlc, proto_ehdlc );
+ dissector_add_uint("l2tp.pw_type", L2TPv3_PROTOCOL_ERICSSON, ehdlc_handle);
}
/*
diff --git a/epan/dissectors/packet-eth.c b/epan/dissectors/packet-eth.c
index 8fbe22caa0..36d7eb5558 100644
--- a/epan/dissectors/packet-eth.c
+++ b/epan/dissectors/packet-eth.c
@@ -39,6 +39,7 @@
#include "packet-sll.h"
#include "packet-juniper.h"
#include "packet-sflow.h"
+#include "packet-l2tp.h"
#include <epan/crc32-tvb.h>
#include <wiretap/erf.h>
@@ -1039,6 +1040,7 @@ proto_reg_handoff_eth(void)
dissector_add_uint("gre.proto", ETHERTYPE_ETHBRIDGE, eth_withoutfcs_handle);
dissector_add_uint("juniper.proto", JUNIPER_PROTO_ETHER, eth_withoutfcs_handle);
dissector_add_uint("sflow_245.header_protocol", SFLOW_245_HEADER_ETHERNET, eth_withoutfcs_handle);
+ dissector_add_uint("l2tp.pw_type", L2TPv3_PROTOCOL_ETH, eth_withoutfcs_handle);
dissector_add_uint("sll.ltype", LINUX_SLL_P_ETHERNET, eth_withoutfcs_handle);
diff --git a/epan/dissectors/packet-fr.c b/epan/dissectors/packet-fr.c
index 084564a406..234d59dd7f 100644
--- a/epan/dissectors/packet-fr.c
+++ b/epan/dissectors/packet-fr.c
@@ -48,6 +48,7 @@
#include "packet-fr.h"
#include "packet-juniper.h"
#include "packet-sflow.h"
+#include "packet-l2tp.h"
#include <epan/xdlc.h>
#include <epan/etypes.h>
#include <epan/oui.h>
@@ -1010,6 +1011,7 @@ proto_reg_handoff_fr(void)
dissector_add_uint("juniper.proto", JUNIPER_PROTO_FRELAY, fr_handle);
dissector_add_uint("sflow_245.header_protocol", SFLOW_245_HEADER_FRAME_RELAY, fr_handle);
dissector_add_uint("atm.aal5.type", TRAF_FR, fr_handle);
+ dissector_add_uint("l2tp.pw_type", L2TPv3_PROTOCOL_FR, fr_handle);
fr_phdr_handle = create_dissector_handle(dissect_fr_phdr, proto_fr);
dissector_add_uint("wtap_encap", WTAP_ENCAP_FRELAY_WITH_PHDR, fr_phdr_handle);
diff --git a/epan/dissectors/packet-ip.c b/epan/dissectors/packet-ip.c
index 5a785207ad..aeabdd7e18 100644
--- a/epan/dissectors/packet-ip.c
+++ b/epan/dissectors/packet-ip.c
@@ -51,6 +51,7 @@
#include "packet-juniper.h"
#include "packet-sflow.h"
#include "packet-gre.h"
+#include "packet-l2tp.h"
#ifdef HAVE_GEOIP
#include <GeoIP.h>
@@ -3135,6 +3136,7 @@ proto_reg_handoff_ip(void)
dissector_add_uint("juniper.proto", JUNIPER_PROTO_MPLS_IP, ip_handle);
dissector_add_uint("pwach.channel_type", 0x21, ip_handle); /* IPv4, RFC4385 clause 6. */
dissector_add_uint("sflow_245.header_protocol", SFLOW_245_HEADER_IPv4, ip_handle);
+ dissector_add_uint("l2tp.pw_type", L2TPv3_PROTOCOL_IP, ip_handle);
dissector_add_for_decode_as("udp.port", ip_handle);
dissector_add_uint("wtap_encap", WTAP_ENCAP_RAW_IP4, ip_handle);
diff --git a/epan/dissectors/packet-l2tp.c b/epan/dissectors/packet-l2tp.c
index e506809315..3ec831de67 100644
--- a/epan/dissectors/packet-l2tp.c
+++ b/epan/dissectors/packet-l2tp.c
@@ -60,6 +60,7 @@
#include <epan/prefs.h>
#include <epan/conversation.h>
#include <epan/expert.h>
+#include <epan/decode_as.h>
#include <wsutil/md5.h>
#include <wsutil/sha1.h>
@@ -207,6 +208,7 @@ static int hf_l2tp_zero_length_bit_message = -1;
static int hf_l2tp_offset_padding = -1;
static dissector_table_t l2tp_vendor_avp_dissector_table;
+static dissector_table_t pw_type_table;
#define UDP_PORT_L2TP 1701
@@ -251,36 +253,8 @@ static const enum_val_t l2tpv3_cookies[] = {
};
#define L2TPv3_COOKIE_DEFAULT 0
-
-#define L2TPv3_PROTOCOL_ETH 0
-#define L2TPv3_PROTOCOL_CHDLC 1
-#define L2TPv3_PROTOCOL_FR 2
-#define L2TPv3_PROTOCOL_PPP 3
-#define L2TPv3_PROTOCOL_IP 4
-#define L2TPv3_PROTOCOL_MPLS 5
-#define L2TPv3_PROTOCOL_AAL5 6
-#define L2TPv3_PROTOCOL_LAPD 7
-#define L2TPv3_PROTOCOL_DOCSIS_DMPT 8
-#define L2TPv3_PROTOCOL_ERICSSON 9
-#define L2TPv3_PROTOCOL_MAX (L2TPv3_PROTOCOL_ERICSSON + 1)
-
#define L2TPv3_PROTOCOL_DEFAULT L2TPv3_PROTOCOL_CHDLC
-static const enum_val_t l2tpv3_protocols[] = {
- {"detect", "Detect", -1},
- {"eth", "Ethernet", L2TPv3_PROTOCOL_ETH},
- {"chdlc", "Cisco HDLC", L2TPv3_PROTOCOL_CHDLC},
- {"fr", "Frame Relay", L2TPv3_PROTOCOL_FR},
- {"ppp", "PPP", L2TPv3_PROTOCOL_PPP},
- {"ip", "IP", L2TPv3_PROTOCOL_IP},
- {"mpls", "MPLS", L2TPv3_PROTOCOL_MPLS},
- {"aal5", "AAL5", L2TPv3_PROTOCOL_AAL5},
- {"lapd", "LAPD", L2TPv3_PROTOCOL_LAPD},
- {"docsis-dmpt", "DOCSIS-DMPT", L2TPv3_PROTOCOL_DOCSIS_DMPT},
- {"ehdlc", "Ericsson HDLC", L2TPv3_PROTOCOL_ERICSSON},
- {NULL, NULL, 0}
-};
-
#define L2TPv3_L2_SPECIFIC_NONE 0
#define L2TPv3_L2_SPECIFIC_DEFAULT 1
#define L2TPv3_L2_SPECIFIC_ATM 2
@@ -299,7 +273,6 @@ static const enum_val_t l2tpv3_l2_specifics[] = {
};
static gint l2tpv3_cookie = -1;
-static gint l2tpv3_protocol = -1;
static gint l2tpv3_l2_specific = -1;
#define MESSAGE_TYPE_SCCRQ 1
@@ -770,16 +743,8 @@ static const true_false_string tfs_new_existing = { "New", "Existing" };
static dissector_handle_t ppp_hdlc_handle;
static dissector_handle_t ppp_lcp_options_handle;
-static dissector_handle_t eth_withoutfcs_handle;
-static dissector_handle_t chdlc_handle;
-static dissector_handle_t fr_handle;
-static dissector_handle_t ip_handle;
-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 ehdlc_handle;
static dissector_handle_t data_handle;
static dissector_handle_t l2tp_udp_handle;
@@ -1159,7 +1124,7 @@ static l2tpv3_session_t *store_pw_type(l2tpv3_session_t *_session,
int msg_type)
{
l2tpv3_session_t *session = _session;
- gint result = l2tpv3_protocol;
+ gint result = -1;
guint16 pw_type;
switch (msg_type) {
@@ -1292,6 +1257,16 @@ static void update_session(l2tpv3_tunnel_t *tunnel, l2tpv3_session_t *session)
}
}
+static void l2tp_prompt(packet_info *pinfo _U_, gchar* result)
+{
+ g_snprintf(result, MAX_DECODE_AS_PROMPT_LEN, "Decode L2TPv3 packet type 0x%04x as",
+ GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_l2tp, 0)));
+}
+
+static gpointer l2tp_value(packet_info *pinfo _U_)
+{
+ return p_get_proto_data(pinfo->pool, pinfo, proto_l2tp, 0);
+}
/*
* Dissect CISCO AVP:s
@@ -2030,13 +2005,13 @@ process_l2tpv3_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
{
int idx = *pIdx;
int sid;
- guint8 oam_cell = 0;
+ guint32 oam_cell = 0;
proto_tree *l2_specific = NULL;
proto_item *ti = NULL;
tvbuff_t *next_tvb;
gint cookie_len = l2tpv3_cookie;
gint l2_spec = l2tpv3_l2_specific;
- gint pw_type = l2tpv3_protocol;
+ gint pw_type = -1;
lcce_settings_t *lcce = NULL;
l2tpv3_session_t *session = NULL;
@@ -2162,49 +2137,11 @@ process_l2tpv3_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
break;
}
- switch(pw_type){
- case L2TPv3_PROTOCOL_ETH:
- call_dissector(eth_withoutfcs_handle, next_tvb, pinfo, tree);
- break;
- case L2TPv3_PROTOCOL_CHDLC:
- call_dissector(chdlc_handle, next_tvb, pinfo, tree);
- break;
- case L2TPv3_PROTOCOL_FR:
- call_dissector(fr_handle, next_tvb, pinfo, tree);
- break;
- case L2TPv3_PROTOCOL_PPP:
- /*
- * PPP is transported without Address and Control
- * fields, ppp_hdlc_handle can handle that as if if
- * was ACFC (NULL Address and Control)
- */
- call_dissector(ppp_hdlc_handle, next_tvb, pinfo, tree);
- break;
- case L2TPv3_PROTOCOL_IP:
- call_dissector(ip_handle, next_tvb, pinfo, tree);
- break;
- 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);
- } else {
- call_dissector(llc_handle, next_tvb, pinfo, tree);
- }
- break;
- case L2TPv3_PROTOCOL_LAPD:
- call_dissector(lapd_handle, next_tvb, pinfo, tree);
- break;
- case L2TPv3_PROTOCOL_ERICSSON:
- call_dissector(ehdlc_handle, next_tvb, pinfo, tree);
- break;
- default:
+ p_add_proto_data(pinfo->pool, pinfo, proto_l2tp, 0, GUINT_TO_POINTER((guint)pw_type));
+
+ if (!dissector_try_uint_new(pw_type_table, pw_type, next_tvb, pinfo, tree, FALSE, GUINT_TO_POINTER(oam_cell)))
+ {
call_dissector(data_handle, next_tvb, pinfo, tree);
- break;
}
}
@@ -2709,6 +2646,19 @@ dissect_l2tp_ip(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
return;
}
+static int dissect_atm_oam_llc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
+{
+ guint32 oam_cell = GPOINTER_TO_UINT(data);
+
+ if (oam_cell) {
+ call_dissector(atm_oam_handle, tvb, pinfo, tree);
+ } else {
+ call_dissector(llc_handle, tvb, pinfo, tree);
+ }
+
+ return tvb_captured_length(tvb);
+}
+
static void init_l2tp_dissection(void)
{
GSList *iterator = list_heads;
@@ -3039,6 +2989,12 @@ proto_register_l2tp(void)
module_t *l2tp_module;
expert_module_t* expert_l2tp;
+ /* Decode As handling */
+ static build_valid_func l2tp_da_build_value[1] = {l2tp_value};
+ static decode_as_value_t l2tp_da_values = {l2tp_prompt, 1, l2tp_da_build_value};
+ static decode_as_t l2tp_da = {"l2tp", "L2TPv3 payload", "l2tp.pw_type", 1, 0, &l2tp_da_values, NULL, NULL,
+ decode_as_default_populate_list, decode_as_default_reset, decode_as_default_change, NULL};
+
proto_l2tp = proto_register_protocol(
"Layer 2 Tunneling Protocol", "L2TP", "l2tp");
proto_register_field_array(proto_l2tp, hf, array_length(hf));
@@ -3047,6 +3003,7 @@ proto_register_l2tp(void)
expert_register_field_array(expert_l2tp, ei, array_length(ei));
l2tp_vendor_avp_dissector_table = register_dissector_table("l2tp.vendor_avp", "L2TP vendor AVP dissector table", FT_UINT32, BASE_DEC);
+ pw_type_table = register_dissector_table("l2tp.pw_type", "L2TPv3 payload type", FT_UINT32, BASE_DEC);
l2tp_module = prefs_register_protocol(proto_l2tp, NULL);
@@ -3066,24 +3023,21 @@ proto_register_l2tp(void)
l2tpv3_l2_specifics,
FALSE);
- prefs_register_enum_preference(l2tp_module,
- "protocol",
- "Decode L2TPv3 packet contents as this protocol",
- "Decode L2TPv3 packet contents as this protocol",
- &l2tpv3_protocol,
- l2tpv3_protocols,
- FALSE);
+ prefs_register_obsolete_preference(l2tp_module, "protocol");
prefs_register_string_preference(l2tp_module,"shared_secret","Shared Secret",
"Shared secret used for control message digest authentication",
&shared_secret);
register_init_routine(init_l2tp_dissection);
+ register_decode_as(&l2tp_da);
}
void
proto_reg_handoff_l2tp(void)
{
+ dissector_handle_t atm_oam_llc_handle;
+
l2tp_udp_handle = new_create_dissector_handle(dissect_l2tp_udp, proto_l2tp);
dissector_add_uint("udp.port", UDP_PORT_L2TP, l2tp_udp_handle);
@@ -3103,17 +3057,12 @@ proto_reg_handoff_l2tp(void)
/*
* Get a handle for the dissectors used in v3.
*/
- eth_withoutfcs_handle = find_dissector("eth_withoutfcs");
- chdlc_handle = find_dissector("chdlc");
- fr_handle = find_dissector("fr");
- ip_handle = find_dissector("ip");
- mpls_handle = find_dissector("mpls");
atm_oam_handle = find_dissector("atm_oam_cell");
llc_handle = find_dissector("llc");
- lapd_handle = find_dissector("lapd");
- mp2t_handle = find_dissector("mp2t");
- ehdlc_handle = find_dissector("ehdlc");
data_handle = find_dissector("data");
+
+ atm_oam_llc_handle = new_create_dissector_handle( dissect_atm_oam_llc, proto_l2tp );
+ dissector_add_uint("l2tp.pw_type", L2TPv3_PROTOCOL_AAL5, atm_oam_llc_handle);
}
/*
diff --git a/epan/dissectors/packet-l2tp.h b/epan/dissectors/packet-l2tp.h
index 1feecd06d6..04fd6e9adb 100644
--- a/epan/dissectors/packet-l2tp.h
+++ b/epan/dissectors/packet-l2tp.h
@@ -27,4 +27,16 @@ typedef struct _l2tp_cntrl_data {
int msg_type;
} l2tp_cntrl_data_t;
+#define L2TPv3_PROTOCOL_ETH 0
+#define L2TPv3_PROTOCOL_CHDLC 1
+#define L2TPv3_PROTOCOL_FR 2
+#define L2TPv3_PROTOCOL_PPP 3
+#define L2TPv3_PROTOCOL_IP 4
+#define L2TPv3_PROTOCOL_MPLS 5
+#define L2TPv3_PROTOCOL_AAL5 6
+#define L2TPv3_PROTOCOL_LAPD 7
+#define L2TPv3_PROTOCOL_DOCSIS_DMPT 8
+#define L2TPv3_PROTOCOL_ERICSSON 9
+#define L2TPv3_PROTOCOL_MAX (L2TPv3_PROTOCOL_ERICSSON + 1)
+
#endif /* __PACKET_L2TP_H__ */
diff --git a/epan/dissectors/packet-lapd.c b/epan/dissectors/packet-lapd.c
index cb46863746..c8d165db36 100644
--- a/epan/dissectors/packet-lapd.c
+++ b/epan/dissectors/packet-lapd.c
@@ -45,6 +45,8 @@
#include <wiretap/wtap.h>
#include <epan/lapd_sapi.h>
#include <epan/expert.h>
+#include "packet-l2tp.h"
+
void proto_register_lapd(void);
static int proto_lapd = -1;
@@ -740,6 +742,7 @@ proto_reg_handoff_lapd(void)
lapd_handle = find_dissector("lapd");
dissector_add_uint("wtap_encap", WTAP_ENCAP_LINUX_LAPD, lapd_handle);
dissector_add_uint("wtap_encap", WTAP_ENCAP_LAPD, lapd_handle);
+ dissector_add_uint("l2tp.pw_type", L2TPv3_PROTOCOL_LAPD, lapd_handle);
register_dissector("lapd-bitstream", dissect_lapd_bitstream, proto_lapd);
lapd_bitstream_handle = find_dissector("lapd-bitstream");
diff --git a/epan/dissectors/packet-mp2t.c b/epan/dissectors/packet-mp2t.c
index b8a5c8ba86..9f423418aa 100644
--- a/epan/dissectors/packet-mp2t.c
+++ b/epan/dissectors/packet-mp2t.c
@@ -35,6 +35,7 @@
#include <epan/expert.h>
#include <epan/reassemble.h>
#include <epan/address_types.h>
+#include "packet-l2tp.h"
#include <epan/tvbuff-int.h> /* XXX, for tvb_new_proxy() */
@@ -1537,6 +1538,7 @@ proto_reg_handoff_mp2t(void)
dissector_add_for_decode_as("udp.port", mp2t_handle);
heur_dissector_add("usb.bulk", heur_dissect_mp2t, proto_mp2t);
dissector_add_uint("wtap_encap", WTAP_ENCAP_MPEG_2_TS, mp2t_handle);
+ dissector_add_uint("l2tp.pw_type", L2TPv3_PROTOCOL_DOCSIS_DMPT, mp2t_handle);
docsis_handle = find_dissector("docsis");
mpeg_pes_handle = find_dissector("mpeg-pes");
diff --git a/epan/dissectors/packet-mpls.c b/epan/dissectors/packet-mpls.c
index 86265052a0..87aa63245c 100644
--- a/epan/dissectors/packet-mpls.c
+++ b/epan/dissectors/packet-mpls.c
@@ -65,6 +65,7 @@
#include "packet-bfd.h"
#include "packet-juniper.h"
#include "packet-sflow.h"
+#include "packet-l2tp.h"
void proto_register_mpls(void);
void proto_reg_handoff_mpls(void);
@@ -642,6 +643,7 @@ proto_reg_handoff_mpls(void)
dissector_add_uint("juniper.proto", JUNIPER_PROTO_CLNP_MPLS, mpls_handle);
dissector_add_for_decode_as("pwach.channel_type", mpls_handle);
dissector_add_uint("sflow_245.header_protocol", SFLOW_245_HEADER_MPLS, mpls_handle);
+ dissector_add_uint("l2tp.pw_type", L2TPv3_PROTOCOL_MPLS, mpls_handle);
dissector_add_uint("udp.port", UDP_PORT_MPLS_OVER_UDP, mpls_handle);
mpls_pwcw_handle = create_dissector_handle( dissect_pw_mcw, proto_pw_mcw );
diff --git a/epan/dissectors/packet-ppp.c b/epan/dissectors/packet-ppp.c
index 74c2f6ef05..bae54ceba5 100644
--- a/epan/dissectors/packet-ppp.c
+++ b/epan/dissectors/packet-ppp.c
@@ -46,6 +46,7 @@
#include "packet-sll.h"
#include "packet-juniper.h"
#include "packet-sflow.h"
+#include "packet-l2tp.h"
void proto_register_ppp_raw_hdlc(void);
void proto_reg_handoff_ppp_raw_hdlc(void);
@@ -5458,6 +5459,7 @@ proto_reg_handoff_ppp(void)
dissector_add_uint("gre.proto", ETHERTYPE_PPP, ppp_hdlc_handle);
dissector_add_uint("juniper.proto", JUNIPER_PROTO_PPP, ppp_handle);
dissector_add_uint("sflow_245.header_protocol", SFLOW_245_HEADER_PPP, ppp_hdlc_handle);
+ dissector_add_uint("l2tp.pw_type", L2TPv3_PROTOCOL_PPP, ppp_hdlc_handle);
}
void