Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-docsis-tlv.c
blobdde5635166857fd22cdb05a0fea2eda450c8c494
1 /* packet-docsis-tlv.c
3 * Routines to Dissect Appendix C TLVs
4 * Copyright 2015, Adrian Simionov <daniel.simionov@gmail.com>
5 * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
6 * Copyright 2017, Bruno Verstuyft <bruno.verstuyft@excentis.com>
8 * Wireshark - Network traffic analyzer
9 * By Gerald Combs <gerald@wireshark.org>
10 * Copyright 1998 Gerald Combs
12 * SPDX-License-Identifier: GPL-2.0-or-later
15 #include "config.h"
17 #include <epan/packet.h>
18 #include <epan/expert.h>
19 #include <epan/reassemble.h>
20 #include <epan/tfs.h>
21 #include <epan/unit_strings.h>
23 #include "packet-docsis-tlv.h"
25 /* This module will dissect the Appendix C TLVs. Please see:
26 * http://www.cablemodem.com/specifications/specifications.html
28 * The main dissector is dissect_docsis_tlv. This routine will dissect
29 * top level TLVs and call sub-dissectors for the sub-TLVs.
32 void proto_register_docsis_tlv(void);
33 void proto_reg_handoff_docsis_tlv(void);
35 /* Initialize the protocol and registered fields */
36 static dissector_handle_t docsis_vsif_handle;
37 static dissector_handle_t docsis_ucd_handle;
38 static dissector_handle_t docsis_rba_handle;
40 static int proto_docsis_tlv;
41 static int hf_docsis_tlv_down_freq;
42 static int hf_docsis_tlv_upstream_chid;
43 static int hf_docsis_tlv_net_access;
44 /* static int hf_docsis_tlv_cos; */
45 /* static int hf_docsis_tlv_mcap; */
46 static int hf_docsis_tlv_privacy_enable;
47 static int hf_docsis_tlv_max_cpe;
48 static int hf_docsis_tlv_max_classifiers;
49 static int hf_docsis_tlv_snmp_access;
50 static int hf_docsis_tlv_snmp_obj;
51 static int hf_docsis_tlv_svc_unavail;
52 static int hf_docsis_tlv_svc_unavail_classid;
53 static int hf_docsis_tlv_svc_unavail_type;
54 static int hf_docsis_tlv_svc_unavail_code;
55 static int hf_docsis_tlv_bpi;
56 /* static int hf_docsis_tlv_phs; */
57 static int hf_docsis_tlv_hmac_digest;
58 static int hf_docsis_tlv_tftp_server_timestamp;
59 static int hf_docsis_tlv_tftp_prov_modem_address;
60 /* static int hf_docsis_tlv_upclsfr; */
61 /* static int hf_docsis_tlv_downclsfr; */
62 /* static int hf_docsis_tlv_upsflow; */
63 /* static int hf_docsis_tlv_downsflow; */
64 /* static int hf_docsis_tlv_vendor_spec; */
65 static int hf_docsis_tlv_cm_mic;
66 static int hf_docsis_tlv_cmts_mic;
67 static int hf_docsis_tlv_auth_block;
68 static int hf_docsis_tlv_key_seq_num;
69 static int hf_docsis_tlv_snmpv3_kick;
70 static int hf_docsis_tlv_snmpv3_kick_name;
71 static int hf_docsis_tlv_snmpv3_kick_publicnum;
72 static int hf_docsis_tlv_mfgr_cvc;
73 static int hf_docsis_tlv_cosign_cvc;
74 static int hf_docsis_tlv_vendor_id;
75 static int hf_docsis_tlv_sw_file;
76 static int hf_docsis_tlv_sw_upg_srvr;
77 static int hf_docsis_tlv_cpe_ethernet;
78 static int hf_docsis_tlv_modem_addr;
79 static int hf_docsis_tlv_rng_tech;
80 static int hf_docsis_tlv_subs_mgmt_ctrl;
81 static int hf_docsis_tlv_subs_mgmt_ip_table;
82 static int hf_docsis_tlv_subs_mgmt_ip_entry;
83 static int hf_docsis_tlv_subs_mgmt_filter_grps;
84 static int hf_docsis_tlv_snmpv3_ntfy_rcvr;
85 static int hf_docsis_tlv_enable_20_mode;
86 static int hf_docsis_tlv_enable_test_modes;
87 /* static int hf_docsis_tlv_ds_ch_list; */
88 static int hf_docsis_tlv_mc_mac_address;
89 /* static int hf_docsis_tlv_dut_filter; */
90 /* static int hf_docsis_tlv_tcc; */
91 /* static int hf_docsis_tlv_sid_cl; */
92 /* static int hf_docsis_tlv_rcp; */
93 /* static int hf_docsis_tlv_rcc; */
94 /* static int hf_docsis_tlv_dsid; */
95 /* static int hf_docsis_tlv_sec_assoc; */
96 static int hf_docsis_tlv_init_ch_timeout;
97 /* static int hf_docsis_tlv_ch_asgn; */
98 static int hf_docsis_tlv_cm_init_reason;
99 static int hf_docsis_tlv_sw_upg_srvr_ipv6;
100 static int hf_docsis_tlv_tftp_prov_cm_ipv6_addr;
101 static int hf_docsis_tlv_us_drop_clfy;
102 static int hf_docsis_tlv_subs_mgmt_ipv6_lst;
103 static int hf_docsis_tlv_us_drop_clfy_group_id;
104 static int hf_docsis_tlv_subs_mgmt_ctrl_max_cpe_ipv6;
105 /* static int hf_docsis_tlv_cmts_mc_sess_enc; */
107 static int hf_docsis_tlv_cos_id;
108 static int hf_docsis_tlv_cos_sid;
109 static int hf_docsis_tlv_cos_max_down;
110 static int hf_docsis_tlv_cos_max_up;
111 static int hf_docsis_tlv_cos_up_chnl_pri;
112 static int hf_docsis_tlv_cos_min_grntd_up;
113 static int hf_docsis_tlv_cos_max_up_burst;
114 static int hf_docsis_tlv_cos_privacy_enable;
116 static int hf_docsis_tlv_mcap_concat;
117 static int hf_docsis_tlv_mcap_docs_ver;
118 static int hf_docsis_tlv_mcap_frag;
119 static int hf_docsis_tlv_mcap_phs;
120 static int hf_docsis_tlv_mcap_igmp;
121 static int hf_docsis_tlv_mcap_down_said;
122 static int hf_docsis_tlv_mcap_up_sid;
123 static int hf_docsis_tlv_mcap_privacy;
124 static int hf_docsis_tlv_mcap_8021P_filter;
125 static int hf_docsis_tlv_mcap_8021Q_filter;
126 static int hf_docsis_tlv_mcap_xmit_eq_taps_per_sym;
127 static int hf_docsis_tlv_mcap_xmit_eq_taps;
128 static int hf_docsis_tlv_mcap_dcc;
129 static int hf_docsis_tlv_mcap_ip_filters;
130 static int hf_docsis_tlv_mcap_llc_filters;
131 static int hf_docsis_tlv_mcap_exp_unicast_sid;
132 static int hf_docsis_tlv_mcap_rnghoff_cm;
133 static int hf_docsis_tlv_mcap_rnghoff_erouter;
134 static int hf_docsis_tlv_mcap_rnghoff_emta;
135 static int hf_docsis_tlv_mcap_rnghoff_estb;
136 static int hf_docsis_tlv_mcap_l2vpn;
137 static int hf_docsis_tlv_mcap_l2vpn_esafe;
138 static int hf_docsis_tlv_mcap_dut_filtering;
139 static int hf_docsis_tlv_mcap_us_freq_range;
140 static int hf_docsis_tlv_mcap_us_srate_160;
141 static int hf_docsis_tlv_mcap_us_srate_320;
142 static int hf_docsis_tlv_mcap_us_srate_640;
143 static int hf_docsis_tlv_mcap_us_srate_1280;
144 static int hf_docsis_tlv_mcap_us_srate_2560;
145 static int hf_docsis_tlv_mcap_us_srate_5120;
146 static int hf_docsis_tlv_mcap_sac;
147 static int hf_docsis_tlv_mcap_code_hop_mode2;
148 static int hf_docsis_tlv_mcap_mtc;
149 static int hf_docsis_tlv_mcap_512_msps_utc;
150 static int hf_docsis_tlv_mcap_256_msps_utc;
151 static int hf_docsis_tlv_mcap_total_sid_cluster;
152 static int hf_docsis_tlv_mcap_sid_per_sf;
153 static int hf_docsis_tlv_mcap_mrc;
154 static int hf_docsis_tlv_mcap_total_dsid;
155 static int hf_docsis_tlv_mcap_reseq_dsid;
156 static int hf_docsis_tlv_mcap_mc_dsid;
157 static int hf_docsis_tlv_mcap_mc_dsid_fwd;
158 static int hf_docsis_tlv_mcap_fctype_fwd;
159 static int hf_docsis_tlv_mcap_dpv_path;
160 static int hf_docsis_tlv_mcap_dpv_packet;
161 static int hf_docsis_tlv_mcap_ugs;
162 static int hf_docsis_tlv_mcap_map_ucd;
163 static int hf_docsis_tlv_mcap_udc;
164 static int hf_docsis_tlv_mcap_ipv6;
165 static int hf_docsis_tlv_mcap_ext_us_trans_power;
166 static int hf_docsis_tlv_mcap_em;
167 static int hf_docsis_tlv_mcap_em_1x1;
168 static int hf_docsis_tlv_mcap_em_light_sleep;
169 static int hf_docsis_tlv_mcap_cm_status_ack;
170 static int hf_docsis_tlv_mcap_em_pref;
171 static int hf_docsis_tlv_mcap_em_pref_1x1;
172 static int hf_docsis_tlv_mcap_em_pref_dls;
173 static int hf_docsis_tlv_mcap_ext_pkt_len_sup_cap;
174 static int hf_docsis_tlv_mcap_ofdm_mult_recv_chan_sup;
175 static int hf_docsis_tlv_mcap_ofdma_mult_trans_chan_sup;
176 static int hf_docsis_tlv_mcap_down_ofdm_prof_sup;
177 static int hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup;
178 static int hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_reserved;
179 static int hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_qpsk;
180 static int hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_16qam;
181 static int hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_64qam;
182 static int hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_128qam;
183 static int hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_256qam;
184 static int hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_512qam;
185 static int hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_1024qam;
186 static int hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_2048qam;
187 static int hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_4096qam;
188 static int hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_8192qam;
189 static int hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_16384qam;
190 static int hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup;
191 static int hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_reserved;
192 static int hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_qpsk;
193 static int hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_8qam;
194 static int hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_16qam;
195 static int hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_32qam;
196 static int hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_64qam;
197 static int hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_128qam;
198 static int hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_256qam;
199 static int hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_512qam;
200 static int hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_1024qam;
201 static int hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_2048qam;
202 static int hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_4096qam;
203 static int hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_8192qam;
204 static int hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_16384qam;
205 static int hf_docsis_tlv_mcap_down_lower_band_edge_conf;
206 static int hf_docsis_tlv_mcap_down_lower_band_edge_conf_108;
207 static int hf_docsis_tlv_mcap_down_lower_band_edge_conf_258;
208 static int hf_docsis_tlv_mcap_down_upper_band_edge_conf;
209 static int hf_docsis_tlv_mcap_down_upper_band_edge_conf_1218;
210 static int hf_docsis_tlv_mcap_down_upper_band_edge_conf_1794;
211 static int hf_docsis_tlv_mcap_down_upper_band_edge_conf_1002;
212 static int hf_docsis_tlv_mcap_dipl_up_upper_band_edge_conf;
213 static int hf_docsis_tlv_mcap_docsis_time_prot_mode;
214 static int hf_docsis_tlv_mcap_docsis_time_prot_perf_sup;
215 static int hf_docsis_tlv_mcap_pmax;
216 static int hf_docsis_tlv_mcap_dipl_down_lower_band_edge;
217 static int hf_docsis_tlv_mcap_dipl_down_lower_band_edge_108;
218 static int hf_docsis_tlv_mcap_dipl_down_lower_band_edge_258;
219 static int hf_docsis_tlv_mcap_dipl_down_upper_band_edge;
220 static int hf_docsis_tlv_mcap_dipl_down_upper_band_edge_1218;
221 static int hf_docsis_tlv_mcap_dipl_down_upper_band_edge_1794;
222 static int hf_docsis_tlv_mcap_dipl_down_upper_band_edge_1002;
223 static int hf_docsis_tlv_mcap_dipl_up_upper_band_edge;
224 static int hf_docsis_tlv_mcap_dipl_up_upper_band_edge_42;
225 static int hf_docsis_tlv_mcap_dipl_up_upper_band_edge_65;
226 static int hf_docsis_tlv_mcap_dipl_up_upper_band_edge_85;
227 static int hf_docsis_tlv_mcap_dipl_up_upper_band_edge_117;
228 static int hf_docsis_tlv_mcap_dipl_up_upper_band_edge_204;
229 static int hf_docsis_tlv_mcap_advanced_band_plan;
230 static int hf_docsis_tlv_mcap_advanced_band_plan_fdx_l;
231 static int hf_docsis_tlv_mcap_advanced_band_plan_fdx;
232 static int hf_docsis_tlv_mcap_advanced_band_plan_fdd;
233 static int hf_docsis_tlv_mcap_advanced_band_plan_reserved;
234 static int hf_docsis_tlv_mcap_ext_sf_cluster_assign_sup;
235 static int hf_docsis_tlv_mcap_low_latency_sup;
236 static int hf_docsis_tlv_mcap_adv_down_lower_band_edge_conf;
237 static int hf_docsis_tlv_mcap_adv_down_upper_band_edge_conf;
238 static int hf_docsis_tlv_mcap_adv_up_upper_band_edge_conf;
239 static int hf_docsis_tlv_mcap_adv_down_lower_band_edge_option;
240 static int hf_docsis_tlv_mcap_adv_down_upper_band_edge_option;
241 static int hf_docsis_tlv_mcap_adv_up_upper_band_edge_option;
242 static int hf_docsis_tlv_mcap_extended_power_options;
244 static int hf_docsis_tlv_clsfr_ref;
245 static int hf_docsis_tlv_clsfr_id;
246 static int hf_docsis_tlv_clsfr_sflow_ref;
247 static int hf_docsis_tlv_clsfr_sflow_id;
248 static int hf_docsis_tlv_clsfr_rule_pri;
249 static int hf_docsis_tlv_clsfr_act_state;
250 static int hf_docsis_tlv_clsfr_dsc_act;
251 /* static int hf_docsis_tlv_clsfr_err; */
252 /* static int hf_docsis_tlv_ipclsfr; */
253 /* static int hf_docsis_tlv_ethclsfr; */
254 /* static int hf_docsis_tlv_dot1qclsfr; */
256 static int hf_docsis_tlv_clsfr_vendor_spc;
258 static int hf_docsis_tlv_clsfr_err_param;
259 static int hf_docsis_tlv_clsfr_err_code;
260 static int hf_docsis_tlv_clsfr_err_msg;
262 static int hf_docsis_tlv_ipclsfr_tosmask;
263 static int hf_docsis_tlv_ipclsfr_ipproto;
264 static int hf_docsis_tlv_ipclsfr_src;
265 static int hf_docsis_tlv_ipclsfr_dst;
266 static int hf_docsis_tlv_ipclsfr_srcmask;
267 static int hf_docsis_tlv_ipclsfr_dstmask;
268 static int hf_docsis_tlv_ipclsfr_sport_start;
269 static int hf_docsis_tlv_ipclsfr_sport_end;
270 static int hf_docsis_tlv_ipclsfr_dport_start;
271 static int hf_docsis_tlv_ipclsfr_dport_end;
273 static int hf_docsis_tlv_ip6clsfr_tc_low;
274 static int hf_docsis_tlv_ip6clsfr_tc_high;
275 static int hf_docsis_tlv_ip6clsfr_tc_mask;
276 static int hf_docsis_tlv_ip6clsfr_flow_label;
277 static int hf_docsis_tlv_ip6clsfr_next_header;
278 static int hf_docsis_tlv_ip6clsfr_src;
279 static int hf_docsis_tlv_ip6clsfr_src_prefix_length;
280 static int hf_docsis_tlv_ip6clsfr_dst;
281 static int hf_docsis_tlv_ip6clsfr_dst_prefix_length;
283 static int hf_docsis_tlv_ethclsfr_dmac;
284 static int hf_docsis_tlv_ethclsfr_smac;
285 static int hf_docsis_tlv_ethclsfr_ethertype;
287 static int hf_docsis_tlv_dot1qclsfr_user_pri;
288 static int hf_docsis_tlv_dot1qclsfr_vlanid;
289 static int hf_docsis_tlv_dot1qclsfr_vendorspec;
291 static int hf_docsis_tlv_sflow_ref;
292 static int hf_docsis_tlv_sflow_id;
293 static int hf_docsis_tlv_sflow_sid;
294 static int hf_docsis_tlv_sflow_classname;
295 static int hf_docsis_tlv_sflow_qos_param;
296 /* static int hf_docsis_tlv_sflow_err; */
297 static int hf_docsis_tlv_sflow_traf_pri;
298 static int hf_docsis_tlv_sflow_max_sus;
299 static int hf_docsis_tlv_sflow_max_burst;
300 static int hf_docsis_tlv_sflow_min_traf;
301 static int hf_docsis_tlv_sflow_ass_min_pkt_size;
302 static int hf_docsis_tlv_sflow_timeout_active;
303 static int hf_docsis_tlv_sflow_timeout_admitted;
304 static int hf_docsis_tlv_sflow_peak_traffic_rate;
305 static int hf_docsis_tlv_sflow_req_attr_mask;
306 static int hf_docsis_tlv_sflow_forb_attr_mask;
307 static int hf_docsis_tlv_sflow_attr_aggr_rule_mask;
308 static int hf_docsis_tlv_sflow_vendor_spec;
309 static int hf_docsis_tlv_sflow_max_concat_burst;
310 static int hf_docsis_tlv_sflow_sched_type;
311 static int hf_docsis_tlv_sflow_reqxmit_pol;
312 static int hf_docsis_tlv_sflow_reqxmit_all_cm_broadcast;
313 static int hf_docsis_tlv_sflow_reqxmit_priority_multicast;
314 static int hf_docsis_tlv_sflow_reqxmit_req_data_requests;
315 static int hf_docsis_tlv_sflow_reqxmit_req_data_data;
316 static int hf_docsis_tlv_sflow_reqxmit_piggy_back;
317 static int hf_docsis_tlv_sflow_reqxmit_concatenate_data;
318 static int hf_docsis_tlv_sflow_reqxmit_fragment;
319 static int hf_docsis_tlv_sflow_reqxmit_suppress_payload;
320 static int hf_docsis_tlv_sflow_reqxmit_drop_packets;
321 static int hf_docsis_tlv_sflow_nominal_polling;
322 static int hf_docsis_tlv_sflow_tolerated_jitter;
323 static int hf_docsis_tlv_sflow_ugs_size;
324 static int hf_docsis_tlv_sflow_nom_grant_intvl;
325 static int hf_docsis_tlv_sflow_tol_grant_jitter;
326 static int hf_docsis_tlv_sflow_grants_per_intvl;
327 static int hf_docsis_tlv_sflow_ip_tos_overwrite;
328 static int hf_docsis_tlv_sflow_ugs_timeref;
329 static int hf_docsis_tlv_sflow_cont_req_backoff_window_mult;
330 static int hf_docsis_tlv_sflow_num_of_bytes_requested_mult;
331 static int hf_docsis_tlv_sflow_max_down_latency;
332 static int hf_docsis_tlv_sflow_down_reseq;
334 static int hf_docsis_tlv_sflow_err_param;
335 static int hf_docsis_tlv_sflow_err_code;
336 static int hf_docsis_tlv_sflow_err_msg;
338 static int hf_docsis_tlv_phs_class_ref;
339 static int hf_docsis_tlv_phs_class_id;
340 static int hf_docsis_tlv_phs_sflow_ref;
341 static int hf_docsis_tlv_phs_sflow_id;
342 static int hf_docsis_tlv_phs_dsc_action;
343 /* static int hf_docsis_tlv_phs_err; */
344 static int hf_docsis_tlv_phs_phsf;
345 static int hf_docsis_tlv_phs_phsm;
346 /* static int hf_docsis_tlv_phs_phsv; */
347 static int hf_docsis_tlv_phs_phsi;
348 static int hf_docsis_tlv_phs_phss;
349 static int hf_docsis_tlv_phs_dbc_action;
350 static int hf_docsis_tlv_phs_vendorspec;
352 static int hf_docsis_tlv_phs_err_param;
353 static int hf_docsis_tlv_phs_err_code;
354 static int hf_docsis_tlv_phs_err_msg;
356 /* static int hf_docsis_tlv_ds_ch_list_single; */
357 /* static int hf_docsis_tlv_ds_ch_list_range; */
358 static int hf_docsis_tlv_ds_ch_list_default_timeout;
360 static int hf_docsis_tlv_single_ch_timeout;
361 static int hf_docsis_tlv_single_ch_freq;
363 static int hf_docsis_tlv_freq_rng_timeout;
364 static int hf_docsis_tlv_freq_rng_start;
365 static int hf_docsis_tlv_freq_rng_end;
366 static int hf_docsis_tlv_freq_rng_step;
368 static int hf_docsis_tlv_dut_filter_control;
369 static int hf_docsis_tlv_dut_filter_cmim;
371 static int hf_docsis_tlv_tcc_refid;
372 static int hf_docsis_tlv_tcc_us_ch_action;
373 static int hf_docsis_tlv_tcc_us_ch_id;
374 static int hf_docsis_tlv_tcc_new_us_ch_id;
375 static int hf_docsis_tlv_tcc_ucd;
376 static int hf_docsis_tlv_tcc_rng_sid;
377 static int hf_docsis_tlv_tcc_init_tech;
378 /* static int hf_docsis_tlv_tcc_rng_parms; */
379 static int hf_docsis_tlv_tcc_dyn_rng_win;
380 static int hf_docsis_tlv_tcc_p_16hi;
381 static int hf_docsis_tlv_tcc_oudp_iuc;
382 static int hf_docsis_tlv_tcc_extended_drw;
383 static int hf_docsis_tlv_tcc_extended_us_rng_pwr;
384 static int hf_docsis_tlv_tcc_oudp_sounding_sid;
385 /* static int hf_docsis_tlv_tcc_err; */
387 static int hf_docsis_rng_parms_us_ch_id;
388 static int hf_docsis_rng_parms_time_off_int;
389 static int hf_docsis_rng_parms_time_off_frac;
390 static int hf_docsis_rng_parms_power_off;
391 static int hf_docsis_rng_parms_freq_off;
393 static int hf_docsis_tcc_err_subtype;
394 static int hf_docsis_tcc_err_code;
395 static int hf_docsis_tcc_err_msg;
397 static int hf_docsis_sid_cl_sf_id;
398 /* static int hf_docsis_sid_cl_enc; */
399 /* static int hf_docsis_sid_cl_so_crit; */
401 static int hf_docsis_sid_cl_enc_id;
402 /* static int hf_docsis_sid_cl_enc_map; */
404 static int hf_docsis_sid_cl_map_us_ch_id;
405 static int hf_docsis_sid_cl_map_sid;
406 static int hf_docsis_sid_cl_map_action;
408 static int hf_docsis_sid_cl_so_max_req;
409 static int hf_docsis_sid_cl_so_max_out_bytes;
410 static int hf_docsis_sid_cl_so_max_req_bytes;
411 static int hf_docsis_sid_cl_so_max_time;
413 static int hf_docsis_tlv_rcp_id;
414 static int hf_docsis_tlv_rcp_name;
415 static int hf_docsis_tlv_rcp_freq_spc;
416 /* static int hf_docsis_tlv_rcp_rcv_mod_enc; */
417 /* static int hf_docsis_tlv_rcp_rcv_ch; */
418 /* static int hf_docsis_tlv_rcp_ven_spec; */
420 static int hf_docsis_rcv_mod_enc_idx;
421 static int hf_docsis_rcv_mod_enc_adj_ch;
422 /* static int hf_docsis_rcv_mod_enc_ch_bl_rng; */
423 static int hf_docsis_rcv_mod_enc_ctr_freq_asgn;
424 static int hf_docsis_rcv_mod_enc_rsq_ch_subs_cap;
425 static int hf_docsis_rcv_mod_enc_conn;
426 static int hf_docsis_rcv_mod_enc_phy_layr_parms;
428 static int hf_docsis_rcc_rcv_mod_enc_idx;
429 static int hf_docsis_rcc_rcv_mod_enc_ctr_freq_asgn;
430 static int hf_docsis_rcc_rcv_mod_enc_conn;
432 static int hf_docsis_ch_bl_rng_min_ctr_freq;
433 static int hf_docsis_ch_bl_rng_max_ctr_freq;
435 static int hf_docsis_rcv_ch_idx;
436 static int hf_docsis_rcv_ch_conn;
437 static int hf_docsis_rcv_ch_conn_off;
438 static int hf_docsis_rcv_ch_prim_ds_ch_ind;
440 static int hf_docsis_rcc_rcv_ch_idx;
441 static int hf_docsis_rcc_rcv_ch_conn;
442 static int hf_docsis_rcc_rcv_ch_ctr_freq_asgn;
443 static int hf_docsis_rcc_rcv_ch_prim_ds_ch_ind;
445 static int hf_docsis_tlv_rcc_id;
446 static int hf_docsis_tlv_rcc_partial_serv_down_chan_id;
447 static int hf_docsis_tlv_rcc_srcc_prim_ds_chan_assign_ds_ch_id;
448 static int hf_docsis_tlv_rcc_srcc_ds_chan_assign_ds_ch_id;
449 static int hf_docsis_tlv_rcc_srcc_ds_prof_assign_dcid;
450 static int hf_docsis_tlv_rcc_srcc_ds_prof_asssign_prof_list_prof_id;
451 static int hf_docsis_tlv_rcc_prim_down_chan;
452 /* static int hf_docsis_tlv_rcc_rcv_mod_enc; */
453 /* static int hf_docsis_tlv_rcc_rcv_ch; */
454 /* static int hf_docsis_tlv_rcc_part_serv_ds_ch; */
455 /* static int hf_docsis_tlv_rcc_ven_spec; */
456 /* static int hf_docsis_tlv_rcc_err; */
458 static int hf_docsis_tlv_rcc_err_mod_or_ch;
459 static int hf_docsis_tlv_rcc_err_idx;
460 static int hf_docsis_tlv_rcc_err_param;
461 static int hf_docsis_tlv_rcc_err_code;
462 static int hf_docsis_tlv_rcc_err_msg;
464 static int hf_docsis_tlv_dsid_id;
465 static int hf_docsis_tlv_dsid_action;
466 /* static int hf_docsis_tlv_dsid_ds_reseq; */
467 /* static int hf_docsis_tlv_dsid_mc; */
469 static int hf_docsis_ds_reseq_dsid;
470 static int hf_docsis_ds_reseq_ch_lst;
471 static int hf_docsis_ds_reseq_wait_time;
472 static int hf_docsis_ds_reseq_warn_thresh;
473 static int hf_docsis_ds_reseq_ho_timer;
475 /* static int hf_docsis_tlv_dsid_mc_addr; */
476 static int hf_docsis_tlv_dsid_mc_cmim;
477 static int hf_docsis_tlv_dsid_mc_group;
478 /* static int hf_docsis_tlv_dsid_mc_phs; */
480 static int hf_docsis_mc_addr_action;
481 static int hf_docsis_mc_addr_addr;
483 static int hf_docsis_tlv_sec_assoc_action;
484 static int hf_docsis_tlv_sec_assoc_desc;
486 static int hf_docsis_ch_asgn_us_ch_id;
487 static int hf_docsis_ch_asgn_rx_freq;
489 static int hf_docsis_cmts_mc_sess_enc_grp;
490 static int hf_docsis_cmts_mc_sess_enc_src;
491 static int hf_docsis_cmts_mc_sess_enc_cmim;
493 static int hf_docsis_tlv_em_mode_ind;
495 static int hf_docsis_tlv_em_id_list_for_cm_em_id;
497 static int hf_docsis_tlv_fdx_reset;
499 static int hf_docsis_tlv_fdx_tg_assignment_tg_id;
500 static int hf_docsis_tlv_fdx_tg_assignment_rba_type;
502 static int hf_docsis_tlv_unknown;
503 static int hf_docsis_tlv_unknown_type;
504 static int hf_docsis_tlv_unknown_length;
505 static int hf_docsis_tlv_unknown_value;
508 static int hf_docsis_ucd_fragments;
509 static int hf_docsis_ucd_fragment;
510 static int hf_docsis_ucd_fragment_overlap;
511 static int hf_docsis_ucd_fragment_overlap_conflict;
512 static int hf_docsis_ucd_fragment_multiple_tails;
513 static int hf_docsis_ucd_fragment_too_long_fragment;
514 static int hf_docsis_ucd_fragment_error;
515 static int hf_docsis_ucd_fragment_count;
516 static int hf_docsis_ucd_reassembled_in;
517 static int hf_docsis_ucd_reassembled_length;
518 static int hf_docsis_ucd_reassembled_data;
520 static int hf_docsis_ucd_reassembled;
523 /* Initialize the subtree pointers */
524 static int ett_docsis_tlv;
525 static int ett_docsis_tlv_cos;
526 static int ett_docsis_tlv_mcap;
527 static int ett_docsis_tlv_mcap_em;
528 static int ett_docsis_tlv_mcap_em_pref;
529 static int ett_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup;
530 static int ett_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup;
531 static int ett_docsis_tlv_mcap_down_lower_band_edge_conf;
532 static int ett_docsis_tlv_mcap_down_upper_band_edge_conf;
533 static int ett_docsis_tlv_mcap_dipl_down_lower_band_edge;
534 static int ett_docsis_tlv_mcap_dipl_down_upper_band_edge;
535 static int ett_docsis_tlv_mcap_dipl_up_upper_band_edge;
536 static int ett_docsis_tlv_mcap_advanced_band_plan;
537 static int ett_docsis_tlv_mcap_dipl_down_lower_band_edge_options_list;
538 static int ett_docsis_tlv_mcap_dipl_down_upper_band_edge_options_list;
539 static int ett_docsis_tlv_mcap_dipl_up_upper_band_edge_options_list;
540 static int ett_docsis_tlv_clsfr;
541 static int ett_docsis_tlv_clsfr_ip;
542 static int ett_docsis_tlv_clsfr_ip6;
543 static int ett_docsis_tlv_clsfr_ip6_tc;
544 static int ett_docsis_tlv_clsfr_eth;
545 static int ett_docsis_tlv_clsfr_err;
546 static int ett_docsis_tlv_phs;
547 static int ett_docsis_tlv_phs_err;
548 static int ett_docsis_tlv_clsfr_dot1q;
549 static int ett_docsis_tlv_reqxmitpol;
550 static int ett_docsis_tlv_sflow_err;
551 static int ett_docsis_tlv_svc_unavail;
552 static int ett_docsis_tlv_snmpv3_kick;
553 static int ett_docsis_tlv_ds_ch_list;
554 static int ett_docsis_tlv_ds_ch_list_single;
555 static int ett_docsis_tlv_ds_ch_list_range;
556 static int ett_docsis_tlv_ext_field;
557 static int ett_docsis_tlv_vendor_specific_cap;
558 static int ett_docsis_tlv_dut_filter;
559 static int ett_docsis_tlv_tcc;
560 static int ett_docsis_tlv_tcc_ucd;
561 static int ett_docsis_tlv_tcc_rng_parms;
562 static int ett_docsis_tlv_tcc_oudp;
563 static int ett_docsis_tlv_tcc_err;
564 static int ett_docsis_tlv_sid_cl;
565 static int ett_docsis_tlv_sid_cl_enc;
566 static int ett_docsis_tlv_sid_cl_enc_map;
567 static int ett_docsis_tlv_sid_cl_so;
568 static int ett_docsis_tlv_rcp;
569 static int ett_docsis_tlv_rcp_rcv_mod_enc;
570 static int ett_docsis_tlv_rcp_ch_bl_rng;
571 static int ett_docsis_tlv_rcp_rcv_ch;
572 static int ett_docsis_tlv_rcc;
573 static int ett_docsis_tlv_rcc_rcv_mod_enc;
574 static int ett_docsis_tlv_rcc_rcv_ch;
575 static int ett_docsis_tlv_rcc_partial_serv_down_chan;
576 static int ett_docsis_tlv_rcc_srcc;
577 static int ett_docsis_tlv_rcc_srcc_prim_ds_assign;
578 static int ett_docsis_tlv_rcc_srcc_ds_assign;
579 static int ett_docsis_tlv_rcc_srcc_ds_prof_assign;
580 static int ett_docsis_tlv_rcc_srcc_ds_prof_assign_prof_list;
581 static int ett_docsis_tlv_rcc_err;
582 static int ett_docsis_tlv_dsid;
583 static int ett_docsis_tlv_dsid_ds_reseq;
584 static int ett_docsis_tlv_dsid_mc;
585 static int ett_docsis_tlv_dsid_mc_addr;
586 static int ett_docsis_tlv_sec_assoc;
587 static int ett_docsis_tlv_ch_asgn;
588 static int ett_docsis_cmts_mc_sess_enc;
589 static int ett_docsis_em_id_list_for_cm;
590 static int ett_docsis_tlv_tg_assignment;
591 static int ett_docsis_tlv_unknown;
592 static int ett_docsis_ucd_fragments;
593 static int ett_docsis_ucd_fragment;
594 static int ett_docsis_ucd_reassembled;
597 static expert_field ei_docsis_tlv_tlvlen_bad;
598 static expert_field ei_docsis_tlv_tlvval_bad;
601 static const true_false_string ena_dis_tfs = {
602 "Enable",
603 "Disable"
606 static const value_string sup_unsup_vals[] = {
607 {0, "Unsupported"},
608 {1, "Supported"},
609 {0, NULL},
612 static const true_false_string sup_unsup_tfs = {
613 "Supported",
614 "Unsupported"
617 static const value_string docs_ver_vals[] = {
618 {0, "v1.0"},
619 {1, "v1.1"},
620 {2, "v2.0"},
621 {3, "v3.0"},
622 {4, "v3.1"},
623 {5, "v4.0"},
624 {0, NULL},
627 static const value_string dsc_act_vals[] = {
628 {0, "DSC Add Classifier"},
629 {1, "DSC Replace Classifier"},
630 {2, "DSC Delete Classifier"},
631 {0, NULL},
634 static const value_string qos_param_vals[] = {
635 {0x01, "Apply to provisioned set only"},
636 {0x02, "Perform admission control add apply to admitted set"},
637 {0x03, "Apply to provisioned and admitted set; Perform admission control"},
638 {0x04, "Perform admission control if needed and apply to active set"},
639 {0x05,
640 "Apply to provisioned and active sets; Admission control on admitted set in separate service flow, and activate service flow"},
641 {0x06,
642 "Perform admission control and activate; Apply to admitted and active sets"},
643 {0x07,
644 "Apply to Provisioned, Active and Admitted Sets; Admission Control and Activate Service Flow"},
645 {0, NULL},
648 static const value_string sched_type_vals[] = {
649 {0, "Reserved"},
650 {1, "Undefined (CMTS Dependent)"},
651 {2, "Best Effort Service"},
652 {3, "Non-Real-Time Polling Service"},
653 {4, "Real-Time Polling Service"},
654 {5, "Unsolicited Grant Service w/Activity Detection"},
655 {6, "Unsolicited Grant Service"},
656 {0, NULL},
659 static const value_string action_vals[] = {
660 {0, "Add PHS Rule"},
661 {1, "Set PHS Rule"},
662 {2, "Delete PHS Rule"},
663 {3, "Delete all PHS Rules"},
664 {0, NULL},
667 static const value_string dbc_action_vals[] = {
668 {0, "Add PHS Rule"},
669 {1, "Delete PHS Rule"},
670 {0, NULL},
673 #if 0
674 static const true_false_string verify_tfs = {
675 "Don't Verify",
676 "Verify"
678 #endif
680 static const value_string rng_tech_vals[] = {
681 {0, "Perform initial maintenance on new channel"},
682 {1, "Perform only station maintenance on new channel"},
683 {2, "Perform either initial maintenance or station maintenance on new channel"},
684 {3, "Use the new channel directly without performing initial or station maintenance"},
685 {0, NULL},
689 const value_string docsis_conf_code[] = {
690 { 0, "okay/success"},
691 { 1, "Reject: Other/Auth failure (1.0)"},
692 { 2, "Reject: Unrecognized configuration setting/COS failure (1.0)"},
693 { 3, "Reject: Temporary/Reject resource"},
694 { 4, "Reject: Permanent/Reject admin"},
695 { 5, "Reject: Not owner"},
696 { 6, "Reject: Service flow not found"},
697 { 7, "Reject: Service flow exists"},
698 { 8, "Reject: Required parameter not present"},
699 { 9, "Reject: Header suppression"},
700 { 10, "Reject: Unknown transaction ID"},
701 { 11, "Reject: Authentication failure"},
702 { 12, "Reject: Add aborted"},
703 { 13, "Reject: Multiple errors"},
704 { 14, "Reject: Classifier not found"},
705 { 15, "Reject: Classifier exists"},
706 { 16, "Reject: PHS rule not found"},
707 { 17, "Reject: PHS rule exists"},
708 { 18, "Reject: Duplicate reference ID or index in message"},
709 { 19, "Reject: Multiple upstream service flows"},
710 { 20, "Reject: Multiple downstream service flows"},
711 { 21, "Reject: Classifier for another service flow"},
712 { 22, "Reject: PHS for another service flow"},
713 { 23, "Reject: Parameter invalid for context"},
714 { 24, "Reject: Authorization failure"},
715 { 25, "Reject: Temporary DCC"},
716 { 26, "Reject: Downstream Inconsistency"},
717 { 27, "Reject: Upstream Inconsistency"},
718 { 28, "Reject: Insufficient SID Cluster Resources"},
719 { 29, "Reject: Missing RCP"},
720 { 30, "Partial Service"},
721 { 31, "Reject: Temporary DBC"},
722 { 32, "Reject: Unknown DSID"},
723 { 33, "Reject: Unknown SID Cluster"},
724 { 34, "Reject: Invalid Initialization Technique"},
725 { 35, "Reject: No Change"},
726 { 36, "Reject: Invalid DBC Request"},
727 { 37, "Reject: Mode Switch"},
728 { 38, "Reject: Insufficient Transmitters"},
729 { 40, "Reject: Insufficient DSID Resources"},
730 { 41, "Reject: Invalid DSID Encoding"},
731 { 42, "Reject: Unknown Client MAC Address"},
732 { 43, "Reject: Unknown SAID"},
733 { 44, "Reject: Insufficient SA Resources"},
734 { 45, "Reject: Invalid SA Encoding"},
735 { 46, "Reject: Invalid SA Crypto Suite"},
736 { 47, "Reject: TEK Exists"},
737 { 48, "Reject: Invalid SID Cluster Encoding"},
738 { 49, "Reject: Insufficient SID Resources"},
739 { 50, "Reject: Unsupported Parameter Change"},
740 { 51, "Reject: PHS Rule Fully Defined"},
741 { 52, "Reject: No MAPs Or UCDs"},
742 { 53, "Error: T3 Retries Exceeded"},
743 { 54, "Error: T2 Timeout"},
744 { 55, "Error: T4 Timeout"},
745 { 56, "Error: Ranging Abort"},
746 { 57, "Error: Initialization Channel Timeout"},
747 { 58, "Error: DBC-REQ Incomplete"},
748 { 59, "Reject: Too Many OFDMA Profiles"},
749 { 60, "Reject: Too Many OFDM Profiles"},
750 { 61, "Reject: EM Incorrect Primary DS"},
751 { 62, "Reject: AQM Not Supported"},
752 { 63, "Reject: Invalid DPD"},
753 {100, "Reject: VLAD ID In Use"},
754 {101, "Reject: Multipoint L2VPN"},
755 {102, "Reject: Multipoint NSI"},
756 {160, "Reject: Unknown RCP ID"},
757 {161, "Reject: Multiple RCP IDs"},
758 {162, "Reject: Missing Receive Module Index"},
759 {163, "Reject: Invalid Receive Module Index"},
760 {164, "Reject: Invalid Receive Channel Center Frequency"},
761 {165, "Reject: Invalid Receive Module First Channel Center Frequency"},
762 {166, "Reject: Missing Receive Module First Channel Center Frequency"},
763 {167, "Reject: No Primary Downstream Channel Assigned"},
764 {168, "Reject: Multiple Primary Downstream Channel Assigned"},
765 {169, "Reject: Receive Module Connectivity Error"},
766 {170, "Reject: Invalid Receive Channel Index"},
767 {171, "Reject: Center Frequency Not Multiple of 62500 Hz"},
768 {180, "Depart"},
769 {181, "Arrive"},
770 {182, "Reject: Already There"},
771 {183, "Reject: Reject 2.0 Disable"},
772 {200, "Reject: Major Service Flow Error"},
773 {201, "Reject: Major Classifier Error"},
774 {202, "Reject: Major PHS Rule Error"},
775 {203, "Reject: Multiple Major Errors"},
776 {204, "Reject: Message Syntax Error"},
777 {205, "Reject: Primary Service Flow Error"},
778 {206, "Reject: Message Too Big"},
779 {207, "Reject: Invalid Modem Capabilities"},
780 {208, "Reject: Bad RCC"},
781 {209, "Reject: Bad TCC"},
782 {210, "Reject: Dynamic Range Window Violation"},
783 {211, "Reject: Unable to support Queue Depth"},
784 {212, "Reject: Energy Management Parameters"},
785 {213, "Reject: Invalid Backup Primary Downstream"},
786 {0, NULL}
789 value_string_ext docsis_conf_code_ext = VALUE_STRING_EXT_INIT(docsis_conf_code);
791 static const value_string next_header_vals[] = {
792 {0, "Hop-by-Hop"},
793 {60, "Destination"},
794 {43, "Routing"},
795 {44, "Fragment"},
796 {51, "Authentication"},
797 {50, "Encapsulation"},
798 {59, "No"},
799 {256, "All IPv6 Traffic"},
800 {257, "All UDP and TCP Traffic"},
801 {0, NULL},
804 static const value_string us_ch_action_vals[] = {
805 {0, "No Action"},
806 {1, "Add"},
807 {2, "Change"},
808 {3, "Delete"},
809 {4, "Replace"},
810 {5, "Re-range"},
811 {0, NULL},
814 static const value_string init_tech_vals[] = {
815 {0, "reserved"},
816 {1, "Perform broadcast initial ranging before normal ops"},
817 {2, "Perform unicast ranging before normal ops"},
818 {3, "Perform either broadcast or unicast ranging before normal ops"},
819 {4, "Use new channel directly without reinitializing or ranging"},
820 {5, "Perform probing before normal ops"},
821 {6, "Perform unicast initial ranging before normal ops"},
822 {7, "Perform station ranging before normal ops"},
823 {8, "Use FDX channel directly"},
824 {0, NULL},
827 static const value_string sid_ch_map_vals[] = {
828 {0, "reserved"},
829 {1, "Add"},
830 {2, "Delete"},
831 {0, NULL},
834 static const value_string mod_or_ch_vals[] = {
835 {0, "reserved"},
836 {1, "reserved"},
837 {2, "reserved"},
838 {3, "reserved"},
839 {4, "Receive Module"},
840 {5, "Receive Channel"},
841 {0, NULL},
844 static const value_string dsid_action_vals[] = {
845 {0, "Add"},
846 {1, "Change"},
847 {2, "Delete"},
848 {0, NULL},
851 static const value_string add_del_vals[] = {
852 {0, "Add"},
853 {1, "Delete"},
854 {0, NULL},
857 static const value_string init_reason_vals[] = {
858 { 0, "reserved"},
859 { 1, "Power On"},
860 { 2, "T17 Lost Sync"},
861 { 3, "All Upstream Failed"},
862 { 4, "Bad DHCP Ack"},
863 { 5, "Link Local Address in use"},
864 { 6, "T6 Expired"},
865 { 7, "REG-RSP not ok"},
866 { 8, "BAD RCC/TCC"},
867 { 9, "Failed Primary Downstream"},
868 {10, "TCS failed on all upstreams"},
869 {11, "reserved"},
870 {12, "reserved"},
871 {13, "reserved"},
872 {14, "reserved"},
873 {15, "MTCM Change"},
874 {16, "T4 Expired"},
875 {17, "No Primary SF on US Channel"},
876 {18, "CM Control Init"},
877 {19, "Dynamic Range Window Violation"},
878 {20, "IP Provisioning Mode Override"},
879 {21, "SW Upgrade Reboot"},
880 {22, "SNMP Reset"},
881 {23, "REG-RSP Missing RCC"},
882 {24, "REG-RSP Missing TCC"},
883 {25, "REG-RSP MTC Not Enabled"},
884 {26, "DHCPv6 Bad Reply"},
885 {27, "Reset Due To Diplexer Change"},
886 {0, NULL},
889 static const value_string docsis_freq_rng_vals[] = {
890 {0, "Standard Upstream Frequency Range (5-42 MHz)"},
891 {1, "Selectable Between Standard (5-42 MHz) and Extended (5-85 MHz) Upstream Frequency Range"},
892 {2, "Extended Upstream Frequency Range (5-85 MHz)"},
893 {0, NULL},
896 static const value_string mc_dsid_fwd_vals[] = {
897 {0, "No support for multicast DSID forwarding"},
898 {1, "Support for GMAC explicit multicast DSID forwarding"},
899 {2, "Support for GMAC promiscuous multicast DSID forwarding"},
900 {0, NULL},
903 static const value_string fctype_fwd_vals[] = {
904 {0, "Isolation Packet PDU Header (FC_Type of 10) is not forwarded"},
905 {1, "Isolation Packet PDU Header (FC_Type of 10) is forwarded"},
906 {0, NULL},
909 static const value_string em_mode_ind_vals[] = {
910 {0, "Do not operate in any Energy Management Mode"},
911 {1, "Operate in Energy Management 1x1 Mode"},
912 {2, "Operate in DOCSIS Light Sleep (DLS) Mode"},
913 {0, NULL},
916 static const value_string down_reseq_vals[] = {
917 {0, "The CMTS is required to associate this service flow with a resequencing DSID if the service flow is assigned to a downstream bonding group."},
918 {1, "The CMTS is required to not associate this service flow with a resequencing DSID."},
919 {0, NULL},
922 static const value_string dipl_up_upper_band_edge_conf_vals[] = {
923 {0, "Upstream Frequency Range up to 42 MHz"},
924 {1, "Upstream Frequency Range up to 65 MHz"},
925 {2, "Upstream Frequency Range up to 85 MHz"},
926 {3, "Upstream Frequency Range up to 117 MHz"},
927 {4, "Upstream Frequency Range up to 204 MHz"},
928 {0, NULL},
931 static const value_string docsis_time_prot_mode_vals[] = {
932 {0, "DTP operation is not supported"},
933 {1, "DTP Slave capable only"},
934 {2, "DTP Master capable only"},
935 {3, "DTP Master or Slave capable"},
936 {0, NULL},
939 static const value_string docsis_time_prot_perf_sup_vals[] = {
940 {0, "DTP mode is not supported"},
941 {1, "DTP support for DTP Level 1"},
942 {2, "DTP support for DTP Level 2"},
943 {3, "DTP support for DTP Level 3"},
944 {4, "DTP support for DTP Level 4"},
945 {5, "DTP support for DTP Level 5"},
946 {6, "DTP supported but with no specified performance"},
947 {0, NULL},
950 static const value_string rba_type_vals[] = {
951 {0, "Use RBA-SW"},
952 {1, "Use RBA-HW"},
953 {0, NULL},
956 static const value_string fdx_reset_vals[] = {
957 {0, "Do not reset FDX state"},
958 {1, "Reset FDX state and restart FDX initialization"},
959 {0, NULL},
962 static const value_string docsis_mcap_ext_sf_cluster_assign_sup_vals[] = {
963 {0, "No support"},
964 {1, "Support available"},
965 {0, NULL},
968 static const value_string extended_power_options_vals[] = {
969 {0, "No battery backup"},
970 {1, "Battery backup"},
971 {2, "Modem capacitance"},
972 {0, NULL},
975 static void
976 fourth_db(char *buf, uint32_t value)
978 snprintf(buf, ITEM_LABEL_LENGTH, "%.2f dB", value/4.0);
981 static void
982 fourth_dbmv(char *buf, uint32_t value)
984 snprintf(buf, ITEM_LABEL_LENGTH, "%.2f dBmV", value/4.0);
987 static reassembly_table ucd_reassembly_table;
989 static const fragment_items ucd_frag_items = {
990 &ett_docsis_ucd_fragment,
991 &ett_docsis_ucd_fragments,
992 &hf_docsis_ucd_fragments,
993 &hf_docsis_ucd_fragment,
994 &hf_docsis_ucd_fragment_overlap,
995 &hf_docsis_ucd_fragment_overlap_conflict,
996 &hf_docsis_ucd_fragment_multiple_tails,
997 &hf_docsis_ucd_fragment_too_long_fragment,
998 &hf_docsis_ucd_fragment_error,
999 &hf_docsis_ucd_fragment_count,
1000 &hf_docsis_ucd_reassembled_in,
1001 &hf_docsis_ucd_reassembled_length,
1002 &hf_docsis_ucd_reassembled_data,
1003 "UCD fragments"
1007 /* Dissection */
1008 static void
1009 dissect_unknown_tlv(tvbuff_t * tvb, packet_info *pinfo, proto_tree * tree, int start, uint16_t len) {
1010 unsigned type, length;
1011 proto_tree * unknown_tree;
1012 proto_item * unknown_item;
1014 unknown_item = proto_tree_add_item(tree, hf_docsis_tlv_unknown, tvb, start, len, ENC_NA);
1015 unknown_tree = proto_item_add_subtree(unknown_item, ett_docsis_tlv_unknown);
1017 if (len < 2)
1019 expert_add_info_format(pinfo, unknown_item, &ei_docsis_tlv_tlvlen_bad, "Unknown TLV: total length < 2: %u", len);
1020 return;
1023 proto_tree_add_item_ret_uint (unknown_tree, hf_docsis_tlv_unknown_type, tvb, start, 1, ENC_BIG_ENDIAN, &type);
1024 proto_tree_add_item_ret_uint (unknown_tree, hf_docsis_tlv_unknown_length, tvb, start + 1, 1, ENC_BIG_ENDIAN, &length);
1026 proto_item_append_text(unknown_item," (Type: %d, Length: %d)", type, length);
1028 if (length + 2 != len)
1030 expert_add_info_format(pinfo, unknown_item, &ei_docsis_tlv_tlvlen_bad, "Unknown TLV: Wrong TLV length: %u", length);
1031 return;
1034 proto_tree_add_item (unknown_tree, hf_docsis_tlv_unknown_value, tvb, start + 2, len - 2, ENC_NA);
1037 static void
1038 dissect_phs_err (tvbuff_t * tvb, packet_info *pinfo, proto_tree * tree, int start, uint16_t len)
1040 uint8_t type, length;
1041 proto_tree *err_tree;
1042 proto_item *err_item;
1043 int pos = start;
1045 err_tree =
1046 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_sflow_err, &err_item,
1047 "5 Service Flow Error Encodings (Length = %u)", len);
1049 while (pos < (start + len))
1051 type = tvb_get_uint8 (tvb, pos++);
1052 length = tvb_get_uint8 (tvb, pos++);
1053 switch (type)
1055 case PHS_ERR_PARAM:
1056 if (length == 1)
1058 proto_tree_add_item (err_tree, hf_docsis_tlv_phs_err_param, tvb,
1059 pos, length, ENC_BIG_ENDIAN);
1061 else
1063 expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1065 break;
1066 case PHS_ERR_CODE:
1067 if (length == 1)
1069 proto_tree_add_item (err_tree, hf_docsis_tlv_phs_err_code, tvb,
1070 pos, length, ENC_BIG_ENDIAN);
1072 else
1074 expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1076 break;
1077 case PHS_ERR_MSG:
1078 proto_tree_add_item (err_tree, hf_docsis_tlv_phs_err_msg, tvb, pos,
1079 length, ENC_ASCII);
1080 break;
1081 default:
1082 dissect_unknown_tlv (tvb, pinfo, err_tree, pos - 2, length + 2);
1083 break;
1084 } /* switch */
1085 pos = pos + length;
1087 } /* while */
1090 static void
1091 dissect_phs (tvbuff_t * tvb, packet_info *pinfo, proto_tree * tree, int start, uint16_t len)
1093 uint8_t type, length;
1094 proto_tree *phs_tree;
1095 proto_item *phs_item;
1096 int pos = start;
1098 phs_tree =
1099 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_phs, &phs_item,
1100 "26 PHS Encodings (Length = %u)", len);
1102 while (pos < (start + len))
1104 type = tvb_get_uint8 (tvb, pos++);
1105 length = tvb_get_uint8 (tvb, pos++);
1106 switch (type)
1108 case PHS_CLSFR_REF:
1109 if (length == 1)
1111 proto_tree_add_item (phs_tree, hf_docsis_tlv_phs_class_ref, tvb,
1112 pos, length, ENC_BIG_ENDIAN);
1114 else
1116 expert_add_info_format(pinfo, phs_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1118 break;
1119 case PHS_CLSFR_ID:
1120 if (length == 2)
1122 proto_tree_add_item (phs_tree, hf_docsis_tlv_phs_class_id, tvb,
1123 pos, length, ENC_BIG_ENDIAN);
1125 else
1127 expert_add_info_format(pinfo, phs_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1129 break;
1130 case PHS_SFLOW_REF:
1131 if (length == 2)
1133 proto_tree_add_item (phs_tree, hf_docsis_tlv_phs_sflow_ref, tvb,
1134 pos, length, ENC_BIG_ENDIAN);
1136 else
1138 expert_add_info_format(pinfo, phs_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1140 break;
1141 case PHS_SFLOW_ID:
1142 if (length == 4)
1144 proto_tree_add_item (phs_tree, hf_docsis_tlv_phs_sflow_id, tvb,
1145 pos, length, ENC_BIG_ENDIAN);
1147 else
1149 expert_add_info_format(pinfo, phs_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1151 break;
1152 case PHS_DSC_ACTION:
1153 if (length == 1)
1155 proto_tree_add_item (phs_tree, hf_docsis_tlv_phs_dsc_action,
1156 tvb, pos, length, ENC_BIG_ENDIAN);
1158 else
1160 expert_add_info_format(pinfo, phs_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1162 break;
1163 case PHS_ERRORS:
1164 dissect_phs_err (tvb, pinfo, phs_tree, pos, length);
1165 break;
1166 case PHS_FIELD:
1167 proto_tree_add_item (phs_tree, hf_docsis_tlv_phs_phsf, tvb, pos,
1168 length, ENC_NA);
1169 break;
1170 case PHS_INDEX:
1171 if (length == 1)
1173 proto_tree_add_item (phs_tree, hf_docsis_tlv_phs_phsi, tvb, pos,
1174 length, ENC_BIG_ENDIAN);
1176 else
1178 expert_add_info_format(pinfo, phs_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1180 break;
1181 case PHS_MASK:
1182 proto_tree_add_item (phs_tree, hf_docsis_tlv_phs_phsm, tvb, pos,
1183 length, ENC_NA);
1184 break;
1185 case PHS_SUP_SIZE:
1186 if (length == 1)
1188 proto_tree_add_item (phs_tree, hf_docsis_tlv_phs_phss, tvb, pos,
1189 length, ENC_BIG_ENDIAN);
1191 else
1193 expert_add_info_format(pinfo, phs_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1195 break;
1196 case PHS_VERIFICATION:
1197 if (length == 1)
1199 proto_tree_add_item (phs_tree, hf_docsis_tlv_phs_phsf, tvb, pos,
1200 length, ENC_NA);
1202 else
1204 expert_add_info_format(pinfo, phs_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1206 break;
1207 case PHS_DBC_ACTION:
1208 if (length == 1)
1210 proto_tree_add_item (phs_tree, hf_docsis_tlv_phs_dbc_action, tvb, pos,
1211 length, ENC_NA);
1213 else
1215 expert_add_info_format(pinfo, phs_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1217 break;
1218 case PHS_VENDOR_SPEC:
1219 proto_tree_add_item (phs_tree, hf_docsis_tlv_phs_vendorspec, tvb,
1220 pos, length, ENC_NA);
1221 break;
1222 default:
1223 dissect_unknown_tlv (tvb, pinfo, phs_tree, pos - 2, length + 2);
1224 break;
1225 } /* switch */
1226 pos = pos + length;
1228 } /* while */
1231 static const true_false_string tfs_must_not_must = { "MUST NOT", "MUST" };
1232 static const true_false_string tfs_must_must_not = { "MUST", "MUST NOT" };
1234 static void
1235 dissect_reqxmit_policy (tvbuff_t * tvb, proto_tree * tree, int start)
1237 static int * const requests[] = {
1238 &hf_docsis_tlv_sflow_reqxmit_all_cm_broadcast,
1239 &hf_docsis_tlv_sflow_reqxmit_priority_multicast,
1240 &hf_docsis_tlv_sflow_reqxmit_req_data_requests,
1241 &hf_docsis_tlv_sflow_reqxmit_req_data_data,
1242 &hf_docsis_tlv_sflow_reqxmit_piggy_back,
1243 &hf_docsis_tlv_sflow_reqxmit_concatenate_data,
1244 &hf_docsis_tlv_sflow_reqxmit_fragment,
1245 &hf_docsis_tlv_sflow_reqxmit_suppress_payload,
1246 &hf_docsis_tlv_sflow_reqxmit_drop_packets,
1247 NULL
1249 proto_tree_add_bitmask(tree, tvb, start, hf_docsis_tlv_sflow_reqxmit_pol,
1250 ett_docsis_tlv_reqxmitpol, requests, ENC_BIG_ENDIAN);
1253 static void
1254 dissect_sflow_err (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start,
1255 uint16_t len)
1257 uint8_t type, length;
1258 proto_tree *err_tree;
1259 proto_item *err_item;
1260 int pos = start;
1262 err_tree =
1263 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_sflow_err, &err_item,
1264 "5 Service Flow Error Encodings (Length = %u)", len);
1266 while (pos < (start + len))
1268 type = tvb_get_uint8 (tvb, pos++);
1269 length = tvb_get_uint8 (tvb, pos++);
1270 switch (type)
1272 case SFW_ERR_PARAM:
1273 if (length == 1)
1275 proto_tree_add_item (err_tree, hf_docsis_tlv_sflow_err_param,
1276 tvb, pos, length, ENC_BIG_ENDIAN);
1278 else
1280 expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1282 break;
1283 case SFW_ERR_CODE:
1284 if (length == 1)
1286 proto_tree_add_item (err_tree, hf_docsis_tlv_sflow_err_code,
1287 tvb, pos, length, ENC_BIG_ENDIAN);
1289 else
1291 expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1293 break;
1294 case SFW_ERR_MSG:
1295 proto_tree_add_item (err_tree, hf_docsis_tlv_sflow_err_msg, tvb,
1296 pos, length, ENC_ASCII);
1297 break;
1298 default:
1299 dissect_unknown_tlv (tvb, pinfo, err_tree, pos - 2, length + 2);
1300 break;
1301 } /* switch */
1302 pos = pos + length;
1304 } /* while */
1307 static void
1308 dissect_downstream_sflow (tvbuff_t * tvb, packet_info* pinfo, proto_tree * sflow_tree,
1309 proto_item* sflow_item, int start, uint16_t len)
1311 uint8_t type, length;
1312 int pos = start;
1314 while (pos < (start + len))
1316 type = tvb_get_uint8 (tvb, pos++);
1317 length = tvb_get_uint8 (tvb, pos++);
1318 switch (type)
1320 case SFW_MAX_DOWN_LAT:
1321 if (length == 4)
1323 proto_tree_add_item (sflow_tree,
1324 hf_docsis_tlv_sflow_max_down_latency, tvb,
1325 pos, length, ENC_BIG_ENDIAN);
1327 else
1329 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1331 break;
1332 case SFW_DOWN_RESEQ:
1333 if (length == 1)
1335 proto_tree_add_item (sflow_tree,
1336 hf_docsis_tlv_sflow_down_reseq, tvb,
1337 pos, length, ENC_BIG_ENDIAN);
1339 else
1341 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1343 break;
1344 default:
1345 dissect_unknown_tlv (tvb, pinfo, sflow_tree, pos - 2, length + 2);
1346 break;
1347 } /* switch */
1348 pos = pos + length;
1350 } /* while */
1353 static void
1354 dissect_upstream_sflow (tvbuff_t * tvb, packet_info* pinfo, proto_tree * sflow_tree,
1355 proto_item* sflow_item, int start, uint16_t len)
1357 uint8_t type, length;
1358 int pos = start;
1360 while (pos < (start + len))
1362 type = tvb_get_uint8 (tvb, pos++);
1363 length = tvb_get_uint8 (tvb, pos++);
1364 switch (type)
1366 case SFW_MAX_CONCAT_BURST:
1367 if (length == 2)
1369 proto_tree_add_item (sflow_tree,
1370 hf_docsis_tlv_sflow_max_concat_burst, tvb,
1371 pos, length, ENC_BIG_ENDIAN);
1373 else
1375 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1377 break;
1378 case SFW_SCHEDULING_TYPE:
1379 if (length == 1)
1381 proto_tree_add_item (sflow_tree, hf_docsis_tlv_sflow_sched_type,
1382 tvb, pos, length, ENC_BIG_ENDIAN);
1384 else
1386 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1388 break;
1389 case SFW_REQ_XMIT_POL:
1390 dissect_reqxmit_policy (tvb, sflow_tree, pos);
1391 break;
1392 case SFW_NOM_POLL_INT:
1393 if (length == 4)
1395 proto_tree_add_item (sflow_tree,
1396 hf_docsis_tlv_sflow_nominal_polling, tvb,
1397 pos, length, ENC_BIG_ENDIAN);
1399 else
1401 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1403 break;
1404 case SFW_POLL_JTTR_TOL:
1405 if (length == 4)
1407 proto_tree_add_item (sflow_tree,
1408 hf_docsis_tlv_sflow_tolerated_jitter, tvb,
1409 pos, length, ENC_BIG_ENDIAN);
1411 else
1413 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1415 break;
1416 case SFW_UG_SIZE:
1417 if (length == 2)
1419 proto_tree_add_item (sflow_tree, hf_docsis_tlv_sflow_ugs_size,
1420 tvb, pos, length, ENC_BIG_ENDIAN);
1422 else
1424 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1426 break;
1427 case SFW_NOM_GRNT_INTV:
1428 if (length == 4)
1430 proto_tree_add_item (sflow_tree,
1431 hf_docsis_tlv_sflow_nom_grant_intvl, tvb,
1432 pos, length, ENC_BIG_ENDIAN);
1434 else
1436 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1438 break;
1439 case SFW_GRNT_JTTR_TOL:
1440 if (length == 4)
1442 proto_tree_add_item (sflow_tree,
1443 hf_docsis_tlv_sflow_tol_grant_jitter, tvb,
1444 pos, length, ENC_BIG_ENDIAN);
1446 else
1448 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1450 break;
1451 case SFW_GRNTS_PER_INTV:
1452 if (length == 1)
1454 proto_tree_add_item (sflow_tree,
1455 hf_docsis_tlv_sflow_grants_per_intvl, tvb,
1456 pos, length, ENC_BIG_ENDIAN);
1458 else
1460 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1462 break;
1463 case SFW_UG_TIME_REF:
1464 if (length == 4)
1466 proto_tree_add_item (sflow_tree,
1467 hf_docsis_tlv_sflow_ugs_timeref, tvb, pos,
1468 length, ENC_BIG_ENDIAN);
1470 else
1472 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1474 break;
1475 case SFW_CONTENTION_REQ_BACKOFF_WINDOW_MULT:
1476 if (length == 1)
1478 proto_tree_add_item (sflow_tree,
1479 hf_docsis_tlv_sflow_cont_req_backoff_window_mult, tvb, pos,
1480 length, ENC_BIG_ENDIAN);
1482 else
1484 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1486 break;
1487 case SFW_NUM_OF_BYTES_REQUESTED_MULT:
1488 if (length == 1)
1490 proto_tree_add_item (sflow_tree,
1491 hf_docsis_tlv_sflow_num_of_bytes_requested_mult, tvb, pos,
1492 length, ENC_BIG_ENDIAN);
1493 uint8_t multiplier_val = tvb_get_uint8 (tvb, pos);
1494 if (multiplier_val != 1 && multiplier_val != 2 && multiplier_val != 4 &&
1495 multiplier_val != 8 && multiplier_val != 16)
1497 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvval_bad,
1498 "Wrong TLV value: %u (should be equal to 1,2,4,8 or 16)", multiplier_val);
1501 else
1503 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1505 break;
1506 default:
1507 dissect_unknown_tlv (tvb, pinfo, sflow_tree, pos - 2, length + 2);
1508 break;
1509 } /* switch */
1510 pos = pos + length;
1512 } /* while */
1515 static void
1516 dissect_sflow (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, uint16_t len,
1517 uint8_t direction)
1519 uint8_t type, length;
1520 proto_tree *sflow_tree;
1521 proto_item *sflow_item;
1522 int pos = start;
1524 if (direction == 24)
1525 sflow_tree =
1526 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr, &sflow_item,
1527 "24 Upstream Service Flow (Length = %u)", len);
1528 else if (direction == 25)
1529 sflow_tree =
1530 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr, &sflow_item,
1531 "25 Downstream Service Flow (Length = %u)", len);
1532 else
1533 return;
1535 while (pos < (start + len))
1537 type = tvb_get_uint8 (tvb, pos++);
1538 length = tvb_get_uint8 (tvb, pos++);
1539 switch (type)
1541 case SFW_REF:
1542 if (length == 2)
1544 proto_tree_add_item (sflow_tree, hf_docsis_tlv_sflow_ref, tvb,
1545 pos, length, ENC_BIG_ENDIAN);
1547 else
1549 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1551 break;
1552 case SFW_ID:
1553 if (length == 4)
1555 proto_tree_add_item (sflow_tree, hf_docsis_tlv_sflow_id, tvb,
1556 pos, length, ENC_BIG_ENDIAN);
1558 else
1560 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1562 break;
1563 case SFW_SID:
1564 if (length == 2)
1566 proto_tree_add_item (sflow_tree, hf_docsis_tlv_sflow_sid, tvb,
1567 pos, length, ENC_BIG_ENDIAN);
1569 else
1571 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1573 break;
1574 case SFW_SERVICE_CLASS_NAME:
1575 proto_tree_add_item (sflow_tree, hf_docsis_tlv_sflow_classname, tvb,
1576 pos, length, ENC_ASCII);
1577 break;
1578 case SFW_ERRORS:
1579 dissect_sflow_err (tvb, pinfo, sflow_tree, pos, length);
1580 break;
1581 case SFW_QOS_SET_TYPE:
1582 if (length == 1)
1584 proto_tree_add_item (sflow_tree, hf_docsis_tlv_sflow_qos_param,
1585 tvb, pos, length, ENC_BIG_ENDIAN);
1587 else
1589 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1591 break;
1592 case SFW_TRAF_PRI:
1593 if (length == 1)
1595 proto_tree_add_item (sflow_tree, hf_docsis_tlv_sflow_traf_pri,
1596 tvb, pos, length, ENC_BIG_ENDIAN);
1598 else
1600 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1602 break;
1603 case SFW_MAX_SUSTAINED:
1604 if (length == 4)
1606 proto_tree_add_item (sflow_tree, hf_docsis_tlv_sflow_max_sus,
1607 tvb, pos, length, ENC_BIG_ENDIAN);
1609 else
1611 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1613 break;
1614 case SFW_MAX_BURST:
1615 if (length == 4)
1617 proto_tree_add_item (sflow_tree, hf_docsis_tlv_sflow_max_burst,
1618 tvb, pos, length, ENC_BIG_ENDIAN);
1620 else
1622 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1624 break;
1625 case SFW_MIN_RSVD_TRAF:
1626 if (length == 4)
1628 proto_tree_add_item (sflow_tree, hf_docsis_tlv_sflow_min_traf,
1629 tvb, pos, length, ENC_BIG_ENDIAN);
1631 else
1633 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1635 break;
1636 case SFW_MIN_RSVD_PACKETSIZE:
1637 if (length == 2)
1639 proto_tree_add_item (sflow_tree,
1640 hf_docsis_tlv_sflow_ass_min_pkt_size, tvb,
1641 pos, length, ENC_BIG_ENDIAN);
1643 else
1645 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1647 break;
1648 case SFW_ACTIVE_QOS_TIMEOUT:
1649 if (length == 2)
1651 proto_tree_add_item (sflow_tree,
1652 hf_docsis_tlv_sflow_timeout_active, tvb,
1653 pos, length, ENC_BIG_ENDIAN);
1655 else
1657 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1659 break;
1660 case SFW_ADMITT_QOS_TIMEOUT:
1661 if (length == 2)
1663 proto_tree_add_item (sflow_tree,
1664 hf_docsis_tlv_sflow_timeout_admitted, tvb,
1665 pos, length, ENC_BIG_ENDIAN);
1667 else
1669 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1671 break;
1672 case SFW_IP_TOS_OVERWRITE:
1673 if (length == 2)
1675 proto_tree_add_item (sflow_tree,
1676 hf_docsis_tlv_sflow_ip_tos_overwrite, tvb,
1677 pos, length, ENC_BIG_ENDIAN);
1679 else
1681 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1683 break;
1684 case SFW_PEAK_TRAFFIC_RATE:
1685 if (length == 4)
1687 proto_tree_add_item (sflow_tree,
1688 hf_docsis_tlv_sflow_peak_traffic_rate, tvb, pos,
1689 length, ENC_BIG_ENDIAN);
1691 else
1693 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1695 break;
1696 case SFW_REQUIRED_ATTRIBUTE_MASK:
1697 if (length == 4)
1699 proto_tree_add_item (sflow_tree,
1700 hf_docsis_tlv_sflow_req_attr_mask, tvb,
1701 pos, length, ENC_NA);
1703 else
1705 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1708 break;
1709 case SFW_FORBIDDEN_ATTRIBUTE_MASK:
1710 if (length == 4)
1712 proto_tree_add_item (sflow_tree,
1713 hf_docsis_tlv_sflow_forb_attr_mask, tvb,
1714 pos, length, ENC_NA);
1716 else
1718 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1720 break;
1721 case SFW_ATTRIBUTE_AGGREGATION_RULE_MASK:
1722 if (length == 4)
1724 proto_tree_add_item (sflow_tree,
1725 hf_docsis_tlv_sflow_attr_aggr_rule_mask, tvb,
1726 pos, length, ENC_NA);
1728 else
1730 expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1732 break;
1733 case SFW_VENDOR_SPEC:
1734 proto_tree_add_item (sflow_tree, hf_docsis_tlv_sflow_vendor_spec,
1735 tvb, pos, length, ENC_NA);
1736 break;
1737 default:
1738 if (direction == 24)
1739 dissect_upstream_sflow (tvb, pinfo, sflow_tree, sflow_item, pos - 2, length);
1740 else
1741 dissect_downstream_sflow (tvb, pinfo, sflow_tree, sflow_item, pos - 2, length);
1742 break;
1744 } /* switch (type) */
1745 pos = pos + length;
1746 } /* while(pos < start + len) */
1750 static void
1751 dissect_dot1q_clsfr (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start,
1752 uint16_t len)
1754 uint8_t type, length;
1755 proto_tree *dot1qclsfr_tree;
1756 proto_item *dot1qclsfr_item;
1757 int pos = start;
1759 dot1qclsfr_tree =
1760 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_cos, &dot1qclsfr_item,
1761 "11 801.1P/Q Classifiers (Length = %u)", len);
1763 while (pos < (start + len))
1765 type = tvb_get_uint8 (tvb, pos++);
1766 length = tvb_get_uint8 (tvb, pos++);
1767 switch (type)
1769 case CFR_D1Q_USER_PRI:
1770 if (length == 2)
1772 proto_tree_add_item (dot1qclsfr_tree,
1773 hf_docsis_tlv_dot1qclsfr_user_pri, tvb,
1774 pos, length, ENC_BIG_ENDIAN);
1776 else
1778 expert_add_info_format(pinfo, dot1qclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1780 break;
1781 case CFR_D1Q_VLAN_ID:
1782 if (length == 2)
1784 proto_tree_add_item (dot1qclsfr_tree,
1785 hf_docsis_tlv_dot1qclsfr_vlanid, tvb, pos,
1786 length, ENC_BIG_ENDIAN);
1788 else
1790 expert_add_info_format(pinfo, dot1qclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1792 break;
1793 case CFR_D1Q_VENDOR_SPEC:
1794 proto_tree_add_item (dot1qclsfr_tree,
1795 hf_docsis_tlv_dot1qclsfr_vendorspec, tvb, pos,
1796 length, ENC_NA);
1797 break;
1798 default:
1799 dissect_unknown_tlv (tvb, pinfo, dot1qclsfr_tree, pos - 2, length + 2);
1800 break;
1801 } /* switch */
1802 pos = pos + length;
1804 } /* while */
1807 static void
1808 dissect_eth_clsfr (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start,
1809 uint16_t len)
1811 uint8_t type, length;
1812 proto_tree *ethclsfr_tree;
1813 proto_item *ethclsfr_item;
1814 int pos = start;
1816 ethclsfr_tree =
1817 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr_eth, &ethclsfr_item,
1818 ".10 Ethernet Classifiers (Length = %u)", len);
1820 while (pos < (start + len))
1822 type = tvb_get_uint8 (tvb, pos++);
1823 length = tvb_get_uint8 (tvb, pos++);
1824 switch (type)
1826 case CFR_ETH_DST_MAC:
1827 if (length == 6)
1829 proto_tree_add_item (ethclsfr_tree, hf_docsis_tlv_ethclsfr_dmac,
1830 tvb, pos, length, ENC_NA);
1832 else
1834 expert_add_info_format(pinfo, ethclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1836 break;
1837 case CFR_ETH_SRC_MAC:
1838 if (length == 6)
1840 proto_tree_add_item (ethclsfr_tree, hf_docsis_tlv_ethclsfr_smac,
1841 tvb, pos, length, ENC_NA);
1843 else
1845 expert_add_info_format(pinfo, ethclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1847 break;
1848 case CFR_ETH_DSAP:
1849 if (length == 3)
1851 proto_tree_add_item (ethclsfr_tree,
1852 hf_docsis_tlv_ethclsfr_ethertype, tvb, pos,
1853 length, ENC_BIG_ENDIAN);
1855 else
1857 expert_add_info_format(pinfo, ethclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1859 break;
1860 default:
1861 dissect_unknown_tlv (tvb, pinfo, ethclsfr_tree, pos - 2, length + 2);
1862 break;
1863 } /* switch */
1864 pos = pos + length;
1866 } /* while */
1869 static void
1870 dissect_clsfr_err (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start,
1871 uint16_t len)
1873 uint8_t type, length;
1874 proto_tree *err_tree;
1875 proto_tree *err_item;
1876 int pos = start;
1878 err_tree =
1879 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr_err, &err_item,
1880 "8 Classifier Error Encodings (Length = %u)", len);
1882 while (pos < (start + len))
1884 type = tvb_get_uint8 (tvb, pos++);
1885 length = tvb_get_uint8 (tvb, pos++);
1886 switch (type)
1888 case CFR_ERR_PARAM:
1889 if (length == 1)
1890 proto_tree_add_item (err_tree, hf_docsis_tlv_clsfr_err_param, tvb,
1891 pos, length, ENC_BIG_ENDIAN);
1892 else if (length == 2)
1894 proto_tree_add_item (err_tree, hf_docsis_tlv_clsfr_err_param,
1895 tvb, pos, 1, ENC_BIG_ENDIAN);
1896 proto_tree_add_item (err_tree, hf_docsis_tlv_clsfr_err_param,
1897 tvb, pos + 1, 1, ENC_BIG_ENDIAN);
1899 else
1901 expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1903 break;
1904 case CFR_ERR_CODE:
1905 if (length == 1)
1907 proto_tree_add_item (err_tree, hf_docsis_tlv_clsfr_err_code,
1908 tvb, pos, length, ENC_BIG_ENDIAN);
1910 else
1912 expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1914 break;
1915 case CFR_ERR_MSG:
1916 proto_tree_add_item (err_tree, hf_docsis_tlv_clsfr_err_msg, tvb,
1917 pos, length, ENC_ASCII);
1918 break;
1919 default:
1920 dissect_unknown_tlv (tvb, pinfo, err_tree, pos - 2, length + 2);
1921 break;
1922 } /* switch */
1923 pos = pos + length;
1925 } /* while */
1928 static void
1929 dissect_ip_classifier (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start,
1930 uint16_t len)
1932 uint8_t type, length;
1933 proto_tree *ipclsfr_tree;
1934 proto_tree *ipclsfr_item;
1935 int pos = start;
1937 ipclsfr_tree =
1938 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr_ip, &ipclsfr_item,
1939 ".9 IP Classifier (Length = %u)", len);
1941 while (pos < (start + len))
1943 type = tvb_get_uint8 (tvb, pos++);
1944 length = tvb_get_uint8 (tvb, pos++);
1945 switch (type)
1947 case CFR_IP_TOS_RANGE_MASK:
1948 if (length == 3)
1950 proto_tree_add_item (ipclsfr_tree,
1951 hf_docsis_tlv_ipclsfr_tosmask, tvb, pos,
1952 length, ENC_NA);
1954 else
1956 expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1958 break;
1959 case CFR_IP_PROTO:
1960 if (length == 2)
1962 proto_tree_add_item (ipclsfr_tree,
1963 hf_docsis_tlv_ipclsfr_ipproto, tvb, pos,
1964 length, ENC_BIG_ENDIAN);
1966 else
1968 expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1970 break;
1971 case CFR_IP_SOURCE_ADDR:
1972 if (length == 4)
1974 proto_tree_add_item (ipclsfr_tree, hf_docsis_tlv_ipclsfr_src,
1975 tvb, pos, length, ENC_BIG_ENDIAN);
1977 else
1979 expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1981 break;
1982 case CFR_IP_SOURCE_MASK:
1983 if (length == 4)
1985 proto_tree_add_item (ipclsfr_tree,
1986 hf_docsis_tlv_ipclsfr_srcmask, tvb, pos,
1987 length, ENC_BIG_ENDIAN);
1989 else
1991 expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
1993 break;
1994 case CFR_IP_DEST_ADDR:
1995 if (length == 4)
1997 proto_tree_add_item (ipclsfr_tree, hf_docsis_tlv_ipclsfr_dst,
1998 tvb, pos, length, ENC_BIG_ENDIAN);
2000 else
2002 expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2004 break;
2005 case CFR_IP_DEST_MASK:
2006 if (length == 4)
2008 proto_tree_add_item (ipclsfr_tree,
2009 hf_docsis_tlv_ipclsfr_dstmask, tvb, pos,
2010 length, ENC_BIG_ENDIAN);
2012 else
2014 expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2016 break;
2017 case CFR_IP_SRCPORT_START:
2018 if (length == 2)
2020 proto_tree_add_item (ipclsfr_tree,
2021 hf_docsis_tlv_ipclsfr_sport_start, tvb,
2022 pos, length, ENC_BIG_ENDIAN);
2024 else
2026 expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2028 break;
2029 case CFR_IP_SRCPORT_END:
2030 if (length == 2)
2032 proto_tree_add_item (ipclsfr_tree,
2033 hf_docsis_tlv_ipclsfr_sport_end, tvb, pos,
2034 length, ENC_BIG_ENDIAN);
2036 else
2038 expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2040 break;
2041 case CFR_IP_DSTPORT_START:
2042 if (length == 2)
2044 proto_tree_add_item (ipclsfr_tree,
2045 hf_docsis_tlv_ipclsfr_dport_start, tvb,
2046 pos, length, ENC_BIG_ENDIAN);
2048 else
2050 expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2052 break;
2053 case CFR_IP_DSTPORT_END:
2054 if (length == 2)
2056 proto_tree_add_item (ipclsfr_tree,
2057 hf_docsis_tlv_ipclsfr_dport_end, tvb, pos,
2058 length, ENC_BIG_ENDIAN);
2060 else
2062 expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2064 break;
2065 default:
2066 dissect_unknown_tlv (tvb, pinfo, ipclsfr_tree, pos - 2, length + 2);
2067 break;
2068 } /* switch */
2069 pos = pos + length;
2071 } /* while */
2074 static void
2075 dissect_ip6_classifier_tc (tvbuff_t * tvb, proto_tree * tree, int start,
2076 uint16_t len)
2078 proto_tree *ip6clsfr_tc_tree;
2079 proto_tree *ip6clsfr_tc_item;
2081 ip6clsfr_tc_tree = proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr_ip6_tc, &ip6clsfr_tc_item,
2082 "..1 IPv6 Traffic Class Range and Mask");
2084 proto_tree_add_item(ip6clsfr_tc_tree, hf_docsis_tlv_ip6clsfr_tc_low, tvb, start, 1, ENC_BIG_ENDIAN);
2085 proto_tree_add_item(ip6clsfr_tc_tree, hf_docsis_tlv_ip6clsfr_tc_high, tvb, start + 1, 1, ENC_BIG_ENDIAN);
2086 proto_tree_add_item(ip6clsfr_tc_tree, hf_docsis_tlv_ip6clsfr_tc_mask, tvb, start + 2, 1, ENC_BIG_ENDIAN);
2090 static void
2091 dissect_ip6_classifier (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start,
2092 uint16_t len)
2094 uint8_t type, length;
2095 proto_tree *ip6clsfr_tree;
2096 proto_tree *ip6clsfr_item;
2097 int pos = start;
2100 ip6clsfr_tree =
2101 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr_ip6, &ip6clsfr_item,
2102 ".12 IPv6 Classifier (Length = %u)", len);
2104 while (pos < (start + len))
2106 type = tvb_get_uint8 (tvb, pos++);
2107 length = tvb_get_uint8 (tvb, pos++);
2108 switch (type)
2110 case CFR_IP6_TRAFFIC_CLASS:
2111 if (length == 3)
2113 dissect_ip6_classifier_tc(tvb, ip6clsfr_tree, pos, length);
2115 else
2117 expert_add_info_format(pinfo, ip6clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2119 break;
2120 case CFR_IP6_FLOW_LABEL:
2121 if (length == 4)
2123 proto_tree_add_item (ip6clsfr_tree,
2124 hf_docsis_tlv_ip6clsfr_flow_label, tvb, pos,
2125 length, ENC_BIG_ENDIAN);
2127 else
2129 expert_add_info_format(pinfo, ip6clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2131 break;
2132 case CFR_IP6_NEXT_HEADER:
2133 if (length == 2)
2135 proto_tree_add_item (ip6clsfr_tree,
2136 hf_docsis_tlv_ip6clsfr_next_header, tvb, pos,
2137 length, ENC_BIG_ENDIAN);
2139 else
2141 expert_add_info_format(pinfo, ip6clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2143 break;
2144 case CFR_IP6_SOURCE_ADDR:
2145 if (length == 16)
2147 proto_tree_add_item (ip6clsfr_tree,
2148 hf_docsis_tlv_ip6clsfr_src, tvb, pos,
2149 length, ENC_NA);
2151 else
2153 expert_add_info_format(pinfo, ip6clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2155 break;
2156 case CFR_IP6_SOURCE_PREFIX_LENGTH:
2157 if (length == 1)
2159 proto_tree_add_item (ip6clsfr_tree,
2160 hf_docsis_tlv_ip6clsfr_src_prefix_length, tvb, pos,
2161 length, ENC_BIG_ENDIAN);
2163 else
2165 expert_add_info_format(pinfo, ip6clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2167 break;
2168 case CFR_IP6_DESTINATION_ADDR:
2169 if (length == 16)
2171 proto_tree_add_item (ip6clsfr_tree,
2172 hf_docsis_tlv_ip6clsfr_dst, tvb, pos,
2173 length, ENC_NA);
2175 else
2177 expert_add_info_format(pinfo, ip6clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2179 break;
2180 case CFR_IP6_DESTINATION_PREFIX_LENGTH:
2181 if (length == 1)
2183 proto_tree_add_item (ip6clsfr_tree,
2184 hf_docsis_tlv_ip6clsfr_dst_prefix_length, tvb, pos,
2185 length, ENC_BIG_ENDIAN);
2187 else
2189 expert_add_info_format(pinfo, ip6clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2191 break;
2192 default:
2193 dissect_unknown_tlv (tvb, pinfo, ip6clsfr_tree, pos - 2, length + 2);
2194 break;
2195 } /* switch */
2196 pos = pos + length;
2197 } /* while */
2200 static void
2201 dissect_classifiers (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start,
2202 uint16_t len, uint8_t direction)
2204 uint8_t type, length;
2205 proto_tree *clsfr_tree;
2206 proto_item *clsfr_item;
2207 int pos = start;
2209 if (direction == 22)
2210 clsfr_tree =
2211 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr, &clsfr_item,
2212 "22 Upstream Packet Classifier (Length = %u)",
2213 len);
2214 else if (direction == 23)
2215 clsfr_tree =
2216 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr, &clsfr_item,
2217 "23 Downstream Packet Classifier (Length = %u)",
2218 len);
2219 else
2220 return;
2222 while (pos < (start + len))
2224 type = tvb_get_uint8 (tvb, pos++);
2225 length = tvb_get_uint8 (tvb, pos++);
2226 switch (type)
2228 case CFR_REF:
2229 if (length == 1)
2231 proto_tree_add_item (clsfr_tree, hf_docsis_tlv_clsfr_ref, tvb,
2232 pos, length, ENC_BIG_ENDIAN);
2234 else
2236 expert_add_info_format(pinfo, clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2238 break;
2239 case CFR_ID:
2240 if (length == 2)
2242 proto_tree_add_item (clsfr_tree, hf_docsis_tlv_clsfr_id, tvb,
2243 pos, length, ENC_BIG_ENDIAN);
2245 else
2247 expert_add_info_format(pinfo, clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2249 break;
2250 case CFR_SFLOW_REF:
2251 if (length == 2)
2253 proto_tree_add_item (clsfr_tree, hf_docsis_tlv_clsfr_sflow_ref,
2254 tvb, pos, length, ENC_BIG_ENDIAN);
2256 else
2258 expert_add_info_format(pinfo, clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2260 break;
2261 case CFR_SFLOW_ID:
2262 if (length == 4)
2264 proto_tree_add_item (clsfr_tree, hf_docsis_tlv_clsfr_sflow_id,
2265 tvb, pos, length, ENC_BIG_ENDIAN);
2267 else
2269 expert_add_info_format(pinfo, clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2271 break;
2272 case CFR_RULE_PRI:
2273 if (length == 1)
2275 proto_tree_add_item (clsfr_tree, hf_docsis_tlv_clsfr_rule_pri,
2276 tvb, pos, length, ENC_BIG_ENDIAN);
2278 else
2280 expert_add_info_format(pinfo, clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2282 break;
2283 case CFR_ACT_STATE:
2284 if (length == 1)
2286 proto_tree_add_item (clsfr_tree, hf_docsis_tlv_clsfr_act_state,
2287 tvb, pos, length, ENC_BIG_ENDIAN);
2289 else
2291 expert_add_info_format(pinfo, clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2293 break;
2294 case CFR_DSA_ACTION:
2295 if (length == 1)
2297 proto_tree_add_item (clsfr_tree, hf_docsis_tlv_clsfr_dsc_act,
2298 tvb, pos, length, ENC_BIG_ENDIAN);
2300 else
2302 expert_add_info_format(pinfo, clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2304 break;
2305 case CFR_ERROR:
2306 dissect_clsfr_err (tvb, pinfo, clsfr_tree, pos, length);
2307 break;
2308 case CFR_IP_CLASSIFIER:
2309 dissect_ip_classifier (tvb, pinfo, clsfr_tree, pos, length);
2310 break;
2311 case CFR_IP6_CLASSIFIER:
2312 dissect_ip6_classifier (tvb, pinfo, clsfr_tree, pos, length);
2313 break;
2314 case CFR_ETH_CLASSIFIER:
2315 dissect_eth_clsfr (tvb, pinfo, clsfr_tree, pos, length);
2316 break;
2317 case CFR_8021Q_CLASSIFIER:
2318 dissect_dot1q_clsfr (tvb, pinfo, clsfr_tree, pos, length);
2319 break;
2320 case CFR_VENDOR_SPEC:
2321 proto_tree_add_item (clsfr_tree, hf_docsis_tlv_clsfr_vendor_spc,
2322 tvb, pos, length, ENC_NA);
2323 break;
2324 default:
2325 dissect_unknown_tlv (tvb, pinfo, clsfr_tree, pos - 2, length + 2);
2326 break;
2327 } /* switch */
2328 pos = pos + length;
2330 } /* while */
2333 static void
2334 dissect_doc10cos (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start,
2335 uint16_t len)
2337 uint8_t type, length;
2338 proto_tree *doc10cos_tree;
2339 proto_tree *doc10cos_item;
2340 int pos = start;
2342 doc10cos_tree =
2343 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_cos, &doc10cos_item,
2344 "1 Docsis 1.0 Class of Service (Length = %u)", len);
2346 while (pos < (start + len))
2348 type = tvb_get_uint8 (tvb, pos++);
2349 length = tvb_get_uint8 (tvb, pos++);
2350 switch (type)
2352 case 1:
2353 if (length == 1)
2355 proto_tree_add_item (doc10cos_tree, hf_docsis_tlv_cos_id, tvb,
2356 pos, length, ENC_BIG_ENDIAN);
2358 else
2360 expert_add_info_format(pinfo, doc10cos_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2362 break;
2363 case 2:
2364 if (length == 2)
2366 proto_tree_add_item (doc10cos_tree, hf_docsis_tlv_cos_sid, tvb,
2367 pos, length, ENC_BIG_ENDIAN);
2369 else
2371 expert_add_info_format(pinfo, doc10cos_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2373 break;
2374 default:
2375 dissect_unknown_tlv (tvb, pinfo, doc10cos_tree, pos - 2, length + 2);
2376 break;
2377 } /* switch */
2378 pos = pos + length;
2380 } /* while */
2383 static void
2384 dissect_modemcap (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start,
2385 uint16_t len)
2387 uint8_t type, length;
2388 uint32_t tlv_value;
2389 proto_tree *mcap_tree, *tlv_tree;
2390 proto_tree *mcap_item, *tlv_item;
2391 int pos = start;
2393 mcap_tree =
2394 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_mcap, &mcap_item,
2395 "5 Modem Capabilities Type (Length = %u)", len);
2397 while (pos < (start + len))
2399 type = tvb_get_uint8 (tvb, pos++);
2400 length = tvb_get_uint8 (tvb, pos++);
2401 switch (type)
2403 case CAP_CONCAT:
2404 if (length == 1)
2406 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_concat, tvb,
2407 pos, length, ENC_BIG_ENDIAN);
2409 else
2411 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2413 break;
2414 case CAP_DOCSIS_VER:
2415 if (length == 1)
2417 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_docs_ver,
2418 tvb, pos, length, ENC_BIG_ENDIAN);
2420 else
2422 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2424 break;
2425 case CAP_FRAG:
2426 if (length == 1)
2428 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_frag, tvb,
2429 pos, length, ENC_BIG_ENDIAN);
2431 else
2433 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2435 break;
2436 case CAP_PHS:
2437 if (length == 1)
2439 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_phs, tvb,
2440 pos, length, ENC_BIG_ENDIAN);
2442 else
2444 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2446 break;
2447 case CAP_IGMP:
2448 if (length == 1)
2450 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_igmp, tvb,
2451 pos, length, ENC_BIG_ENDIAN);
2453 else
2455 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2457 break;
2458 case CAP_PRIVACY:
2459 if (length == 1)
2461 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_privacy, tvb,
2462 pos, length, ENC_BIG_ENDIAN);
2464 else
2466 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2468 break;
2469 case CAP_DOWN_SAID:
2470 if (length == 1)
2472 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_down_said,
2473 tvb, pos, length, ENC_BIG_ENDIAN);
2475 else
2477 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2479 break;
2480 case CAP_UP_SID:
2481 if (length == 1)
2483 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_up_sid, tvb,
2484 pos, length, ENC_BIG_ENDIAN);
2486 else
2488 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2490 break;
2491 case CAP_OPT_FILT:
2492 if (length == 1)
2494 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_8021P_filter,
2495 tvb, pos, length, ENC_BIG_ENDIAN);
2496 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_8021Q_filter,
2497 tvb, pos, length, ENC_BIG_ENDIAN);
2499 else
2501 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2503 break;
2504 case CAP_XMIT_EQPERSYM:
2505 if (length == 1)
2507 proto_tree_add_item (mcap_tree,
2508 hf_docsis_tlv_mcap_xmit_eq_taps_per_sym,
2509 tvb, pos, length, ENC_BIG_ENDIAN);
2511 else
2513 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2515 break;
2516 case CAP_NUM_XMIT_EQ_TAPS:
2517 if (length == 1)
2519 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_xmit_eq_taps,
2520 tvb, pos, length, ENC_BIG_ENDIAN);
2522 else
2524 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2526 break;
2527 case CAP_DCC:
2528 if (length == 1)
2530 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_dcc, tvb,
2531 pos, length, ENC_BIG_ENDIAN);
2533 else
2535 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2537 break;
2538 case CAP_IP_FILTERS:
2539 if (length == 2)
2541 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_ip_filters, tvb,
2542 pos, length, ENC_BIG_ENDIAN);
2544 else
2546 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2548 break;
2549 case CAP_LLC_FILTERS:
2550 if (length == 2)
2552 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_llc_filters, tvb,
2553 pos, length, ENC_BIG_ENDIAN);
2555 else
2557 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2559 break;
2560 case CAP_EXP_UNICAST_SID:
2561 if (length == 1)
2563 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_exp_unicast_sid, tvb,
2564 pos, length, ENC_BIG_ENDIAN);
2566 else
2568 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2570 break;
2571 case CAP_RNG_HOFF:
2572 if (length == 4)
2574 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_rnghoff_cm, tvb,
2575 pos, length, ENC_BIG_ENDIAN);
2576 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_rnghoff_erouter, tvb,
2577 pos, length, ENC_BIG_ENDIAN);
2578 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_rnghoff_emta, tvb,
2579 pos, length, ENC_BIG_ENDIAN);
2580 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_rnghoff_estb, tvb,
2581 pos, length, ENC_BIG_ENDIAN);
2583 else
2585 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2587 break;
2588 case CAP_L2VPN:
2589 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_l2vpn, tvb,
2590 pos, length, ENC_NA);
2591 break;
2592 case CAP_L2VPN_ESAFE:
2593 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_l2vpn_esafe, tvb,
2594 pos, length, ENC_NA);
2595 break;
2596 case CAP_DUT_FILTERING:
2597 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_dut_filtering, tvb,
2598 pos, length, ENC_NA);
2599 break;
2600 case CAP_US_FREQ_RNG:
2601 if (length == 1)
2603 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_us_freq_range, tvb,
2604 pos, length, ENC_BIG_ENDIAN);
2606 else
2608 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2610 break;
2611 case CAP_US_SRATE:
2612 if (length == 1)
2614 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_us_srate_160, tvb,
2615 pos, length, ENC_BIG_ENDIAN);
2616 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_us_srate_320, tvb,
2617 pos, length, ENC_BIG_ENDIAN);
2618 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_us_srate_640, tvb,
2619 pos, length, ENC_BIG_ENDIAN);
2620 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_us_srate_1280, tvb,
2621 pos, length, ENC_BIG_ENDIAN);
2622 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_us_srate_2560, tvb,
2623 pos, length, ENC_BIG_ENDIAN);
2624 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_us_srate_5120, tvb,
2625 pos, length, ENC_BIG_ENDIAN);
2627 else
2629 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2631 break;
2632 case CAP_SAC:
2633 if (length == 1)
2635 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_sac, tvb,
2636 pos, length, ENC_BIG_ENDIAN);
2638 else
2640 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2642 break;
2643 case CAP_CODE_HOP_M2:
2644 if (length == 1)
2646 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_code_hop_mode2, tvb,
2647 pos, length, ENC_BIG_ENDIAN);
2649 else
2651 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2653 break;
2654 case CAP_MTC:
2655 if (length == 1)
2657 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_mtc, tvb,
2658 pos, length, ENC_BIG_ENDIAN);
2660 else
2662 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2664 break;
2665 case CAP_512_MSPS_UTC:
2666 if (length == 1)
2668 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_512_msps_utc, tvb,
2669 pos, length, ENC_BIG_ENDIAN);
2671 else
2673 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2675 break;
2676 case CAP_256_MSPS_UTC:
2677 if (length == 1)
2679 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_256_msps_utc, tvb,
2680 pos, length, ENC_BIG_ENDIAN);
2682 else
2684 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2686 break;
2687 case CAP_TOTAL_SID_CLUST:
2688 if (length == 1)
2690 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_total_sid_cluster, tvb,
2691 pos, length, ENC_BIG_ENDIAN);
2693 else
2695 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2697 break;
2698 case CAP_SID_PER_SF:
2699 if (length == 1)
2701 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_sid_per_sf, tvb,
2702 pos, length, ENC_BIG_ENDIAN);
2704 else
2706 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2708 break;
2709 case CAP_MRC:
2710 if (length == 1)
2712 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_mrc, tvb,
2713 pos, length, ENC_BIG_ENDIAN);
2715 else
2717 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2719 break;
2720 case CAP_TOTAL_DSID:
2721 if (length == 1)
2723 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_total_dsid, tvb,
2724 pos, length, ENC_BIG_ENDIAN);
2726 else
2728 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2730 break;
2731 case CAP_RESEQ_DSID:
2732 if (length == 1)
2734 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_reseq_dsid, tvb,
2735 pos, length, ENC_BIG_ENDIAN);
2737 else
2739 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2741 break;
2742 case CAP_MC_DSID:
2743 if (length == 1)
2745 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_mc_dsid, tvb,
2746 pos, length, ENC_BIG_ENDIAN);
2748 else
2750 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2752 break;
2753 case CAP_MC_DSID_FWD:
2754 if (length == 1)
2756 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_mc_dsid_fwd, tvb,
2757 pos, length, ENC_BIG_ENDIAN);
2759 else
2761 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2763 break;
2764 case CAP_FCTYPE_FWD:
2765 if (length == 1)
2767 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_fctype_fwd, tvb,
2768 pos, length, ENC_BIG_ENDIAN);
2770 else
2772 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2774 break;
2775 case CAP_DPV:
2776 if (length == 1)
2778 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_dpv_path, tvb,
2779 pos, length, ENC_BIG_ENDIAN);
2780 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_dpv_packet, tvb,
2781 pos, length, ENC_BIG_ENDIAN);
2783 else
2785 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2787 break;
2788 case CAP_UGS:
2789 if (length == 1)
2791 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_ugs, tvb,
2792 pos, length, ENC_BIG_ENDIAN);
2794 else
2796 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2798 break;
2799 case CAP_MAP_UCD:
2800 if (length == 1)
2802 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_map_ucd, tvb,
2803 pos, length, ENC_BIG_ENDIAN);
2805 else
2807 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2809 break;
2810 case CAP_UDC:
2811 if (length == 2)
2813 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_udc, tvb,
2814 pos, length, ENC_BIG_ENDIAN);
2816 else
2818 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2820 break;
2821 case CAP_IPV6:
2822 if (length == 1)
2824 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_ipv6, tvb,
2825 pos, length, ENC_BIG_ENDIAN);
2827 else
2829 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2831 break;
2832 case CAP_EXT_US_TRNS_PWR:
2833 if (length == 1)
2835 unsigned power_raw;
2836 proto_item * power_cap_it = proto_tree_add_item_ret_uint (mcap_tree, hf_docsis_tlv_mcap_ext_us_trans_power,
2837 tvb, pos, length, ENC_BIG_ENDIAN, &power_raw);
2838 proto_item_append_text(power_cap_it, " (%.2f dB)", power_raw * 0.25);
2840 else
2842 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2844 break;
2845 case CAP_EM:
2846 if (length == 4)
2848 static int * const cap_em[] = {
2849 &hf_docsis_tlv_mcap_em_1x1,
2850 &hf_docsis_tlv_mcap_em_light_sleep,
2851 NULL
2854 proto_tree_add_bitmask_with_flags(mcap_tree, tvb, pos, hf_docsis_tlv_mcap_em, ett_docsis_tlv_mcap_em, cap_em, ENC_BIG_ENDIAN, BMT_NO_FLAGS);
2856 else
2858 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2860 break;
2861 case CAP_CM_STATUS_ACK:
2862 if (length == 1)
2864 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_cm_status_ack, tvb,
2865 pos, length, ENC_BIG_ENDIAN);
2867 else
2869 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2871 break;
2872 case CAP_EM_PREF:
2873 if (length == 4)
2875 static int * const em_pref[] = {
2876 &hf_docsis_tlv_mcap_em_pref_1x1,
2877 &hf_docsis_tlv_mcap_em_pref_dls,
2878 NULL
2881 proto_tree_add_bitmask(mcap_tree, tvb, pos, hf_docsis_tlv_mcap_em_pref,
2882 ett_docsis_tlv_mcap_em_pref, em_pref, ENC_BIG_ENDIAN);
2884 else
2886 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2888 break;
2889 case CAP_EXT_PKT_LEN_SUP_CAP:
2890 if (length == 2)
2892 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_ext_pkt_len_sup_cap, tvb,
2893 pos, length, ENC_BIG_ENDIAN);
2895 else
2897 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2899 break;
2900 case CAP_OFDM_MULT_RECV_CHAN_SUP:
2901 if (length == 1)
2903 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_ofdm_mult_recv_chan_sup, tvb,
2904 pos, length, ENC_BIG_ENDIAN);
2906 else
2908 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2910 break;
2911 case CAP_OFDMA_MULT_TRANS_CHAN_SUP:
2912 if (length == 1)
2914 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_ofdma_mult_trans_chan_sup, tvb,
2915 pos, length, ENC_BIG_ENDIAN);
2917 else
2919 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2921 break;
2922 case CAP_DOWN_OFDM_PROF_SUP:
2923 if (length == 1)
2925 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_down_ofdm_prof_sup, tvb,
2926 pos, length, ENC_BIG_ENDIAN);
2928 else
2930 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2932 break;
2933 case CAP_DOWN_OFDM_CHAN_SUBC_QAM_MOD_SUP:
2934 if (length == 2)
2936 static int * const ofdm_qam_mod_sup[] = {
2937 &hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_reserved,
2938 &hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_qpsk,
2939 &hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_16qam,
2940 &hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_64qam,
2941 &hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_128qam,
2942 &hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_256qam,
2943 &hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_512qam,
2944 &hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_1024qam,
2945 &hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_2048qam,
2946 &hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_4096qam,
2947 &hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_8192qam,
2948 &hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_16384qam,
2949 NULL
2952 proto_tree_add_bitmask(mcap_tree, tvb, pos, hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup,
2953 ett_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup, ofdm_qam_mod_sup, ENC_BIG_ENDIAN);
2955 else
2957 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2959 break;
2960 case CAP_UP_OFDMA_CHAN_SUBC_QAM_MOD_SUP:
2961 if (length == 2)
2963 static int * const ofdma_qam_mod_sup[] = {
2964 &hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_reserved,
2965 &hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_qpsk,
2966 &hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_8qam,
2967 &hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_16qam,
2968 &hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_32qam,
2969 &hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_64qam,
2970 &hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_128qam,
2971 &hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_256qam,
2972 &hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_512qam,
2973 &hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_1024qam,
2974 &hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_2048qam,
2975 &hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_4096qam,
2976 &hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_8192qam,
2977 &hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_16384qam,
2978 NULL
2981 proto_tree_add_bitmask(mcap_tree, tvb, pos, hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup,
2982 ett_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup, ofdma_qam_mod_sup, ENC_BIG_ENDIAN);
2984 else
2986 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
2988 break;
2989 case CAP_DOWN_LOWER_BAND_EDGE_CONF:
2990 if (length == 1)
2992 static int * const down_lower_band_edge_conf[] = {
2993 &hf_docsis_tlv_mcap_down_lower_band_edge_conf_108,
2994 &hf_docsis_tlv_mcap_down_lower_band_edge_conf_258,
2995 NULL
2998 proto_tree_add_bitmask(mcap_tree, tvb, pos, hf_docsis_tlv_mcap_down_lower_band_edge_conf,
2999 ett_docsis_tlv_mcap_down_lower_band_edge_conf, down_lower_band_edge_conf, ENC_BIG_ENDIAN);
3001 else
3003 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3005 break;
3006 case CAP_DOWN_UPPER_BAND_EDGE_CONF:
3007 if (length == 1)
3009 static int * const down_upper_band_edge_conf[] = {
3010 &hf_docsis_tlv_mcap_down_upper_band_edge_conf_1218,
3011 &hf_docsis_tlv_mcap_down_upper_band_edge_conf_1794,
3012 &hf_docsis_tlv_mcap_down_upper_band_edge_conf_1002,
3013 NULL
3016 proto_tree_add_bitmask(mcap_tree, tvb, pos, hf_docsis_tlv_mcap_down_upper_band_edge_conf,
3017 ett_docsis_tlv_mcap_down_upper_band_edge_conf, down_upper_band_edge_conf, ENC_BIG_ENDIAN);
3019 else
3021 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3023 break;
3024 case CAP_DIPL_UP_UPPER_BAND_EDGE_CONF:
3025 if (length == 1)
3027 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_dipl_up_upper_band_edge_conf, tvb,
3028 pos, length, ENC_BIG_ENDIAN);
3030 else
3032 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3034 break;
3035 case CAP_DOCSIS_TIME_PROT_MODE:
3036 if (length == 1)
3038 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_docsis_time_prot_mode, tvb,
3039 pos, length, ENC_BIG_ENDIAN);
3041 else
3043 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3045 break;
3046 case CAP_DOCSIS_TIME_PROT_PERF_SUP:
3047 if (length == 1)
3049 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_docsis_time_prot_perf_sup, tvb,
3050 pos, length, ENC_BIG_ENDIAN);
3052 else
3054 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3056 break;
3057 case CAP_PMAX:
3058 if (length == 2)
3060 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_pmax, tvb,
3061 pos, length, ENC_BIG_ENDIAN);
3063 else
3065 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3067 break;
3068 case CAP_DIPL_DOWN_LOWER_BAND_EDGE:
3069 if (length == 1)
3071 static int * const dipl_down_lower_band_edge[] = {
3072 &hf_docsis_tlv_mcap_dipl_down_lower_band_edge_108,
3073 &hf_docsis_tlv_mcap_dipl_down_lower_band_edge_258,
3074 NULL
3077 proto_tree_add_bitmask(mcap_tree, tvb, pos, hf_docsis_tlv_mcap_dipl_down_lower_band_edge,
3078 ett_docsis_tlv_mcap_dipl_down_lower_band_edge, dipl_down_lower_band_edge, ENC_BIG_ENDIAN);
3080 else
3082 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3084 break;
3085 case CAP_DIPL_DOWN_UPPER_BAND_EDGE:
3086 if (length == 1)
3088 static int * const dipl_down_upper_band_edge[] = {
3089 &hf_docsis_tlv_mcap_dipl_down_upper_band_edge_1218,
3090 &hf_docsis_tlv_mcap_dipl_down_upper_band_edge_1794,
3091 &hf_docsis_tlv_mcap_dipl_down_upper_band_edge_1002,
3092 NULL
3095 proto_tree_add_bitmask(mcap_tree, tvb, pos, hf_docsis_tlv_mcap_dipl_down_upper_band_edge,
3096 ett_docsis_tlv_mcap_dipl_down_upper_band_edge, dipl_down_upper_band_edge, ENC_BIG_ENDIAN);
3098 else
3100 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3102 break;
3103 case CAP_DIPL_UP_UPPER_BAND_EDGE:
3104 if (length == 1)
3106 static int * const dipl_up_upper_band_edge[] = {
3107 &hf_docsis_tlv_mcap_dipl_up_upper_band_edge_42,
3108 &hf_docsis_tlv_mcap_dipl_up_upper_band_edge_65,
3109 &hf_docsis_tlv_mcap_dipl_up_upper_band_edge_85,
3110 &hf_docsis_tlv_mcap_dipl_up_upper_band_edge_117,
3111 &hf_docsis_tlv_mcap_dipl_up_upper_band_edge_204,
3112 NULL
3115 proto_tree_add_bitmask(mcap_tree, tvb, pos, hf_docsis_tlv_mcap_dipl_up_upper_band_edge,
3116 ett_docsis_tlv_mcap_dipl_up_upper_band_edge, dipl_up_upper_band_edge, ENC_BIG_ENDIAN);
3118 else
3120 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3122 break;
3123 case CAP_ADVANCED_BAND_PLAN:
3124 if (length == 1)
3126 static int * const advanved_band_plan[] = {
3127 &hf_docsis_tlv_mcap_advanced_band_plan_fdx_l,
3128 &hf_docsis_tlv_mcap_advanced_band_plan_fdx,
3129 &hf_docsis_tlv_mcap_advanced_band_plan_fdd,
3130 &hf_docsis_tlv_mcap_advanced_band_plan_reserved,
3131 NULL
3134 proto_tree_add_bitmask(mcap_tree, tvb, pos, hf_docsis_tlv_mcap_advanced_band_plan,
3135 ett_docsis_tlv_mcap_advanced_band_plan, advanved_band_plan, ENC_BIG_ENDIAN);
3137 else
3139 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3141 break;
3142 case CAP_EXTENDED_SF_SID_CLUSTER_ASSIGN:
3143 if (length == 1)
3145 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_ext_sf_cluster_assign_sup, tvb,
3146 pos, length, ENC_BIG_ENDIAN);
3148 else
3150 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3152 break;
3153 case CAP_LOW_LATENCY_SUP:
3154 if (length == 1)
3156 tlv_item = proto_tree_add_item_ret_uint (mcap_tree, hf_docsis_tlv_mcap_low_latency_sup, tvb,
3157 pos, length, ENC_BIG_ENDIAN, &tlv_value);
3158 if (tlv_value > 0)
3160 proto_item_append_text(tlv_item, " %s", (tlv_value == 1) ? "ASF" : "ASFs" );
3163 else
3165 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3167 break;
3168 case CAP_ADVANCED_DOWN_LOWER_BAND_EDGE_CONF:
3169 if (length == 2)
3171 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_adv_down_lower_band_edge_conf, tvb,
3172 pos, length, ENC_BIG_ENDIAN);
3174 else
3176 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3178 break;
3179 case CAP_ADVANCED_DOWN_UPPER_BAND_EDGE_CONF:
3180 if (length == 2)
3182 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_adv_down_upper_band_edge_conf, tvb,
3183 pos, length, ENC_BIG_ENDIAN);
3185 else
3187 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3189 break;
3190 case CAP_ADVANCED_UP_UPPER_BAND_EDGE_CONF:
3191 if (length == 2)
3193 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_adv_up_upper_band_edge_conf, tvb,
3194 pos, length, ENC_BIG_ENDIAN);
3196 else
3198 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3200 break;
3201 case CAP_ADVANCED_DOWN_LOWER_BAND_EDGE_OPTIONS_LIST:
3202 if (length > 0 && length % 2 == 0)
3204 tlv_tree = proto_tree_add_subtree_format(mcap_tree, tvb, pos, length,
3205 ett_docsis_tlv_mcap_dipl_down_lower_band_edge_options_list, &tlv_item,
3206 ".82 Advanced Diplexer Downstream Lower Band Edge Options List");
3208 for (uint8_t i = 0; i < length; i = i + 2)
3210 proto_tree_add_item_ret_uint (tlv_tree, hf_docsis_tlv_mcap_adv_down_lower_band_edge_option,
3211 tvb, pos + i, 2, ENC_BIG_ENDIAN, &tlv_value);
3212 proto_item_append_text(tlv_item, "%s %d MHz", (i == 0) ? ":" : ",", tlv_value);
3215 else
3217 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3219 break;
3220 case CAP_ADVANCED_DOWN_UPPER_BAND_EDGE_OPTIONS_LIST:
3221 if (length > 0 && length % 2 == 0)
3223 tlv_tree = proto_tree_add_subtree_format(mcap_tree, tvb, pos, length,
3224 ett_docsis_tlv_mcap_dipl_down_upper_band_edge_options_list, &tlv_item,
3225 ".83 Advanced Diplexer Downstream Upper Band Edge Options List");
3227 for (uint8_t i = 0; i < length; i = i + 2)
3229 proto_tree_add_item_ret_uint (tlv_tree, hf_docsis_tlv_mcap_adv_down_upper_band_edge_option,
3230 tvb, pos + i, 2, ENC_BIG_ENDIAN, &tlv_value);
3231 proto_item_append_text(tlv_item, "%s %d MHz", (i == 0) ? ":" : ",", tlv_value);
3234 else
3236 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3238 break;
3239 case CAP_ADVANCED_UP_UPPER_BAND_EDGE_OPTIONS_LIST:
3240 if (length > 0 && length % 2 == 0)
3242 tlv_tree = proto_tree_add_subtree_format(mcap_tree, tvb, pos, length,
3243 ett_docsis_tlv_mcap_dipl_up_upper_band_edge_options_list, &tlv_item,
3244 ".84 Advanced Diplexer Upstream Upper Band Edge Options List");
3246 for (uint8_t i = 0; i < length; i = i + 2)
3248 proto_tree_add_item_ret_uint (tlv_tree, hf_docsis_tlv_mcap_adv_up_upper_band_edge_option,
3249 tvb, pos + i, 2, ENC_BIG_ENDIAN, &tlv_value);
3250 proto_item_append_text(tlv_item, "%s %d MHz", (i == 0) ? ":" : ",", tlv_value);
3253 else
3255 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3257 break;
3258 case CAP_EXTENDED_POWER_OPTIONS:
3259 if (length == 1)
3261 proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_extended_power_options, tvb,
3262 pos, length, ENC_BIG_ENDIAN);
3264 else
3266 expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3268 break;
3269 default:
3270 dissect_unknown_tlv (tvb, pinfo, mcap_tree, pos - 2, length + 2);
3271 break;
3272 } /* switch (type) */
3273 pos = pos + length;
3274 } /* while (pos < pos+len) */
3277 static void
3278 dissect_cos (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, uint16_t len)
3280 uint8_t type, length;
3281 proto_tree *cos_tree;
3282 proto_tree *cos_item;
3283 int pos = start;
3285 cos_tree =
3286 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_cos, &cos_item,
3287 "4 Class of Service Type (Length = %u)", len);
3289 while (pos < (start + len))
3291 type = tvb_get_uint8 (tvb, pos++);
3292 length = tvb_get_uint8 (tvb, pos++);
3293 switch (type)
3295 case COS_CLASSID:
3296 if (length == 1)
3298 proto_tree_add_item (cos_tree, hf_docsis_tlv_cos_id, tvb, pos,
3299 length, ENC_BIG_ENDIAN);
3301 else
3303 expert_add_info_format(pinfo, cos_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3305 break;
3306 case COS_MAX_DOWN:
3307 if (length == 4)
3309 proto_tree_add_item (cos_tree, hf_docsis_tlv_cos_max_down, tvb,
3310 pos, length, ENC_BIG_ENDIAN);
3312 else
3314 expert_add_info_format(pinfo, cos_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3316 break;
3317 case COS_MAX_UP:
3318 if (length == 4)
3320 proto_tree_add_item (cos_tree, hf_docsis_tlv_cos_max_up, tvb,
3321 pos, length, ENC_BIG_ENDIAN);
3323 else
3325 expert_add_info_format(pinfo, cos_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3327 break;
3328 case COS_UP_CH_PRIO:
3329 if (length == 1)
3331 proto_tree_add_item (cos_tree, hf_docsis_tlv_cos_up_chnl_pri,
3332 tvb, pos, length, ENC_BIG_ENDIAN);
3334 else
3336 expert_add_info_format(pinfo, cos_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3338 break;
3339 case COS_MIN_UP_RATE:
3340 if (length == 4)
3342 proto_tree_add_item (cos_tree, hf_docsis_tlv_cos_min_grntd_up,
3343 tvb, pos, length, ENC_BIG_ENDIAN);
3345 else
3347 expert_add_info_format(pinfo, cos_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3349 break;
3350 case COS_MAX_UP_BURST:
3351 if (length == 2)
3353 proto_tree_add_item (cos_tree, hf_docsis_tlv_cos_max_up_burst,
3354 tvb, pos, length, ENC_BIG_ENDIAN);
3356 else
3358 expert_add_info_format(pinfo, cos_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3360 break;
3361 case COS_BP_ENABLE:
3362 if (length == 1)
3364 proto_tree_add_item (cos_tree, hf_docsis_tlv_cos_privacy_enable,
3365 tvb, pos, length, ENC_BIG_ENDIAN);
3367 else
3369 expert_add_info_format(pinfo, cos_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3371 break;
3372 default:
3373 dissect_unknown_tlv (tvb, pinfo, cos_tree, pos - 2, length + 2);
3374 break;
3375 } /* switch (type) */
3376 pos = pos + length;
3377 } /* while (pos < pos+len) */
3380 static void
3381 dissect_svc_unavail(tvbuff_t * tvb, proto_tree * tree, int pos, uint16_t length) {
3383 proto_item *svc_unavail_it;
3384 proto_tree *svc_unavail_tree;
3385 svc_unavail_it = proto_tree_add_item (tree,
3386 hf_docsis_tlv_svc_unavail,
3387 tvb, pos, length, ENC_NA);
3388 svc_unavail_tree = proto_item_add_subtree(svc_unavail_it, ett_docsis_tlv_svc_unavail );
3389 proto_tree_add_item (svc_unavail_tree,
3390 hf_docsis_tlv_svc_unavail_classid, tvb,
3391 pos, 1, ENC_BIG_ENDIAN);
3392 proto_tree_add_item (svc_unavail_tree,
3393 hf_docsis_tlv_svc_unavail_type, tvb,
3394 pos+1, 1, ENC_BIG_ENDIAN);
3395 proto_tree_add_item (svc_unavail_tree,
3396 hf_docsis_tlv_svc_unavail_code, tvb,
3397 pos+2, 1, ENC_BIG_ENDIAN);
3401 static void
3402 dissect_snmpv3_kickstart(tvbuff_t * tvb, packet_info * pinfo, proto_tree *tree, int start, uint16_t len) {
3403 proto_item *snmpv3_it;
3404 proto_tree *snmpv3_tree;
3405 uint8_t type, length;
3406 int pos = start;
3408 snmpv3_it = proto_tree_add_item (tree,
3409 hf_docsis_tlv_snmpv3_kick,
3410 tvb, start, len, ENC_NA);
3411 snmpv3_tree = proto_item_add_subtree(snmpv3_it, ett_docsis_tlv_snmpv3_kick);
3413 while (pos < (start + len))
3415 type = tvb_get_uint8 (tvb, pos++);
3416 length = tvb_get_uint8 (tvb, pos++);
3417 switch (type)
3419 case SNMPV3_SEC_NAME:
3420 proto_tree_add_item (snmpv3_tree,
3421 hf_docsis_tlv_snmpv3_kick_name, tvb,
3422 pos, length, ENC_ASCII);
3423 break;
3424 case SNMPV3_MGR_PUB_NUM:
3425 proto_tree_add_item (snmpv3_tree,
3426 hf_docsis_tlv_snmpv3_kick_publicnum, tvb,
3427 pos, length, ENC_NA);
3428 break;
3429 default:
3430 dissect_unknown_tlv (tvb, pinfo, snmpv3_tree, pos - 2, length + 2);
3431 break;
3432 } /* switch */
3433 pos += length;
3434 } /* while */
3437 static void
3438 dissect_ds_ch_list_single (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree,
3439 int start, uint16_t len)
3441 uint8_t type, length;
3442 proto_tree *single_tree;
3443 proto_item *single_item;
3444 int pos = start;
3446 single_tree =
3447 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_ds_ch_list_single, &single_item,
3448 "1 Single Downstream Channel (Length = %u)", len);
3450 while (pos < (start + len))
3452 type = tvb_get_uint8 (tvb, pos++);
3453 length = tvb_get_uint8 (tvb, pos++);
3454 switch (type)
3456 case SINGLE_CH_TIMEOUT:
3457 if (length == 2)
3459 proto_tree_add_item (single_tree, hf_docsis_tlv_single_ch_timeout, tvb,
3460 pos, length, ENC_BIG_ENDIAN);
3462 else
3464 expert_add_info_format(pinfo, single_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3466 break;
3467 case SINGLE_CH_FREQ:
3468 if (length == 4)
3470 proto_tree_add_item (single_tree, hf_docsis_tlv_single_ch_freq, tvb,
3471 pos, length, ENC_BIG_ENDIAN);
3473 else
3475 expert_add_info_format(pinfo, single_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3477 break;
3478 default:
3479 dissect_unknown_tlv (tvb, pinfo, single_tree, pos - 2, length + 2);
3480 break;
3481 } /* switch */
3482 pos = pos + length;
3483 } /* while */
3486 static void
3487 dissect_ds_ch_list_range (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree,
3488 int start, uint16_t len)
3490 uint8_t type, length;
3491 proto_tree *range_tree;
3492 proto_item *range_item;
3493 int pos = start;
3495 range_tree =
3496 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_ds_ch_list_range, &range_item,
3497 "2 Downstream Frequency Range (Length = %u)", len);
3499 while (pos < (start + len))
3501 type = tvb_get_uint8 (tvb, pos++);
3502 length = tvb_get_uint8 (tvb, pos++);
3503 switch (type)
3505 case FREQ_RNG_TIMEOUT:
3506 if (length == 2)
3508 proto_tree_add_item (range_tree, hf_docsis_tlv_freq_rng_timeout, tvb,
3509 pos, length, ENC_BIG_ENDIAN);
3511 else
3513 expert_add_info_format(pinfo, range_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3515 break;
3516 case FREQ_RNG_START:
3517 if (length == 4)
3519 proto_tree_add_item (range_tree, hf_docsis_tlv_freq_rng_start, tvb,
3520 pos, length, ENC_BIG_ENDIAN);
3522 else
3524 expert_add_info_format(pinfo, range_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3526 break;
3527 case FREQ_RNG_END:
3528 if (length == 4)
3530 proto_tree_add_item (range_tree, hf_docsis_tlv_freq_rng_end, tvb,
3531 pos, length, ENC_BIG_ENDIAN);
3533 else
3535 expert_add_info_format(pinfo, range_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3537 break;
3538 case FREQ_RNG_STEP:
3539 if (length == 4)
3541 proto_tree_add_item (range_tree, hf_docsis_tlv_freq_rng_step, tvb,
3542 pos, length, ENC_BIG_ENDIAN);
3544 else
3546 expert_add_info_format(pinfo, range_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3548 break;
3549 default:
3550 dissect_unknown_tlv (tvb, pinfo, range_tree, pos - 2, length + 2);
3551 break;
3552 } /* switch */
3553 pos = pos + length;
3554 } /* while */
3557 static void
3558 dissect_dut_filter (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree,
3559 int start, uint16_t len)
3561 uint8_t type, length;
3562 proto_tree *dut_tree;
3563 proto_item *dut_item;
3564 int pos = start;
3566 dut_tree =
3567 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_dut_filter, &dut_item,
3568 "45 Downstream Unencrypted Traffic (Length = %u)", len);
3570 while (pos < (start + len))
3572 type = tvb_get_uint8 (tvb, pos++);
3573 length = tvb_get_uint8 (tvb, pos++);
3574 switch (type)
3576 case DUT_CONTROL:
3577 if (length == 1)
3579 proto_tree_add_item (dut_tree, hf_docsis_tlv_dut_filter_control, tvb,
3580 pos, length, ENC_BIG_ENDIAN);
3582 else
3584 expert_add_info_format(pinfo, dut_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3586 break;
3587 case DUT_CMIM:
3588 proto_tree_add_item (dut_tree, hf_docsis_tlv_dut_filter_cmim, tvb,
3589 pos, length, ENC_NA);
3590 break;
3591 default:
3592 dissect_unknown_tlv (tvb, pinfo, dut_tree, pos - 2, length + 2);
3593 break;
3594 } /* switch */
3595 pos = pos + length;
3596 } /* while */
3599 static void
3600 dissect_ds_ch_list(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, uint16_t len)
3602 uint8_t type, length;
3603 proto_tree *dschlst_tree;
3604 proto_item *dschlst_item;
3605 int pos = start;
3607 dschlst_tree =
3608 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_ds_ch_list, &dschlst_item,
3609 "41 Downstream Channel List (Length = %u)", len);
3611 while (pos < (start + len))
3613 type = tvb_get_uint8 (tvb, pos++);
3614 length = tvb_get_uint8 (tvb, pos++);
3615 switch (type)
3617 case DS_CH_LIST_SINGLE:
3618 dissect_ds_ch_list_single(tvb, pinfo, dschlst_tree, pos, length);
3619 break;
3620 case DS_CH_LIST_RANGE:
3621 dissect_ds_ch_list_range(tvb, pinfo, dschlst_tree, pos, length);
3622 break;
3623 case DS_CH_LIST_DEFAULT_TIMEOUT:
3624 if (length == 2)
3626 proto_tree_add_item (dschlst_tree,
3627 hf_docsis_tlv_ds_ch_list_default_timeout, tvb, pos,
3628 length, ENC_BIG_ENDIAN);
3630 else
3632 expert_add_info_format(pinfo, dschlst_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3634 break;
3635 default:
3636 dissect_unknown_tlv (tvb, pinfo, dschlst_tree, pos - 2, length + 2);
3637 break;
3638 } /* switch */
3639 pos = pos + length;
3640 } /* while */
3643 static void
3644 dissect_docsis_extension_field(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, uint16_t len)
3646 proto_tree *ext_field_tree;
3647 proto_item *ext_field_item;
3648 tvbuff_t *vsif_tvb;
3650 ext_field_tree =
3651 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_ext_field, &ext_field_item,
3652 "43 DOCSIS Extension Field (Length = %u)", len);
3654 vsif_tvb = tvb_new_subset_length (tvb, start, len);
3655 call_dissector (docsis_vsif_handle, vsif_tvb, pinfo, ext_field_tree);
3658 static void
3659 dissect_vendor_specific_capabilities(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, uint16_t len)
3661 proto_tree *vend_spec_cap_tree;
3662 proto_item *vend_spec_cap_item;
3663 tvbuff_t *vsif_tvb;
3665 vend_spec_cap_tree =
3666 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_vendor_specific_cap, &vend_spec_cap_item,
3667 "44 Vendor Specific Capabilities (Length = %u)", len);
3669 vsif_tvb = tvb_new_subset_length (tvb, start, len);
3670 call_dissector (docsis_vsif_handle, vsif_tvb, pinfo, vend_spec_cap_tree);
3673 static void
3674 dissect_tcc_err(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, uint16_t len)
3676 uint8_t type, length;
3677 proto_tree *tccerr_tree;
3678 proto_tree *tccerr_item;
3679 int pos = start;
3681 tccerr_tree =
3682 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_tcc_err, &tccerr_item,
3683 "TCC Error Encodings (Length = %u)", len);
3685 while (pos < (start + len))
3687 type = tvb_get_uint8 (tvb, pos++);
3688 length = tvb_get_uint8 (tvb, pos++);
3689 switch (type)
3691 case TCC_ERR_SUBTYPE:
3692 proto_tree_add_item (tccerr_tree,
3693 hf_docsis_tcc_err_subtype, tvb,
3694 pos, length, ENC_NA);
3695 break;
3696 case TCC_ERR_CODE:
3697 if (length == 1)
3699 proto_tree_add_item (tccerr_tree,
3700 hf_docsis_tcc_err_code, tvb, pos,
3701 length, ENC_BIG_ENDIAN);
3703 else
3705 expert_add_info_format(pinfo, tccerr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3707 break;
3708 case TCC_ERR_MSG:
3709 proto_tree_add_item (tccerr_tree,
3710 hf_docsis_tcc_err_msg, tvb,
3711 pos, length, ENC_ASCII);
3712 break;
3713 default:
3714 dissect_unknown_tlv (tvb, pinfo, tccerr_tree, pos - 2, length + 2);
3715 break;
3716 } /* switch */
3717 pos = pos + length;
3718 } /* while */
3721 static void
3722 dissect_tcc_rng_parms(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, uint16_t len)
3724 uint8_t type, length;
3725 proto_tree *rngparm_tree;
3726 proto_item *rngparm_item;
3727 int pos = start;
3729 rngparm_tree =
3730 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_tcc_rng_parms, &rngparm_item,
3731 ".8 Ranging Parameters (Length = %u)", len);
3733 while (pos < (start + len))
3735 type = tvb_get_uint8 (tvb, pos++);
3736 length = tvb_get_uint8 (tvb, pos++);
3737 switch (type)
3739 case RNG_PARMS_US_CH_ID:
3740 if (length == 1)
3742 proto_tree_add_item (rngparm_tree,
3743 hf_docsis_rng_parms_us_ch_id, tvb, pos,
3744 length, ENC_BIG_ENDIAN);
3746 else
3748 expert_add_info_format(pinfo, rngparm_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3750 break;
3751 case RNG_PARMS_TIME_OFF_INT:
3752 if (length == 4)
3754 proto_tree_add_item (rngparm_tree,
3755 hf_docsis_rng_parms_time_off_int, tvb, pos,
3756 length, ENC_BIG_ENDIAN);
3758 else
3760 expert_add_info_format(pinfo, rngparm_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3762 break;
3763 case RNG_PARMS_TIME_OFF_FRAC:
3764 if (length == 1)
3766 proto_tree_add_item (rngparm_tree,
3767 hf_docsis_rng_parms_time_off_frac, tvb, pos,
3768 length, ENC_BIG_ENDIAN);
3770 else
3772 expert_add_info_format(pinfo, rngparm_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3774 break;
3775 case RNG_PARMS_POWER_OFF:
3776 if (length == 1)
3778 proto_tree_add_item (rngparm_tree,
3779 hf_docsis_rng_parms_power_off, tvb, pos,
3780 length, ENC_BIG_ENDIAN);
3782 else
3784 expert_add_info_format(pinfo, rngparm_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3786 break;
3787 case RNG_PARMS_FREQ_OFF:
3788 if (length == 1)
3790 proto_tree_add_item (rngparm_tree,
3791 hf_docsis_rng_parms_freq_off, tvb, pos,
3792 length, ENC_BIG_ENDIAN);
3794 else
3796 expert_add_info_format(pinfo, rngparm_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3798 break;
3799 default:
3800 dissect_unknown_tlv (tvb, pinfo, rngparm_tree, pos - 2, length + 2);
3801 break;
3802 } /* switch */
3803 pos = pos + length;
3804 } /* while */
3807 static void
3808 dissect_tcc_oudp(tvbuff_t * tvb, proto_tree *tree, int start, uint16_t len)
3810 proto_tree *oudp_tree;
3811 proto_item *oudp_item;
3812 int pos = start;
3814 oudp_tree =
3815 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_tcc_oudp, &oudp_item,
3816 ".11 Assigned OFDMA Upstream Data Profile (OUDP) IUC (Length = %u)", len);
3818 while (pos < (start + len))
3820 proto_tree_add_item (oudp_tree, hf_docsis_tlv_tcc_oudp_iuc, tvb, pos, 1, ENC_BIG_ENDIAN);
3821 ++pos;
3825 static void
3826 dissect_sid_cl_so_crit(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, uint16_t len)
3828 uint8_t type, length;
3829 proto_tree *crit_tree;
3830 proto_item *crit_item;
3831 int pos = start;
3833 crit_tree =
3834 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_sid_cl_so, &crit_item,
3835 ".3 SID Cluster Switchover Criteria (Length = %u)", len);
3837 while (pos < (start + len))
3839 type = tvb_get_uint8 (tvb, pos++);
3840 length = tvb_get_uint8 (tvb, pos++);
3841 switch (type)
3843 case SID_CL_SO_MAX_REQ:
3844 if (length == 1)
3846 proto_tree_add_item (crit_tree,
3847 hf_docsis_sid_cl_so_max_req, tvb, pos,
3848 length, ENC_BIG_ENDIAN);
3850 else
3852 expert_add_info_format(pinfo, crit_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3854 break;
3855 case SID_CL_SO_MAX_OUT_BYTES:
3856 if (length == 4)
3858 proto_tree_add_item (crit_tree,
3859 hf_docsis_sid_cl_so_max_out_bytes, tvb, pos,
3860 length, ENC_BIG_ENDIAN);
3862 else
3864 expert_add_info_format(pinfo, crit_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3866 break;
3867 case SID_CL_SO_MAX_REQ_BYTES:
3868 if (length == 4)
3870 proto_tree_add_item (crit_tree,
3871 hf_docsis_sid_cl_so_max_req_bytes, tvb, pos,
3872 length, ENC_BIG_ENDIAN);
3874 else
3876 expert_add_info_format(pinfo, crit_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3878 break;
3879 case SID_CL_SO_MAX_TIME:
3880 if (length == 2)
3882 proto_tree_add_item (crit_tree,
3883 hf_docsis_sid_cl_so_max_time, tvb, pos,
3884 length, ENC_BIG_ENDIAN);
3886 else
3888 expert_add_info_format(pinfo, crit_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3890 break;
3891 default:
3892 dissect_unknown_tlv (tvb, pinfo, crit_tree, pos - 2, length + 2);
3893 break;
3894 } /* switch */
3895 pos = pos + length;
3896 } /* while */
3899 static void
3900 dissect_sid_cl_enc_map(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, uint16_t len)
3902 uint8_t type, length;
3903 proto_tree *map_tree;
3904 proto_item *map_item;
3905 int pos = start;
3907 map_tree =
3908 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_sid_cl_enc_map, &map_item,
3909 "..2 SID-to-Channel Mapping (Length = %u)", len);
3911 while (pos < (start + len))
3913 type = tvb_get_uint8 (tvb, pos++);
3914 length = tvb_get_uint8 (tvb, pos++);
3915 switch (type)
3917 case SID_CL_MAP_US_CH_ID:
3918 if (length == 1)
3920 proto_tree_add_item (map_tree,
3921 hf_docsis_sid_cl_map_us_ch_id, tvb, pos,
3922 length, ENC_BIG_ENDIAN);
3924 else
3926 expert_add_info_format(pinfo, map_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3928 break;
3929 case SID_CL_MAP_SID:
3930 if (length == 2)
3932 proto_tree_add_item (map_tree,
3933 hf_docsis_sid_cl_map_sid, tvb, pos,
3934 length, ENC_BIG_ENDIAN);
3936 else
3938 expert_add_info_format(pinfo, map_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3940 break;
3941 case SID_CL_MAP_ACTION:
3942 if (length == 1)
3944 proto_tree_add_item (map_tree,
3945 hf_docsis_sid_cl_map_action, tvb, pos,
3946 length, ENC_BIG_ENDIAN);
3948 else
3950 expert_add_info_format(pinfo, map_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3952 break;
3953 default:
3954 dissect_unknown_tlv (tvb, pinfo, map_tree, pos - 2, length + 2);
3955 break;
3956 } /* switch */
3957 pos = pos + length;
3958 } /* while */
3961 static void
3962 dissect_sid_cl_enc(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, uint16_t len)
3964 uint8_t type, length;
3965 proto_tree *enc_tree;
3966 proto_item *enc_item;
3967 int pos = start;
3969 enc_tree =
3970 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_sid_cl_enc, &enc_item,
3971 ".2 SID Cluster Encoding (Length = %u)", len);
3973 while (pos < (start + len))
3975 type = tvb_get_uint8 (tvb, pos++);
3976 length = tvb_get_uint8 (tvb, pos++);
3977 switch (type)
3979 case SID_CL_ENC_ID:
3980 if (length == 1)
3982 proto_tree_add_item (enc_tree,
3983 hf_docsis_sid_cl_enc_id, tvb, pos,
3984 length, ENC_BIG_ENDIAN);
3986 else
3988 expert_add_info_format(pinfo, enc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3990 break;
3991 case SID_CL_ENC_MAP:
3992 if (length == 10)
3993 dissect_sid_cl_enc_map(tvb, pinfo, enc_tree, pos, length);
3994 else
3995 expert_add_info_format(pinfo, enc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
3996 break;
3997 default:
3998 dissect_unknown_tlv (tvb, pinfo, enc_tree, pos - 2, length + 2);
3999 break;
4000 } /* switch */
4001 pos = pos + length;
4002 } /* while */
4005 static void
4006 dissect_sid_cl(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, uint16_t len)
4008 uint8_t type, length;
4009 proto_tree *sid_tree;
4010 proto_item *sid_item;
4011 int pos = start;
4013 sid_tree =
4014 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_sid_cl, &sid_item,
4015 "47 Service Flow SID Cluster Assignments (Length = %u)", len);
4017 while (pos < (start + len))
4019 type = tvb_get_uint8 (tvb, pos++);
4020 length = tvb_get_uint8 (tvb, pos++);
4021 switch (type)
4023 case SID_CL_SF_ID:
4024 if (length == 4)
4026 proto_tree_add_item (sid_tree,
4027 hf_docsis_sid_cl_sf_id, tvb, pos,
4028 length, ENC_BIG_ENDIAN);
4030 else
4032 expert_add_info_format(pinfo, sid_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4034 break;
4035 case SID_CL_ENC:
4036 dissect_sid_cl_enc(tvb, pinfo, sid_tree, pos, length);
4037 break;
4038 case SID_CL_SO_CRIT:
4039 dissect_sid_cl_so_crit(tvb, pinfo, sid_tree, pos, length);
4040 break;
4041 default:
4042 dissect_unknown_tlv (tvb, pinfo, sid_tree, pos - 2, length + 2);
4043 break;
4044 } /* switch */
4045 pos = pos + length;
4046 } /* while */
4049 static void
4050 dissect_tcc(tvbuff_t * tvb, packet_info * pinfo,
4051 proto_tree *tree, int start, uint16_t len, int* previous_channel_id)
4053 uint8_t type, length;
4054 proto_tree *tcc_tree, *reassembled_ucd_tree;
4055 proto_item *tcc_item, *reassembled_ucd_item;
4056 int pos = start;
4057 int channel_id = -1;
4059 fragment_head* reassembled_ucd = NULL;
4061 tcc_tree =
4062 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_tcc, &tcc_item,
4063 "46 Transmit Channel Configuration (Length = %u)", len);
4065 while (pos < (start + len))
4067 type = tvb_get_uint8 (tvb, pos++);
4068 length = tvb_get_uint8 (tvb, pos++);
4069 switch (type)
4071 case TLV_TCC_REFID:
4072 if (length == 1)
4074 proto_tree_add_item (tcc_tree,
4075 hf_docsis_tlv_tcc_refid, tvb, pos,
4076 length, ENC_BIG_ENDIAN);
4078 else
4080 expert_add_info_format(pinfo, tcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4082 break;
4083 case TLV_TCC_US_CH_ACTION:
4084 if (length == 1)
4086 proto_tree_add_item (tcc_tree,
4087 hf_docsis_tlv_tcc_us_ch_action, tvb, pos,
4088 length, ENC_BIG_ENDIAN);
4090 else
4092 expert_add_info_format(pinfo, tcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4094 break;
4095 case TLV_TCC_US_CH_ID:
4096 if (length == 1)
4098 proto_tree_add_item_ret_uint (tcc_tree,
4099 hf_docsis_tlv_tcc_us_ch_id, tvb, pos,
4100 length, ENC_BIG_ENDIAN, &channel_id);
4101 /* Only perform reassembly on UCD if TLV is reassembled. fragment_end_seq_next added for the rare cases where UCD end is 254 long. */
4102 if(!pinfo->fragmented && *previous_channel_id != -1) {
4103 fragment_end_seq_next(&ucd_reassembly_table, pinfo, *previous_channel_id, NULL);
4105 *previous_channel_id = channel_id;
4108 else
4110 expert_add_info_format(pinfo, tcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4112 break;
4113 case TLV_TCC_NEW_US_CH_ID:
4114 if (length == 1)
4116 proto_tree_add_item (tcc_tree,
4117 hf_docsis_tlv_tcc_new_us_ch_id, tvb, pos,
4118 length, ENC_BIG_ENDIAN);
4120 else
4122 expert_add_info_format(pinfo, tcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4124 break;
4125 case TLV_TCC_UCD:
4126 proto_tree_add_item (tcc_tree, hf_docsis_tlv_tcc_ucd, tvb, pos, length, ENC_NA);
4127 if (channel_id == -1) {
4128 channel_id = *previous_channel_id;
4131 /* Only perform reassembly on UCD if TLV is reassembled */
4132 if(!pinfo->fragmented) {
4133 reassembled_ucd_item = proto_tree_add_item(tcc_tree, hf_docsis_ucd_reassembled, tvb, 0, -1, ENC_NA);
4134 reassembled_ucd_tree = proto_item_add_subtree (reassembled_ucd_item, ett_docsis_ucd_reassembled );
4136 reassembled_ucd = fragment_add_seq_next(&ucd_reassembly_table,
4137 tvb, pos, pinfo,
4138 channel_id, NULL, /* ID for fragments belonging together */
4139 length, /* fragment length - to the end */
4140 (len == 254)); /* More fragments? */
4142 if (reassembled_ucd) {
4143 tvbuff_t *ucd_tvb = NULL;
4144 ucd_tvb = process_reassembled_data(tvb, pos , pinfo, ".5 Reassembled UCD", reassembled_ucd, &ucd_frag_items,
4145 NULL, reassembled_ucd_tree);
4147 if (ucd_tvb && tvb_reported_length(ucd_tvb) > 0) {
4148 call_dissector (docsis_ucd_handle, ucd_tvb, pinfo, reassembled_ucd_tree);
4153 break;
4154 case TLV_TCC_RNG_SID:
4155 if (length == 2)
4157 proto_tree_add_item (tcc_tree,
4158 hf_docsis_tlv_tcc_rng_sid, tvb, pos,
4159 length, ENC_BIG_ENDIAN);
4161 else
4163 expert_add_info_format(pinfo, tcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4165 break;
4166 case TLV_TCC_INIT_TECH:
4167 if (length == 1)
4169 proto_tree_add_item (tcc_tree,
4170 hf_docsis_tlv_tcc_init_tech, tvb, pos,
4171 length, ENC_BIG_ENDIAN);
4173 else
4175 expert_add_info_format(pinfo, tcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4177 break;
4178 case TLV_TCC_RNG_PARMS:
4179 dissect_tcc_rng_parms(tvb, pinfo, tcc_tree, pos, length);
4180 break;
4181 case TLV_TCC_DYN_RNG_WIN:
4182 if (length == 1)
4184 proto_tree_add_item (tcc_tree,
4185 hf_docsis_tlv_tcc_dyn_rng_win, tvb, pos,
4186 length, ENC_BIG_ENDIAN);
4188 else
4190 expert_add_info_format(pinfo, tcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4192 break;
4193 case TLV_TCC_P1_6HI:
4194 if (length == 1)
4196 proto_tree_add_item (tcc_tree,
4197 hf_docsis_tlv_tcc_p_16hi, tvb, pos,
4198 length, ENC_BIG_ENDIAN);
4200 else
4202 expert_add_info_format(pinfo, tcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4204 break;
4205 case TLV_TCC_ASSIGN_OFDMA_UP_DATA_PROF:
4206 dissect_tcc_oudp(tvb, tcc_tree, pos, length);
4207 break;
4208 case TLV_TCC_EXTENDED_DRW:
4209 if (length == 1)
4211 proto_tree_add_item (tcc_tree,
4212 hf_docsis_tlv_tcc_extended_drw, tvb, pos,
4213 length, ENC_BIG_ENDIAN);
4215 else
4217 expert_add_info_format(pinfo, tcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4219 break;
4220 case TLV_TCC_EXTENDED_US_RNG_PWR:
4221 if (length == 2)
4223 proto_tree_add_item (tcc_tree,
4224 hf_docsis_tlv_tcc_extended_us_rng_pwr, tvb, pos,
4225 length, ENC_BIG_ENDIAN);
4227 else
4229 expert_add_info_format(pinfo, tcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4231 break;
4232 case TLV_TCC_OUDP_SOUNDING_SID:
4233 if (length == 2)
4235 proto_tree_add_item (tcc_tree,
4236 hf_docsis_tlv_tcc_oudp_sounding_sid, tvb, pos,
4237 length, ENC_BIG_ENDIAN);
4239 else
4241 expert_add_info_format(pinfo, tcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4243 break;
4244 case TLV_TCC_ERR:
4245 dissect_tcc_err(tvb, pinfo, tcc_tree, pos, length);
4246 break;
4247 default:
4248 dissect_unknown_tlv (tvb, pinfo, tcc_tree, pos - 2, length + 2);
4249 break;
4250 } /* switch */
4251 pos = pos + length;
4252 } /* while */
4255 static void
4256 dissect_ch_bl_rng(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, uint16_t len)
4258 uint8_t type, length;
4259 proto_tree *chblrng_tree;
4260 proto_item *chblrng_item;
4261 int pos = start;
4263 chblrng_tree =
4264 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcp_ch_bl_rng, &chblrng_item,
4265 "..3 Receive Module Channel Block Range (Length = %u)", len);
4267 while (pos < (start + len))
4269 type = tvb_get_uint8 (tvb, pos++);
4270 length = tvb_get_uint8 (tvb, pos++);
4271 switch (type)
4273 case CH_BL_RNG_MIN_CTR_FREQ:
4274 if (length == 4)
4276 proto_tree_add_item (chblrng_tree,
4277 hf_docsis_ch_bl_rng_min_ctr_freq, tvb, pos,
4278 length, ENC_BIG_ENDIAN);
4280 else
4282 expert_add_info_format(pinfo, chblrng_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4284 break;
4285 case CH_BL_RNG_MAX_CTR_FREQ:
4286 if (length == 4)
4288 proto_tree_add_item (chblrng_tree,
4289 hf_docsis_ch_bl_rng_max_ctr_freq, tvb, pos,
4290 length, ENC_BIG_ENDIAN);
4292 else
4294 expert_add_info_format(pinfo, chblrng_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4296 break;
4297 default:
4298 dissect_unknown_tlv (tvb, pinfo, chblrng_tree, pos - 2, length + 2);
4299 break;
4300 } /* switch */
4301 pos = pos + length;
4302 } /* while */
4305 static void
4306 dissect_rcp_rcv_mod(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, uint16_t len)
4308 uint8_t type, length;
4309 proto_tree *rcvmod_tree;
4310 proto_item *rcvmod_item;
4311 int pos = start;
4313 rcvmod_tree =
4314 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcp_rcv_mod_enc, &rcvmod_item,
4315 ".4 Receive Module Capability (Length = %u)", len);
4317 while (pos < (start + len))
4319 type = tvb_get_uint8 (tvb, pos++);
4320 length = tvb_get_uint8 (tvb, pos++);
4321 switch (type)
4323 case RCV_MOD_ENC_IDX:
4324 if (length == 1)
4326 proto_tree_add_item (rcvmod_tree,
4327 hf_docsis_rcv_mod_enc_idx, tvb, pos,
4328 length, ENC_BIG_ENDIAN);
4330 else
4332 expert_add_info_format(pinfo, rcvmod_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4334 break;
4335 case RCV_MOD_ENC_ADJ_CH:
4336 if (length == 1)
4338 proto_tree_add_item (rcvmod_tree,
4339 hf_docsis_rcv_mod_enc_adj_ch, tvb, pos,
4340 length, ENC_BIG_ENDIAN);
4342 else
4344 expert_add_info_format(pinfo, rcvmod_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4346 break;
4347 case RCV_MOD_ENC_CH_BL_RNG:
4348 dissect_ch_bl_rng(tvb, pinfo, rcvmod_tree, pos, length);
4349 break;
4350 case RCV_MOD_ENC_CTR_FREQ_ASGN:
4351 if (length == 4)
4353 proto_tree_add_item (rcvmod_tree,
4354 hf_docsis_rcv_mod_enc_ctr_freq_asgn, tvb, pos,
4355 length, ENC_BIG_ENDIAN);
4357 else
4359 expert_add_info_format(pinfo, rcvmod_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4361 break;
4362 case RCV_MOD_ENC_RSQ_CH_SUBS_CAP:
4363 proto_tree_add_item (rcvmod_tree,
4364 hf_docsis_rcv_mod_enc_rsq_ch_subs_cap, tvb, pos,
4365 length, ENC_NA);
4366 break;
4367 case RCV_MOD_ENC_CONN:
4368 proto_tree_add_item (rcvmod_tree,
4369 hf_docsis_rcv_mod_enc_conn, tvb, pos,
4370 length, ENC_NA);
4371 break;
4372 case RCV_MOD_ENC_PHY_LAYR_PARMS:
4373 proto_tree_add_item (rcvmod_tree,
4374 hf_docsis_rcv_mod_enc_phy_layr_parms, tvb, pos,
4375 length, ENC_NA);
4376 break;
4377 default:
4378 dissect_unknown_tlv (tvb, pinfo, rcvmod_tree, pos - 2, length + 2);
4379 break;
4380 } /* switch */
4381 pos = pos + length;
4382 } /* while */
4385 static void
4386 dissect_rcp_rcv_ch(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, uint16_t len)
4388 uint8_t type, length;
4389 proto_tree *rcvch_tree;
4390 proto_item *rcvch_item;
4391 int pos = start;
4393 rcvch_tree =
4394 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcp_rcv_ch, &rcvch_item,
4395 ".5 Receive Channels (Length = %u)", len);
4397 while (pos < (start + len))
4399 type = tvb_get_uint8 (tvb, pos++);
4400 length = tvb_get_uint8 (tvb, pos++);
4401 switch (type)
4403 case RCV_CH_IDX:
4404 if (length == 1)
4406 proto_tree_add_item (rcvch_tree,
4407 hf_docsis_rcv_ch_idx, tvb, pos,
4408 length, ENC_BIG_ENDIAN);
4410 else
4412 expert_add_info_format(pinfo, rcvch_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4414 break;
4415 case RCV_CH_CONN:
4416 proto_tree_add_item (rcvch_tree,
4417 hf_docsis_rcv_ch_conn, tvb, pos,
4418 length, ENC_NA);
4419 break;
4420 case RCV_CH_CONN_OFF:
4421 if (length == 1)
4423 proto_tree_add_item (rcvch_tree,
4424 hf_docsis_rcv_ch_conn_off, tvb, pos,
4425 length, ENC_BIG_ENDIAN);
4427 else
4429 expert_add_info_format(pinfo, rcvch_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4431 break;
4432 case RCV_CH_PRIM_DS_CH_IND:
4433 if (length == 1)
4435 proto_tree_add_item (rcvch_tree,
4436 hf_docsis_rcv_ch_prim_ds_ch_ind, tvb, pos,
4437 length, ENC_BIG_ENDIAN);
4439 else
4441 expert_add_info_format(pinfo, rcvch_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4443 break;
4444 default:
4445 dissect_unknown_tlv (tvb, pinfo, rcvch_tree, pos - 2, length + 2);
4446 break;
4447 } /* switch */
4448 pos = pos + length;
4449 } /* while */
4453 static void
4454 dissect_rcp(tvbuff_t * tvb, packet_info * pinfo,
4455 proto_tree *tree, int start, uint16_t len)
4457 uint8_t type, length;
4458 proto_tree *rcp_tree;
4459 proto_item *rcp_item;
4460 int pos = start;
4461 tvbuff_t *vsif_tvb;
4463 rcp_tree =
4464 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcp, &rcp_item,
4465 "48 Receive Channel Profile (Length = %u)", len);
4467 while (pos < (start + len))
4469 type = tvb_get_uint8 (tvb, pos++);
4470 length = tvb_get_uint8 (tvb, pos++);
4471 switch (type)
4473 case TLV_RCP_ID:
4474 if (length == 5)
4476 proto_tree_add_item (rcp_tree,
4477 hf_docsis_tlv_rcp_id, tvb, pos,
4478 length, ENC_NA);
4480 else
4482 expert_add_info_format(pinfo, rcp_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4484 break;
4485 case TLV_RCP_NAME:
4486 if (length <= 15)
4488 proto_tree_add_item (rcp_tree,
4489 hf_docsis_tlv_rcp_name, tvb, pos,
4490 length, ENC_NA);
4492 else
4494 expert_add_info_format(pinfo, rcp_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4496 break;
4497 case TLV_RCP_FREQ_SPC:
4498 if (length == 1)
4500 proto_tree_add_item (rcp_tree,
4501 hf_docsis_tlv_rcp_freq_spc, tvb, pos,
4502 length, ENC_BIG_ENDIAN);
4504 else
4506 expert_add_info_format(pinfo, rcp_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4508 break;
4509 case TLV_RCP_RCV_MOD_ENC:
4510 dissect_rcp_rcv_mod(tvb, pinfo, rcp_tree, pos, length);
4511 break;
4512 case TLV_RCP_RCV_CH:
4513 dissect_rcp_rcv_ch(tvb, pinfo, rcp_tree, pos, length);
4514 break;
4515 case TLV_RCP_VEN_SPEC:
4516 vsif_tvb = tvb_new_subset_length (tvb, pos, length);
4517 call_dissector (docsis_vsif_handle, vsif_tvb, pinfo, rcp_tree);
4518 break;
4519 default:
4520 dissect_unknown_tlv (tvb, pinfo, rcp_tree, pos - 2, length + 2);
4521 break;
4522 } /* switch */
4523 pos = pos + length;
4524 } /* while */
4527 static void
4528 dissect_rcc_rcv_mod(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, uint16_t len)
4530 uint8_t type, length;
4531 proto_tree *rcvmod_tree;
4532 proto_item *rcvmod_item;
4533 int pos = start;
4535 rcvmod_tree =
4536 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcc_rcv_mod_enc, &rcvmod_item,
4537 ".4 Receive Module Assignment (Length = %u)", len);
4539 while (pos < (start + len))
4541 type = tvb_get_uint8 (tvb, pos++);
4542 length = tvb_get_uint8 (tvb, pos++);
4543 switch (type)
4545 case RCV_MOD_ENC_IDX:
4546 if (length == 1)
4548 proto_tree_add_item (rcvmod_tree,
4549 hf_docsis_rcc_rcv_mod_enc_idx, tvb, pos,
4550 length, ENC_BIG_ENDIAN);
4552 else
4554 expert_add_info_format(pinfo, rcvmod_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4556 break;
4557 case RCV_MOD_ENC_CTR_FREQ_ASGN:
4558 if (length == 4)
4560 proto_tree_add_item (rcvmod_tree,
4561 hf_docsis_rcc_rcv_mod_enc_ctr_freq_asgn, tvb, pos,
4562 length, ENC_BIG_ENDIAN);
4564 else
4566 expert_add_info_format(pinfo, rcvmod_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4568 break;
4569 case RCV_MOD_ENC_CONN:
4570 proto_tree_add_item (rcvmod_tree,
4571 hf_docsis_rcc_rcv_mod_enc_conn, tvb, pos,
4572 length, ENC_NA);
4573 break;
4574 default:
4575 dissect_unknown_tlv (tvb, pinfo, rcvmod_tree, pos - 2, length + 2);
4576 break;
4577 } /* switch */
4578 pos = pos + length;
4579 } /* while */
4582 static void
4583 dissect_rcc_rcv_ch(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, uint16_t len)
4585 uint8_t type, length;
4586 proto_tree *rcvch_tree;
4587 proto_item *rcvch_item;
4588 int pos = start;
4590 rcvch_tree =
4591 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcc_rcv_ch, &rcvch_item,
4592 ".5 Receive Channels (Length = %u)", len);
4594 while (pos < (start + len))
4596 type = tvb_get_uint8 (tvb, pos++);
4597 length = tvb_get_uint8 (tvb, pos++);
4598 switch (type)
4600 case RCV_CH_IDX:
4601 if (length == 1)
4603 proto_tree_add_item (rcvch_tree,
4604 hf_docsis_rcc_rcv_ch_idx, tvb, pos,
4605 length, ENC_BIG_ENDIAN);
4607 else
4609 expert_add_info_format(pinfo, rcvch_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4611 break;
4612 case RCV_CH_CONN:
4613 proto_tree_add_item (rcvch_tree,
4614 hf_docsis_rcc_rcv_ch_conn, tvb, pos,
4615 length, ENC_NA);
4616 break;
4617 case RCV_CH_CTR_FREQ_ASGN:
4618 if (length == 4)
4620 proto_tree_add_item (rcvch_tree,
4621 hf_docsis_rcc_rcv_ch_ctr_freq_asgn, tvb, pos,
4622 length, ENC_BIG_ENDIAN);
4624 else
4626 expert_add_info_format(pinfo, rcvch_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4628 break;
4629 case RCV_CH_PRIM_DS_CH_IND:
4630 if (length == 1)
4632 proto_tree_add_item (rcvch_tree,
4633 hf_docsis_rcc_rcv_ch_prim_ds_ch_ind, tvb, pos,
4634 length, ENC_BIG_ENDIAN);
4636 else
4638 expert_add_info_format(pinfo, rcvch_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4640 break;
4641 default:
4642 dissect_unknown_tlv (tvb, pinfo, rcvch_tree, pos - 2, length + 2);
4643 break;
4644 } /* switch */
4645 pos = pos + length;
4646 } /* while */
4649 static void
4650 dissect_rcc_partial_serv_down_chan(tvbuff_t * tvb, proto_tree *tree, int start, uint16_t len)
4652 proto_tree *rcc_partial_serv_down_chan_tree;
4653 proto_item *rcc_partial_serv_down_chan_item;
4654 int pos = start;
4655 int i = 0;
4657 rcc_partial_serv_down_chan_tree =
4658 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcc_partial_serv_down_chan, &rcc_partial_serv_down_chan_item,
4659 ".6 Partial Service Downstream Channels (Length = %u)", len);
4660 for (i=0; i< len; ++i)
4662 proto_tree_add_item (rcc_partial_serv_down_chan_tree,
4663 hf_docsis_tlv_rcc_partial_serv_down_chan_id, tvb, pos+i,
4664 1, ENC_BIG_ENDIAN);
4668 static void
4669 dissect_rcc_srcc_prim_ds_ch_assign(tvbuff_t * tvb, proto_tree *tree, int start, uint16_t len)
4671 proto_tree *rcc_srcc_prim_ds_assign_tree;
4672 proto_item *rcc_srcc_prim_ds_assign_item;
4673 int pos = start;
4674 int i = 0;
4676 rcc_srcc_prim_ds_assign_tree =
4677 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcc_srcc_prim_ds_assign, &rcc_srcc_prim_ds_assign_item,
4678 "..1 RCC SRCC Primary Downstream Channel Assignment (Length = %u)", len);
4679 for (i=0; i< len; ++i)
4681 proto_tree_add_item (rcc_srcc_prim_ds_assign_tree,
4682 hf_docsis_tlv_rcc_srcc_prim_ds_chan_assign_ds_ch_id, tvb, pos+i,
4683 1, ENC_BIG_ENDIAN);
4687 static void
4688 dissect_rcc_srcc_ds_ch_assign(tvbuff_t * tvb, proto_tree *tree, int start, uint16_t len)
4690 proto_tree *rcc_srcc_ds_assign_tree;
4691 proto_item *rcc_srcc_ds_assign_item;
4692 int pos = start;
4693 int i = 0;
4695 rcc_srcc_ds_assign_tree =
4696 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcc_srcc_ds_assign, &rcc_srcc_ds_assign_item,
4697 "..2 RCC SRCC Downstream Channel Assignment (Length = %u)", len);
4698 for (i=0; i< len; ++i)
4700 proto_tree_add_item (rcc_srcc_ds_assign_tree,
4701 hf_docsis_tlv_rcc_srcc_ds_chan_assign_ds_ch_id, tvb, pos+i,
4702 1, ENC_BIG_ENDIAN);
4706 static void
4707 dissect_rcc_srcc_ds_prof_assign_prof_list(tvbuff_t * tvb, proto_tree *tree, int start, uint16_t len)
4709 proto_tree *rcc_srcc_ds_prof_assign_prof_list_tree;
4710 proto_item *rcc_srcc_ds_prof_assign_prof_list_item;
4711 int pos = start;
4712 int i = 0;
4714 rcc_srcc_ds_prof_assign_prof_list_tree =
4715 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcc_srcc_ds_prof_assign_prof_list, &rcc_srcc_ds_prof_assign_prof_list_item,
4716 "....2 RCC SRCC Downstream Profile Assignment - Profile List (Length = %u)", len);
4717 for (i=0; i< len; ++i)
4719 proto_tree_add_item (rcc_srcc_ds_prof_assign_prof_list_tree,
4720 hf_docsis_tlv_rcc_srcc_ds_prof_asssign_prof_list_prof_id, tvb, pos+i,
4721 1, ENC_BIG_ENDIAN);
4725 static void
4726 dissect_rcc_srcc_ds_prof_assign(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, uint16_t len)
4728 uint8_t type, length;
4729 proto_tree *rcc_srcc_ds_prof_assign_tree;
4730 proto_item *rcc_srcc_ds_prof_assign_item;
4731 int pos = start;
4733 rcc_srcc_ds_prof_assign_tree =
4734 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcc_srcc_ds_prof_assign, &rcc_srcc_ds_prof_assign_item,
4735 "..3 RCC SRCC Downstream Profile Assignment(Length = %u)", len);
4736 while (pos < (start + len))
4738 type = tvb_get_uint8 (tvb, pos++);
4739 length = tvb_get_uint8 (tvb, pos++);
4740 switch (type)
4742 case RCC_SRCC_DS_PROF_ASSIGN_DCID:
4743 if (length == 1)
4745 proto_tree_add_item (rcc_srcc_ds_prof_assign_tree,
4746 hf_docsis_tlv_rcc_srcc_ds_prof_assign_dcid, tvb, pos,
4747 length, ENC_BIG_ENDIAN);
4749 else
4751 expert_add_info_format(pinfo, rcc_srcc_ds_prof_assign_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4753 break;
4754 case RCC_SRCC_DS_PROF_ASSIGN_PROF_LIST:
4755 dissect_rcc_srcc_ds_prof_assign_prof_list(tvb, rcc_srcc_ds_prof_assign_tree, pos, length);
4756 break;
4757 default:
4758 dissect_unknown_tlv (tvb, pinfo, rcc_srcc_ds_prof_assign_tree, pos - 2, length + 2);
4759 break;
4760 } /* switch */
4761 pos = pos + length;
4762 } /* while */
4765 static void
4766 dissect_rcc_srcc(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, uint16_t len)
4768 uint8_t type, length;
4769 proto_tree *rcc_srcc_tree;
4770 proto_item *rcc_srcc_item;
4771 int pos = start;
4773 rcc_srcc_tree =
4774 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcc_srcc, &rcc_srcc_item,
4775 ".7 RCC Simplified Receive Channel Configuration (Length = %u)", len);
4776 while (pos < (start + len))
4778 type = tvb_get_uint8 (tvb, pos++);
4779 length = tvb_get_uint8 (tvb, pos++);
4780 switch (type)
4782 case RCC_SRCC_PRIM_DS_CHAN_ASSIGN:
4783 dissect_rcc_srcc_prim_ds_ch_assign(tvb, rcc_srcc_tree, pos, length);
4784 break;
4785 case RCC_SRCC_DS_CHAN_ASSIGN:
4786 dissect_rcc_srcc_ds_ch_assign(tvb, rcc_srcc_tree, pos, length);
4787 break;
4788 case RCC_SRCC_DS_PROF_ASSIGN:
4789 dissect_rcc_srcc_ds_prof_assign(tvb, pinfo, rcc_srcc_tree, pos, length);
4790 break;
4791 default:
4792 dissect_unknown_tlv (tvb, pinfo, rcc_srcc_tree, pos - 2, length + 2);
4793 break;
4794 } /* switch */
4795 pos = pos + length;
4796 } /* while */
4799 static void
4800 dissect_rcc_err(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, uint16_t len)
4802 uint8_t type, length;
4803 proto_tree *err_tree;
4804 proto_item *err_item;
4805 int pos = start;
4807 err_tree =
4808 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcc_rcv_ch, &err_item,
4809 ".254 RCC Error Encodings (Length = %u)", len);
4811 while (pos < (start + len))
4813 type = tvb_get_uint8 (tvb, pos++);
4814 length = tvb_get_uint8 (tvb, pos++);
4815 switch (type)
4817 case RCC_ERR_MOD_OR_CH:
4818 if (length == 1)
4820 proto_tree_add_item (err_tree,
4821 hf_docsis_tlv_rcc_err_mod_or_ch, tvb, pos,
4822 length, ENC_BIG_ENDIAN);
4824 else
4826 expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4828 break;
4829 case RCC_ERR_IDX:
4830 if (length == 1)
4832 proto_tree_add_item (err_tree,
4833 hf_docsis_tlv_rcc_err_idx, tvb, pos,
4834 length, ENC_BIG_ENDIAN);
4836 else
4838 expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4840 break;
4841 case RCC_ERR_PARAM:
4842 if (length == 1)
4844 proto_tree_add_item (err_tree,
4845 hf_docsis_tlv_rcc_err_param, tvb, pos,
4846 length, ENC_BIG_ENDIAN);
4848 else
4850 expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4852 break;
4853 case RCC_ERR_CODE:
4854 if (length == 1)
4856 proto_tree_add_item (err_tree,
4857 hf_docsis_tlv_rcc_err_code, tvb, pos,
4858 length, ENC_BIG_ENDIAN);
4860 else
4862 expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4864 break;
4865 case RCC_ERR_MSG:
4866 proto_tree_add_item (err_tree,
4867 hf_docsis_tlv_rcc_err_msg, tvb, pos,
4868 length, ENC_NA);
4869 break;
4870 default:
4871 dissect_unknown_tlv (tvb, pinfo, err_tree, pos - 2, length + 2);
4872 break;
4873 } /* switch */
4874 pos = pos + length;
4875 } /* while */
4878 static void
4879 dissect_rcc(tvbuff_t * tvb, packet_info * pinfo,
4880 proto_tree *tree, int start, uint16_t len)
4882 uint8_t type, length;
4883 proto_tree *rcc_tree;
4884 proto_item *rcc_item;
4885 int pos = start;
4886 tvbuff_t *vsif_tvb;
4888 rcc_tree =
4889 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcc, &rcc_item,
4890 "49 Receive Channel Configuration (Length = %u)", len);
4892 while (pos < (start + len))
4894 type = tvb_get_uint8 (tvb, pos++);
4895 length = tvb_get_uint8 (tvb, pos++);
4896 switch (type)
4898 case TLV_RCP_ID:
4899 if (length == 5)
4901 proto_tree_add_item (rcc_tree,
4902 hf_docsis_tlv_rcc_id, tvb, pos,
4903 length, ENC_NA);
4905 else
4907 expert_add_info_format(pinfo, rcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4909 break;
4910 case TLV_RCP_RCV_MOD_ENC:
4911 dissect_rcc_rcv_mod(tvb, pinfo, rcc_tree, pos, length);
4912 break;
4913 case TLV_RCP_RCV_CH:
4914 dissect_rcc_rcv_ch(tvb, pinfo, rcc_tree, pos, length);
4915 break;
4916 case TLV_RCP_VEN_SPEC:
4917 vsif_tvb = tvb_new_subset_length (tvb, pos, length);
4918 call_dissector (docsis_vsif_handle, vsif_tvb, pinfo, rcc_tree);
4919 break;
4920 case TLV_RCC_PARTIAL_SERV_DOWN_CHAN:
4921 dissect_rcc_partial_serv_down_chan(tvb, rcc_tree, pos, length);
4922 break;
4923 case TLV_RCC_SRCC:
4924 dissect_rcc_srcc(tvb, pinfo, rcc_tree, pos, length);
4925 break;
4926 case TLV_RCC_PRIM_DOWN_CHAN:
4927 if (length == 1)
4929 proto_tree_add_item (rcc_tree,
4930 hf_docsis_tlv_rcc_prim_down_chan, tvb, pos,
4931 length, ENC_NA);
4933 else
4935 expert_add_info_format(pinfo, rcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4937 break;
4938 case TLV_RCC_ERR:
4939 dissect_rcc_err(tvb, pinfo, rcc_tree, pos, length);
4940 break;
4941 default:
4942 dissect_unknown_tlv (tvb, pinfo, rcc_tree, pos - 2, length + 2);
4943 break;
4944 } /* switch */
4945 pos = pos + length;
4946 } /* while */
4949 static void
4950 dissect_dsid_ds_reseq(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, uint16_t len)
4952 uint8_t type, length;
4953 proto_tree *dsid_tree;
4954 proto_item *dsid_item;
4955 int pos = start;
4957 dsid_tree =
4958 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_dsid_ds_reseq, &dsid_item,
4959 ".3 Resequencing DSID (Length = %u)", len);
4961 while (pos < (start + len))
4963 type = tvb_get_uint8 (tvb, pos++);
4964 length = tvb_get_uint8 (tvb, pos++);
4965 switch (type)
4967 case DS_RESEQ_DSID:
4968 if (length == 1)
4970 proto_tree_add_item (dsid_tree,
4971 hf_docsis_ds_reseq_dsid, tvb, pos,
4972 length, ENC_BIG_ENDIAN);
4974 else
4976 expert_add_info_format(pinfo, dsid_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4978 break;
4979 case DS_RESEQ_CH_LST:
4980 proto_tree_add_item (dsid_tree,
4981 hf_docsis_ds_reseq_ch_lst, tvb, pos,
4982 length, ENC_NA);
4983 break;
4984 case DS_RESEQ_WAIT_TIME:
4985 if (length == 1)
4987 proto_tree_add_item (dsid_tree,
4988 hf_docsis_ds_reseq_wait_time, tvb, pos,
4989 length, ENC_BIG_ENDIAN);
4991 else
4993 expert_add_info_format(pinfo, dsid_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
4995 break;
4996 case DS_RESEQ_WARN_THRESH:
4997 if (length == 1)
4999 proto_tree_add_item (dsid_tree,
5000 hf_docsis_ds_reseq_warn_thresh, tvb, pos,
5001 length, ENC_BIG_ENDIAN);
5003 else
5005 expert_add_info_format(pinfo, dsid_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5007 break;
5008 case DS_RESEQ_HO_TIMER:
5009 if (length == 2)
5011 proto_tree_add_item (dsid_tree,
5012 hf_docsis_ds_reseq_ho_timer, tvb, pos,
5013 length, ENC_BIG_ENDIAN);
5015 else
5017 expert_add_info_format(pinfo, dsid_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5019 break;
5020 default:
5021 dissect_unknown_tlv (tvb, pinfo, dsid_tree, pos - 2, length + 2);
5022 break;
5023 } /* switch */
5024 pos = pos + length;
5025 } /* while */
5028 static void
5029 dissect_dsid_mc_addr(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, uint16_t len)
5031 uint8_t type, length;
5032 proto_tree *dsid_tree;
5033 proto_item *dsid_item;
5034 int pos = start;
5036 dsid_tree =
5037 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_dsid_mc_addr, &dsid_item,
5038 "..1 Client MAC Address Encodings (Length = %u)", len);
5040 while (pos < (start + len))
5042 type = tvb_get_uint8 (tvb, pos++);
5043 length = tvb_get_uint8 (tvb, pos++);
5044 switch (type)
5046 case MC_ADDR_ACTION:
5047 if (length == 1)
5049 proto_tree_add_item (dsid_tree,
5050 hf_docsis_mc_addr_action, tvb, pos,
5051 length, ENC_BIG_ENDIAN);
5053 else
5055 expert_add_info_format(pinfo, dsid_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5057 break;
5058 case MC_ADDR_ADDR:
5059 if (length == 6)
5061 proto_tree_add_item (dsid_tree,
5062 hf_docsis_mc_addr_addr, tvb, pos,
5063 length, ENC_NA);
5065 else
5067 expert_add_info_format(pinfo, dsid_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5069 break;
5070 default:
5071 dissect_unknown_tlv (tvb, pinfo, dsid_tree, pos - 2, length + 2);
5072 break;
5073 } /* switch */
5074 pos = pos + length;
5075 } /* while */
5078 static void
5079 dissect_dsid_mc(tvbuff_t * tvb, packet_info *pinfo, proto_tree *tree, int start, uint16_t len)
5081 uint8_t type, length;
5082 proto_tree *dsid_tree;
5083 int pos = start;
5085 dsid_tree =
5086 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_dsid_mc, NULL,
5087 ".4 Multicast Encodings (Length = %u)", len);
5089 while (pos < (start + len))
5091 type = tvb_get_uint8 (tvb, pos++);
5092 length = tvb_get_uint8 (tvb, pos++);
5093 switch (type)
5095 case TLV_DSID_MC_ADDR:
5096 dissect_dsid_mc_addr(tvb, pinfo, dsid_tree, pos, length);
5097 break;
5098 case TLV_DSID_MC_CMIM:
5099 proto_tree_add_item (dsid_tree,
5100 hf_docsis_tlv_dsid_mc_cmim, tvb, pos,
5101 length, ENC_NA);
5102 break;
5103 case TLV_DSID_MC_GROUP:
5104 proto_tree_add_item (dsid_tree,
5105 hf_docsis_tlv_dsid_mc_group, tvb, pos,
5106 length, ENC_NA);
5107 break;
5108 case TLV_DSID_MC_PHS:
5109 dissect_phs(tvb, pinfo, dsid_tree, pos, length);
5110 break;
5111 default:
5112 dissect_unknown_tlv (tvb, pinfo, dsid_tree, pos - 2, length + 2);
5113 break;
5114 } /* switch */
5115 pos = pos + length;
5116 } /* while */
5119 static void
5120 dissect_dsid(tvbuff_t * tvb, packet_info *pinfo, proto_tree *tree, int start, uint16_t len)
5122 uint8_t type, length;
5123 proto_tree *dsid_tree;
5124 proto_item *dsid_item;
5125 int pos = start;
5127 dsid_tree =
5128 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_dsid, &dsid_item,
5129 "50 DSID Encodings (Length = %u)", len);
5131 while (pos < (start + len))
5133 type = tvb_get_uint8 (tvb, pos++);
5134 length = tvb_get_uint8 (tvb, pos++);
5135 switch (type)
5137 case TLV_DSID_ID:
5138 if (length == 3)
5140 proto_tree_add_item (dsid_tree,
5141 hf_docsis_tlv_dsid_id, tvb, pos,
5142 length, ENC_BIG_ENDIAN);
5144 else
5146 expert_add_info_format(pinfo, dsid_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5148 break;
5149 case TLV_DSID_ACTION:
5150 if (length == 1)
5152 proto_tree_add_item (dsid_tree,
5153 hf_docsis_tlv_dsid_action, tvb, pos,
5154 length, ENC_BIG_ENDIAN);
5156 else
5158 expert_add_info_format(pinfo, dsid_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5160 break;
5161 case TLV_DSID_DS_RESEQ:
5162 dissect_dsid_ds_reseq(tvb, pinfo, dsid_tree, pos, length);
5163 break;
5164 case TLV_DSID_MC:
5165 dissect_dsid_mc(tvb, pinfo, dsid_tree, pos, length);
5166 break;
5167 default:
5168 dissect_unknown_tlv (tvb, pinfo, dsid_tree, pos - 2, length + 2);
5169 break;
5170 } /* switch */
5171 pos = pos + length;
5172 } /* while */
5175 static void
5176 dissect_sec_assoc(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, uint16_t len)
5178 uint8_t type, length;
5179 proto_tree *sec_tree;
5180 proto_item *sec_item;
5181 int pos = start;
5183 sec_tree =
5184 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_dsid, &sec_item,
5185 "51 Security Association Encodings (Length = %u)", len);
5187 while (pos < (start + len))
5189 type = tvb_get_uint8 (tvb, pos++);
5190 length = tvb_get_uint8 (tvb, pos++);
5191 switch (type)
5193 case TLV_SEC_ASSOC_ACTION:
5194 if (length == 1)
5196 proto_tree_add_item (sec_tree,
5197 hf_docsis_tlv_sec_assoc_action, tvb, pos,
5198 length, ENC_BIG_ENDIAN);
5200 else
5202 expert_add_info_format(pinfo, sec_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5204 break;
5205 case TLV_SEC_ASSOC_DESC:
5206 if (length == 14)
5208 proto_tree_add_item (sec_tree,
5209 hf_docsis_tlv_sec_assoc_desc, tvb, pos,
5210 length, ENC_NA);
5212 else
5214 expert_add_info_format(pinfo, sec_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5216 break;
5217 default:
5218 dissect_unknown_tlv (tvb, pinfo, sec_tree, pos - 2, length + 2);
5219 break;
5220 } /* switch */
5221 pos = pos + length;
5222 } /* while */
5225 static void
5226 dissect_ch_asgn(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, uint16_t len)
5228 uint8_t type, length;
5229 proto_tree *asgn_tree;
5230 proto_item *asgn_item;
5231 int pos = start;
5233 asgn_tree =
5234 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_ch_asgn, &asgn_item,
5235 "56 Channel Assignment Configuration Settings (Length = %u)", len);
5237 while (pos < (start + len))
5239 type = tvb_get_uint8 (tvb, pos++);
5240 length = tvb_get_uint8 (tvb, pos++);
5241 switch (type)
5243 case TLV_CH_ASGN_US_CH_ID:
5244 if (length == 1)
5246 proto_tree_add_item (asgn_tree,
5247 hf_docsis_ch_asgn_us_ch_id, tvb, pos,
5248 length, ENC_BIG_ENDIAN);
5250 else
5252 expert_add_info_format(pinfo, asgn_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5254 break;
5255 case TLV_CH_ASGN_RX_FREQ:
5256 if (length == 4)
5258 proto_tree_add_item (asgn_tree,
5259 hf_docsis_ch_asgn_rx_freq, tvb, pos,
5260 length, ENC_BIG_ENDIAN);
5262 else
5264 expert_add_info_format(pinfo, asgn_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5266 break;
5267 default:
5268 dissect_unknown_tlv (tvb, pinfo, asgn_tree, pos - 2, length + 2);
5269 break;
5270 } /* switch */
5271 pos = pos + length;
5272 } /* while */
5275 static void
5276 dissect_cmts_mc_sess_enc(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, uint16_t len)
5278 uint8_t type, length;
5279 proto_tree *mc_tree;
5280 proto_item *mc_item;
5281 int pos = start;
5283 mc_tree =
5284 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_cmts_mc_sess_enc, &mc_item,
5285 "64 CMTS Static Multicast Session Encoding (Length = %u)", len);
5287 while (pos < (start + len))
5289 type = tvb_get_uint8 (tvb, pos++);
5290 length = tvb_get_uint8 (tvb, pos++);
5291 switch (type)
5293 case CMTS_MC_SESS_ENC_GRP:
5294 if (length == 4 || length == 16)
5296 proto_tree_add_item (mc_tree,
5297 hf_docsis_cmts_mc_sess_enc_grp, tvb, pos,
5298 length, ENC_NA);
5300 else
5302 expert_add_info_format(pinfo, mc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5304 break;
5305 case CMTS_MC_SESS_ENC_SRC:
5306 if (length == 4 || length == 16)
5308 proto_tree_add_item (mc_tree,
5309 hf_docsis_cmts_mc_sess_enc_src, tvb, pos,
5310 length, ENC_NA);
5312 else
5314 expert_add_info_format(pinfo, mc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5316 break;
5317 case CMTS_MC_SESS_ENC_CMIM:
5318 proto_tree_add_item (mc_tree,
5319 hf_docsis_cmts_mc_sess_enc_cmim, tvb, pos,
5320 length, ENC_NA);
5321 break;
5322 default:
5323 dissect_unknown_tlv (tvb, pinfo, mc_tree, pos - 2, length + 2);
5324 break;
5325 } /* switch */
5326 pos = pos + length;
5327 } /* while */
5330 static void
5331 dissect_em_id_list_for_cm(tvbuff_t * tvb, proto_tree *tree, int start, uint16_t len)
5333 proto_tree *em_id_list_tree;
5334 proto_item *em_id_list_item;
5335 int pos = start;
5337 em_id_list_tree =
5338 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_em_id_list_for_cm, &em_id_list_item,
5339 "78 Energy Management Identifier List for CM (Length = %u)", len);
5341 while (pos < (start + len))
5343 proto_tree_add_item (em_id_list_tree, hf_docsis_tlv_em_id_list_for_cm_em_id, tvb, pos, 2, ENC_NA);
5344 pos+=2;
5348 static void
5349 dissect_fdx_tg_assignment(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, uint16_t len)
5351 uint8_t type, length;
5352 proto_tree *tg_assignment_tree;
5353 proto_item *tg_assignment_item;
5354 int pos = start;
5355 tvbuff_t *rba_tvb;
5357 tg_assignment_tree =
5358 proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_tg_assignment, &tg_assignment_item,
5359 "85 FDX Transmission Group Assignment (Length = %u)", len);
5361 while (pos < (start + len))
5363 type = tvb_get_uint8 (tvb, pos++);
5364 length = tvb_get_uint8 (tvb, pos++);
5365 switch (type)
5367 case TLV_FDX_TG_ASSIGNMENT_TG_ID:
5368 if (length == 1)
5370 proto_tree_add_item (tg_assignment_tree,
5371 hf_docsis_tlv_fdx_tg_assignment_tg_id, tvb, pos,
5372 length, ENC_BIG_ENDIAN);
5374 else
5376 expert_add_info_format(pinfo, tg_assignment_item, &ei_docsis_tlv_tlvlen_bad,
5377 "Wrong TLV length: %u", length);
5379 break;
5380 case TLV_FDX_TG_ASSIGNMENT_RBA_TYPE:
5381 if (length == 1)
5383 proto_tree_add_item (tg_assignment_tree,
5384 hf_docsis_tlv_fdx_tg_assignment_rba_type, tvb, pos,
5385 length, ENC_BIG_ENDIAN);
5387 else
5389 expert_add_info_format(pinfo, tg_assignment_item, &ei_docsis_tlv_tlvlen_bad,
5390 "Wrong TLV length: %u", length);
5392 break;
5393 case TLV_FDX_TG_ASSIGNMENT_RBA_MESSAGE:
5394 rba_tvb = tvb_new_subset_length (tvb, pos, length);
5395 call_dissector (docsis_rba_handle, rba_tvb, pinfo, tg_assignment_tree);
5396 break;
5397 default:
5398 dissect_unknown_tlv (tvb, pinfo, tg_assignment_tree, pos - 2, length + 2);
5399 break;
5400 } /* switch */
5401 pos = pos + length;
5402 } /* while */
5405 static int
5406 dissect_docsis_tlv (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
5408 proto_item *it;
5409 proto_tree *tlv_tree;
5410 int pos = 0;
5411 int total_len;
5412 uint8_t type, length;
5413 uint16_t x;
5414 int previous_channel_id = -1;
5416 total_len = tvb_reported_length_remaining (tvb, 0);
5419 it =
5420 proto_tree_add_protocol_format (tree, proto_docsis_tlv, tvb, 0,
5421 total_len, "TLV Data");
5422 tlv_tree = proto_item_add_subtree (it, ett_docsis_tlv);
5423 while (pos < total_len)
5425 type = tvb_get_uint8 (tvb, pos++);
5426 length = tvb_get_uint8 (tvb, pos++);
5427 switch (type)
5429 case TLV_DOWN_FREQ:
5430 /* This is ugly. There are multiple type 1 TLVs that may appear
5431 * in the TLV data, the problem is that they are dependent on
5432 * message type. */
5433 if (length == 4)
5434 proto_tree_add_item (tlv_tree, hf_docsis_tlv_down_freq, tvb,
5435 pos, length, ENC_BIG_ENDIAN);
5436 else if (length == 1)
5437 proto_tree_add_item (tlv_tree, hf_docsis_tlv_rng_tech, tvb,
5438 pos, length, ENC_BIG_ENDIAN);
5439 else
5440 dissect_doc10cos (tvb, pinfo, tlv_tree, pos, length);
5441 break;
5442 case TLV_CHNL_ID:
5443 if (length == 1)
5445 proto_tree_add_item (tlv_tree, hf_docsis_tlv_upstream_chid,
5446 tvb, pos, length, ENC_BIG_ENDIAN);
5448 else
5450 expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5452 break;
5453 case TLV_NET_ACCESS:
5454 if (length == 1)
5456 proto_tree_add_item (tlv_tree, hf_docsis_tlv_net_access,
5457 tvb, pos, length, ENC_BIG_ENDIAN);
5459 else
5461 expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5463 break;
5464 case TLV_COS:
5465 dissect_cos (tvb, pinfo, tlv_tree, pos, length);
5466 break;
5467 case TLV_MODEM_CAP:
5468 dissect_modemcap (tvb, pinfo, tlv_tree, pos, length);
5469 break;
5470 case TLV_CM_MIC:
5471 if (length == 16)
5473 proto_tree_add_item (tlv_tree, hf_docsis_tlv_cm_mic, tvb,
5474 pos, length, ENC_NA);
5476 else
5478 expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5480 break;
5481 case TLV_CMTS_MIC:
5482 if (length == 16)
5484 proto_tree_add_item (tlv_tree, hf_docsis_tlv_cmts_mic, tvb,
5485 pos, length, ENC_NA);
5487 else
5489 expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5491 break;
5492 case TLV_VENDOR_ID:
5493 if (length == 3)
5495 proto_tree_add_item (tlv_tree, hf_docsis_tlv_vendor_id, tvb,
5496 pos, length, ENC_NA);
5498 else
5500 expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5502 break;
5503 case TLV_SW_UPG_FILE:
5504 proto_tree_add_item (tlv_tree, hf_docsis_tlv_sw_file, tvb, pos,
5505 length, ENC_ASCII);
5506 break;
5507 case TLV_SNMP_WRITE_CTRL:
5508 proto_tree_add_item (tlv_tree, hf_docsis_tlv_snmp_access, tvb,
5509 pos, length, ENC_NA);
5510 break;
5511 case TLV_SNMP_OBJECT:
5512 proto_tree_add_item (tlv_tree, hf_docsis_tlv_snmp_obj, tvb,
5513 pos, length, ENC_NA);
5514 break;
5515 case TLV_MODEM_IP:
5516 if (length == 4)
5518 proto_tree_add_item (tlv_tree, hf_docsis_tlv_modem_addr,
5519 tvb, pos, length, ENC_BIG_ENDIAN);
5521 else
5523 expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5525 break;
5526 case TLV_SVC_UNAVAIL:
5527 if (length == 3)
5529 dissect_svc_unavail(tvb, tlv_tree, pos, length);
5531 else
5533 expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5535 break;
5536 case TLV_ETHERNET_MAC:
5537 if (length == 6)
5539 proto_tree_add_item (tlv_tree, hf_docsis_tlv_cpe_ethernet,
5540 tvb, pos, length, ENC_NA);
5542 else
5544 expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5546 break;
5547 case TLV_TEL_SETTINGS:
5548 break;
5549 case TLV_BPI_CONFIG:
5550 proto_tree_add_item (tlv_tree, hf_docsis_tlv_bpi, tvb,
5551 pos, length, ENC_NA);
5552 break;
5553 case TLV_MAX_CPES:
5554 if (length == 1)
5556 proto_tree_add_item (tlv_tree, hf_docsis_tlv_max_cpe, tvb,
5557 pos, length, ENC_BIG_ENDIAN);
5559 else
5561 expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5563 break;
5564 case TLV_TFTP_TIME:
5565 if (length == 4)
5567 proto_tree_add_item (tlv_tree,
5568 hf_docsis_tlv_tftp_server_timestamp,
5569 tvb, pos, length, ENC_BIG_ENDIAN);
5571 else
5573 expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5575 break;
5576 case TLV_TFTP_MODEM_ADDRESS:
5577 if (length == 4)
5579 proto_tree_add_item (tlv_tree,
5580 hf_docsis_tlv_tftp_prov_modem_address,
5581 tvb, pos, length, ENC_BIG_ENDIAN);
5583 else
5585 expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5587 break;
5588 case TLV_SW_UPG_SRVR:
5589 if (length == 4)
5591 proto_tree_add_item (tlv_tree, hf_docsis_tlv_sw_upg_srvr,
5592 tvb, pos, length, ENC_BIG_ENDIAN);
5594 else
5596 expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5598 break;
5599 case TLV_UPSTREAM_CLASSIFIER:
5600 case TLV_DOWN_CLASSIFIER:
5601 dissect_classifiers (tvb, pinfo, tlv_tree, pos, length, type);
5602 break;
5603 case TLV_UPSTREAM_SERVICE_FLOW:
5604 case TLV_DOWN_SERVICE_FLOW:
5605 dissect_sflow (tvb, pinfo, tlv_tree, pos, length, type);
5606 break;
5607 case TLV_PHS:
5608 dissect_phs (tvb, pinfo, tlv_tree, pos, length);
5609 break;
5610 case TLV_HMAC_DIGEST:
5611 if (length == 20)
5613 proto_tree_add_item (tlv_tree,
5614 hf_docsis_tlv_hmac_digest, tvb,
5615 pos, length, ENC_NA);
5617 else
5619 expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5621 break;
5622 case TLV_MAX_CLASSIFIERS:
5623 if (length == 2)
5625 proto_tree_add_item (tlv_tree,
5626 hf_docsis_tlv_max_classifiers, tvb,
5627 pos, length, ENC_BIG_ENDIAN);
5629 else
5631 expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5633 break;
5634 case TLV_PRIVACY_ENABLE:
5635 if (length == 1)
5637 proto_tree_add_item (tlv_tree, hf_docsis_tlv_privacy_enable,
5638 tvb, pos, length, ENC_BIG_ENDIAN);
5640 else
5642 expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5644 break;
5645 case TLV_AUTH_BLOCK:
5646 proto_tree_add_item (tlv_tree, hf_docsis_tlv_auth_block,
5647 tvb, pos, length, ENC_NA);
5648 break;
5649 case TLV_KEY_SEQ_NUM:
5650 if (length == 1)
5652 proto_tree_add_item (tlv_tree, hf_docsis_tlv_key_seq_num, tvb,
5653 pos, length, ENC_NA);
5655 else
5657 expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5659 break;
5660 case TLV_MFGR_CVC:
5661 proto_tree_add_item (tlv_tree, hf_docsis_tlv_mfgr_cvc,
5662 tvb, pos, length, ENC_NA);
5663 break;
5664 case TLV_COSIGN_CVC:
5665 proto_tree_add_item (tlv_tree, hf_docsis_tlv_cosign_cvc,
5666 tvb, pos, length, ENC_NA);
5667 break;
5668 case TLV_SNMPV3_KICKSTART:
5669 dissect_snmpv3_kickstart(tvb, pinfo, tlv_tree, pos, length);
5670 break;
5671 case TLV_SUBS_MGMT_CTRL:
5672 proto_tree_add_item (tlv_tree, hf_docsis_tlv_subs_mgmt_ctrl,
5673 tvb, pos, length, ENC_NA);
5674 break;
5675 case TLV_SUBS_MGMT_CPE:
5676 if ((length % 4) == 0)
5678 proto_tree_add_item (tlv_tree, hf_docsis_tlv_subs_mgmt_ip_table,
5679 tvb, pos, length, ENC_NA);
5680 for (x = 0; x < length; x+=4)
5682 proto_tree_add_item (tlv_tree,
5683 hf_docsis_tlv_subs_mgmt_ip_entry,
5684 tvb, pos + x, 4, ENC_BIG_ENDIAN);
5687 else
5689 expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5691 break;
5692 case TLV_SUBS_MGMT_FLTR:
5693 proto_tree_add_item (tlv_tree,
5694 hf_docsis_tlv_subs_mgmt_filter_grps,
5695 tvb, pos, length, ENC_NA);
5696 break;
5697 case TLV_SNMPV3_NTFY_RCVR:
5698 proto_tree_add_item(tlv_tree,
5699 hf_docsis_tlv_snmpv3_ntfy_rcvr,
5700 tvb, pos, length, ENC_NA);
5701 break;
5702 case TLV_ENABLE_20_MODE:
5703 if (length == 1)
5705 proto_tree_add_item (tlv_tree, hf_docsis_tlv_enable_20_mode,
5706 tvb, pos, length, ENC_BIG_ENDIAN);
5708 else
5710 expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5712 break;
5713 case TLV_ENABLE_TEST_MODES:
5714 if (length == 1)
5716 proto_tree_add_item (tlv_tree, hf_docsis_tlv_enable_test_modes,
5717 tvb, pos, length, ENC_BIG_ENDIAN);
5719 else
5721 expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5723 break;
5724 case TLV_DS_CH_LIST:
5725 dissect_ds_ch_list(tvb, pinfo, tlv_tree, pos, length);
5726 break;
5727 case TLV_MC_MAC_ADDRESS:
5728 if (length == 6)
5730 proto_tree_add_item(tlv_tree, hf_docsis_tlv_mc_mac_address,
5731 tvb, pos, length, ENC_NA);
5733 else
5735 expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5737 break;
5738 case TLV_DOCSIS_EXTENSION_FIELD:
5739 dissect_docsis_extension_field(tvb, pinfo, tlv_tree, pos, length);
5740 break;
5741 case TLV_VENDOR_SPEC:
5742 dissect_vendor_specific_capabilities(tvb, pinfo, tlv_tree, pos, length);
5743 break;
5744 case TLV_DUT_FILTER:
5745 dissect_dut_filter(tvb, pinfo, tlv_tree, pos, length);
5746 break;
5747 case TLV_TCC:
5748 dissect_tcc(tvb, pinfo, tlv_tree, pos, length, &previous_channel_id);
5749 break;
5750 case TLV_SID_CL:
5751 dissect_sid_cl(tvb, pinfo, tlv_tree, pos, length);
5752 break;
5753 case TLV_RCP:
5754 dissect_rcp(tvb, pinfo, tlv_tree, pos, length);
5755 break;
5756 case TLV_RCC:
5757 dissect_rcc(tvb, pinfo, tlv_tree, pos, length);
5758 break;
5759 case TLV_DSID:
5760 dissect_dsid(tvb, pinfo, tlv_tree, pos, length);
5761 break;
5762 case TLV_SEC_ASSOC:
5763 dissect_sec_assoc(tvb, pinfo, tlv_tree, pos, length);
5764 break;
5765 case TLV_INIT_CH_TIMEOUT:
5766 if (length == 2)
5768 proto_tree_add_item(tlv_tree, hf_docsis_tlv_init_ch_timeout,
5769 tvb, pos, length, ENC_BIG_ENDIAN);
5771 else
5773 expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5775 break;
5776 case TLV_CH_ASGN:
5777 dissect_ch_asgn(tvb, pinfo, tlv_tree, pos, length);
5778 break;
5779 case TLV_CM_INIT_REASON:
5780 if (length == 1)
5782 proto_tree_add_item(tlv_tree, hf_docsis_tlv_cm_init_reason,
5783 tvb, pos, length, ENC_BIG_ENDIAN);
5785 else
5787 expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5789 break;
5790 case TLV_SW_UPG_SRVR_IPV6:
5791 if (length == 16)
5793 proto_tree_add_item (tlv_tree, hf_docsis_tlv_sw_upg_srvr_ipv6,
5794 tvb, pos, length, ENC_NA);
5796 else
5798 expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5800 break;
5801 case TLV_TFTP_PROV_CM_IPV6_ADDR:
5802 if (length == 16)
5804 proto_tree_add_item (tlv_tree, hf_docsis_tlv_tftp_prov_cm_ipv6_addr,
5805 tvb, pos, length, ENC_NA);
5807 else
5809 expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5811 break;
5812 case TLV_US_DROP_CLFY:
5813 proto_tree_add_item (tlv_tree, hf_docsis_tlv_us_drop_clfy,
5814 tvb, pos, length, ENC_NA);
5815 break;
5816 case TLV_SUBS_MGMT_IPV6_LST:
5817 proto_tree_add_item (tlv_tree, hf_docsis_tlv_subs_mgmt_ipv6_lst,
5818 tvb, pos, length, ENC_NA);
5819 break;
5820 case TLV_US_DROP_CLFY_GROUP_ID:
5821 proto_tree_add_item (tlv_tree, hf_docsis_tlv_us_drop_clfy_group_id,
5822 tvb, pos, length, ENC_NA);
5823 break;
5824 case TLV_SUBS_MGMT_CTRL_MAX_CPE_IPV6:
5825 if (length == 2)
5827 proto_tree_add_item (tlv_tree, hf_docsis_tlv_subs_mgmt_ctrl_max_cpe_ipv6,
5828 tvb, pos, length, ENC_BIG_ENDIAN);
5830 else
5832 expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5834 break;
5835 case TLV_CMTS_MC_SESS_ENC:
5836 dissect_cmts_mc_sess_enc(tvb, pinfo, tlv_tree, pos, length);
5837 break;
5838 case TLV_EM_MODE_INDICATOR:
5839 if (length == 1)
5841 proto_tree_add_item (tlv_tree, hf_docsis_tlv_em_mode_ind, tvb, pos, length, ENC_BIG_ENDIAN);
5843 else
5845 expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5847 break;
5848 case TLV_EM_ID_LIST_FOR_CM:
5849 dissect_em_id_list_for_cm(tvb, tlv_tree, pos, length);
5850 break;
5851 case TLV_FDX_TG_ASSIGNMENT:
5852 dissect_fdx_tg_assignment(tvb, pinfo, tlv_tree, pos, length);
5853 break;
5854 case TLV_FDX_RESET:
5855 if (length == 1)
5857 proto_tree_add_item (tlv_tree, hf_docsis_tlv_fdx_reset, tvb, pos, length, ENC_BIG_ENDIAN);
5859 else
5861 expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
5863 break;
5864 case TLV_END:
5865 break;
5866 default:
5867 dissect_unknown_tlv (tvb, pinfo, tlv_tree, pos - 2, length + 2);
5868 break;
5869 } /* switch(type) */
5871 pos = pos + length;
5872 } /* while (pos < total_len) */
5873 } /* if (tree) */
5875 return tvb_captured_length(tvb);
5878 /* Register the protocol with Wireshark */
5879 void
5880 proto_register_docsis_tlv (void)
5882 static hf_register_info hf[] = {
5883 {&hf_docsis_tlv_down_freq,
5884 {"1 Downstream Frequency", "docsis_tlv.downfreq",
5885 FT_UINT32, BASE_DEC, NULL, 0x0,
5886 NULL, HFILL}
5888 {&hf_docsis_tlv_upstream_chid,
5889 {"2 Upstream Channel ID", "docsis_tlv.upchid",
5890 FT_UINT8, BASE_DEC, NULL, 0x0,
5891 "Service Identifier", HFILL}
5893 {&hf_docsis_tlv_net_access,
5894 {"3 Network Access", "docsis_tlv.netaccess",
5895 FT_BOOLEAN, BASE_NONE, TFS (&tfs_on_off), 0x0,
5896 "Network Access TLV", HFILL}
5898 #if 0
5899 {&hf_docsis_tlv_cos,
5900 {"4 COS Encodings", "docsis_tlv.cos",
5901 FT_BYTES, BASE_NONE, NULL, 0x0,
5902 NULL, HFILL}
5904 #endif
5905 {&hf_docsis_tlv_cos_id,
5906 {".1 Class ID", "docsis_tlv.cos.id",
5907 FT_UINT8, BASE_DEC, NULL, 0x0,
5908 NULL, HFILL}
5910 {&hf_docsis_tlv_cos_sid,
5911 {".2 Service ID", "docsis_tlv.cos.sid",
5912 FT_UINT16, BASE_DEC, NULL, 0x0,
5913 NULL, HFILL}
5915 {&hf_docsis_tlv_cos_max_down,
5916 {".2 Max Downstream Rate (bps)", "docsis_tlv.cos.maxdown",
5917 FT_UINT32, BASE_DEC, NULL, 0x0,
5918 NULL, HFILL}
5920 {&hf_docsis_tlv_cos_max_up,
5921 {".3 Max Upstream Rate (bps)", "docsis_tlv.cos.maxup",
5922 FT_UINT32, BASE_DEC, NULL, 0x0,
5923 NULL, HFILL}
5925 {&hf_docsis_tlv_cos_up_chnl_pri,
5926 {".4 Upstream Channel Priority", "docsis_tlv.cos.upchnlpri",
5927 FT_UINT8, BASE_DEC, NULL, 0x0,
5928 NULL, HFILL}
5930 {&hf_docsis_tlv_cos_min_grntd_up,
5931 {".5 Guaranteed Upstream Rate", "docsis_tlv.cos.mingrntdup",
5932 FT_UINT32, BASE_DEC, NULL, 0x0,
5933 "Guaranteed Minimum Upstream Data Rate", HFILL}
5935 {&hf_docsis_tlv_cos_max_up_burst,
5936 {".6 Maximum Upstream Burst", "docsis_tlv.cos.maxupburst",
5937 FT_UINT16, BASE_DEC, NULL, 0x0,
5938 NULL, HFILL}
5940 {&hf_docsis_tlv_cos_privacy_enable,
5941 {".7 COS Privacy Enable", "docsis_tlv.cos.privacy_enable",
5942 FT_BOOLEAN, BASE_NONE, TFS (&ena_dis_tfs), 0x0,
5943 "Class of Service Privacy Enable", HFILL}
5945 #if 0
5946 {&hf_docsis_tlv_mcap,
5947 {"5 Modem Capabilities", "docsis_tlv.mcap",
5948 FT_BYTES, BASE_NONE, NULL, 0x0,
5949 NULL, HFILL}
5951 #endif
5952 {&hf_docsis_tlv_mcap_concat,
5953 {".1 Concatenation Support", "docsis_tlv.mcap.concat",
5954 FT_BOOLEAN, BASE_NONE, TFS (&tfs_on_off), 0x0,
5955 NULL, HFILL}
5957 {&hf_docsis_tlv_mcap_docs_ver,
5958 {".2 Docsis Version", "docsis_tlv.map.docsver",
5959 FT_UINT8, BASE_DEC, VALS (docs_ver_vals), 0x0,
5960 NULL, HFILL}
5962 {&hf_docsis_tlv_mcap_frag,
5963 {".3 Fragmentation Support", "docsis_tlv.mcap.frag",
5964 FT_BOOLEAN, BASE_NONE, TFS (&tfs_on_off), 0x0,
5965 NULL, HFILL}
5967 {&hf_docsis_tlv_mcap_phs,
5968 {".4 PHS Support", "docsis_tlv.mcap.phs",
5969 FT_BOOLEAN, BASE_NONE, TFS (&tfs_on_off), 0x0,
5970 NULL, HFILL}
5972 {&hf_docsis_tlv_mcap_igmp,
5973 {".5 IGMP Support", "docsis_tlv.mcap.igmp",
5974 FT_BOOLEAN, BASE_NONE, TFS (&tfs_on_off), 0x0,
5975 NULL, HFILL}
5977 {&hf_docsis_tlv_mcap_privacy,
5978 {".6 Privacy Support", "docsis_tlv.mcap.privacy",
5979 FT_BOOLEAN, BASE_NONE, TFS (&tfs_on_off), 0x0,
5980 NULL, HFILL}
5982 {&hf_docsis_tlv_mcap_down_said,
5983 {".7 # Downstream SAIDs Supported", "docsis_tlv.mcap.downsaid",
5984 FT_UINT8, BASE_DEC, NULL, 0x0,
5985 "Downstream Said Support", HFILL}
5987 {&hf_docsis_tlv_mcap_up_sid,
5988 {".8 # Upstream Service Flows Supported", "docsis_tlv.mcap.upsid",
5989 FT_UINT8, BASE_DEC, NULL, 0x0,
5990 NULL, HFILL}
5992 {&hf_docsis_tlv_mcap_8021P_filter,
5993 {".9 802.1P Filtering Support", "docsis_tlv.mcap.dot1pfiltering",
5994 FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x80,
5995 NULL, HFILL}
5997 {&hf_docsis_tlv_mcap_8021Q_filter,
5998 {".9 802.1Q Filtering Support", "docsis_tlv.mcap.dot1qfilt",
5999 FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x40,
6000 NULL, HFILL}
6002 {&hf_docsis_tlv_mcap_xmit_eq_taps_per_sym,
6003 {".10 Xmit Equalizer Taps/Sym", "docsis_tlv.mcap.tapspersym",
6004 FT_UINT8, BASE_DEC, NULL, 0x0,
6005 "Transmit Equalizer Taps per Symbol", HFILL}
6007 {&hf_docsis_tlv_mcap_xmit_eq_taps,
6008 {".11 # Xmit Equalizer Taps", "docsis_tlv.mcap.numtaps",
6009 FT_UINT8, BASE_DEC, NULL, 0x0,
6010 "Number of Transmit Equalizer Taps", HFILL}
6012 {&hf_docsis_tlv_mcap_dcc,
6013 {".12 DCC Support", "docsis_tlv.mcap.dcc",
6014 FT_BOOLEAN, BASE_NONE, TFS (&tfs_on_off), 0x0,
6015 NULL, HFILL}
6017 {&hf_docsis_tlv_mcap_ip_filters,
6018 {".13 IP Filters Support","docsis_tlv.mcap.ipfilters",
6019 FT_UINT16, BASE_DEC, NULL, 0x0,
6020 NULL, HFILL}
6022 {&hf_docsis_tlv_mcap_llc_filters,
6023 {".14 LLC Filters Support","docsis_tlv.mcap.llcfilters",
6024 FT_UINT16, BASE_DEC, NULL, 0x0,
6025 NULL, HFILL}
6027 {&hf_docsis_tlv_mcap_exp_unicast_sid,
6028 {".15 Expanded Unicast SID Space","docsis_tlv.mcap.exucsid",
6029 FT_BOOLEAN, BASE_NONE, TFS (&tfs_on_off), 0x0,
6030 NULL, HFILL}
6032 {&hf_docsis_tlv_mcap_rnghoff_cm,
6033 {".16 Ranging Hold-Off (CM)","docsis_tlv.mcap.rnghoffcm",
6034 FT_BOOLEAN, 32, TFS(&tfs_on_off), 0x00000001,
6035 NULL, HFILL}
6037 {&hf_docsis_tlv_mcap_rnghoff_erouter,
6038 {".16 Ranging Hold-Off (ePS or eRouter)",
6039 "docsis_tlv.mcap.rnghofferouter",
6040 FT_BOOLEAN, 32, TFS(&tfs_on_off), 0x00000002,
6041 NULL, HFILL}
6043 {&hf_docsis_tlv_mcap_rnghoff_emta,
6044 {".16 Ranging Hold-Off (eMTA or EDVA)",
6045 "docsis_tlv.mcap.rnghoffemta",
6046 FT_BOOLEAN, 32, TFS(&tfs_on_off), 0x00000004,
6047 NULL, HFILL}
6049 {&hf_docsis_tlv_mcap_rnghoff_estb,
6050 {".16 Ranging Hold-Off (DSG/eSTB)",
6051 "docsis_tlv.mcap.rnghoffestb",
6052 FT_BOOLEAN, 32, TFS(&tfs_on_off), 0x00000008,
6053 NULL, HFILL}
6055 {&hf_docsis_tlv_mcap_l2vpn,
6056 {".17 L2VPN Capability","docsis_tlv.mcap.l2vpn",
6057 FT_BYTES, BASE_NONE, NULL, 0x0,
6058 NULL, HFILL}
6060 {&hf_docsis_tlv_mcap_l2vpn_esafe,
6061 {".18 L2VPN eSAFE Host Capability","docsis_tlv.mcap.l2vpnesafe",
6062 FT_BYTES, BASE_NONE, NULL, 0x0,
6063 NULL, HFILL}
6065 {&hf_docsis_tlv_mcap_dut_filtering,
6066 {".19 Downstream Unencrypted Traffic (DUT) Filtering",
6067 "docsis_tlv.mcap.dut",
6068 FT_BYTES, BASE_NONE, NULL, 0x0,
6069 NULL, HFILL}
6071 {&hf_docsis_tlv_mcap_us_freq_range,
6072 {".20 Upstream Frequency Range Support",
6073 "docsis_tlv.mcap.usfreqrng",
6074 FT_UINT8, BASE_DEC, VALS (docsis_freq_rng_vals), 0x0,
6075 NULL, HFILL}
6077 {&hf_docsis_tlv_mcap_us_srate_160,
6078 {".21 Upstream Symbol Rate 160ksps supported",
6079 "docsis_tlv.mcap.srate160",
6080 FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x01,
6081 NULL, HFILL}
6083 {&hf_docsis_tlv_mcap_us_srate_320,
6084 {".21 Upstream Symbol Rate 320ksps supported",
6085 "docsis_tlv.mcap.srate320",
6086 FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x02,
6087 NULL, HFILL}
6089 {&hf_docsis_tlv_mcap_us_srate_640,
6090 {".21 Upstream Symbol Rate 640ksps supported",
6091 "docsis_tlv.mcap.srate640",
6092 FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x04,
6093 NULL, HFILL}
6095 {&hf_docsis_tlv_mcap_us_srate_1280,
6096 {".21 Upstream Symbol Rate 1280ksps supported",
6097 "docsis_tlv.mcap.srate1280",
6098 FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x08,
6099 NULL, HFILL}
6101 {&hf_docsis_tlv_mcap_us_srate_2560,
6102 {".21 Upstream Symbol Rate 2560ksps supported",
6103 "docsis_tlv.mcap.srate2560",
6104 FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x10,
6105 NULL, HFILL}
6107 {&hf_docsis_tlv_mcap_us_srate_5120,
6108 {".21 Upstream Symbol Rate 5120ksps supported",
6109 "docsis_tlv.mcap.srate5120",
6110 FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x20,
6111 NULL, HFILL}
6113 {&hf_docsis_tlv_mcap_sac,
6114 {".22 Selectable Active Code Mode 2 Support","docsis_tlv.mcap.sac",
6115 FT_BOOLEAN, BASE_NONE, TFS (&tfs_on_off), 0x0,
6116 NULL, HFILL}
6118 {&hf_docsis_tlv_mcap_code_hop_mode2,
6119 {".23 Code Hopping Mode 2 Support","docsis_tlv.mcap.codehopm2",
6120 FT_BOOLEAN, BASE_NONE, TFS (&tfs_on_off), 0x0,
6121 NULL, HFILL}
6123 {&hf_docsis_tlv_mcap_mtc,
6124 {".24 Multiple Transmit Channel Support","docsis_tlv.mcap.mtc",
6125 FT_UINT8, BASE_DEC, NULL, 0x0,
6126 NULL, HFILL}
6128 {&hf_docsis_tlv_mcap_512_msps_utc,
6129 {".25 5.12 Msps Upstream Transmit Channel Support",
6130 "docsis_tlv.mcap.512mspsutc",
6131 FT_UINT8, BASE_DEC, NULL, 0x0,
6132 NULL, HFILL}
6134 {&hf_docsis_tlv_mcap_256_msps_utc,
6135 {".26 2.56 Msps Upstream Transmit Channel Support",
6136 "docsis_tlv.mcap.256mspsutc",
6137 FT_UINT8, BASE_DEC, NULL, 0x0,
6138 NULL, HFILL}
6140 {&hf_docsis_tlv_mcap_total_sid_cluster,
6141 {".27 Total SID Cluster Support","docsis_tlv.mcap.totalsidcl",
6142 FT_UINT8, BASE_DEC, NULL, 0x0,
6143 NULL, HFILL}
6145 {&hf_docsis_tlv_mcap_sid_per_sf,
6146 {".28 SID Clusters per Service Flow Support",
6147 "docsis_tlv.mcap.sidpersf",
6148 FT_UINT8, BASE_DEC, NULL, 0x0,
6149 NULL, HFILL}
6151 {&hf_docsis_tlv_mcap_mrc,
6152 {".29 Multiple Receive Channel Support","docsis_tlv.mcap.mrc",
6153 FT_UINT8, BASE_DEC, NULL, 0x0,
6154 NULL, HFILL}
6156 {&hf_docsis_tlv_mcap_total_dsid,
6157 {".30 Total Downstream Service ID (DSID) Support",
6158 "docsis_tlv.mcap.totaldsid",
6159 FT_UINT8, BASE_DEC, NULL, 0x0,
6160 NULL, HFILL}
6162 {&hf_docsis_tlv_mcap_reseq_dsid,
6163 {".31 Resequencing Downstream Service ID (DSID) Support",
6164 "docsis_tlv.mcap.reseqdsid",
6165 FT_UINT8, BASE_DEC, NULL, 0x0,
6166 NULL, HFILL}
6168 {&hf_docsis_tlv_mcap_mc_dsid,
6169 {".32 Multicast Downstream Service ID (DSID) Support",
6170 "docsis_tlv.mcap.mcdsid",
6171 FT_UINT8, BASE_DEC, NULL, 0x0,
6172 NULL, HFILL}
6174 {&hf_docsis_tlv_mcap_mc_dsid_fwd,
6175 {".33 Multicast DSID Forwarding","docsis_tlv.mcap.mcdsidfwd",
6176 FT_UINT8, BASE_DEC, VALS (mc_dsid_fwd_vals), 0x0,
6177 NULL, HFILL}
6179 {&hf_docsis_tlv_mcap_fctype_fwd,
6180 {".34 Frame Control Type Forwarding Capability",
6181 "docsis_tlv.mcap.fctypefwd",
6182 FT_UINT8, BASE_DEC, VALS (fctype_fwd_vals), 0x0,
6183 NULL, HFILL}
6185 {&hf_docsis_tlv_mcap_dpv_path,
6186 {".35 DPV Capability (per Path)","docsis_tlv.mcap.dpvpath",
6187 FT_UINT8, BASE_DEC, NULL, 0x1,
6188 NULL, HFILL}
6190 {&hf_docsis_tlv_mcap_dpv_packet,
6191 {".35 DPV Capability (per Packet)","docsis_tlv.mcap.dpvpacket",
6192 FT_UINT8, BASE_DEC, NULL, 0x2,
6193 NULL, HFILL}
6195 {&hf_docsis_tlv_mcap_ugs,
6196 {".36 Unsolicited Grant Service Support","docsis_tlv.mcap.ugs",
6197 FT_UINT8, BASE_DEC, NULL, 0x0,
6198 NULL, HFILL}
6200 {&hf_docsis_tlv_mcap_map_ucd,
6201 {".37 MAP and UCD Receipt Support","docsis_tlv.mcap.mapucd",
6202 FT_BOOLEAN, BASE_NONE, TFS (&tfs_on_off), 0x0,
6203 NULL, HFILL}
6205 {&hf_docsis_tlv_mcap_udc,
6206 {".38 Upstream Drop Classifier Support","docsis_tlv.mcap.udc",
6207 FT_UINT16, BASE_DEC, NULL, 0x0,
6208 NULL, HFILL}
6210 {&hf_docsis_tlv_mcap_ipv6,
6211 {".39 IPv6 Support","docsis_tlv.mcap.ipv6",
6212 FT_BOOLEAN, BASE_NONE, TFS (&tfs_on_off), 0x0,
6213 NULL, HFILL}
6215 {&hf_docsis_tlv_mcap_ext_us_trans_power,
6216 {".40 Extended Upstream Transmit Power Capability",
6217 "docsis_tlv.mcap.extustrpwr",
6218 FT_UINT8, BASE_DEC, NULL, 0x0,
6219 NULL, HFILL}
6221 {&hf_docsis_tlv_mcap_em,
6222 {".44 Energy Management Capabilities", "docsis_tlv.mcap.em",
6223 FT_UINT32, BASE_HEX, NULL, 0x0,
6224 NULL, HFILL}
6226 {&hf_docsis_tlv_mcap_em_1x1,
6227 {"Energy Management 1x1 Feature",
6228 "docsis_tlv.mcap.em.1x1",
6229 FT_BOOLEAN, 32, TFS (&sup_unsup_tfs), 0x1,
6230 NULL, HFILL}
6232 {&hf_docsis_tlv_mcap_em_light_sleep,
6233 {"DOCSIS Light Sleep Mode",
6234 "docsis_tlv.mcap.em.light_sleep",
6235 FT_BOOLEAN, 32, TFS (&sup_unsup_tfs), 0x2,
6236 NULL, HFILL}
6238 {&hf_docsis_tlv_mcap_cm_status_ack,
6239 {".46 CM-STATUS_ACK",
6240 "docsis_tlv.mcap.cm_status_ack",
6241 FT_UINT8, BASE_DEC, VALS(sup_unsup_vals), 0x0,
6242 NULL, HFILL}
6244 {&hf_docsis_tlv_mcap_em_pref,
6245 {".47 Energy Management Preference",
6246 "docsis_tlv.mcap.em_pref",
6247 FT_UINT32, BASE_HEX, NULL, 0x0,
6248 NULL, HFILL}
6250 {&hf_docsis_tlv_mcap_em_pref_1x1,
6251 {"Energy Management 1x1 Feature",
6252 "docsis_tlv.mcap.em_pref.1x1",
6253 FT_BOOLEAN, 32, NULL, 0x1,
6254 NULL, HFILL}
6256 {&hf_docsis_tlv_mcap_em_pref_dls,
6257 {"DOCSIS Light Sleep Mode",
6258 "docsis_tlv.mcap.em_pref.dls",
6259 FT_BOOLEAN, 32, NULL, 0x2,
6260 NULL, HFILL}
6262 {&hf_docsis_tlv_mcap_ext_pkt_len_sup_cap,
6263 {".48 Extended Packet Length Support Capability",
6264 "docsis_tlv.mcap.ext_pkt_len_sup_cap",
6265 FT_UINT16, BASE_DEC, NULL, 0x0,
6266 NULL, HFILL}
6268 {&hf_docsis_tlv_mcap_ofdm_mult_recv_chan_sup,
6269 {".49 OFDM Multiple Receive Channel Support",
6270 "docsis_tlv.mcap.ofdm_mult_recv_chan_sup",
6271 FT_UINT8, BASE_DEC, NULL, 0x0,
6272 NULL, HFILL}
6274 {&hf_docsis_tlv_mcap_ofdma_mult_trans_chan_sup,
6275 {".50 OFDMA Multiple Transmit Channel Support",
6276 "docsis_tlv.mcap.ofdma_mult_trans_chan_sup",
6277 FT_UINT8, BASE_DEC, NULL, 0x0,
6278 NULL, HFILL}
6280 {&hf_docsis_tlv_mcap_down_ofdm_prof_sup,
6281 {".51 Downstream OFDM Profile Support",
6282 "docsis_tlv.mcap.down_ofdm_prof_sup",
6283 FT_UINT8, BASE_DEC, NULL, 0x0,
6284 NULL, HFILL}
6286 {&hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup,
6287 {".52 Downstream OFDM channel subcarrier QAM modulation support",
6288 "docsis_tlv.mcap.down_ofdm_chan_subc_qam_mod_sup",
6289 FT_UINT16, BASE_HEX, NULL, 0x0,
6290 NULL, HFILL}
6292 {&hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_reserved,
6293 {"Reserved",
6294 "docsis_tlv.mcap.down_ofdm_chan_subc_qam_mod_sup.reserved",
6295 FT_BOOLEAN, 16, NULL, 0x802B,
6296 NULL, HFILL}
6298 {&hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_qpsk,
6299 {"QPSK",
6300 "docsis_tlv.mcap.down_ofdm_chan_subc_qam_mod_sup.qpsk",
6301 FT_BOOLEAN, 16, NULL, 0x0004,
6302 NULL, HFILL}
6304 {&hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_16qam,
6305 {"16-QAM",
6306 "docsis_tlv.mcap.down_ofdm_chan_subc_qam_mod_sup.16qam",
6307 FT_BOOLEAN, 16, NULL, 0x0010,
6308 NULL, HFILL}
6310 {&hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_64qam,
6311 {"64-QAM",
6312 "docsis_tlv.mcap.down_ofdm_chan_subc_qam_mod_sup.64qam",
6313 FT_BOOLEAN, 16, NULL, 0x0040,
6314 NULL, HFILL}
6316 {&hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_128qam,
6317 {"128-QAM",
6318 "docsis_tlv.mcap.down_ofdm_chan_subc_qam_mod_sup.128qam",
6319 FT_BOOLEAN, 16, NULL, 0x0080,
6320 NULL, HFILL}
6322 {&hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_256qam,
6323 {"256-QAM",
6324 "docsis_tlv.mcap.down_ofdm_chan_subc_qam_mod_sup.256qam",
6325 FT_BOOLEAN, 16, NULL, 0x0100,
6326 NULL, HFILL}
6328 {&hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_512qam,
6329 {"512-QAM",
6330 "docsis_tlv.mcap.down_ofdm_chan_subc_qam_mod_sup.512qam",
6331 FT_BOOLEAN, 16, NULL, 0x0200,
6332 NULL, HFILL}
6334 {&hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_1024qam,
6335 {"1024-QAM",
6336 "docsis_tlv.mcap.down_ofdm_chan_subc_qam_mod_sup.1024qam",
6337 FT_BOOLEAN, 16, NULL, 0x0400,
6338 NULL, HFILL}
6340 {&hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_2048qam,
6341 {"2048-QAM",
6342 "docsis_tlv.mcap.down_ofdm_chan_subc_qam_mod_sup.2048qam",
6343 FT_BOOLEAN, 16, NULL, 0x0800,
6344 NULL, HFILL}
6346 {&hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_4096qam,
6347 {"4096-QAM",
6348 "docsis_tlv.mcap.down_ofdm_chan_subc_qam_mod_sup.4096qam",
6349 FT_BOOLEAN, 16, NULL, 0x1000,
6350 NULL, HFILL}
6352 {&hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_8192qam,
6353 {"8192-QAM",
6354 "docsis_tlv.mcap.down_ofdm_chan_subc_qam_mod_sup.8192qam",
6355 FT_BOOLEAN, 16, NULL, 0x2000,
6356 NULL, HFILL}
6358 {&hf_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup_16384qam,
6359 {"16384-QAM",
6360 "docsis_tlv.mcap.down_ofdm_chan_subc_qam_mod_sup.16384qam",
6361 FT_BOOLEAN, 16, NULL, 0x4000,
6362 NULL, HFILL}
6364 {&hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup,
6365 {".53 Upstream OFDMA channel subcarrier QAM modulation support",
6366 "docsis_tlv.mcap.up_ofdma_chan_subc_qam_mod_sup",
6367 FT_UINT16, BASE_HEX, NULL, 0x0,
6368 NULL, HFILL}
6370 {&hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_reserved,
6371 {"Reserved",
6372 "docsis_tlv.mcap.up_ofdma_chan_subc_qam_mod_sup.reserved",
6373 FT_BOOLEAN, 16, NULL, 0x8003,
6374 NULL, HFILL}
6376 {&hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_qpsk,
6377 {"QPSK",
6378 "docsis_tlv.mcap.up_ofdma_chan_subc_qam_mod_sup.qpsk",
6379 FT_BOOLEAN, 16, NULL, 0x0004,
6380 NULL, HFILL}
6382 {&hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_8qam,
6383 {"8-QAM",
6384 "docsis_tlv.mcap.up_ofdma_chan_subc_qam_mod_sup.8qam",
6385 FT_BOOLEAN, 16, NULL, 0x0008,
6386 NULL, HFILL}
6388 {&hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_16qam,
6389 {"16-QAM",
6390 "docsis_tlv.mcap.up_ofdma_chan_subc_qam_mod_sup.16qam",
6391 FT_BOOLEAN, 16, NULL, 0x0010,
6392 NULL, HFILL}
6394 {&hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_32qam,
6395 {"32-QAM",
6396 "docsis_tlv.mcap.up_ofdma_chan_subc_qam_mod_sup.32qam",
6397 FT_BOOLEAN, 16, NULL, 0x0020,
6398 NULL, HFILL}
6400 {&hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_64qam,
6401 {"64-QAM",
6402 "docsis_tlv.mcap.up_ofdma_chan_subc_qam_mod_sup.64qam",
6403 FT_BOOLEAN, 16, NULL, 0x0040,
6404 NULL, HFILL}
6406 {&hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_128qam,
6407 {"128-QAM",
6408 "docsis_tlv.mcap.up_ofdma_chan_subc_qam_mod_sup.128qam",
6409 FT_BOOLEAN, 16, NULL, 0x0080,
6410 NULL, HFILL}
6412 {&hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_256qam,
6413 {"256-QAM",
6414 "docsis_tlv.mcap.up_ofdma_chan_subc_qam_mod_sup.256qam",
6415 FT_BOOLEAN, 16, NULL, 0x0100,
6416 NULL, HFILL}
6418 {&hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_512qam,
6419 {"512-QAM",
6420 "docsis_tlv.mcap.up_ofdma_chan_subc_qam_mod_sup.512qam",
6421 FT_BOOLEAN, 16, NULL, 0x0200,
6422 NULL, HFILL}
6424 {&hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_1024qam,
6425 {"1024-QAM",
6426 "docsis_tlv.mcap.up_ofdma_chan_subc_qam_mod_sup.1024qam",
6427 FT_BOOLEAN, 16, NULL, 0x0400,
6428 NULL, HFILL}
6430 {&hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_2048qam,
6431 {"2048-QAM",
6432 "docsis_tlv.mcap.up_ofdma_chan_subc_qam_mod_sup.2048qam",
6433 FT_BOOLEAN, 16, NULL, 0x0800,
6434 NULL, HFILL}
6436 {&hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_4096qam,
6437 {"4096-QAM",
6438 "docsis_tlv.mcap.up_ofdma_chan_subc_qam_mod_sup.4096qam",
6439 FT_BOOLEAN, 16, NULL, 0x1000,
6440 NULL, HFILL}
6442 {&hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_8192qam,
6443 {"8192-QAM",
6444 "docsis_tlv.mcap.up_ofdma_chan_subc_qam_mod_sup.8192qam",
6445 FT_BOOLEAN, 16, NULL, 0x2000,
6446 NULL, HFILL}
6448 {&hf_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup_16384qam,
6449 {"16384-QAM",
6450 "docsis_tlv.mcap.up_ofdma_chan_subc_qam_mod_sup.16384qam",
6451 FT_BOOLEAN, 16, NULL, 0x4000,
6452 NULL, HFILL}
6454 {&hf_docsis_tlv_mcap_down_lower_band_edge_conf,
6455 {".54 Downstream Lower Band Edge Configuration",
6456 "docsis_tlv.mcap.down_lower_band_edge_conf",
6457 FT_UINT8, BASE_HEX, NULL, 0x0,
6458 NULL, HFILL}
6460 {&hf_docsis_tlv_mcap_down_lower_band_edge_conf_108,
6461 {"Downstream Frequency Range starting from 108 MHz",
6462 "docsis_tlv.mcap.down_lower_band_edge_conf.108mhz",
6463 FT_BOOLEAN, 8, NULL, 0x01,
6464 NULL, HFILL}
6466 {&hf_docsis_tlv_mcap_down_lower_band_edge_conf_258,
6467 {"Downstream Frequency Range starting from 258 MHz",
6468 "docsis_tlv.mcap.down_lower_band_edge_conf.258mhz",
6469 FT_BOOLEAN, 8, NULL, 0x02,
6470 NULL, HFILL}
6472 {&hf_docsis_tlv_mcap_down_upper_band_edge_conf,
6473 {".55 Downstream Upper Band Edge Configuration",
6474 "docsis_tlv.mcap.down_upper_band_edge_conf",
6475 FT_UINT8, BASE_HEX, NULL, 0x0,
6476 NULL, HFILL}
6478 {&hf_docsis_tlv_mcap_down_upper_band_edge_conf_1218,
6479 {"Downstream Frequency Range up to 1218 MHz",
6480 "docsis_tlv.mcap.down_upper_band_edge_conf.1218mhz",
6481 FT_BOOLEAN, 8, NULL, 0x01,
6482 NULL, HFILL}
6484 {&hf_docsis_tlv_mcap_down_upper_band_edge_conf_1794,
6485 {"Downstream Frequency Range up to 1794 MHz",
6486 "docsis_tlv.mcap.down_upper_band_edge_conf.1794mhz",
6487 FT_BOOLEAN, 8, NULL, 0x02,
6488 NULL, HFILL}
6490 {&hf_docsis_tlv_mcap_down_upper_band_edge_conf_1002,
6491 {"Downstream Frequency Range up to 1002 MHz",
6492 "docsis_tlv.mcap.down_upper_band_edge_conf.1002mhz",
6493 FT_BOOLEAN, 8, NULL, 0x04,
6494 NULL, HFILL}
6496 {&hf_docsis_tlv_mcap_dipl_up_upper_band_edge_conf,
6497 {".56 Diplexer Upstream Upper Band Edge Configuration",
6498 "docsis_tlv.mcap.dipl_up_upper_band_edge_conf",
6499 FT_UINT8, BASE_DEC, VALS(dipl_up_upper_band_edge_conf_vals), 0x0,
6500 NULL, HFILL}
6502 {&hf_docsis_tlv_mcap_docsis_time_prot_mode,
6503 {".57 DOCSIS Time Protocol Mode",
6504 "docsis_tlv.mcap.docsis_time_prot_mode",
6505 FT_UINT8, BASE_DEC, VALS(docsis_time_prot_mode_vals), 0x0,
6506 NULL, HFILL}
6508 {&hf_docsis_tlv_mcap_docsis_time_prot_perf_sup,
6509 {".58 DOCSIS Time Protocol Performance Support",
6510 "docsis_tlv.mcap.docsis_time_prot_perf_sup",
6511 FT_UINT8, BASE_DEC, VALS(docsis_time_prot_perf_sup_vals), 0x0,
6512 NULL, HFILL}
6514 {&hf_docsis_tlv_mcap_pmax,
6515 {".59 Pmax",
6516 "docsis_tlv.mcap.pmax",
6517 FT_UINT16, BASE_CUSTOM, CF_FUNC(fourth_dbmv), 0x0,
6518 NULL, HFILL}
6520 {&hf_docsis_tlv_mcap_dipl_down_lower_band_edge,
6521 {".60 Diplexer Downstream Lower Band Edge",
6522 "docsis_tlv.mcap.dipl_down_lower_band_edge",
6523 FT_UINT8, BASE_HEX, NULL, 0x0,
6524 NULL, HFILL}
6526 {&hf_docsis_tlv_mcap_dipl_down_lower_band_edge_108,
6527 {"Downstream Frequency Range starting from 108 MHz",
6528 "docsis_tlv.mcap.dipl_down_lower_band_edge.108mhz",
6529 FT_BOOLEAN, 8, NULL, 0x01,
6530 NULL, HFILL}
6532 {&hf_docsis_tlv_mcap_dipl_down_lower_band_edge_258,
6533 {"Downstream Frequency Range starting from 258 MHz",
6534 "docsis_tlv.mcap.dipl_down_lower_band_edge.258mhz",
6535 FT_BOOLEAN, 8, NULL, 0x02,
6536 NULL, HFILL}
6538 {&hf_docsis_tlv_mcap_dipl_down_upper_band_edge,
6539 {".61 Diplexer Downstream Upper Band Edge",
6540 "docsis_tlv.mcap.dipl_down_upper_band_edge",
6541 FT_UINT8, BASE_HEX, NULL, 0x0,
6542 NULL, HFILL}
6544 {&hf_docsis_tlv_mcap_dipl_down_upper_band_edge_1218,
6545 {"Downstream Frequency Range up to 1218 MHz",
6546 "docsis_tlv.mcap.dipl_down_upper_band_edge.1218mhz",
6547 FT_BOOLEAN, 8, NULL, 0x01,
6548 NULL, HFILL}
6550 {&hf_docsis_tlv_mcap_dipl_down_upper_band_edge_1794,
6551 {"Downstream Frequency Range up to 1794 MHz",
6552 "docsis_tlv.mcap.dipl_down_upper_band_edge.1794mhz",
6553 FT_BOOLEAN, 8, NULL, 0x02,
6554 NULL, HFILL}
6556 {&hf_docsis_tlv_mcap_dipl_down_upper_band_edge_1002,
6557 {"Downstream Frequency Range up to 1002 MHz",
6558 "docsis_tlv.mcap.dipl_down_upper_band_edge.1002mhz",
6559 FT_BOOLEAN, 8, NULL, 0x04,
6560 NULL, HFILL}
6562 {&hf_docsis_tlv_mcap_dipl_up_upper_band_edge,
6563 {".62 Diplexer Upstream Upper Band Edge",
6564 "docsis_tlv.mcap.dipl_up_upper_band_edge",
6565 FT_UINT8, BASE_HEX, NULL, 0x0,
6566 NULL, HFILL}
6568 {&hf_docsis_tlv_mcap_dipl_up_upper_band_edge_42,
6569 {"Upstream Frequency Range up to 42 MHz",
6570 "docsis_tlv.mcap.dipl_up_upper_band_edge.42mhz",
6571 FT_BOOLEAN, 8, NULL, 0x01,
6572 NULL, HFILL}
6574 {&hf_docsis_tlv_mcap_dipl_up_upper_band_edge_65,
6575 {"Upstream Frequency Range up to 65 MHz",
6576 "docsis_tlv.mcap.dipl_up_upper_band_edge.65mhz",
6577 FT_BOOLEAN, 8, NULL, 0x02,
6578 NULL, HFILL}
6580 {&hf_docsis_tlv_mcap_dipl_up_upper_band_edge_85,
6581 {"Upstream Frequency Range up to 85 MHz",
6582 "docsis_tlv.mcap.dipl_up_upper_band_edge.85mhz",
6583 FT_BOOLEAN, 8, NULL, 0x04,
6584 NULL, HFILL}
6586 {&hf_docsis_tlv_mcap_dipl_up_upper_band_edge_117,
6587 {"Upstream Frequency Range up to 117 MHz",
6588 "docsis_tlv.mcap.dipl_up_upper_band_edge.117mhz",
6589 FT_BOOLEAN, 8, NULL, 0x08,
6590 NULL, HFILL}
6592 {&hf_docsis_tlv_mcap_dipl_up_upper_band_edge_204,
6593 {"Upstream Frequency Range up to 204 MHz",
6594 "docsis_tlv.mcap.dipl_up_upper_band_edge.204mhz",
6595 FT_BOOLEAN, 8, NULL, 0x10,
6596 NULL, HFILL}
6598 {&hf_docsis_tlv_mcap_advanced_band_plan,
6599 {".63 Advanced Band Plan",
6600 "docsis_tlv.mcap.advanced_band_plan",
6601 FT_UINT8, BASE_HEX, NULL, 0x0,
6602 NULL, HFILL}
6604 {&hf_docsis_tlv_mcap_advanced_band_plan_fdx_l,
6605 {"FDX-L support",
6606 "docsis_tlv.mcap.advanced_band_plan.fdx_l",
6607 FT_BOOLEAN, 8, NULL, 0x01,
6608 NULL, HFILL}
6610 {&hf_docsis_tlv_mcap_advanced_band_plan_fdx,
6611 {"FDX support",
6612 "docsis_tlv.mcap.advanced_band_plan.fdx",
6613 FT_BOOLEAN, 8, NULL, 0x02,
6614 NULL, HFILL}
6616 {&hf_docsis_tlv_mcap_advanced_band_plan_fdd,
6617 {"FDD support",
6618 "docsis_tlv.mcap.advanced_band_plan.fdd",
6619 FT_BOOLEAN, 8, NULL, 0x04,
6620 NULL, HFILL}
6622 {&hf_docsis_tlv_mcap_advanced_band_plan_reserved,
6623 {"Reserved",
6624 "docsis_tlv.mcap.advanced_band_plan.reserved",
6625 FT_BOOLEAN, 8, NULL, 0xF8,
6626 NULL, HFILL}
6628 {&hf_docsis_tlv_mcap_ext_sf_cluster_assign_sup,
6629 {".74 Extended Service Flow SID Cluster Assignments Support",
6630 "docsis_tlv.mcap.ext_sf_cluster_assign_sup",
6631 FT_UINT8, BASE_DEC, VALS(docsis_mcap_ext_sf_cluster_assign_sup_vals), 0x0,
6632 "The ability of CM to handle TLV 89", HFILL}
6634 {&hf_docsis_tlv_mcap_low_latency_sup,
6635 {".76 Low Latency Support",
6636 "docsis_tlv.mcap.low_latency_sup",
6637 FT_UINT8, BASE_DEC, NULL, 0x0,
6638 NULL, HFILL}
6640 {&hf_docsis_tlv_mcap_adv_down_lower_band_edge_conf,
6641 {".79 Advanced Downstream Lower Band Edge Configuration",
6642 "docsis_tlv.mcap.adv_down_lower_band_edge_conf",
6643 FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_mhz), 0x0,
6644 NULL, HFILL}
6646 {&hf_docsis_tlv_mcap_adv_down_upper_band_edge_conf,
6647 {".80 Advanced Downstream Upper Band Edge Configuration",
6648 "docsis_tlv.mcap.adv_down_upper_band_edge_conf",
6649 FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_mhz), 0x0,
6650 NULL, HFILL}
6652 {&hf_docsis_tlv_mcap_adv_up_upper_band_edge_conf,
6653 {".81 Advanced Upstream Upper Band Edge Configuration",
6654 "docsis_tlv.mcap.adv_up_upper_band_edge_conf",
6655 FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_mhz), 0x0,
6656 NULL, HFILL}
6658 {&hf_docsis_tlv_mcap_adv_down_lower_band_edge_option,
6659 {"Advanced Diplexer Downstream Lower Band Edge Option",
6660 "docsis_tlv.mcap.adv_down_lower_band_edge_option",
6661 FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_mhz), 0x0,
6662 NULL, HFILL}
6664 {&hf_docsis_tlv_mcap_adv_down_upper_band_edge_option,
6665 {"Advanced Diplexer Downstream Upper Band Edge Option",
6666 "docsis_tlv.mcap.adv_down_upper_band_edge_option",
6667 FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_mhz), 0x0,
6668 NULL, HFILL}
6670 {&hf_docsis_tlv_mcap_adv_up_upper_band_edge_option,
6671 {"Advanced Diplexer Upstream Upper Band Edge Option",
6672 "docsis_tlv.mcap.adv_up_upper_band_edge_option",
6673 FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_mhz), 0x0,
6674 NULL, HFILL}
6676 {&hf_docsis_tlv_mcap_extended_power_options,
6677 {".85 Extended Power Options",
6678 "docsis_tlv.mcap.extended_power_options",
6679 FT_UINT8, BASE_DEC, VALS(extended_power_options_vals), 0x0,
6680 NULL, HFILL}
6682 {&hf_docsis_tlv_cm_mic,
6683 {"6 CM MIC", "docsis_tlv.cmmic",
6684 FT_BYTES, BASE_NONE, NULL, 0x0,
6685 "Cable Modem Message Integrity Check", HFILL}
6687 {&hf_docsis_tlv_cmts_mic,
6688 {"7 CMTS MIC", "docsis_tlv.cmtsmic",
6689 FT_BYTES, BASE_NONE, NULL, 0x0,
6690 "CMTS Message Integrity Check", HFILL}
6692 {&hf_docsis_tlv_vendor_id,
6693 {"8 Vendor ID", "docsis_tlv.vendorid",
6694 FT_UINT24, BASE_OUI, NULL, 0x0,
6695 "Vendor Identifier", HFILL}
6697 {&hf_docsis_tlv_sw_file,
6698 {"9 Software Upgrade File", "docsis_tlv.sw_upg_file",
6699 FT_STRINGZ, BASE_NONE, NULL, 0x0,
6700 NULL, HFILL}
6702 {&hf_docsis_tlv_snmp_access,
6703 {"10 SNMP Write Access", "docsis_tlv.snmp_access",
6704 FT_BYTES, BASE_NONE, NULL, 0x0,
6705 NULL, HFILL}
6707 {&hf_docsis_tlv_snmp_obj,
6708 {"11 SNMP Object", "docsis_tlv.snmp_obj",
6709 FT_BYTES, BASE_NONE, NULL, 0x0,
6710 NULL, HFILL}
6712 {&hf_docsis_tlv_modem_addr,
6713 {"12 Modem IP Address", "docsis_tlv.modemaddr",
6714 FT_IPv4, BASE_NONE, NULL, 0x0,
6715 NULL, HFILL}
6717 {&hf_docsis_tlv_svc_unavail,
6718 {"13 Service Not Available Response", "docsis_tlv.svcunavail",
6719 FT_BYTES, BASE_NONE, NULL, 0x0,
6720 NULL, HFILL}
6722 {&hf_docsis_tlv_svc_unavail_classid,
6723 {"Service Not Available: (Class ID)", "docsis_tlv.svcunavail.classid",
6724 FT_UINT8, BASE_DEC, NULL, 0x0,
6725 NULL, HFILL}
6727 {&hf_docsis_tlv_svc_unavail_type,
6728 {"Service Not Available (Type)", "docsis_tlv.svcunavail.type",
6729 FT_UINT8, BASE_DEC, NULL, 0x0,
6730 NULL, HFILL}
6732 {&hf_docsis_tlv_svc_unavail_code,
6733 {"Service Not Available (Code)", "docsis_tlv.svcunavail.code",
6734 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
6735 NULL, HFILL}
6737 {&hf_docsis_tlv_cpe_ethernet,
6738 {"14 CPE Ethernet Addr", "docsis_tlv.cpe_ether",
6739 FT_ETHER, BASE_NONE, NULL, 0x0,
6740 NULL, HFILL}
6742 {&hf_docsis_tlv_bpi,
6743 {"17 Baseline Privacy Encoding", "docsis_tlv.bpi",
6744 FT_BYTES, BASE_NONE, NULL, 0x0,
6745 NULL, HFILL}
6747 {&hf_docsis_tlv_max_cpe,
6748 {"18 Max # of CPE's", "docsis_tlv.maxcpe",
6749 FT_UINT8, BASE_DEC, NULL, 0x0,
6750 "Max Number of CPE's", HFILL}
6752 {&hf_docsis_tlv_tftp_server_timestamp,
6753 {"19 TFTP Server Timestamp", "docsis_tlv.tftp_time",
6754 FT_UINT32, BASE_DEC, NULL, 0x0,
6755 NULL, HFILL}
6757 {&hf_docsis_tlv_tftp_prov_modem_address,
6758 {"20 TFTP Server Provisioned Modem Addr", "docsis_tlv.tftpmodemaddr",
6759 FT_IPv4, BASE_NONE, NULL, 0x0,
6760 NULL, HFILL}
6762 {&hf_docsis_tlv_sw_upg_srvr,
6763 {"21 Software Upgrade Server", "docsis_tlv.sw_upg_srvr",
6764 FT_IPv4, BASE_NONE, NULL, 0x0,
6765 NULL, HFILL}
6767 #if 0
6768 {&hf_docsis_tlv_upclsfr,
6769 {"22 Upstream Classifier", "docsis_tlv.upclsfr",
6770 FT_BYTES, BASE_NONE, NULL, 0x0,
6771 NULL, HFILL}
6773 {&hf_docsis_tlv_downclsfr,
6774 {"23 Downstream Classifier", "docsis_tlv.downclsfr",
6775 FT_BYTES, BASE_NONE, NULL, 0x0,
6776 NULL, HFILL}
6778 #endif
6779 {&hf_docsis_tlv_clsfr_ref,
6780 {".1 Classifier Ref", "docsis_tlv.clsfr.ref",
6781 FT_UINT8, BASE_DEC, NULL, 0x0,
6782 "Classifier Reference", HFILL}
6784 {&hf_docsis_tlv_clsfr_id,
6785 {".2 Classifier ID", "docsis_tlv.clsfr.id",
6786 FT_UINT16, BASE_DEC, NULL, 0x0,
6787 NULL, HFILL}
6789 {&hf_docsis_tlv_clsfr_sflow_ref,
6790 {".3 Service Flow Ref", "docsis_tlv.clsfr.sflowref",
6791 FT_UINT16, BASE_DEC, NULL, 0x0,
6792 "Service Flow Reference", HFILL}
6794 {&hf_docsis_tlv_clsfr_sflow_id,
6795 {".4 Service Flow ID", "docsis_tlv.clsfr.sflowid",
6796 FT_UINT16, BASE_DEC, NULL, 0x0,
6797 NULL, HFILL}
6799 {&hf_docsis_tlv_clsfr_rule_pri,
6800 {".5 Rule Priority", "docsis_tlv.clsfr.rulepri",
6801 FT_UINT8, BASE_DEC, NULL, 0x0,
6802 NULL, HFILL}
6804 {&hf_docsis_tlv_clsfr_act_state,
6805 {".6 Activation State", "docsis_tlv.clsfr.actstate",
6806 FT_BOOLEAN, BASE_NONE, TFS (&tfs_active_inactive), 0x0,
6807 "Classifier Activation State", HFILL}
6809 {&hf_docsis_tlv_clsfr_dsc_act,
6810 {".7 DSC Action", "docsis_tlv.clsfr.dscact",
6811 FT_UINT8, BASE_DEC, VALS (dsc_act_vals), 0x0,
6812 "Dynamic Service Change Action", HFILL}
6814 #if 0
6815 {&hf_docsis_tlv_clsfr_err,
6816 {".8 Error Encodings", "docsis_tlv.clsfr.err",
6817 FT_BYTES, BASE_NONE, NULL, 0x0,
6818 NULL, HFILL}
6820 #endif
6821 {&hf_docsis_tlv_clsfr_err_param,
6822 {"..1 Param Subtype", "docsis_tlv.clsfr.err.param",
6823 FT_UINT8, BASE_DEC, NULL, 0x0,
6824 "Parameter Subtype", HFILL}
6826 {&hf_docsis_tlv_clsfr_err_code,
6827 {"..2 Error Code", "docsis_tlv.clsfr.err.code",
6828 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
6829 NULL, HFILL}
6831 {&hf_docsis_tlv_clsfr_err_msg,
6832 {"..3 Error Message", "docsis_tlv.clsfr.err.msg",
6833 FT_STRINGZ, BASE_NONE, NULL, 0x0,
6834 NULL, HFILL}
6836 #if 0
6837 {&hf_docsis_tlv_ipclsfr,
6838 {".9 IP Classifier Encodings", "docsis_tlv.clsfr.ip",
6839 FT_BYTES, BASE_NONE, NULL, 0x0,
6840 NULL, HFILL}
6842 #endif
6843 {&hf_docsis_tlv_ipclsfr_tosmask,
6844 {"..1 Type Of Service Mask", "docsis_tlv.clsfr.ip.tosmask",
6845 FT_BYTES, BASE_NONE, NULL, 0x0,
6846 NULL, HFILL}
6848 {&hf_docsis_tlv_ipclsfr_ipproto,
6849 {"..2 IP Protocol", "docsis_tlv.clsfr.ip.ipproto",
6850 FT_UINT16, BASE_DEC, NULL, 0x0,
6851 NULL, HFILL}
6853 {&hf_docsis_tlv_ipclsfr_src,
6854 {"..3 Source Address", "docsis_tlv.clsfr.ip.src",
6855 FT_IPv4, BASE_NONE, NULL, 0x0,
6856 NULL, HFILL}
6858 {&hf_docsis_tlv_ipclsfr_dst,
6859 {"..4 Destination Address", "docsis_tlv.clsfr.ip.dst",
6860 FT_IPv4, BASE_NONE, NULL, 0x0,
6861 NULL, HFILL}
6863 {&hf_docsis_tlv_ipclsfr_srcmask,
6864 {"..5 Source Mask", "docsis_tlv.clsfr.ip.smask",
6865 FT_IPv4, BASE_NONE, NULL, 0x0,
6866 NULL, HFILL}
6868 {&hf_docsis_tlv_ipclsfr_dstmask,
6869 {"..6 Destination Mask", "docsis_tlv.clsfr.ip.dmask",
6870 FT_IPv4, BASE_NONE, NULL, 0x0,
6871 NULL, HFILL}
6873 {&hf_docsis_tlv_ipclsfr_sport_start,
6874 {"..7 Source Port Start", "docsis_tlv.clsfr.ip.sportstart",
6875 FT_UINT16, BASE_DEC, NULL, 0x0,
6876 "TCP/UDP Source Port Start", HFILL}
6878 {&hf_docsis_tlv_ipclsfr_sport_end,
6879 {"..8 Source Port End", "docsis_tlv.clsfr.ip.sportend",
6880 FT_UINT16, BASE_DEC, NULL, 0x0,
6881 "TCP/UDP Source Port End", HFILL}
6883 {&hf_docsis_tlv_ipclsfr_dport_start,
6884 {"..9 Dest Port Start", "docsis_tlv.clsfr.ip.dportstart",
6885 FT_UINT16, BASE_DEC, NULL, 0x0,
6886 "TCP/UDP Destination Port Start", HFILL}
6888 {&hf_docsis_tlv_ipclsfr_dport_end,
6889 {"..10 Dest Port End", "docsis_tlv.clsfr.ip.dportend",
6890 FT_UINT16, BASE_DEC, NULL, 0x0,
6891 "TCP/UDP Destination Port End", HFILL}
6893 {&hf_docsis_tlv_ip6clsfr_tc_low,
6894 {"tc-low", "docsis_tlv.clsfr.ip6.tc.low",
6895 FT_UINT8, BASE_HEX, NULL, 0x0,
6896 NULL, HFILL}
6898 {&hf_docsis_tlv_ip6clsfr_tc_high,
6899 {"tc-high", "docsis_tlv.clsfr.ip6.tc.high",
6900 FT_UINT8, BASE_HEX, NULL, 0x0,
6901 NULL, HFILL}
6903 {&hf_docsis_tlv_ip6clsfr_tc_mask,
6904 {"tc-mask", "docsis_tlv.clsfr.ip6.tc.mask",
6905 FT_UINT8, BASE_HEX, NULL, 0x0,
6906 NULL, HFILL}
6908 {&hf_docsis_tlv_ip6clsfr_flow_label,
6909 {"..2 Flow Label", "docsis_tlv.clsfr.ip6.flowlabel",
6910 FT_UINT32, BASE_HEX, NULL, 0x0,
6911 NULL, HFILL}
6913 {&hf_docsis_tlv_ip6clsfr_next_header,
6914 {"..3 Next Header", "docsis_tlv.clsfr.ip6.nextheader",
6915 FT_UINT16, BASE_DEC, VALS(next_header_vals), 0x0,
6916 NULL, HFILL}
6918 {&hf_docsis_tlv_ip6clsfr_src,
6919 {"..4 Source Address", "docsis_tlv.clsfr.ip6.src",
6920 FT_IPv6, BASE_NONE, NULL, 0x0,
6921 NULL, HFILL}
6923 {&hf_docsis_tlv_ip6clsfr_src_prefix_length,
6924 {"..5 Source Prefix Length", "docsis_tlv.clsfr.ip6.src_prefix_length",
6925 FT_UINT8, BASE_DEC, NULL, 0x0,
6926 NULL, HFILL}
6928 {&hf_docsis_tlv_ip6clsfr_dst,
6929 {"..6 Destination Address", "docsis_tlv.clsfr.ip6.dst",
6930 FT_IPv6, BASE_NONE, NULL, 0x0,
6931 NULL, HFILL}
6933 {&hf_docsis_tlv_ip6clsfr_dst_prefix_length,
6934 {"..7 Destination Prefix Length", "docsis_tlv.clsfr.ip6.dst_prefix_length",
6935 FT_UINT8, BASE_DEC, NULL, 0x0,
6936 NULL, HFILL}
6938 #if 0
6939 {&hf_docsis_tlv_ethclsfr,
6940 {".10 Ethernet Classifier Encodings", "docsis_tlv.clsfr.eth",
6941 FT_BYTES, BASE_NONE, NULL, 0x0,
6942 NULL, HFILL}
6944 #endif
6945 {&hf_docsis_tlv_ethclsfr_dmac,
6946 {"..1 Dest MAC Address", "docsis_tlv.clsfr.eth.dmac",
6947 FT_ETHER, BASE_NONE, NULL, 0x0,
6948 "Destination MAC Address", HFILL}
6950 {&hf_docsis_tlv_ethclsfr_smac,
6951 {"..2 Source MAC Address", "docsis_tlv.clsfr.eth.smac",
6952 FT_ETHER, BASE_NONE, NULL, 0x0,
6953 NULL, HFILL}
6955 {&hf_docsis_tlv_ethclsfr_ethertype,
6956 {"..3 Ethertype", "docsis_tlv.clsfr.eth.ethertype",
6957 FT_UINT24, BASE_HEX, NULL, 0x0,
6958 NULL, HFILL}
6960 #if 0
6961 {&hf_docsis_tlv_dot1qclsfr,
6962 {".11 802.1Q Classifier Encodings", "docsis_tlv.clsfr.dot1q",
6963 FT_BYTES, BASE_NONE, NULL, 0x0,
6964 NULL, HFILL}
6966 #endif
6967 {&hf_docsis_tlv_dot1qclsfr_user_pri,
6968 {"..1 User Priority", "docsis_tlv.clsfr.dot1q.userpri",
6969 FT_UINT16, BASE_HEX, NULL, 0x0,
6970 NULL, HFILL}
6972 {&hf_docsis_tlv_dot1qclsfr_vlanid,
6973 {"..2 VLAN ID", "docsis_tlv.clsfr.dot1q.ethertype",
6974 FT_UINT16, BASE_DEC, NULL, 0x0,
6975 NULL, HFILL}
6977 {&hf_docsis_tlv_dot1qclsfr_vendorspec,
6978 {"..43 Vendor Specific Encodings", "docsis_tlv.clsfr.dot1q.vendorspec",
6979 FT_BYTES, BASE_NONE, NULL, 0x0,
6980 NULL, HFILL}
6982 {&hf_docsis_tlv_clsfr_vendor_spc,
6983 {".43 Vendor Specific Encodings", "docsis_tlv.clsfr.vendor",
6984 FT_BYTES, BASE_NONE, NULL, 0x0,
6985 NULL, HFILL}
6987 #if 0
6988 {&hf_docsis_tlv_upsflow,
6989 {"24 Upstream Service Flow", "docsis_tlv.upsflow",
6990 FT_BYTES, BASE_NONE, NULL, 0x0,
6991 NULL, HFILL}
6993 {&hf_docsis_tlv_downsflow,
6994 {"25 Downstream Service Flow", "docsis_tlv.downsflow",
6995 FT_BYTES, BASE_NONE, NULL, 0x0,
6996 NULL, HFILL}
6998 #endif
6999 {&hf_docsis_tlv_sflow_ref,
7000 {".1 Service Flow Ref", "docsis_tlv.sflow.ref",
7001 FT_UINT16, BASE_DEC, NULL, 0x0,
7002 "Service Flow Reference", HFILL}
7004 {&hf_docsis_tlv_sflow_id,
7005 {".2 Service Flow ID", "docsis_tlv.sflow.id",
7006 FT_UINT32, BASE_DEC, NULL, 0x0,
7007 NULL, HFILL}
7009 {&hf_docsis_tlv_sflow_sid,
7010 {".3 Service Identifier", "docsis_tlv.sflow.sid",
7011 FT_UINT16, BASE_DEC, NULL, 0x0,
7012 NULL, HFILL}
7014 {&hf_docsis_tlv_sflow_classname,
7015 {".4 Service Class Name", "docsis_tlv.sflow.cname",
7016 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7017 NULL, HFILL}
7019 #if 0
7020 {&hf_docsis_tlv_sflow_err,
7021 {".5 Error Encodings", "docsis_tlv.sflow.err",
7022 FT_BYTES, BASE_NONE, NULL, 0x0,
7023 NULL, HFILL}
7025 #endif
7026 {&hf_docsis_tlv_sflow_err_param,
7027 {"..1 Param Subtype", "docsis_tlv.sflow.err.param",
7028 FT_UINT8, BASE_DEC, NULL, 0x0,
7029 "Parameter Subtype", HFILL}
7031 {&hf_docsis_tlv_sflow_err_code,
7032 {"..2 Error Code", "docsis_tlv.sflow.err.code",
7033 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
7034 NULL, HFILL}
7036 {&hf_docsis_tlv_sflow_err_msg,
7037 {"..3 Error Message", "docsis_tlv.sflow.err.msg",
7038 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7039 NULL, HFILL}
7041 {&hf_docsis_tlv_sflow_qos_param,
7042 {".6 QOS Parameter Set", "docsis_tlv.sflow.qos",
7043 FT_UINT8, BASE_HEX, VALS (qos_param_vals), 0x0,
7044 NULL, HFILL}
7046 {&hf_docsis_tlv_sflow_traf_pri,
7047 {".7 Traffic Priority", "docsis_tlv.sflow.trafpri",
7048 FT_UINT8, BASE_DEC, NULL, 0x0,
7049 NULL, HFILL}
7051 {&hf_docsis_tlv_sflow_max_sus,
7052 {".8 Maximum Sustained Traffic Rate (bps)", "docsis_tlv.sflow.maxtrafrate",
7053 FT_UINT32, BASE_DEC, NULL, 0x0,
7054 NULL, HFILL}
7056 {&hf_docsis_tlv_sflow_max_burst,
7057 {".9 Maximum Burst (bps)", "docsis_tlv.sflow.maxburst",
7058 FT_UINT32, BASE_DEC, NULL, 0x0,
7059 NULL, HFILL}
7061 {&hf_docsis_tlv_sflow_min_traf,
7062 {".10 Minimum Traffic Rate (bps)", "docsis_tlv.sflow.mintrafrate",
7063 FT_UINT32, BASE_DEC, NULL, 0x0,
7064 NULL, HFILL}
7066 {&hf_docsis_tlv_sflow_ass_min_pkt_size,
7067 {".11 Assumed Min Reserved Packet Size", "docsis_tlv.sflow.assumed_min_pkt_size",
7068 FT_UINT16, BASE_DEC, NULL, 0x0,
7069 "Assumed Minimum Reserved Packet Size", HFILL}
7071 {&hf_docsis_tlv_sflow_timeout_active,
7072 {".12 Timeout for Active Params (secs)", "docsis_tlv.sflow.act_timeout",
7073 FT_UINT16, BASE_DEC, NULL, 0x0,
7074 NULL, HFILL}
7076 {&hf_docsis_tlv_sflow_timeout_admitted,
7077 {".13 Timeout for Admitted Params (secs)", "docsis_tlv.sflow.adm_timeout",
7078 FT_UINT16, BASE_DEC, NULL, 0x0,
7079 NULL, HFILL}
7081 {&hf_docsis_tlv_sflow_max_down_latency,
7082 {".14 Maximum Downstream Latency (usec)", "docsis_tlv.sflow.max_down_lat",
7083 FT_UINT32, BASE_DEC, NULL, 0x0,
7084 NULL, HFILL}
7086 {&hf_docsis_tlv_sflow_max_concat_burst,
7087 {".14 Max Concat Burst", "docsis_tlv.sflow.maxconcat",
7088 FT_UINT16, BASE_DEC, NULL, 0x0,
7089 "Max Concatenated Burst", HFILL}
7091 {&hf_docsis_tlv_sflow_sched_type,
7092 {".15 Scheduling Type", "docsis_tlv.sflow.schedtype",
7093 FT_UINT32, BASE_HEX, VALS (sched_type_vals), 0x0,
7094 NULL, HFILL}
7096 {&hf_docsis_tlv_sflow_down_reseq,
7097 {".17 Downstream Resequencing", "docsis_tlv.sflow.down_reseq",
7098 FT_UINT8, BASE_DEC, VALS(down_reseq_vals), 0x0,
7099 NULL, HFILL}
7101 {&hf_docsis_tlv_sflow_reqxmit_pol,
7102 {".16 Request/Transmission Policy", "docsis_tlv.sflow.reqxmitpol",
7103 FT_UINT32, BASE_HEX, NULL, 0x0,
7104 NULL, HFILL}
7106 {&hf_docsis_tlv_sflow_reqxmit_all_cm_broadcast,
7107 {"Service flow use \"all CMs\" broadcast request opportunities", "docsis_tlv.sflow.reqxmitpol.all_cm_broadcast",
7108 FT_BOOLEAN, 32, TFS(&tfs_must_not_must), 0x00000001,
7109 NULL, HFILL}
7111 {&hf_docsis_tlv_sflow_reqxmit_priority_multicast,
7112 {"Service flow use priority multicast request opportunities", "docsis_tlv.sflow.reqxmitpol.priority_multicast",
7113 FT_BOOLEAN, 32, TFS(&tfs_must_not_must), 0x00000002,
7114 NULL, HFILL}
7116 {&hf_docsis_tlv_sflow_reqxmit_req_data_requests,
7117 {"Service flow use Request/Data opportunities for requests", "docsis_tlv.sflow.reqxmitpol.req_data_requests",
7118 FT_BOOLEAN, 32, TFS(&tfs_must_not_must), 0x00000004,
7119 NULL, HFILL}
7121 {&hf_docsis_tlv_sflow_reqxmit_req_data_data,
7122 {"Service flow use Request/Data opportunities for data", "docsis_tlv.sflow.reqxmitpol.req_data_data",
7123 FT_BOOLEAN, 32, TFS(&tfs_must_not_must), 0x00000008,
7124 NULL, HFILL}
7126 {&hf_docsis_tlv_sflow_reqxmit_piggy_back,
7127 {"Service flow use piggy back requests with data", "docsis_tlv.sflow.reqxmitpol.piggy_back",
7128 FT_BOOLEAN, 32, TFS(&tfs_must_not_must), 0x00000010,
7129 NULL, HFILL}
7131 {&hf_docsis_tlv_sflow_reqxmit_concatenate_data,
7132 {"Service flow concatenate data", "docsis_tlv.sflow.reqxmitpol.concatenate_data",
7133 FT_BOOLEAN, 32, TFS(&tfs_must_not_must), 0x00000020,
7134 NULL, HFILL}
7136 {&hf_docsis_tlv_sflow_reqxmit_fragment,
7137 {"Service flow fragment data", "docsis_tlv.sflow.reqxmitpol.fragment",
7138 FT_BOOLEAN, 32, TFS(&tfs_must_not_must), 0x00000040,
7139 NULL, HFILL}
7141 {&hf_docsis_tlv_sflow_reqxmit_suppress_payload,
7142 {"Service flow suppress payload headers", "docsis_tlv.sflow.reqxmitpol.suppress_payload",
7143 FT_BOOLEAN, 32, TFS(&tfs_must_not_must), 0x00000080,
7144 NULL, HFILL}
7146 {&hf_docsis_tlv_sflow_reqxmit_drop_packets,
7147 {"Service flow drop packets that do not fit in the UGS size", "docsis_tlv.sflow.reqxmitpol.drop_packets",
7148 FT_BOOLEAN, 32, TFS(&tfs_must_must_not), 0x00000100,
7149 NULL, HFILL}
7151 {&hf_docsis_tlv_sflow_nominal_polling,
7152 {".17 Nominal Polling Interval(usec)", "docsis_tlv.sflow.nominal_polling",
7153 FT_UINT32, BASE_DEC, NULL, 0x0,
7154 NULL, HFILL}
7156 {&hf_docsis_tlv_sflow_tolerated_jitter,
7157 {".18 Tolerated Poll Jitter (usec)", "docsis_tlv.sflow.toler_jitter",
7158 FT_UINT32, BASE_DEC, NULL, 0x0,
7159 NULL, HFILL}
7161 {&hf_docsis_tlv_sflow_ugs_size,
7162 {".19 Unsolicited Grant Size (bytes)", "docsis_tlv.sflow.ugs_size",
7163 FT_UINT16, BASE_DEC, NULL, 0x0,
7164 NULL, HFILL}
7166 {&hf_docsis_tlv_sflow_nom_grant_intvl,
7167 {".20 Nominal Grant Interval (usec)", "docsis_tlv.sflow.nom_grant_intvl",
7168 FT_UINT32, BASE_DEC, NULL, 0x0,
7169 NULL, HFILL}
7171 {&hf_docsis_tlv_sflow_tol_grant_jitter,
7172 {".21 Tolerated Grant Jitter (usec)", "docsis_tlv.sflow.tol_grant_jitter",
7173 FT_UINT32, BASE_DEC, NULL, 0x0,
7174 NULL, HFILL}
7176 {&hf_docsis_tlv_sflow_grants_per_intvl,
7177 {".22 Grants Per Interval", "docsis_tlv.sflow.grnts_per_intvl",
7178 FT_UINT8, BASE_DEC, NULL, 0x0,
7179 NULL, HFILL}
7181 {&hf_docsis_tlv_sflow_ip_tos_overwrite,
7182 {".23 IP TOS Overwrite", "docsis_tlv.sflow.iptos_overwrite",
7183 FT_UINT16, BASE_HEX, NULL, 0x0,
7184 NULL, HFILL}
7186 {&hf_docsis_tlv_sflow_ugs_timeref,
7187 {".24 UGS Time Reference", "docsis_tlv.sflow.ugs_timeref",
7188 FT_UINT32, BASE_DEC, NULL, 0x0,
7189 NULL, HFILL}
7191 {&hf_docsis_tlv_sflow_cont_req_backoff_window_mult,
7192 {".25 Multiplier to Contention Request Backoff Window", "docsis_tlv.sflow.cont_req_backoff_window_mult",
7193 FT_UINT8, BASE_DEC, NULL, 0x0,
7194 NULL, HFILL}
7196 {&hf_docsis_tlv_sflow_num_of_bytes_requested_mult,
7197 {".26 Multiplier to Number of Bytes Requested", "docsis_tlv.sflow.num_of_bytes_requested_mult",
7198 FT_UINT8, BASE_DEC, NULL, 0x0,
7199 NULL, HFILL}
7201 {&hf_docsis_tlv_sflow_peak_traffic_rate,
7202 {".27 Peak Traffic Rate", "docsis_tlv.sflow.peak_traffic_rate",
7203 FT_UINT32, BASE_DEC, NULL, 0x0,
7204 NULL, HFILL}
7206 {&hf_docsis_tlv_sflow_req_attr_mask,
7207 {".31 Required Attribute Mask", "docsis_tlv.sflow.req_attr_mask",
7208 FT_BYTES, BASE_NONE, NULL, 0x0,
7209 NULL, HFILL}
7211 {&hf_docsis_tlv_sflow_forb_attr_mask,
7212 {".32 Forbidden Attribute Mask", "docsis_tlv.sflow.forb_attr_mask",
7213 FT_BYTES, BASE_NONE, NULL, 0x0,
7214 NULL, HFILL}
7216 {&hf_docsis_tlv_sflow_attr_aggr_rule_mask,
7217 {".33 Attribute Aggregation Rule Mask", "docsis_tlv.sflow.attr_aggr_rule_mask",
7218 FT_BYTES, BASE_NONE, NULL, 0x0,
7219 NULL, HFILL}
7221 {&hf_docsis_tlv_sflow_vendor_spec,
7222 {".43 Vendor Specific Encodings", "docsis_tlv.sflow.vendorspec",
7223 FT_BYTES, BASE_NONE, NULL, 0x0,
7224 NULL, HFILL}
7226 #if 0
7227 {&hf_docsis_tlv_phs,
7228 {"26 PHS Rules", "docsis_tlv.phs",
7229 FT_BYTES, BASE_NONE, NULL, 0x0,
7230 NULL, HFILL}
7232 #endif
7233 {&hf_docsis_tlv_phs_class_ref,
7234 {".1 Classifier Reference", "docsis_tlv.phs.classref",
7235 FT_UINT8, BASE_DEC, NULL, 0x0,
7236 NULL, HFILL}
7238 {&hf_docsis_tlv_phs_class_id,
7239 {".2 Classifier ID", "docsis_tlv.phs.classid",
7240 FT_UINT16, BASE_DEC, NULL, 0x0,
7241 NULL, HFILL}
7243 {&hf_docsis_tlv_phs_sflow_ref,
7244 {".3 Service flow reference", "docsis_tlv.phs.sflowref",
7245 FT_UINT16, BASE_DEC, NULL, 0x0,
7246 NULL, HFILL}
7248 {&hf_docsis_tlv_phs_sflow_id,
7249 {".4 Service flow ID", "docsis_tlv.phs.sflowid",
7250 FT_UINT16, BASE_DEC, NULL, 0x0,
7251 NULL, HFILL}
7253 {&hf_docsis_tlv_phs_dsc_action,
7254 {".5 DSC Action", "docsis_tlv.phs.dscaction",
7255 FT_UINT8, BASE_DEC, VALS (action_vals), 0x0,
7256 "Dynamic Service Change Action", HFILL}
7258 #if 0
7259 {&hf_docsis_tlv_phs_err,
7260 {".6 Error Encodings", "docsis_tlv.phs.err",
7261 FT_BYTES, BASE_NONE, NULL, 0x0,
7262 NULL, HFILL}
7264 #endif
7265 {&hf_docsis_tlv_phs_err_param,
7266 {"..1 Param Subtype", "docsis_tlv.phs.err.param",
7267 FT_UINT8, BASE_DEC, NULL, 0x0,
7268 "Parameter Subtype", HFILL}
7270 {&hf_docsis_tlv_phs_err_code,
7271 {"..2 Error Code", "docsis_tlv.phs.err.code",
7272 FT_UINT8, BASE_DEC, NULL, 0x0,
7273 NULL, HFILL}
7275 {&hf_docsis_tlv_phs_err_msg,
7276 {"..3 Error Message", "docsis_tlv.phs.err.msg",
7277 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7278 NULL, HFILL}
7280 {&hf_docsis_tlv_phs_phsf,
7281 {".7 PHS Field", "docsis_tlv.phs.phsf",
7282 FT_BYTES, BASE_NONE, NULL, 0x0,
7283 NULL, HFILL}
7285 {&hf_docsis_tlv_phs_phsi,
7286 {".8 PHS Index", "docsis_tlv.phs.phsi",
7287 FT_UINT8, BASE_DEC, NULL, 0x0,
7288 NULL, HFILL}
7290 {&hf_docsis_tlv_phs_phsm,
7291 {".9 PHS Mask", "docsis_tlv.phs.phsm",
7292 FT_BYTES, BASE_NONE, NULL, 0x0,
7293 NULL, HFILL}
7295 {&hf_docsis_tlv_phs_phss,
7296 {".10 PHS Size", "docsis_tlv.phs.phss",
7297 FT_UINT8, BASE_DEC, NULL, 0x0,
7298 NULL, HFILL}
7300 {&hf_docsis_tlv_phs_dbc_action,
7301 {".13 PHS Dynamic Bonding Change Action", "docsis_tlv.phs.dbc_action",
7302 FT_UINT8, BASE_DEC, VALS (dbc_action_vals), 0x0,
7303 NULL, HFILL}
7305 #if 0
7306 {&hf_docsis_tlv_phs_phsv,
7307 {".11 PHS Verify", "docsis_tlv.phs.phsv",
7308 FT_BOOLEAN, BASE_NONE, TFS (&verify_tfs), 0x0,
7309 NULL, HFILL}
7311 #endif
7312 {&hf_docsis_tlv_phs_vendorspec,
7313 {".43 PHS Vendor Specific", "docsis_tlv.phs.vendorspec",
7314 FT_BYTES, BASE_NONE, NULL, 0x0,
7315 NULL, HFILL}
7317 {&hf_docsis_tlv_hmac_digest,
7318 {"27 HMAC Digest", "docsis_tlv.hmac_digest",
7319 FT_BYTES, BASE_NONE, NULL, 0x0,
7320 NULL, HFILL}
7322 {&hf_docsis_tlv_max_classifiers,
7323 {"28 Max # of Classifiers", "docsis_tlv.maxclass",
7324 FT_UINT16, BASE_DEC, NULL, 0x0,
7325 NULL, HFILL}
7327 {&hf_docsis_tlv_privacy_enable,
7328 {"29 Privacy Enable", "docsis_tlv.bpi_en",
7329 FT_BOOLEAN, BASE_NONE, TFS (&ena_dis_tfs), 0x0,
7330 NULL, HFILL}
7332 {&hf_docsis_tlv_auth_block,
7333 {"30 Auth Block", "docsis_tlv.auth_block",
7334 FT_BYTES, BASE_NONE, NULL, 0x0,
7335 NULL, HFILL}
7337 {&hf_docsis_tlv_key_seq_num,
7338 {"31 Key Sequence Number", "docsis_tlv.key_seq",
7339 FT_BYTES, BASE_NONE, NULL, 0x0,
7340 NULL, HFILL}
7342 {&hf_docsis_tlv_mfgr_cvc,
7343 {"32 Manufacturer CVC", "docsis_tlv.mfgr_cvc",
7344 FT_BYTES, BASE_NONE, NULL, 0x0,
7345 NULL, HFILL}
7347 {&hf_docsis_tlv_cosign_cvc,
7348 {"33 Co-Signer CVC", "docsis_tlv.cosign_cvc",
7349 FT_BYTES, BASE_NONE, NULL, 0x0,
7350 NULL, HFILL}
7352 {&hf_docsis_tlv_snmpv3_kick,
7353 {"34 SNMPv3 Kickstart Value", "docsis_tlv.snmpv3",
7354 FT_BYTES, BASE_NONE, NULL, 0x0,
7355 NULL, HFILL}
7357 {&hf_docsis_tlv_snmpv3_kick_name,
7358 {".1 SNMPv3 Kickstart Security Name", "docsis_tlv.snmpv3.secname",
7359 FT_STRING, BASE_NONE, NULL, 0x0,
7360 NULL, HFILL}
7362 {&hf_docsis_tlv_snmpv3_kick_publicnum,
7363 {".2 SNMPv3 Kickstart Manager Public Number", "docsis_tlv.snmpv3.publicnum",
7364 FT_BYTES, BASE_NONE, NULL, 0x0,
7365 NULL, HFILL}
7367 {&hf_docsis_tlv_subs_mgmt_ctrl,
7368 {"35 Subscriber Management Control", "docsis_tlv.subsmgmtctrl",
7369 FT_BYTES, BASE_NONE, NULL, 0x0,
7370 NULL, HFILL}
7372 {&hf_docsis_tlv_subs_mgmt_ip_table,
7373 {"36 Subscriber Management CPE IP Table", "docsis_tlv.subsiptable",
7374 FT_BYTES, BASE_NONE, NULL, 0x0,
7375 NULL, HFILL}
7377 {&hf_docsis_tlv_subs_mgmt_ip_entry,
7378 {"Subscriber Management CPE IP Entry", "docsis_tlv.subsipentry",
7379 FT_IPv4, BASE_NONE, NULL, 0x0,
7380 NULL, HFILL}
7382 {&hf_docsis_tlv_subs_mgmt_filter_grps,
7383 {"37 Subscriber Management Filter Groups", "docsis_tlv.subsfltrgrps",
7384 FT_BYTES, BASE_NONE, NULL, 0x0,
7385 NULL, HFILL}
7387 {&hf_docsis_tlv_snmpv3_ntfy_rcvr,
7388 {"38 SNMPv3 Notification Receiver", "docsis_tlv.snmpv3ntfy",
7389 FT_BYTES, BASE_NONE, NULL, 0x0,
7390 NULL, HFILL}
7392 {&hf_docsis_tlv_enable_20_mode,
7393 {"39 Enable 2.0 Mode", "docsis_tlv.enable20mode",
7394 FT_BOOLEAN, BASE_NONE, TFS (&ena_dis_tfs), 0x0,
7395 NULL, HFILL}
7397 {&hf_docsis_tlv_enable_test_modes,
7398 {"40 Enable Test Modes", "docsis_tlv.enabletestmodes",
7399 FT_BOOLEAN, BASE_NONE, TFS (&ena_dis_tfs), 0x0,
7400 NULL, HFILL}
7402 #if 0
7403 {&hf_docsis_tlv_ds_ch_list,
7404 {"41 Downstream Channel List", "docsis_tlv.dschlist",
7405 FT_BYTES, BASE_NONE, NULL, 0x0,
7406 NULL, HFILL}
7408 {&hf_docsis_tlv_ds_ch_list_single,
7409 {".1 Single Downstream Channel", "docsis_tlv.dschlist.single",
7410 FT_BYTES, BASE_NONE, NULL, 0x0,
7411 NULL, HFILL}
7413 #endif
7414 {&hf_docsis_tlv_single_ch_timeout,
7415 {"..1 Timeout", "docsis_tlv.dschlist.single.timeout",
7416 FT_UINT16, BASE_DEC, NULL, 0x0,
7417 NULL, HFILL}
7419 {&hf_docsis_tlv_single_ch_freq,
7420 {"..2 Timeout", "docsis_tlv.dschlist.single.freq",
7421 FT_UINT32, BASE_DEC, NULL, 0x0,
7422 NULL, HFILL}
7424 #if 0
7425 {&hf_docsis_tlv_ds_ch_list_range,
7426 {".2 Downstream Frequency Range", "docsis_tlv.dschlist.range",
7427 FT_BYTES, BASE_NONE, NULL, 0x0,
7428 NULL, HFILL}
7430 #endif
7431 {&hf_docsis_tlv_freq_rng_timeout,
7432 {"..1 Timeout", "docsis_tlv.dschlist.range.timeout",
7433 FT_UINT16, BASE_DEC, NULL, 0x0,
7434 NULL, HFILL}
7436 {&hf_docsis_tlv_freq_rng_start,
7437 {"..2 Frequency Start", "docsis_tlv.dschlist.range.start",
7438 FT_UINT32, BASE_DEC, NULL, 0x0,
7439 NULL, HFILL}
7441 {&hf_docsis_tlv_freq_rng_end,
7442 {"..3 Frequency End", "docsis_tlv.dschlist.range.end",
7443 FT_UINT32, BASE_DEC, NULL, 0x0,
7444 NULL, HFILL}
7446 {&hf_docsis_tlv_freq_rng_step,
7447 {"..4 Frequency Step Size", "docsis_tlv.dschlist.range.step",
7448 FT_UINT32, BASE_DEC, NULL, 0x0,
7449 NULL, HFILL}
7451 {&hf_docsis_tlv_ds_ch_list_default_timeout,
7452 {".3 Default Scanning Timeout", "docsis_tlv.dschlist.defaulttimeout",
7453 FT_UINT16, BASE_DEC, NULL, 0x0,
7454 NULL, HFILL}
7456 {&hf_docsis_tlv_mc_mac_address,
7457 {"42 Static Multicast MAC Address", "docsis_tlv.mcmac",
7458 FT_ETHER, BASE_NONE, NULL, 0x0,
7459 NULL, HFILL}
7461 #if 0
7462 {&hf_docsis_tlv_vendor_spec,
7463 {"43 Vendor Specific Encodings", "docsis_tlv.vendorspec",
7464 FT_BYTES, BASE_NONE, NULL, 0x0,
7465 NULL, HFILL}
7467 #endif
7468 {&hf_docsis_tlv_rng_tech,
7469 {"Ranging Technique", "docsis_tlv.rng_tech",
7470 FT_UINT8, BASE_DEC, VALS (rng_tech_vals), 0x0,
7471 NULL, HFILL}
7473 #if 0
7474 {&hf_docsis_tlv_dut_filter,
7475 {"45 Downstream Unencrypted Traffic Filtering Encoding", "docsis_tlv.dut",
7476 FT_BYTES, BASE_NONE, NULL, 0x0,
7477 NULL, HFILL}
7479 #endif
7480 {&hf_docsis_tlv_dut_filter_control,
7481 {".1 DUT Control", "docsis_tlv.dut.control",
7482 FT_BOOLEAN, BASE_NONE, TFS (&ena_dis_tfs), 0x0,
7483 NULL, HFILL}
7485 {&hf_docsis_tlv_dut_filter_cmim,
7486 {".2 DUT CMIM", "docsis_tlv.dut.cmim",
7487 FT_BYTES, BASE_NONE, NULL, 0x0,
7488 NULL, HFILL}
7490 #if 0
7491 {&hf_docsis_tlv_tcc,
7492 {"46 Transmit Channel Configuration", "docsis_tlv.tcc",
7493 FT_BYTES, BASE_NONE, NULL, 0x0,
7494 NULL, HFILL}
7496 #endif
7497 {&hf_docsis_tlv_tcc_refid,
7498 {".1 TCC Reference ID", "docsis_tlv.tcc.refid",
7499 FT_UINT8, BASE_DEC, NULL, 0x0,
7500 NULL, HFILL}
7502 {&hf_docsis_tlv_tcc_us_ch_action,
7503 {".2 Upstream Channel Action", "docsis_tlv.tcc.uschact",
7504 FT_UINT8, BASE_DEC, VALS (us_ch_action_vals), 0x0,
7505 NULL, HFILL}
7507 {&hf_docsis_tlv_tcc_us_ch_id,
7508 {".3 Upstream Channel ID", "docsis_tlv.tcc.uschid",
7509 FT_UINT8, BASE_DEC, NULL, 0x0,
7510 NULL, HFILL}
7512 {&hf_docsis_tlv_tcc_new_us_ch_id,
7513 {".4 New Upstream Channel ID", "docsis_tlv.tcc.newuschid",
7514 FT_UINT8, BASE_DEC, NULL, 0x0,
7515 NULL, HFILL}
7517 {&hf_docsis_tlv_tcc_ucd,
7518 {".5 Upstream Channel Descriptor", "docsis_tlv.tcc.ucd",
7519 FT_BYTES, BASE_NONE, NULL, 0x0,
7520 NULL, HFILL}
7522 {&hf_docsis_tlv_tcc_rng_sid,
7523 {".6 Ranging SID", "docsis_tlv.tcc.rngsid",
7524 FT_UINT16, BASE_DEC, NULL, 0x0,
7525 NULL, HFILL}
7527 {&hf_docsis_tlv_tcc_init_tech,
7528 {".7 Initialization Technique", "docsis_tlv.tcc.inittech",
7529 FT_UINT8, BASE_DEC, VALS (init_tech_vals), 0x0,
7530 NULL, HFILL}
7532 #if 0
7533 {&hf_docsis_tlv_tcc_rng_parms,
7534 {".8 Ranging Parameters", "docsis_tlv.tcc.rngparms",
7535 FT_BYTES, BASE_NONE, NULL, 0x0,
7536 NULL, HFILL}
7538 #endif
7539 /* TODO: wrong label? */
7540 {&hf_docsis_rng_parms_us_ch_id,
7541 {"..1 Ranging Reference Channel ID", "docsis_tlv.tcc.rngparms.uschid",
7542 FT_UINT8, BASE_DEC, NULL, 0x0,
7543 "Upstream Channel ID", HFILL}
7545 {&hf_docsis_rng_parms_time_off_int,
7546 {"..2 Timing Offset, Integer Part", "docsis_tlv.tcc.rngparms.timeoffint",
7547 FT_UINT32, BASE_DEC, NULL, 0x0,
7548 NULL, HFILL}
7550 {&hf_docsis_rng_parms_time_off_frac,
7551 {"..3 Timing Offset, Fractional Part", "docsis_tlv.tcc.rngparms.timeofffrac",
7552 FT_UINT8, BASE_DEC, NULL, 0x0,
7553 NULL, HFILL}
7555 {&hf_docsis_rng_parms_power_off,
7556 {"..4 Power Offset", "docsis_tlv.tcc.rngparms.poweroff",
7557 FT_UINT8, BASE_DEC, NULL, 0x0,
7558 NULL, HFILL}
7560 {&hf_docsis_rng_parms_freq_off,
7561 {"..5 Frequency Offset", "docsis_tlv.tcc.rngparms.freqoff",
7562 FT_UINT16, BASE_DEC, NULL, 0x0,
7563 NULL, HFILL}
7565 {&hf_docsis_tlv_tcc_dyn_rng_win,
7566 {".9 Dynamic Range Window", "docsis_tlv.tcc.dynrngwin",
7567 FT_UINT8, BASE_CUSTOM, CF_FUNC(fourth_db), 0x0,
7568 NULL, HFILL}
7570 {&hf_docsis_tlv_tcc_p_16hi,
7571 {".10 P1.6hi", "docsis_tlv.tcc.p16hi",
7572 FT_UINT8, BASE_CUSTOM, CF_FUNC(fourth_dbmv), 0x0,
7573 NULL, HFILL}
7575 {&hf_docsis_tlv_tcc_oudp_iuc,
7576 {"OUDP IUC", "docsis_tlv.tcc.oudp_iuc",
7577 FT_UINT8, BASE_DEC, NULL, 0x0,
7578 NULL, HFILL}
7580 {&hf_docsis_tlv_tcc_extended_drw,
7581 {".14 Extended Dynamic Range Window", "docsis_tlv.tcc.extended_dynrngwin",
7582 FT_UINT8, BASE_CUSTOM, CF_FUNC(fourth_db), 0x0,
7583 NULL, HFILL}
7585 {&hf_docsis_tlv_tcc_extended_us_rng_pwr,
7586 {".15 Extended US Ranging Power", "docsis_tlv.tcc.extended_us_rng_pwr",
7587 FT_UINT16, BASE_CUSTOM, CF_FUNC(fourth_db), 0x0,
7588 NULL, HFILL}
7590 {&hf_docsis_tlv_tcc_oudp_sounding_sid,
7591 {".16 OUDP Sounding SID", "docsis_tlv.tcc.oudp_sounding_sid",
7592 FT_UINT16, BASE_DEC, NULL, 0x0,
7593 NULL, HFILL}
7595 #if 0
7596 {&hf_docsis_tlv_tcc_err,
7597 {".10 TCC Error Encodings", "docsis_tlv.tcc.err",
7598 FT_BYTES, BASE_NONE, NULL, 0x0,
7599 NULL, HFILL}
7601 #endif
7602 {&hf_docsis_tcc_err_subtype,
7603 {"..1 TCC Subtype", "docsis_tlv.tcc.err.subtype",
7604 FT_BYTES, BASE_NONE, NULL, 0x0,
7605 NULL, HFILL}
7607 {&hf_docsis_tcc_err_code,
7608 {"..2 Error Code", "docsis_tlv.tcc.err.code",
7609 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
7610 NULL, HFILL}
7612 {&hf_docsis_tcc_err_msg,
7613 {"..3 Error Message", "docsis_tlv.tcc.err.msg",
7614 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7615 NULL, HFILL}
7617 #if 0
7618 {&hf_docsis_tlv_sid_cl,
7619 {"47 Service Flow SID Cluster Assignments", "docsis_tlv.sid",
7620 FT_BYTES, BASE_NONE, NULL, 0x0,
7621 NULL, HFILL}
7623 #endif
7624 {&hf_docsis_sid_cl_sf_id,
7625 {".1 Service Flow ID", "docsis_tlv.sid.sfid",
7626 FT_UINT32, BASE_DEC, NULL, 0x0,
7627 NULL, HFILL}
7629 #if 0
7630 {&hf_docsis_sid_cl_enc,
7631 {".2 SID Cluster Encodings", "docsis_tlv.sid.enc",
7632 FT_BYTES, BASE_NONE, NULL, 0x0,
7633 NULL, HFILL}
7635 #endif
7636 {&hf_docsis_sid_cl_enc_id,
7637 {"..1 SID Cluster ID", "docsis_tlv.sid.enc.id",
7638 FT_UINT8, BASE_DEC, NULL, 0x0,
7639 NULL, HFILL}
7641 #if 0
7642 {&hf_docsis_sid_cl_enc_map,
7643 {"..2 SID-to-Channel Mapping", "docsis_tlv.sid.enc.map",
7644 FT_BYTES, BASE_NONE, NULL, 0x0,
7645 NULL, HFILL}
7647 #endif
7648 {&hf_docsis_sid_cl_map_us_ch_id,
7649 {"...1 Upstream Channel ID", "docsis_tlv.sid.enc.map.uschid",
7650 FT_UINT8, BASE_DEC, NULL, 0x0,
7651 NULL, HFILL}
7653 {&hf_docsis_sid_cl_map_sid,
7654 {"...2 SID", "docsis_tlv.sid.enc.map.sid",
7655 FT_UINT16, BASE_DEC, NULL, 0x0,
7656 NULL, HFILL}
7658 {&hf_docsis_sid_cl_map_action,
7659 {"...3 SID-to-Channel Mapping Action", "docsis_tlv.sid.enc.map.action",
7660 FT_UINT8, BASE_DEC, VALS (sid_ch_map_vals), 0x0,
7661 NULL, HFILL}
7663 #if 0
7664 {&hf_docsis_sid_cl_so_crit,
7665 {".3 SID Cluster Switchover Criteria", "docsis_tlv.sid.socrit",
7666 FT_BYTES, BASE_NONE, NULL, 0x0,
7667 NULL, HFILL}
7669 #endif
7670 {&hf_docsis_sid_cl_so_max_req,
7671 {"..1 Maximum Requests per SID Cluster", "docsis_tlv.sid.socrit.maxreq",
7672 FT_UINT8, BASE_DEC, NULL, 0x0,
7673 NULL, HFILL}
7675 {&hf_docsis_sid_cl_so_max_out_bytes,
7676 {"..2 Maximum Outstanding Bytes per SID Cluster", "docsis_tlv.sid.socrit.maxoutbytes",
7677 FT_UINT32, BASE_DEC, NULL, 0x0,
7678 NULL, HFILL}
7680 {&hf_docsis_sid_cl_so_max_req_bytes,
7681 {"..3 Maximum Total Bytes Requested per SID Cluster", "docsis_tlv.sid.socrit.maxreqbytes",
7682 FT_UINT32, BASE_DEC, NULL, 0x0,
7683 NULL, HFILL}
7685 {&hf_docsis_sid_cl_so_max_time,
7686 {"..4 Maximum Time in the SID Cluster", "docsis_tlv.sid.socrit.maxtime",
7687 FT_UINT16, BASE_DEC, NULL, 0x0,
7688 NULL, HFILL}
7690 #if 0
7691 {&hf_docsis_tlv_rcp,
7692 {"48 Receive Channel Profile", "docsis_tlv.rcp",
7693 FT_BYTES, BASE_NONE, NULL, 0x0,
7694 NULL, HFILL}
7696 #endif
7697 {&hf_docsis_tlv_rcp_id,
7698 {".1 RCP-ID", "docsis_tlv.rcp.id",
7699 FT_BYTES, BASE_NONE, NULL, 0x0,
7700 NULL, HFILL}
7702 {&hf_docsis_tlv_rcp_name,
7703 {".2 RCP Name", "docsis_tlv.rcp.name",
7704 FT_BYTES, BASE_NONE, NULL, 0x0,
7705 NULL, HFILL}
7707 {&hf_docsis_tlv_rcp_freq_spc,
7708 {".3 RCP Center Frequency Spacing", "docsis_tlv.rcp.freq_spc",
7709 FT_UINT8, BASE_DEC, NULL, 0x0,
7710 NULL, HFILL}
7712 #if 0
7713 {&hf_docsis_tlv_rcp_rcv_mod_enc,
7714 {".4 Receive Module Capability", "docsis_tlv.rcp.rcv_mod_enc",
7715 FT_BYTES, BASE_NONE, NULL, 0x0,
7716 "Receive Module Encoding", HFILL}
7718 #endif
7719 {&hf_docsis_rcv_mod_enc_idx,
7720 {"..1 Receive Module Index", "docsis_tlv.rcp.rcv_mod_enc.idx",
7721 FT_UINT8, BASE_DEC, NULL, 0x0,
7722 NULL, HFILL}
7724 {&hf_docsis_rcv_mod_enc_adj_ch,
7725 {"..2 Adjacent Channels", "docsis_tlv.rcp.rcv_mod_enc.adj_ch",
7726 FT_UINT8, BASE_DEC, NULL, 0x0,
7727 NULL, HFILL}
7729 #if 0
7730 {&hf_docsis_rcv_mod_enc_ch_bl_rng,
7731 {"..3 Channel Block Range", "docsis_tlv.rcp.rcv_mod_enc.ch_bl_rng",
7732 FT_BYTES, BASE_NONE, NULL, 0x0,
7733 NULL, HFILL}
7735 #endif
7736 {&hf_docsis_rcv_mod_enc_ctr_freq_asgn,
7737 {"..4 First Channel Center Frequency Assignment", "docsis_tlv.rcv_mod_enc.ctr_freq_asgn",
7738 FT_UINT32, BASE_DEC, NULL, 0x0,
7739 NULL, HFILL}
7741 {&hf_docsis_ch_bl_rng_min_ctr_freq,
7742 {"...1 Minimum Center Frequency", "docsis_tlv.rcp.rcv_mod_enc.ch_bl_rng.min_ctr_freq",
7743 FT_UINT32, BASE_DEC, NULL, 0x0,
7744 NULL, HFILL}
7746 {&hf_docsis_ch_bl_rng_max_ctr_freq,
7747 {"...2 Maximum Center Frequency", "docsis_tlv.rcp.rcv_mod_enc.ch_bl_rng.max_ctr_freq",
7748 FT_UINT32, BASE_DEC, NULL, 0x0,
7749 NULL, HFILL}
7751 {&hf_docsis_rcv_mod_enc_rsq_ch_subs_cap ,
7752 {"..5 Resequencing Channel Subset Capability", "docsis_tlv.rcp.rcv_mod_enc.rsq_ch_subs_cap",
7753 FT_BYTES, BASE_NONE, NULL, 0x0,
7754 NULL, HFILL}
7756 {&hf_docsis_rcv_mod_enc_conn ,
7757 {"..6 Receive Module Connectivity", "docsis_tlv.rcp.rcv_mod_enc.conn",
7758 FT_BYTES, BASE_NONE, NULL, 0x0,
7759 NULL, HFILL}
7761 {&hf_docsis_rcv_mod_enc_phy_layr_parms,
7762 {"..7 Physical Layer Parameter", "docsis_tlv.rcp.rcv_mod_enc.phy_layr_parms",
7763 FT_BYTES, BASE_NONE, NULL, 0x0,
7764 NULL, HFILL}
7766 #if 0
7767 {&hf_docsis_tlv_rcp_rcv_ch,
7768 {".5 Receive Channel", "docsis_tlv.rcp.rcv_ch",
7769 FT_BYTES, BASE_NONE, NULL, 0x0,
7770 NULL, HFILL}
7772 #endif
7773 {&hf_docsis_rcv_ch_idx,
7774 {"..1 Receive Channel Index", "docsis_tlv.rcp.rcv_ch.idx",
7775 FT_UINT8, BASE_DEC, NULL, 0x0,
7776 NULL, HFILL}
7778 {&hf_docsis_rcv_ch_conn,
7779 {"..2 Receive Channel Connectivity", "docsis_tlv.rcp.rcv_ch.conn",
7780 FT_BYTES, BASE_NONE, NULL, 0x0,
7781 NULL, HFILL}
7783 {&hf_docsis_rcv_ch_conn_off,
7784 {"..3 Receive Channel Connected Offset", "docsis_tlv.rcp.rcv_ch.conn_off",
7785 FT_UINT8, BASE_DEC, NULL, 0x0,
7786 NULL, HFILL}
7788 {&hf_docsis_rcv_ch_prim_ds_ch_ind,
7789 {"..5 Primary Downstream Channel Indicator", "docsis_tlv.rcp.rcv_ch.prim_ds_ch_ind",
7790 FT_UINT8, BASE_DEC, NULL, 0x0,
7791 NULL, HFILL}
7793 #if 0
7794 {&hf_docsis_tlv_rcp_ven_spec,
7795 {".43 Vendor Specific Encodings", "docsis_tlv.rcp.vendorspec",
7796 FT_BYTES, BASE_NONE, NULL, 0x0,
7797 NULL, HFILL}
7799 {&hf_docsis_tlv_rcc,
7800 {"49 Receive Channel Configuration", "docsis_tlv.rcc",
7801 FT_BYTES, BASE_NONE, NULL, 0x0,
7802 NULL, HFILL}
7804 #endif
7805 {&hf_docsis_tlv_rcc_id,
7806 {".1 Assigned RCP-ID", "docsis_tlv.rcc.id",
7807 FT_BYTES, BASE_NONE, NULL, 0x0,
7808 NULL, HFILL}
7810 #if 0
7811 {&hf_docsis_tlv_rcc_rcv_mod_enc,
7812 {".4 Receive Module Assignment", "docsis_tlv.rcc.rcv_mod_enc",
7813 FT_BYTES, BASE_NONE, NULL, 0x0,
7814 NULL, HFILL}
7816 #endif
7817 {&hf_docsis_rcc_rcv_mod_enc_idx,
7818 {"..1 Receive Module Index", "docsis_tlv.rcc.rcc_rcv_mod_enc.idx",
7819 FT_UINT8, BASE_DEC, NULL, 0x0,
7820 NULL, HFILL}
7822 {&hf_docsis_rcc_rcv_mod_enc_ctr_freq_asgn,
7823 {"..4 First Channel Center Frequency Assignment", "docsis_tlv.rcc.rcv_mod_enc.ctr_freq_asgn",
7824 FT_UINT32, BASE_DEC, NULL, 0x0,
7825 NULL, HFILL}
7827 {&hf_docsis_rcc_rcv_mod_enc_conn ,
7828 {"..6 Receive Module Connectivity", "docsis_tlv.rcc.rcv_mod_enc.conn",
7829 FT_BYTES, BASE_NONE, NULL, 0x0,
7830 NULL, HFILL}
7832 #if 0
7833 {&hf_docsis_tlv_rcc_rcv_ch,
7834 {".5 Receive Channel", "docsis_tlv.rcc.rcv_ch",
7835 FT_BYTES, BASE_NONE, NULL, 0x0,
7836 NULL, HFILL}
7838 #endif
7839 {&hf_docsis_rcc_rcv_ch_idx,
7840 {"..1 Receive Channel Index", "docsis_tlv.rcc.rcv_ch.idx",
7841 FT_UINT8, BASE_DEC, NULL, 0x0,
7842 NULL, HFILL}
7844 {&hf_docsis_rcc_rcv_ch_conn,
7845 {"..2 Receive Channel Connectivity", "docsis_tlv.rcc.rcv_ch.conn",
7846 FT_BYTES, BASE_NONE, NULL, 0x0,
7847 NULL, HFILL}
7849 {&hf_docsis_rcc_rcv_ch_ctr_freq_asgn,
7850 {"..4 Receive Channel Center Frequency Assignment", "docsis_tlv.rcc.rcv_ch.ctr_freq_asgn",
7851 FT_UINT32, BASE_DEC, NULL, 0x0,
7852 NULL, HFILL}
7854 {&hf_docsis_rcc_rcv_ch_prim_ds_ch_ind,
7855 {"..5 Primary Downstream Channel Indicator", "docsis_tlv.rcc.rcv_ch.prim_ds_ch_ind",
7856 FT_UINT8, BASE_DEC, NULL, 0x0,
7857 NULL, HFILL}
7859 #if 0
7860 {&hf_docsis_tlv_rcc_part_serv_ds_ch,
7861 {".6 Partial Service Downstream Channels", "docsis_tlv.rcc.part_serv_ds_ch",
7862 FT_BYTES, BASE_NONE, NULL, 0x0,
7863 NULL, HFILL}
7865 {&hf_docsis_tlv_rcc_ven_spec,
7866 {".43 Vendor Specific Encodings", "docsis_tlv.rcc.vendorspec",
7867 FT_BYTES, BASE_NONE, NULL, 0x0,
7868 NULL, HFILL}
7870 {&hf_docsis_tlv_rcc_err,
7871 {".254 RCC Error Encodings", "docsis_tlv.rcc.err",
7872 FT_BYTES, BASE_NONE, NULL, 0x0,
7873 NULL, HFILL}
7875 #endif
7876 {&hf_docsis_tlv_rcc_partial_serv_down_chan_id,
7877 {"Downstream Channel ID", "docsis_tlv.rcc.partial_serv_down_chan.ds_ch_id",
7878 FT_UINT8, BASE_DEC, NULL, 0x0,
7879 NULL, HFILL}
7881 {&hf_docsis_tlv_rcc_srcc_prim_ds_chan_assign_ds_ch_id,
7882 {"Downstream Channel ID", "docsis_tlv.rcc.srcc.prim_ds_chann_assign.ds_ch_id",
7883 FT_UINT8, BASE_DEC, NULL, 0x0,
7884 NULL, HFILL}
7886 {&hf_docsis_tlv_rcc_srcc_ds_chan_assign_ds_ch_id,
7887 {"Downstream Channel ID", "docsis_tlv.rcc.srcc.ds_chann_assign.ds_ch_id",
7888 FT_UINT8, BASE_DEC, NULL, 0x0,
7889 NULL, HFILL}
7891 {&hf_docsis_tlv_rcc_srcc_ds_prof_assign_dcid,
7892 {"....1 DCID", "docsis_tlv.rcc.srcc.ds_prof_assign.prof_list.dcid",
7893 FT_UINT8, BASE_DEC, NULL, 0x0,
7894 NULL, HFILL}
7896 {&hf_docsis_tlv_rcc_srcc_ds_prof_asssign_prof_list_prof_id,
7897 {"Profile ID", "docsis_tlv.rcc.srcc.ds_prof_assign.prof_list.prof_id",
7898 FT_UINT8, BASE_DEC, NULL, 0x0,
7899 NULL, HFILL}
7901 {&hf_docsis_tlv_rcc_prim_down_chan,
7902 {".8 Primary Downstream Channel", "docsis_tlv.rcc.prim_down_chan",
7903 FT_UINT8, BASE_DEC, NULL, 0x0,
7904 NULL, HFILL}
7906 {&hf_docsis_tlv_rcc_err_mod_or_ch,
7907 {".1 Receive Modul or Receive Channel", "docsis_tlv.rcc.err.mod_or_ch",
7908 FT_UINT8, BASE_DEC, VALS (mod_or_ch_vals), 0x0,
7909 NULL, HFILL}
7911 {&hf_docsis_tlv_rcc_err_idx,
7912 {".2 Receive Modul/Channel Index", "docsis_tlv.rcc.err.idx",
7913 FT_UINT8, BASE_DEC, NULL, 0x0,
7914 NULL, HFILL}
7916 {&hf_docsis_tlv_rcc_err_param,
7917 {".3 Reported Parameter", "docsis_tlv.rcc.err.param",
7918 FT_UINT8, BASE_DEC, NULL, 0x0,
7919 NULL, HFILL}
7921 {&hf_docsis_tlv_rcc_err_code,
7922 {".4 Error Code", "docsis_tlv.rcc.err.code",
7923 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
7924 NULL, HFILL}
7926 {&hf_docsis_tlv_rcc_err_msg,
7927 {".5 Error Message", "docsis_tlv.rcc.err.msg",
7928 FT_BYTES, BASE_NONE, NULL, 0x0,
7929 NULL, HFILL}
7931 #if 0
7932 {&hf_docsis_tlv_dsid,
7933 {"50 DSID Encodings", "docsis_tlv.dsid",
7934 FT_BYTES, BASE_NONE, NULL, 0x0,
7935 NULL, HFILL}
7937 #endif
7938 {&hf_docsis_tlv_dsid_id,
7939 {".1 Downstream Service Identifier (DSID)", "docsis_tlv.dsid.id",
7940 FT_UINT24, BASE_DEC, NULL, 0x0,
7941 NULL, HFILL}
7943 {&hf_docsis_tlv_dsid_action,
7944 {".2 DSID Action", "docsis_tlv.dsid.action",
7945 FT_UINT8, BASE_DEC, VALS (dsid_action_vals), 0x0,
7946 NULL, HFILL}
7948 #if 0
7949 {&hf_docsis_tlv_dsid_ds_reseq,
7950 {".3 Downstream Resequencing Encodings", "docsis_tlv.dsid.ds_reseq",
7951 FT_BYTES, BASE_NONE, NULL, 0x0,
7952 NULL, HFILL}
7954 #endif
7955 {&hf_docsis_ds_reseq_dsid,
7956 {"..1 Resequencing DSID", "docsis_tlv.dsid.ds_reseq.dsid",
7957 FT_UINT8, BASE_DEC, NULL, 0x0,
7958 NULL, HFILL}
7960 {&hf_docsis_ds_reseq_ch_lst,
7961 {"..2 Downstream Resequencing Channel List", "docsis_tlv.dsid.ds_reseq.ch_lst",
7962 FT_BYTES, BASE_NONE, NULL, 0x0,
7963 NULL, HFILL}
7965 {&hf_docsis_ds_reseq_wait_time,
7966 {"..3 Downstream Resequencing Wait Time", "docsis_tlv.dsid.ds_reseq.wait_time",
7967 FT_UINT8, BASE_DEC, NULL, 0x0,
7968 NULL, HFILL}
7970 {&hf_docsis_ds_reseq_warn_thresh,
7971 {"..4 Resequencing Warn Threshold", "docsis_tlv.dsid.ds_reseq.warn_thresh",
7972 FT_UINT8, BASE_DEC, NULL, 0x0,
7973 NULL, HFILL}
7975 {&hf_docsis_ds_reseq_ho_timer,
7976 {"..5 CM-Status max. Event Hold-Off Timer (Out-of-Range Events)", "docsis_tlv.dsid.ds_reseq.ho_timer",
7977 FT_UINT16, BASE_DEC, NULL, 0x0,
7978 NULL, HFILL}
7980 #if 0
7981 {&hf_docsis_tlv_dsid_mc,
7982 {".4 Multicast Encodings", "docsis_tlv.dsid.mc",
7983 FT_BYTES, BASE_NONE, NULL, 0x0,
7984 NULL, HFILL}
7986 {&hf_docsis_tlv_dsid_mc_addr,
7987 {"..1 Client MAC Address Encodings", "docsis_tlv.dsid.mc.addr",
7988 FT_BYTES, BASE_NONE, NULL, 0x0,
7989 NULL, HFILL}
7991 #endif
7992 {&hf_docsis_mc_addr_action,
7993 {"...1 Client MAC Address Action", "docsis_tlv.dsid.mc.addr.action",
7994 FT_UINT8, BASE_DEC, VALS (add_del_vals), 0x0,
7995 NULL, HFILL}
7997 {&hf_docsis_mc_addr_addr,
7998 {"...2 Client MAC Address", "docsis_tlv.dsid.mc.addr.addr",
7999 FT_BYTES, BASE_NONE, NULL, 0x0,
8000 NULL, HFILL}
8002 {&hf_docsis_tlv_dsid_mc_cmim,
8003 {"..2 Multicast CM Interface Mask", "docsis_tlv.dsid.mc.cmim",
8004 FT_BYTES, BASE_NONE, NULL, 0x0,
8005 NULL, HFILL}
8007 {&hf_docsis_tlv_dsid_mc_group,
8008 {"..3 Multicast Group MAC Addresses", "docsis_tlv.dsid.mc.group",
8009 FT_BYTES, BASE_NONE, NULL, 0x0,
8010 NULL, HFILL}
8012 #if 0
8013 {&hf_docsis_tlv_dsid_mc_phs,
8014 {"..26 Payload Header Suppression Encodings", "docsis_tlv.dsid.mc.phs",
8015 FT_BYTES, BASE_NONE, NULL, 0x0,
8016 NULL, HFILL}
8018 {&hf_docsis_tlv_sec_assoc,
8019 {"51 Security Association Encodings", "docsis_tlv.sec_assoc",
8020 FT_BYTES, BASE_NONE, NULL, 0x0,
8021 NULL, HFILL}
8023 #endif
8024 {&hf_docsis_tlv_sec_assoc_action,
8025 {".1 SA Action", "docsis_tlv.sec_assoc.action",
8026 FT_UINT8, BASE_DEC, VALS (add_del_vals), 0x0,
8027 NULL, HFILL}
8029 {&hf_docsis_tlv_sec_assoc_desc,
8030 {".23 SA Descriptor", "docsis_tlv.sec_assoc.desc",
8031 FT_BYTES, BASE_NONE, NULL, 0x0,
8032 NULL, HFILL}
8034 {&hf_docsis_tlv_init_ch_timeout,
8035 {"52 Initializing Channel Timeout", "docsis_tlv.init_ch_timeout",
8036 FT_UINT16, BASE_DEC, NULL, 0x0,
8037 NULL, HFILL}
8039 #if 0
8040 {&hf_docsis_tlv_ch_asgn,
8041 {"56 Channel Assignment Configuration Settings", "docsis_tlv.ch_asgn",
8042 FT_BYTES, BASE_NONE, NULL, 0x0,
8043 NULL, HFILL}
8045 #endif
8046 {&hf_docsis_ch_asgn_us_ch_id,
8047 {".1 Upstream Channel ID", "docsis_tlv.ch_asgn.us_ch_id",
8048 FT_UINT8, BASE_DEC, NULL, 0x0,
8049 NULL, HFILL}
8051 {&hf_docsis_ch_asgn_rx_freq,
8052 {".2 Rx Frequency", "docsis_tlv.ch_asgn.rx_freq",
8053 FT_UINT16, BASE_DEC, NULL, 0x0,
8054 NULL, HFILL}
8056 {&hf_docsis_tlv_cm_init_reason,
8057 {"57 CM Initialization Reason", "docsis_tlv.cm_init_reason",
8058 FT_UINT16, BASE_DEC, VALS (init_reason_vals), 0x0,
8059 NULL, HFILL}
8061 {&hf_docsis_tlv_sw_upg_srvr_ipv6,
8062 {"58 Software Upgrade Server IPv6", "docsis_tlv.sw_upg_srvr_ipv6",
8063 FT_IPv6, BASE_NONE, NULL, 0x0,
8064 NULL, HFILL}
8066 {&hf_docsis_tlv_tftp_prov_cm_ipv6_addr,
8067 {"59 TFTP Server Provisioned Modem IPv6 Address", "docsis_tlv.tftp_prov_cm_ipv6_addr",
8068 FT_IPv6, BASE_NONE, NULL, 0x0,
8069 NULL, HFILL}
8071 {&hf_docsis_tlv_us_drop_clfy,
8072 {"60 Upstream Drop Packet Classification Encoding", "docsis_tlv.us_drop_clfy",
8073 FT_BYTES, BASE_NONE, NULL, 0x0,
8074 NULL, HFILL}
8076 {&hf_docsis_tlv_subs_mgmt_ipv6_lst,
8077 {"61 Subscriber Management CPE IPv6 Prefix List", "docsis_tlv.subs_mgmt_ipv6_lst",
8078 FT_BYTES, BASE_NONE, NULL, 0x0,
8079 NULL, HFILL}
8081 {&hf_docsis_tlv_us_drop_clfy_group_id,
8082 {"62 Upstream Drop Classifier Group ID", "docsis_tlv.us_drop_clfy_group_id",
8083 FT_BYTES, BASE_NONE, NULL, 0x0,
8084 NULL, HFILL}
8086 {&hf_docsis_tlv_subs_mgmt_ctrl_max_cpe_ipv6,
8087 {"63 Subscriber Management Control Max CPE IPv6 Prefix", "docsis_tlv.subs_mgmt_ctrl_max_cpe_ipv6",
8088 FT_UINT16, BASE_DEC, NULL, 0x0,
8089 NULL, HFILL}
8091 #if 0
8092 {&hf_docsis_tlv_cmts_mc_sess_enc,
8093 {"64 CMTS Static Multicast Session Encoding", "docsis_tlv.cmts_mc_sess_enc",
8094 FT_BYTES, BASE_NONE, NULL, 0x0,
8095 NULL, HFILL}
8097 #endif
8098 {&hf_docsis_cmts_mc_sess_enc_grp,
8099 {".1 Multicast Group Address", "docsis_tlv.cmts_mc_sess_enc.grp",
8100 FT_IPXNET, BASE_NONE, NULL, 0x0,
8101 NULL, HFILL}
8103 {&hf_docsis_cmts_mc_sess_enc_src,
8104 {".2 Source IP Address", "docsis_tlv.cmts_mc_sess_enc.src",
8105 FT_IPXNET, BASE_NONE, NULL, 0x0,
8106 NULL, HFILL}
8108 {&hf_docsis_cmts_mc_sess_enc_cmim,
8109 {".3 CMIM", "docsis_tlv.cmts_mc_sess_enc.cmim",
8110 FT_BYTES, BASE_NONE, NULL, 0x0,
8111 NULL, HFILL}
8113 {&hf_docsis_tlv_em_mode_ind,
8114 {"75 Energy Management Mode Indicator", "docsis_tlv.em_mode_ind",
8115 FT_UINT8, BASE_DEC, VALS(em_mode_ind_vals), 0x0,
8116 NULL, HFILL}
8118 {&hf_docsis_tlv_em_id_list_for_cm_em_id,
8119 {"Energy Management Identifier", "docsis_tlv.em_id_list_for_cm.em_id",
8120 FT_UINT16, BASE_DEC, NULL, 0x0,
8121 NULL, HFILL}
8123 {&hf_docsis_tlv_fdx_tg_assignment_tg_id,
8124 {"Transmission Group ID", "docsis_tlv.fdx_tg_assignment_tg_id",
8125 FT_UINT8, BASE_DEC, NULL, 0x0,
8126 NULL, HFILL}
8128 {&hf_docsis_tlv_fdx_tg_assignment_rba_type,
8129 {"RBA Type", "docsis_tlv.fdx_tg_assignment_rba_type",
8130 FT_UINT8, BASE_DEC, VALS (rba_type_vals), 0x0,
8131 NULL, HFILL}
8133 {&hf_docsis_tlv_fdx_reset,
8134 {"86 FDX Reset", "docsis_tlv.fdx_reset",
8135 FT_UINT8, BASE_DEC, VALS (fdx_reset_vals), 0x0,
8136 NULL, HFILL}
8138 {&hf_docsis_tlv_unknown,
8139 {"Unknown TLV", "docsis_tlv.unknown",
8140 FT_BYTES, BASE_NONE, NULL, 0x0,
8141 NULL, HFILL}
8143 {&hf_docsis_tlv_unknown_type,
8144 {"Type", "docsis_tlv.unknown.type",
8145 FT_UINT8, BASE_DEC, NULL, 0x0,
8146 NULL, HFILL}
8148 {&hf_docsis_tlv_unknown_length,
8149 {"Length", "docsis_tlv.unknown.length",
8150 FT_UINT8, BASE_DEC, NULL, 0x0,
8151 NULL, HFILL}
8153 {&hf_docsis_tlv_unknown_value,
8154 {"Value", "docsis_tlv.unknown.value",
8155 FT_BYTES, BASE_NONE, NULL, 0x0,
8156 NULL, HFILL}
8158 { &hf_docsis_ucd_fragment_overlap,
8159 { "Fragment overlap", "docsis_tlv.ucd.fragment.overlap",
8160 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
8161 "Fragment overlaps with other fragments", HFILL}
8163 { &hf_docsis_ucd_fragment_overlap_conflict,
8164 { "Conflicting data in fragment overlap", "docsis_tlv.ucd.fragment.overlap.conflict",
8165 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
8166 "Overlapping fragments contained conflicting data", HFILL}
8168 { &hf_docsis_ucd_fragment_multiple_tails,
8169 { "Multiple tail fragments found", "docsis_tlv.ucd.fragment.multipletails",
8170 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
8171 "Several tails were found when defragmenting the packet", HFILL}
8173 { &hf_docsis_ucd_fragment_too_long_fragment,
8174 { "Fragment too long", "docsis_tlv.ucd.fragment.toolongfragment",
8175 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
8176 "Fragment contained data past end of packet", HFILL}
8178 { &hf_docsis_ucd_fragment_error,
8179 { "Defragmentation error", "docsis_tlv.ucd.fragment.error",
8180 FT_FRAMENUM, BASE_NONE, NULL, 0x0,
8181 "Defragmentation error due to illegal fragments", HFILL}
8183 { &hf_docsis_ucd_fragment_count,
8184 { "Fragment count", "docsis_tlv.ucd.fragment.count",
8185 FT_UINT32, BASE_DEC, NULL, 0x0,
8186 NULL, HFILL}
8188 { &hf_docsis_ucd_fragment,
8189 { "UCD Fragment", "docsis_tlv.ucd.fragment",
8190 FT_FRAMENUM, BASE_NONE, NULL, 0x0,
8191 NULL, HFILL}
8193 { &hf_docsis_ucd_fragments,
8194 { "UCD Fragments", "docsis_tlv.ucd.fragments",
8195 FT_BYTES, BASE_NONE, NULL, 0x0,
8196 NULL, HFILL}
8198 { &hf_docsis_ucd_reassembled_in,
8199 { "Reassembled UCD in frame", "docsis_tlv.ucd.reassembled_in",
8200 FT_FRAMENUM, BASE_NONE, NULL, 0x0,
8201 "This UCD packet is reassembled in this frame", HFILL}
8203 { &hf_docsis_ucd_reassembled_length,
8204 { "Reassembled UCD length", "docsis_tlv.ucd.reassembled.length",
8205 FT_UINT32, BASE_DEC, NULL, 0x0,
8206 "The total length of the reassembled payload", HFILL}
8208 { &hf_docsis_ucd_reassembled_data,
8209 { "Reassembled UCD data", "docsis_tlv.ucd.reassembled.data",
8210 FT_BYTES, BASE_NONE, NULL, 0x0,
8211 "The reassembled payload", HFILL}
8213 { &hf_docsis_ucd_reassembled,
8214 { ".5 Reassembled UCD", "docsis_tlv.ucd.reassembled",
8215 FT_BYTES, BASE_NONE, NULL, 0x0,
8216 "The reassembled UCD", HFILL}
8221 static int *ett[] = {
8222 &ett_docsis_tlv,
8223 &ett_docsis_tlv_cos,
8224 &ett_docsis_tlv_mcap,
8225 &ett_docsis_tlv_mcap_em,
8226 &ett_docsis_tlv_mcap_em_pref,
8227 &ett_docsis_tlv_mcap_ofdm_chan_subc_qam_mod_sup,
8228 &ett_docsis_tlv_mcap_ofdma_chan_subc_qam_mod_sup,
8229 &ett_docsis_tlv_mcap_down_lower_band_edge_conf,
8230 &ett_docsis_tlv_mcap_down_upper_band_edge_conf,
8231 &ett_docsis_tlv_mcap_dipl_down_lower_band_edge,
8232 &ett_docsis_tlv_mcap_dipl_down_upper_band_edge,
8233 &ett_docsis_tlv_mcap_dipl_up_upper_band_edge,
8234 &ett_docsis_tlv_mcap_advanced_band_plan,
8235 &ett_docsis_tlv_mcap_dipl_down_lower_band_edge_options_list,
8236 &ett_docsis_tlv_mcap_dipl_down_upper_band_edge_options_list,
8237 &ett_docsis_tlv_mcap_dipl_up_upper_band_edge_options_list,
8238 &ett_docsis_tlv_clsfr,
8239 &ett_docsis_tlv_clsfr_ip,
8240 &ett_docsis_tlv_clsfr_ip6,
8241 &ett_docsis_tlv_clsfr_ip6_tc,
8242 &ett_docsis_tlv_clsfr_eth,
8243 &ett_docsis_tlv_clsfr_err,
8244 &ett_docsis_tlv_clsfr_dot1q,
8245 &ett_docsis_tlv_reqxmitpol,
8246 &ett_docsis_tlv_sflow_err,
8247 &ett_docsis_tlv_phs,
8248 &ett_docsis_tlv_phs_err,
8249 &ett_docsis_tlv_svc_unavail,
8250 &ett_docsis_tlv_snmpv3_kick,
8251 &ett_docsis_tlv_ds_ch_list,
8252 &ett_docsis_tlv_ds_ch_list_single,
8253 &ett_docsis_tlv_ds_ch_list_range,
8254 &ett_docsis_tlv_ext_field,
8255 &ett_docsis_tlv_vendor_specific_cap,
8256 &ett_docsis_tlv_dut_filter,
8257 &ett_docsis_tlv_tcc,
8258 &ett_docsis_tlv_tcc_ucd,
8259 &ett_docsis_tlv_tcc_rng_parms,
8260 &ett_docsis_tlv_tcc_oudp,
8261 &ett_docsis_tlv_tcc_err,
8262 &ett_docsis_tlv_sid_cl,
8263 &ett_docsis_tlv_sid_cl_enc,
8264 &ett_docsis_tlv_sid_cl_enc_map,
8265 &ett_docsis_tlv_sid_cl_so,
8266 &ett_docsis_tlv_rcp,
8267 &ett_docsis_tlv_rcp_rcv_mod_enc,
8268 &ett_docsis_tlv_rcp_ch_bl_rng,
8269 &ett_docsis_tlv_rcp_rcv_ch,
8270 &ett_docsis_tlv_rcc,
8271 &ett_docsis_tlv_rcc_rcv_mod_enc,
8272 &ett_docsis_tlv_rcc_rcv_ch,
8273 &ett_docsis_tlv_rcc_partial_serv_down_chan,
8274 &ett_docsis_tlv_rcc_srcc,
8275 &ett_docsis_tlv_rcc_srcc_prim_ds_assign,
8276 &ett_docsis_tlv_rcc_srcc_ds_assign,
8277 &ett_docsis_tlv_rcc_srcc_ds_prof_assign,
8278 &ett_docsis_tlv_rcc_srcc_ds_prof_assign_prof_list,
8279 &ett_docsis_tlv_rcc_err,
8280 &ett_docsis_tlv_dsid,
8281 &ett_docsis_tlv_dsid_ds_reseq,
8282 &ett_docsis_tlv_dsid_mc,
8283 &ett_docsis_tlv_dsid_mc_addr,
8284 &ett_docsis_tlv_sec_assoc,
8285 &ett_docsis_tlv_ch_asgn,
8286 &ett_docsis_cmts_mc_sess_enc,
8287 &ett_docsis_em_id_list_for_cm,
8288 &ett_docsis_tlv_tg_assignment,
8289 &ett_docsis_tlv_unknown,
8290 &ett_docsis_ucd_fragment,
8291 &ett_docsis_ucd_fragments,
8292 &ett_docsis_ucd_reassembled,
8295 static ei_register_info ei[] = {
8296 {&ei_docsis_tlv_tlvlen_bad, { "docsis_tlv.tlvlenbad", PI_MALFORMED, PI_ERROR, "Bad TLV length", EXPFILL}},
8297 {&ei_docsis_tlv_tlvval_bad, { "docsis_tlv.tlvvalbad", PI_PROTOCOL, PI_WARN, "Wrong TLV value", EXPFILL}},
8300 expert_module_t* expert_docsis_tlv;
8302 proto_docsis_tlv = proto_register_protocol ("DOCSIS Appendix C TLVs", "DOCSIS TLVs", "docsis_tlv");
8304 proto_register_field_array (proto_docsis_tlv, hf, array_length (hf));
8305 proto_register_subtree_array (ett, array_length (ett));
8306 expert_docsis_tlv = expert_register_protocol(proto_docsis_tlv);
8307 expert_register_field_array(expert_docsis_tlv, ei, array_length(ei));
8309 register_dissector ("docsis_tlv", dissect_docsis_tlv, proto_docsis_tlv);
8312 void
8313 proto_reg_handoff_docsis_tlv (void)
8315 #if 0
8316 dissector_handle_t docsis_tlv_handle;
8318 docsis_tlv_handle = find_dissector ("docsis_tlv");
8319 dissector_add_uint ("docsis", 0xFF, docsis_tlv_handle);
8320 #endif
8322 docsis_vsif_handle = find_dissector("docsis_vsif");
8323 docsis_ucd_handle = find_dissector("docsis_ucd");
8324 docsis_rba_handle = find_dissector("docsis_rba");
8326 reassembly_table_register(&ucd_reassembly_table,
8327 &addresses_reassembly_table_functions);
8333 * Editor modelines - https://www.wireshark.org/tools/modelines.html
8335 * Local Variables:
8336 * c-basic-offset: 2
8337 * tab-width: 8
8338 * indent-tabs-mode: nil
8339 * End:
8341 * ex: set shiftwidth=2 tabstop=8 expandtab:
8342 * :indentSize=2:tabSize=8:noTabs=true: