* Based on PKT-SP-DQOS-I09-040402 (April 2, 2004)
*
* PacketCable Multimedia Specification
- * Based on PKT-SP-MM-I02-040930
+ * Based on PKT-SP-MM-I04-080522
*
* www.packetcable.com
*
static gint hf_cops_pcmm_max_traffic_burst = -1;
static gint hf_cops_pcmm_min_reserved_traffic_rate = -1;
static gint hf_cops_pcmm_ass_min_rtr_packet_size = -1;
+static gint hf_cops_pcmm_max_concat_burst = -1;
+static gint hf_cops_pcmm_req_att_mask = -1;
+static gint hf_cops_pcmm_forbid_att_mask = -1;
static gint hf_cops_pcmm_nominal_polling_interval = -1;
static gint hf_cops_pcmm_tolerated_poll_jitter = -1;
static gint hf_cops_pcmm_unsolicited_grant_size = -1;
static gint hf_cops_pcmm_grants_per_interval = -1;
static gint hf_cops_pcmm_nominal_grant_interval = -1;
static gint hf_cops_pcmm_tolerated_grant_jitter = -1;
+static gint hf_cops_pcmm_down_resequencing = -1;
+static gint hf_cops_pcmm_down_peak_traffic_rate = -1;
static gint hf_cops_pcmm_max_downstream_latency = -1;
static gint hf_cops_pcmm_volume_based_usage_limit = -1;
static gint hf_cops_pcmm_time_based_usage_limit = -1;
static gint hf_cops_pcmm_synch_options_report_type = -1;
static gint hf_cops_pcmm_synch_options_synch_type = -1;
static gint hf_cops_pcmm_msg_receipt_key = -1;
+static gint hf_cops_pcmm_userid = -1;
/* Initialize the subtree pointers */
guint16 client_type;
int object_len;
- if (check_col(pinfo->cinfo, COL_PROTOCOL))
- col_set_str(pinfo->cinfo, COL_PROTOCOL, "COPS");
- if (check_col(pinfo->cinfo, COL_INFO))
- col_clear(pinfo->cinfo, COL_INFO);
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, "COPS");
+ col_clear(pinfo->cinfo, COL_INFO);
op_code = tvb_get_guint8(tvb, 1);
if (check_col(pinfo->cinfo, COL_INFO))
},
{ &hf_cops_in_int_ipv4,
{ "IPv4 address", "cops.in-int.ipv4",
- FT_IPv4, 0, NULL, 0,
+ FT_IPv4, BASE_NONE, NULL, 0,
"IPv4 address in COPS IN-Int object", HFILL }
},
{ &hf_cops_in_int_ipv6,
{ "IPv6 address", "cops.in-int.ipv6",
- FT_IPv6, 0, NULL, 0,
+ FT_IPv6, BASE_NONE, NULL, 0,
"IPv6 address in COPS IN-Int object", HFILL }
},
{ &hf_cops_out_int_ipv4,
{ "IPv4 address", "cops.out-int.ipv4",
- FT_IPv4, 0, NULL, 0,
+ FT_IPv4, BASE_NONE, NULL, 0,
"IPv4 address in COPS OUT-Int object", HFILL }
},
{ &hf_cops_out_int_ipv6,
{ "IPv6 address", "cops.out-int.ipv6",
- FT_IPv6, 0, NULL, 0,
+ FT_IPv6, BASE_NONE, NULL, 0,
"IPv6 address in COPS OUT-Int", HFILL }
},
{ &hf_cops_int_ifindex,
},
{ &hf_cops_pdprediraddr_ipv4,
{ "IPv4 address", "cops.pdprediraddr.ipv4",
- FT_IPv4, 0, NULL, 0,
+ FT_IPv4, BASE_NONE, NULL, 0,
"IPv4 address in COPS PDPRedirAddr object", HFILL }
},
{ &hf_cops_pdprediraddr_ipv6,
{ "IPv6 address", "cops.pdprediraddr.ipv6",
- FT_IPv6, 0, NULL, 0,
+ FT_IPv6, BASE_NONE, NULL, 0,
"IPv6 address in COPS PDPRedirAddr object", HFILL }
},
{ &hf_cops_lastpdpaddr_ipv4,
{ "IPv4 address", "cops.lastpdpaddr.ipv4",
- FT_IPv4, 0, NULL, 0,
+ FT_IPv4, BASE_NONE, NULL, 0,
"IPv4 address in COPS LastPDPAddr object", HFILL }
},
{ &hf_cops_lastpdpaddr_ipv6,
{ "IPv6 address", "cops.lastpdpaddr.ipv6",
- FT_IPv6, 0, NULL, 0,
+ FT_IPv6, BASE_NONE, NULL, 0,
"IPv6 address in COPS LastPDPAddr object", HFILL }
},
{ &hf_cops_pdp_tcp_port,
FT_UINT16, BASE_HEX, NULL, 0,
"Error Sub-code in Error object", HFILL }
},
- { &hf_cops_prid_oid, { "PRID Instance Identifier", "cops.prid.instance_id", FT_OID, BASE_NONE, NULL, 0, "", HFILL } },
- { &hf_cops_pprid_oid, { "Prefix Identifier", "cops.pprid.prefix_id", FT_OID, BASE_NONE, NULL, 0, "", HFILL } },
- { &hf_cops_errprid_oid, { "ErrorPRID Instance Identifier", "cops.errprid.instance_id", FT_OID, BASE_NONE, NULL, 0, "", HFILL } },
- { &hf_cops_epd_unknown, { "EPD Unknown Data", "cops.epd.unknown", FT_BYTES, BASE_NONE, NULL, 0, "", HFILL } },
- { &hf_cops_epd_null, { "EPD Null Data", "cops.epd.null", FT_BYTES, BASE_NONE, NULL, 0, "", HFILL } },
- { &hf_cops_epd_int, { "EPD Integer Data", "cops.epd.int", FT_INT64, BASE_DEC, NULL, 0, "", HFILL } },
- { &hf_cops_epd_octets, { "EPD Octet String Data", "cops.epd.octets", FT_BYTES, BASE_NONE, NULL, 0, "", HFILL } },
- { &hf_cops_epd_oid, { "EPD OID Data", "cops.epd.oid", FT_OID, BASE_NONE, NULL, 0, "", HFILL } },
- { &hf_cops_epd_ipv4, { "EPD IPAddress Data", "cops.epd.ipv4", FT_IPv4, BASE_NONE, NULL, 0, "", HFILL } },
- { &hf_cops_epd_u32, { "EPD Unsigned32 Data", "cops.epd.unsigned32", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL } },
- { &hf_cops_epd_ticks, { "EPD TimeTicks Data", "cops.epd.timeticks", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL } },
- { &hf_cops_epd_opaque, { "EPD Opaque Data", "cops.epd.opaque", FT_BYTES, BASE_NONE, NULL, 0, "", HFILL } },
- { &hf_cops_epd_i64, { "EPD Inetger64 Data", "cops.epd.integer64", FT_INT64, BASE_DEC, NULL, 0, "", HFILL } },
- { &hf_cops_epd_u64, { "EPD Unsigned64 Data", "cops.epd.unsigned64", FT_UINT64, BASE_DEC, NULL, 0, "", HFILL } },
+ { &hf_cops_prid_oid, { "PRID Instance Identifier", "cops.prid.instance_id", FT_OID, BASE_NONE, NULL, 0, NULL, HFILL } },
+ { &hf_cops_pprid_oid, { "Prefix Identifier", "cops.pprid.prefix_id", FT_OID, BASE_NONE, NULL, 0, NULL, HFILL } },
+ { &hf_cops_errprid_oid, { "ErrorPRID Instance Identifier", "cops.errprid.instance_id", FT_OID, BASE_NONE, NULL, 0, NULL, HFILL } },
+ { &hf_cops_epd_unknown, { "EPD Unknown Data", "cops.epd.unknown", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } },
+ { &hf_cops_epd_null, { "EPD Null Data", "cops.epd.null", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } },
+ { &hf_cops_epd_int, { "EPD Integer Data", "cops.epd.int", FT_INT64, BASE_DEC, NULL, 0, NULL, HFILL } },
+ { &hf_cops_epd_octets, { "EPD Octet String Data", "cops.epd.octets", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } },
+ { &hf_cops_epd_oid, { "EPD OID Data", "cops.epd.oid", FT_OID, BASE_NONE, NULL, 0, NULL, HFILL } },
+ { &hf_cops_epd_ipv4, { "EPD IPAddress Data", "cops.epd.ipv4", FT_IPv4, BASE_NONE, NULL, 0, NULL, HFILL } },
+ { &hf_cops_epd_u32, { "EPD Unsigned32 Data", "cops.epd.unsigned32", FT_UINT64, BASE_DEC, NULL, 0, NULL, HFILL } },
+ { &hf_cops_epd_ticks, { "EPD TimeTicks Data", "cops.epd.timeticks", FT_UINT64, BASE_DEC, NULL, 0, NULL, HFILL } },
+ { &hf_cops_epd_opaque, { "EPD Opaque Data", "cops.epd.opaque", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } },
+ { &hf_cops_epd_i64, { "EPD Inetger64 Data", "cops.epd.integer64", FT_INT64, BASE_DEC, NULL, 0, NULL, HFILL } },
+ { &hf_cops_epd_u64, { "EPD Unsigned64 Data", "cops.epd.unsigned64", FT_UINT64, BASE_DEC, NULL, 0, NULL, HFILL } },
/* Added for PacketCable */
{ &hf_cops_subtree,
{ "Object Subtree", "cops.pc_subtree",
FT_NONE, BASE_NONE, NULL, 0,
- "Object Subtree", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_ds_field,
{ "DS Field (DSCP or TOS)", "cops.pc_ds_field",
FT_UINT8, BASE_HEX, NULL, 0x00,
- "DS Field (DSCP or TOS)", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_direction,
{ "Direction", "cops.pc_direction",
FT_UINT8, BASE_HEX, NULL, 0x00,
- "Direction", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_gate_spec_flags,
{ "Flags", "cops.pc_gate_spec_flags",
FT_UINT8, BASE_HEX, NULL, 0x00,
- "Flags", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_protocol_id,
{ "Protocol ID", "cops.pc_protocol_id",
FT_UINT8, BASE_HEX, NULL, 0x00,
- "Protocol ID", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_session_class,
{ "Session Class", "cops.pc_session_class",
FT_UINT8, BASE_HEX, NULL, 0x00,
- "Session Class", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_algorithm,
{ "Algorithm", "cops.pc_algorithm",
FT_UINT16, BASE_HEX, NULL, 0x00,
- "Algorithm", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_cmts_ip_port,
{ "CMTS IP Port", "cops.pc_cmts_ip_port",
FT_UINT16, BASE_HEX, NULL, 0x00,
- "CMTS IP Port", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_prks_ip_port,
{ "PRKS IP Port", "cops.pc_prks_ip_port",
FT_UINT16, BASE_HEX, NULL, 0x00,
- "PRKS IP Port", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_srks_ip_port,
{ "SRKS IP Port", "cops.pc_srks_ip_port",
FT_UINT16, BASE_HEX, NULL, 0x00,
- "SRKS IP Port", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_dest_port,
{ "Destination IP Port", "cops.pc_dest_port",
FT_UINT16, BASE_HEX, NULL, 0x00,
- "Destination IP Port", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_packetcable_err_code,
{ "Error Code", "cops.pc_packetcable_err_code",
FT_UINT16, BASE_HEX, NULL, 0x00,
- "Error Code", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_packetcable_sub_code,
{ "Error Sub Code", "cops.pc_packetcable_sub_code",
FT_UINT16, BASE_HEX, NULL, 0x00,
- "Error Sub Code", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_remote_flags,
{ "Flags", "cops.pc_remote_flags",
FT_UINT16, BASE_HEX, NULL, 0x00,
- "Flags", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_close_subcode,
{ "Reason Sub Code", "cops.pc_close_subcode",
FT_UINT16, BASE_HEX, NULL, 0x00,
- "Reason Sub Code", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_gate_command_type,
{ "Gate Command Type", "cops.pc_gate_command_type",
FT_UINT16, BASE_HEX, NULL, 0x00,
- "Gate Command Type", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_reason_code,
{ "Reason Code", "cops.pc_reason_code",
FT_UINT16, BASE_HEX, NULL, 0x00,
- "Reason Code", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_delete_subcode,
{ "Reason Sub Code", "cops.pc_delete_subcode",
FT_UINT16, BASE_HEX, NULL, 0x00,
- "Reason Sub Code", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_src_port,
{ "Source IP Port", "cops.pc_src_port",
FT_UINT16, BASE_HEX, NULL, 0x00,
- "Source IP Port", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_t1_value,
{ "Timer T1 Value (sec)", "cops.pc_t1_value",
FT_UINT16, BASE_HEX, NULL, 0x00,
- "Timer T1 Value (sec)", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_t7_value,
{ "Timer T7 Value (sec)", "cops.pc_t7_value",
FT_UINT16, BASE_HEX, NULL, 0x00,
- "Timer T7 Value (sec)", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_t8_value,
{ "Timer T8 Value (sec)", "cops.pc_t8_value",
FT_UINT16, BASE_HEX, NULL, 0x00,
- "Timer T8 Value (sec)", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_transaction_id,
{ "Transaction Identifier", "cops.pc_transaction_id",
FT_UINT16, BASE_HEX, NULL, 0x00,
- "Transaction Identifier", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_cmts_ip,
{ "CMTS IP Address", "cops.pc_cmts_ip",
- FT_IPv4, BASE_HEX, NULL, 0x00,
- "CMTS IP Address", HFILL }
+ FT_IPv4, BASE_NONE, NULL, 0x00,
+ NULL, HFILL }
},
{ &hf_cops_pc_prks_ip,
{ "PRKS IP Address", "cops.pc_prks_ip",
- FT_IPv4, BASE_HEX, NULL, 0x00,
- "PRKS IP Address", HFILL }
+ FT_IPv4, BASE_NONE, NULL, 0x00,
+ NULL, HFILL }
},
{ &hf_cops_pc_srks_ip,
{ "SRKS IP Address", "cops.pc_srks_ip",
- FT_IPv4, BASE_HEX, NULL, 0x00,
- "SRKS IP Address", HFILL }
+ FT_IPv4, BASE_NONE, NULL, 0x00,
+ NULL, HFILL }
},
{ &hf_cops_pc_dfcdc_ip,
{ "DF IP Address CDC", "cops.pc_dfcdc_ip",
- FT_IPv4, BASE_HEX, NULL, 0x00,
- "DF IP Address CDC", HFILL }
+ FT_IPv4, BASE_NONE, NULL, 0x00,
+ NULL, HFILL }
},
{ &hf_cops_pc_dfccc_ip,
{ "DF IP Address CCC", "cops.pc_dfccc_ip",
- FT_IPv4, BASE_HEX, NULL, 0x00,
- "DF IP Address CCC", HFILL }
+ FT_IPv4, BASE_NONE, NULL, 0x00,
+ NULL, HFILL }
},
{ &hf_cops_pc_dfcdc_ip_port,
{ "DF IP Port CDC", "cops.pc_dfcdc_ip_port",
FT_UINT16, BASE_HEX, NULL, 0x00,
- "DF IP Port CDC", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_dfccc_ip_port,
{ "DF IP Port CCC", "cops.pc_dfccc_ip_port",
FT_UINT16, BASE_HEX, NULL, 0x00,
- "DF IP Port CCC", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_dfccc_id,
{ "CCC ID", "cops.pc_dfccc_id",
FT_UINT32, BASE_DEC, NULL, 0x00,
- "CCC ID", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_activity_count,
{ "Count", "cops.pc_activity_count",
FT_UINT32, BASE_HEX, NULL, 0x00,
- "Count", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_dest_ip,
{ "Destination IP Address", "cops.pc_dest_ip",
- FT_IPv4, BASE_HEX, NULL, 0x00,
- "Destination IP Address", HFILL }
+ FT_IPv4, BASE_NONE, NULL, 0x00,
+ NULL, HFILL }
},
{ &hf_cops_pc_gate_id,
{ "Gate Identifier", "cops.pc_gate_id",
FT_UINT32, BASE_HEX, NULL, 0x00,
- "Gate Identifier", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_max_packet_size,
{ "Maximum Packet Size", "cops.pc_max_packet_size",
FT_UINT32, BASE_HEX, NULL, 0x00,
- "Maximum Packet Size", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_min_policed_unit,
{ "Minimum Policed Unit", "cops.pc_min_policed_unit",
FT_UINT32, BASE_HEX, NULL, 0x00,
- "Minimum Policed Unit", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_peak_data_rate,
{ "Peak Data Rate", "cops.pc_peak_data_rate",
FT_FLOAT, BASE_NONE, NULL, 0x00,
- "Peak Data Rate", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_spec_rate,
{ "Rate", "cops.pc_spec_rate",
FT_FLOAT, BASE_NONE, NULL, 0x00,
- "Rate", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_remote_gate_id,
{ "Remote Gate ID", "cops.pc_remote_gate_id",
FT_UINT32, BASE_HEX, NULL, 0x00,
- "Remote Gate ID", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_reserved,
{ "Reserved", "cops.pc_reserved",
FT_UINT32, BASE_HEX, NULL, 0x00,
- "Reserved", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_key,
{ "Security Key", "cops.pc_key",
FT_UINT32, BASE_HEX, NULL, 0x00,
- "Security Key", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_slack_term,
{ "Slack Term", "cops.pc_slack_term",
FT_UINT32, BASE_HEX, NULL, 0x00,
- "Slack Term", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_src_ip,
{ "Source IP Address", "cops.pc_src_ip",
- FT_IPv4, BASE_HEX, NULL, 0x00,
- "Source IP Address", HFILL }
+ FT_IPv4, BASE_NONE, NULL, 0x00,
+ NULL, HFILL }
},
{ &hf_cops_pc_subscriber_id_ipv4,
{ "Subscriber Identifier (IPv4)", "cops.pc_subscriber_id4",
- FT_IPv4, BASE_HEX, NULL, 0x00,
- "Subscriber Identifier (IPv4)", HFILL }
+ FT_IPv4, BASE_NONE, NULL, 0x00,
+ NULL, HFILL }
},
{ &hf_cops_pc_subscriber_id_ipv6,
{ "Subscriber Identifier (IPv6)", "cops.pc_subscriber_id6",
- FT_IPv6, BASE_HEX, NULL, 0x00,
- "Subscriber Identifier (IPv6)", HFILL }
+ FT_IPv6, BASE_NONE, NULL, 0x00,
+ NULL, HFILL }
},
{ &hf_cops_pc_token_bucket_rate,
{ "Token Bucket Rate", "cops.pc_token_bucket_rate",
FT_FLOAT, BASE_NONE, NULL, 0x00,
- "Token Bucket Rate", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_token_bucket_size,
{ "Token Bucket Size", "cops.pc_token_bucket_size",
FT_FLOAT, BASE_NONE, NULL, 0x00,
- "Token Bucket Size", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_bcid,
{ "Billing Correlation ID", "cops.pc_bcid",
FT_UINT32, BASE_HEX, NULL, 0x00,
- "Billing Correlation ID", HFILL }
+ NULL, HFILL }
},
{ &hf_cops_pc_bcid_ts,
{ "BDID Timestamp", "cops.pc_bcid_ts",
},
{ &hf_cops_pcmm_classifier_src_addr,
{ "Source address", "cops.pc_mm_classifier_src_addr",
- FT_IPv4, 0, NULL, 0,
+ FT_IPv4, BASE_NONE, NULL, 0,
"PacketCable Multimedia Classifier Source IP Address", HFILL }
},
{ &hf_cops_pcmm_classifier_src_mask,
{ "Source mask", "cops.pc_mm_classifier_src_mask",
- FT_IPv4, 0, NULL, 0,
+ FT_IPv4, BASE_NONE, NULL, 0,
"PacketCable Multimedia Classifier Source Mask", HFILL }
},
{ &hf_cops_pcmm_classifier_dst_addr,
{ "Destination address", "cops.pc_mm_classifier_dst_addr",
- FT_IPv4, 0, NULL, 0,
+ FT_IPv4, BASE_NONE, NULL, 0,
"PacketCable Multimedia Classifier Destination IP Address", HFILL }
},
{ &hf_cops_pcmm_classifier_dst_mask,
{ "Destination address", "cops.pc_mm_classifier_dst_mask",
- FT_IPv4, 0, NULL, 0,
+ FT_IPv4, BASE_NONE, NULL, 0,
"PacketCable Multimedia Classifier Destination Mask", HFILL }
},
{ &hf_cops_pcmm_classifier_src_port,
{ &hf_cops_pcmm_docsis_scn,
{ "Service Class Name", "cops.pc_mm_docsis_scn",
- FT_STRINGZ, BASE_DEC, NULL, 0,
+ FT_STRINGZ, BASE_NONE, NULL, 0,
"PacketCable Multimedia DOCSIS Service Class Name", HFILL }
},
FT_UINT16, BASE_DEC, NULL, 0,
"PacketCable Multimedia Committed Envelope Assumed Minimum Reserved Traffic Rate Packet Size", HFILL }
},
+ { &hf_cops_pcmm_max_concat_burst,
+ { "Maximum Concatenated Burst", "cops.pc_mm_mcburst",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ "PacketCable Multimedia Committed Envelope Maximum Concatenated Burst", HFILL }
+ },
+ { &hf_cops_pcmm_req_att_mask,
+ { "Required Attribute Mask", "cops.pc_mm_ramask",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ "PacketCable Multimedia Committed Envelope Required Attribute Mask", HFILL }
+ },
+ { &hf_cops_pcmm_forbid_att_mask,
+ { "Forbidden Attribute Mask", "cops.pc_mm_famask",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ "PacketCable Multimedia Committed Envelope Forbidden Attribute Mask", HFILL }
+ },
{ &hf_cops_pcmm_nominal_polling_interval,
{ "Nominal Polling Interval", "cops.pc_mm_npi",
"PacketCable Multimedia Tolerated Grant Jitter", HFILL }
},
+ { &hf_cops_pcmm_down_resequencing,
+ { "Downstream Resequencing", "cops.pc_mm_downres",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "PacketCable Multimedia Downstream Resequencing", HFILL }
+ },
+
+ { &hf_cops_pcmm_down_peak_traffic_rate,
+ { "Downstream Peak Traffic Rate", "cops.pc_mm_downpeak",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "PacketCable Multimedia Downstream Peak Traffic Rate", HFILL }
+ },
+
{ &hf_cops_pcmm_max_downstream_latency,
{ "Maximum Downstream Latency", "cops.pc_mm_mdl",
FT_UINT32, BASE_DEC, NULL, 0,
{ &hf_cops_pcmm_gate_usage_info,
{ "Gate Usage Info", "cops.pc_mm_gui",
- FT_UINT32, BASE_DEC, NULL, 0,
+ FT_UINT64, BASE_DEC, NULL, 0,
"PacketCable Multimedia Gate Usage Info", HFILL }
},
FT_UINT32, BASE_HEX, NULL, 0,
"PacketCable Multimedia Msg Receipt Key", HFILL }
},
+
+ { &hf_cops_pcmm_userid,
+ { "UserID", "cops.pc_mm_userid",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "PacketCable Multimedia UserID", HFILL }
+ },
+
/* End of addition for PacketCable */
};
#define FMT_IPv4 2
#define FMT_IPv6 3
#define FMT_FLT 4
+#define FMT_STR 5
/* Print the translated information in the display gui in a formatted way
*
* 2 -> print value as an IPv4 address
* 3 -> print value as an IPv6 address
* 4 -> print value as an IEEE float
+ * 5 -> print value as a string
*
* This function in combination with the separate function info_to_cops_subtree() for subtrees.
*
info_to_display(tvbuff_t *tvb, proto_item *stt, int offset, int octets, const char *str, const value_string *vsp, int mode,gint *hf_proto_parameter)
{
proto_item *pi = NULL;
+ guint8 *codestr;
guint8 code8 = 0;
guint16 code16 = 0;
guint32 codeipv4 = 0;
guint32 code32 = 0;
- float codefl = 0.0;
+ guint64 code64 = 0;
+ float codefl = 0.0f;
+
+ /* Special section for printing strings */
+ if (mode==FMT_STR) {
+ codestr = tvb_get_ephemeral_string(tvb, offset, octets);
+ pi = proto_tree_add_string_format(stt, *hf_proto_parameter, tvb,
+ offset, octets, codestr, "%-28s : %s", str, codestr);
+ return pi;
+ }
/* Print information elements in the specified way */
switch (octets) {
break;
/* In case of more than 4 octets.... */
- default: {
+ default:
+
if (mode==FMT_HEX) {
pi = proto_tree_add_bytes(stt, *hf_proto_parameter,
tvb, offset, octets, tvb_get_ptr(tvb, offset,octets));
- } else if (mode==FMT_IPv6 && octets==16) {
- pi = proto_tree_add_ipv6(stt, *hf_proto_parameter, tvb, offset, octets,
- tvb_get_ptr(tvb, offset, octets));
+ } else if (mode==FMT_IPv6 && octets==16) {
+ pi = proto_tree_add_ipv6(stt, *hf_proto_parameter, tvb, offset, octets,
+ tvb_get_ptr(tvb, offset, octets));
+ } else if (mode==FMT_DEC && octets==8) {
+ code64 = tvb_get_ntoh64(tvb, offset);
+ pi = proto_tree_add_uint64_format(stt, *hf_proto_parameter, tvb, offset, octets,
+ code64, "%-28s : %" G_GINT64_MODIFIER "u", str, code64);
} else {
pi = proto_tree_add_uint_format(stt, *hf_proto_parameter,
tvb, offset, octets, code32,"%s",str);
- }
+ }
break;
- }
}
return pi;
offset += 2;
}
- /* Priority */
- info_to_display(tvb,stt,offset,1,"Priority",NULL,FMT_HEX,&hf_cops_pcmm_classifier_priority);
- offset += 1;
-
if (extended) {
/* ClassifierID */
info_to_display(tvb,stt,offset,2,"ClassifierID",NULL,FMT_HEX,&hf_cops_pcmm_classifier_classifier_id);
offset += 2;
+ }
+
+ /* Priority */
+ info_to_display(tvb,stt,offset,1,"Priority",NULL,FMT_HEX,&hf_cops_pcmm_classifier_priority);
+ offset += 1;
+ if (extended) {
/* Activation State */
info_to_display(tvb,stt,offset,1,"Activation State",NULL,FMT_HEX,&hf_cops_pcmm_classifier_activation_state);
offset += 1;
}
}
+/* New functions were made with the i04 suffix to maintain backward compatibility with I03
+*
+* BEGIN PCMM I04
+*
+*/
+
/* Cops - Section : Best Effort Service */
static void
-cops_best_effort_service(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+cops_best_effort_service_i04(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
proto_item *ti;
proto_tree *stt, *object_tree;
info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
offset += 2;
- /* Reserved */
- info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+ /* Maximum Concatenated Burst */
+ info_to_display(tvb,object_tree,offset,2,"Maximum Concatenated Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_concat_burst);
offset += 2;
+ /* Required Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Required Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_req_att_mask);
+ offset += 4;
+
+ /* Forbidden Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Forbidden Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_forbid_att_mask);
+ offset += 4;
+
if (n < 56) return;
/* Reserved Envelope */
info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
offset += 2;
- /* Reserved */
- info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
- offset += 2;
+ /* Maximum Concatenated Burst */
+ info_to_display(tvb,object_tree,offset,2,"Maximum Concatenated Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_concat_burst);
+ offset += 2;
+
+ /* Required Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Required Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_req_att_mask);
+ offset += 4;
+
+ /* Forbidden Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Forbidden Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_forbid_att_mask);
+ offset += 4;
if (n < 80) return;
info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
offset += 2;
- /* Reserved */
- info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+ /* Maximum Concatenated Burst */
+ info_to_display(tvb,object_tree,offset,2,"Maximum Concatenated Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_concat_burst);
offset += 2;
+
+ /* Required Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Required Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_req_att_mask);
+ offset += 4;
+
+ /* Forbidden Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Forbidden Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_forbid_att_mask);
+ offset += 4;
}
/* Cops - Section : Non-Real-Time Polling Service */
static void
-cops_non_real_time_polling_service(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+cops_non_real_time_polling_service_i04(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
proto_item *ti;
proto_tree *stt, *object_tree;
info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
offset += 2;
- /* Reserved */
- info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+ /* Maximum Concatenated Burst */
+ info_to_display(tvb,object_tree,offset,2,"Maximum Concatenated Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_concat_burst);
offset += 2;
/* Nominal Polling Interval */
info_to_display(tvb,object_tree,offset,4,"Nominal Polling Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_polling_interval);
offset += 4;
+ /* Required Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Required Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_req_att_mask);
+ offset += 4;
+
+ /* Forbidden Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Forbidden Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_forbid_att_mask);
+ offset += 4;
+
if (n < 64) return;
/* Reserved Envelope */
info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
offset += 2;
- /* Reserved */
- info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
- offset += 2;
+ /* Maximum Concatenated Burst */
+ info_to_display(tvb,object_tree,offset,2,"Maximum Concatenated Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_concat_burst);
+ offset += 2;
- /* Nominal Polling Interval */
- info_to_display(tvb,object_tree,offset,4,"Nominal Polling Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_polling_interval);
- offset += 4;
+ /* Nominal Polling Interval */
+ info_to_display(tvb,object_tree,offset,4,"Nominal Polling Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_polling_interval);
+ offset += 4;
+
+ /* Required Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Required Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_req_att_mask);
+ offset += 4;
+
+ /* Forbidden Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Forbidden Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_forbid_att_mask);
+ offset += 4;
if (n < 92) return;
info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
offset += 2;
- /* Reserved */
- info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
- offset += 2;
+ /* Maximum Concatenated Burst */
+ info_to_display(tvb,object_tree,offset,2,"Maximum Concatenated Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_concat_burst);
+ offset += 2;
- /* Nominal Polling Interval */
- info_to_display(tvb,object_tree,offset,4,"Nominal Polling Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_polling_interval);
- offset += 4;
+ /* Nominal Polling Interval */
+ info_to_display(tvb,object_tree,offset,4,"Nominal Polling Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_polling_interval);
+ offset += 4;
+
+ /* Required Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Required Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_req_att_mask);
+ offset += 4;
+
+ /* Forbidden Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Forbidden Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_forbid_att_mask);
+ offset += 4;
}
/* Cops - Section : Real-Time Polling Service */
static void
-cops_real_time_polling_service(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+cops_real_time_polling_service_i04(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
proto_item *ti;
proto_tree *stt, *object_tree;
info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
offset += 2;
- /* Reserved */
- info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+ /* Maximum Concatenated Burst */
+ info_to_display(tvb,object_tree,offset,2,"Maximum Concatenated Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_concat_burst);
offset += 2;
/* Nominal Polling Interval */
info_to_display(tvb,object_tree,offset,4,"Tolerated Poll Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_poll_jitter);
offset += 4;
+ /* Required Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Required Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_req_att_mask);
+ offset += 4;
+
+ /* Forbidden Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Forbidden Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_forbid_att_mask);
+ offset += 4;
+
if (n < 64) return;
/* Reserved Envelope */
info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
offset += 2;
- /* Reserved */
- info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
- offset += 2;
+ /* Maximum Concatenated Burst */
+ info_to_display(tvb,object_tree,offset,2,"Maximum Concatenated Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_concat_burst);
+ offset += 2;
- /* Nominal Polling Interval */
- info_to_display(tvb,object_tree,offset,4,"Nominal Polling Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_polling_interval);
- offset += 4;
+ /* Nominal Polling Interval */
+ info_to_display(tvb,object_tree,offset,4,"Nominal Polling Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_polling_interval);
+ offset += 4;
- /* Tolerated Poll Jitter */
- info_to_display(tvb,object_tree,offset,4,"Tolerated Poll Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_poll_jitter);
- offset += 4;
+ /* Tolerated Poll Jitter */
+ info_to_display(tvb,object_tree,offset,4,"Tolerated Poll Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_poll_jitter);
+ offset += 4;
+
+ /* Required Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Required Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_req_att_mask);
+ offset += 4;
+
+ /* Forbidden Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Forbidden Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_forbid_att_mask);
+ offset += 4;
if (n < 92) return;
info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
offset += 2;
- /* Reserved */
- info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
- offset += 2;
+ /* Maximum Concatenated Burst */
+ info_to_display(tvb,object_tree,offset,2,"Maximum Concatenated Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_concat_burst);
+ offset += 2;
- /* Nominal Polling Interval */
- info_to_display(tvb,object_tree,offset,4,"Nominal Polling Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_polling_interval);
- offset += 4;
+ /* Nominal Polling Interval */
+ info_to_display(tvb,object_tree,offset,4,"Nominal Polling Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_polling_interval);
+ offset += 4;
- /* Tolerated Poll Jitter */
- info_to_display(tvb,object_tree,offset,4,"Tolerated Poll Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_poll_jitter);
- offset += 4;
+ /* Tolerated Poll Jitter */
+ info_to_display(tvb,object_tree,offset,4,"Tolerated Poll Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_poll_jitter);
+ offset += 4;
+
+ /* Required Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Required Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_req_att_mask);
+ offset += 4;
+
+ /* Forbidden Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Forbidden Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_forbid_att_mask);
+ offset += 4;
}
/* Cops - Section : Unsolicited Grant Service */
static void
-cops_unsolicited_grant_service(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+cops_unsolicited_grant_service_i04(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
proto_item *ti;
proto_tree *stt, *object_tree;
info_to_display(tvb,object_tree,offset,4,"Tolerated Grant Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_grant_jitter);
offset += 4;
+ /* Required Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Required Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_req_att_mask);
+ offset += 4;
+
+ /* Forbidden Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Forbidden Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_forbid_att_mask);
+ offset += 4;
+
if (n < 40) return;
/* Reserved Envelope */
info_to_display(tvb,object_tree,offset,4,"Tolerated Grant Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_grant_jitter);
offset += 4;
+ /* Required Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Required Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_req_att_mask);
+ offset += 4;
+
+ /* Forbidden Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Forbidden Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_forbid_att_mask);
+ offset += 4;
+
if (n < 56) return;
/* Committed Envelope */
/* Tolerated Grant Jitter */
info_to_display(tvb,object_tree,offset,4,"Tolerated Grant Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_grant_jitter);
offset += 4;
+
+ /* Required Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Required Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_req_att_mask);
+ offset += 4;
+
+ /* Forbidden Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Forbidden Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_forbid_att_mask);
+ offset += 4;
}
/* Cops - Section : Unsolicited Grant Service with Activity Detection */
static void
-cops_ugs_with_activity_detection(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+cops_ugs_with_activity_detection_i04(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
proto_item *ti;
proto_tree *stt, *object_tree;
info_to_display(tvb,object_tree,offset,4,"Tolerated Poll Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_poll_jitter);
offset += 4;
+ /* Required Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Required Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_req_att_mask);
+ offset += 4;
+
+ /* Forbidden Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Forbidden Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_forbid_att_mask);
+ offset += 4;
+
if (n < 56) return;
/* Reserved Envelope */
info_to_display(tvb,object_tree,offset,4,"Tolerated Poll Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_poll_jitter);
offset += 4;
+ /* Required Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Required Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_req_att_mask);
+ offset += 4;
+
+ /* Forbidden Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Forbidden Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_forbid_att_mask);
+ offset += 4;
+
if (n < 80) return;
/* Committed Envelope */
/* Tolerated Poll Jitter */
info_to_display(tvb,object_tree,offset,4,"Tolerated Poll Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_poll_jitter);
offset += 4;
+
+ /* Required Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Required Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_req_att_mask);
+ offset += 4;
+
+ /* Forbidden Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Forbidden Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_forbid_att_mask);
+ offset += 4;
}
/* Cops - Section : Downstream Service */
static void
-cops_downstream_service(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+cops_downstream_service_i04(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
proto_item *ti;
proto_tree *stt, *object_tree;
info_to_display(tvb,object_tree,offset,1,"Traffic Priority",NULL,FMT_HEX,&hf_cops_pcmm_traffic_priority);
offset += 1;
- proto_tree_add_text(object_tree, tvb, offset, 3, "Reserved");
- offset += 3;
+ /* Downstream Resequencing */
+ info_to_display(tvb,object_tree,offset,1,"Downstream Resequencing",NULL,FMT_HEX,&hf_cops_pcmm_down_resequencing);
+ offset += 1;
+
+ proto_tree_add_text(object_tree, tvb, offset, 2, "Reserved");
+ offset += 2;
/* Maximum Sustained Traffic Rate */
info_to_display(tvb,object_tree,offset,4,"Maximum Sustained Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_max_sustained_traffic_rate);
info_to_display(tvb,object_tree,offset,4,"Maximum Downstream Latency",NULL,FMT_DEC,&hf_cops_pcmm_max_downstream_latency);
offset += 4;
+ /* Downstream Peak Traffic Rate */
+ info_to_display(tvb,object_tree,offset,4,"Downstream Peak Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_down_peak_traffic_rate);
+ offset += 4;
+
+ /* Required Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Required Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_req_att_mask);
+ offset += 4;
+
+ /* Forbidden Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Forbidden Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_forbid_att_mask);
+ offset += 4;
+
if (n < 56) return;
/* Reserved Envelope */
info_to_display(tvb,object_tree,offset,1,"Traffic Priority",NULL,FMT_HEX,&hf_cops_pcmm_traffic_priority);
offset += 1;
- proto_tree_add_text(object_tree, tvb, offset, 3, "Reserved");
- offset += 3;
+ /* Downstream Resequencing */
+ info_to_display(tvb,object_tree,offset,1,"Downstream Resequencing",NULL,FMT_HEX,&hf_cops_pcmm_down_resequencing);
+ offset += 1;
+
+ proto_tree_add_text(object_tree, tvb, offset, 2, "Reserved");
+ offset += 2;
/* Maximum Sustained Traffic Rate */
info_to_display(tvb,object_tree,offset,4,"Maximum Sustained Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_max_sustained_traffic_rate);
info_to_display(tvb,object_tree,offset,4,"Maximum Downstream Latency",NULL,FMT_DEC,&hf_cops_pcmm_max_downstream_latency);
offset += 4;
+ /* Downstream Peak Traffic Rate */
+ info_to_display(tvb,object_tree,offset,4,"Downstream Peak Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_down_peak_traffic_rate);
+ offset += 4;
+
+ /* Required Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Required Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_req_att_mask);
+ offset += 4;
+
+ /* Forbidden Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Forbidden Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_forbid_att_mask);
+ offset += 4;
+
if (n < 80) return;
/* Committed Envelope */
info_to_display(tvb,object_tree,offset,1,"Traffic Priority",NULL,FMT_HEX,&hf_cops_pcmm_traffic_priority);
offset += 1;
- proto_tree_add_text(object_tree, tvb, offset, 3, "Reserved");
- offset += 3;
+ /* Downstream Resequencing */
+ info_to_display(tvb,object_tree,offset,1,"Downstream Resequencing",NULL,FMT_HEX,&hf_cops_pcmm_down_resequencing);
+ offset += 1;
+
+ proto_tree_add_text(object_tree, tvb, offset, 2, "Reserved");
+ offset += 2;
/* Maximum Sustained Traffic Rate */
info_to_display(tvb,object_tree,offset,4,"Maximum Sustained Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_max_sustained_traffic_rate);
/* Maximum Downstream Latency */
info_to_display(tvb,object_tree,offset,4,"Maximum Downstream Latency",NULL,FMT_DEC,&hf_cops_pcmm_max_downstream_latency);
offset += 4;
+
+ /* Downstream Peak Traffic Rate */
+ info_to_display(tvb,object_tree,offset,4,"Downstream Peak Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_down_peak_traffic_rate);
+ offset += 4;
+
+ /* Required Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Required Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_req_att_mask);
+ offset += 4;
+
+ /* Forbidden Attribute Mask */
+ info_to_display(tvb,object_tree,offset,4,"Forbidden Attribute Mask",NULL,FMT_DEC,&hf_cops_pcmm_forbid_att_mask);
+ offset += 4;
}
-/* Cops - Section : PacketCable Multimedia Event Gereration-Info */
+/* Cops - Section : Upstream Drop */
static void
-cops_mm_event_generation_info(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
-
+cops_upstream_drop_i04(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
proto_tree *stt;
- guint8 *bcid_str;
/* Create a subtree */
- stt = info_to_cops_subtree(tvb,st,n,offset,"Event Generation Info");
- offset += 4;
-
- /* Primary Record Keeping Server IP Address */
- info_to_display(tvb,stt,offset,4,"PRKS IP Address", NULL,FMT_IPv4,&hf_cops_pc_prks_ip);
+ stt = info_to_cops_subtree(tvb,st,n,offset,"Upstream Drop");
offset += 4;
- /* Primary Record Keeping Server IP Port */
- info_to_display(tvb,stt,offset,2,"PRKS IP Port",NULL,FMT_DEC,&hf_cops_pc_prks_ip_port);
- offset += 2;
-
- /* Reserved */
- info_to_display(tvb,stt,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
- offset += 2;
+ /* Envelope */
+ info_to_display(tvb,stt,offset,1,"Envelope",NULL,FMT_DEC,&hf_cops_pcmm_envelope);
+ offset += 1;
- /* Secondary Record Keeping Server IP Address */
- info_to_display(tvb,stt,offset,4,"SRKS IP Address", NULL,FMT_IPv4,&hf_cops_pc_srks_ip);
- offset += 4;
+ proto_tree_add_text(stt, tvb, offset, 3, "Reserved");
+ offset += 3;
+}
- /* Secondary Record Keeping Server IP Port */
- info_to_display(tvb,stt,offset,2,"SRKS IP Port",NULL,FMT_DEC,&hf_cops_pc_srks_ip_port);
- offset += 2;
+/* END PCMM I04 */
- /* Reserved */
- info_to_display(tvb,stt,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
- offset += 2;
+/* Cops - Section : Best Effort Service */
+static void
+cops_best_effort_service(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+ proto_item *ti;
+ proto_tree *stt, *object_tree;
- /* BCID Timestamp */
- info_to_display(tvb,stt,offset,4,"BCID - Timestamp",NULL,FMT_HEX,&hf_cops_pc_bcid_ts);
+ /* Create a subtree */
+ stt = info_to_cops_subtree(tvb,st,n,offset,"Best Effort Service");
offset += 4;
- /* BCID Element ID */
- bcid_str = (guchar*)tvb_format_text(tvb, offset, 8);
- proto_tree_add_text(stt, tvb, offset, 8,"%-28s : '%s'","BCID - Element ID",bcid_str);
- offset += 8;
+ /* Envelope */
+ info_to_display(tvb,stt,offset,1,"Envelope",NULL,FMT_DEC,&hf_cops_pcmm_envelope);
+ offset += 1;
- /* BCID Time Zone */
- bcid_str = (guchar*)tvb_format_text(tvb, offset, 8);
- proto_tree_add_text(stt, tvb, offset, 8,"%-28s : '%s'","BCID - Time Zone",bcid_str);
- offset += 8;
+ proto_tree_add_text(stt, tvb, offset, 3, "Reserved");
+ offset += 3;
- /* BCID Event Counter */
- info_to_display(tvb,stt,offset,4,"BCID - Event Counter",NULL,FMT_DEC,&hf_cops_pc_bcid_ev);
-}
+ /* Authorized Envelope */
+ ti = proto_tree_add_text(stt, tvb, offset, 24, "Authorized Envelope");
+ object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
-/* Cops - Section : Volume-Based Usage Limit */
-static void
-cops_volume_based_usage_limit(tvbuff_t *tvb, proto_tree *st, guint object_len, guint32 offset) {
+ /* Traffic Priority */
+ info_to_display(tvb,object_tree,offset,1,"Traffic Priority",NULL,FMT_HEX,&hf_cops_pcmm_traffic_priority);
+ offset += 1;
- proto_tree *stt;
+ proto_tree_add_text(object_tree, tvb, offset, 3, "Reserved");
+ offset += 3;
- /* Create a subtree */
- stt = info_to_cops_subtree(tvb,st,object_len,offset,"Volume-Based Usage Limit");
+ /* Request Transmission Policy */
+ decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
offset += 4;
- /* Usage Limit */
- proto_tree_add_item(stt, hf_cops_pcmm_volume_based_usage_limit, tvb, offset, 8,
- FALSE);
-}
-
-/* Cops - Section : Time-Based Usage Limit */
-static void
-cops_time_based_usage_limit(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
-
- proto_tree *stt;
+ /* Maximum Sustained Traffic Rate */
+ info_to_display(tvb,object_tree,offset,4,"Maximum Sustained Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_max_sustained_traffic_rate);
+ offset += 4;
- /* Create a subtree */
- stt = info_to_cops_subtree(tvb,st,n,offset,"Time-Based Usage Limit");
+ /* Maximum Traffic Burst */
+ info_to_display(tvb,object_tree,offset,4,"Maximum Traffic Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_traffic_burst);
offset += 4;
- /* Time Limit */
- info_to_display(tvb,stt,offset,4,"Time Limit", NULL,FMT_DEC,&hf_cops_pcmm_time_based_usage_limit);
+ /* Minimum Reserved Traffic Rate */
+ info_to_display(tvb,object_tree,offset,4,"Minimum Reserved Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_min_reserved_traffic_rate);
offset += 4;
-}
-/* Cops - Section : Opaque Data */
-static void
-cops_opaque_data(tvbuff_t *tvb, proto_tree *st, guint object_len, guint32 offset) {
+ /* Assumed Minimum Reserved Traffic Rate Packet Size */
+ info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
+ offset += 2;
- proto_tree *stt;
+ /* Reserved */
+ info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+ offset += 2;
- /* Create a subtree */
- stt = info_to_cops_subtree(tvb,st,object_len,offset,"Opaque Data");
- offset += 4;
+ if (n < 56) return;
- /* Opaque Data */
- proto_tree_add_text(stt, tvb, offset, 8,"Opaque Data");
-}
+ /* Reserved Envelope */
+ ti = proto_tree_add_text(stt, tvb, offset, 24, "Reserved Envelope");
+ object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
-/* Cops - Section : Gate Time Info */
-static void
-cops_gate_time_info(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+ /* Traffic Priority */
+ info_to_display(tvb,object_tree,offset,1,"Traffic Priority",NULL,FMT_HEX,&hf_cops_pcmm_traffic_priority);
+ offset += 1;
- proto_tree *stt;
+ proto_tree_add_text(object_tree, tvb, offset, 3, "Reserved");
+ offset += 3;
- /* Create a subtree */
- stt = info_to_cops_subtree(tvb,st,n,offset,"Gate Time Info");
+ /* Request Transmission Policy */
+ decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
offset += 4;
- /* Gate Time Info */
- info_to_display(tvb,stt,offset,4,"Time Committed", NULL,FMT_DEC,&hf_cops_pcmm_gate_time_info);
+ /* Maximum Sustained Traffic Rate */
+ info_to_display(tvb,object_tree,offset,4,"Maximum Sustained Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_max_sustained_traffic_rate);
offset += 4;
-}
+
+ /* Maximum Traffic Burst */
+ info_to_display(tvb,object_tree,offset,4,"Maximum Traffic Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_traffic_burst);
+ offset += 4;
+
+ /* Minimum Reserved Traffic Rate */
+ info_to_display(tvb,object_tree,offset,4,"Minimum Reserved Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_min_reserved_traffic_rate);
+ offset += 4;
+
+ /* Assumed Minimum Reserved Traffic Rate Packet Size */
+ info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
+ offset += 2;
+
+ /* Reserved */
+ info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+ offset += 2;
+
+ if (n < 80) return;
+
+ /* Committed Envelope */
+ ti = proto_tree_add_text(stt, tvb, offset, 24, "Committed Envelope");
+ object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+ /* Traffic Priority */
+ info_to_display(tvb,object_tree,offset,1,"Traffic Priority",NULL,FMT_HEX,&hf_cops_pcmm_traffic_priority);
+ offset += 1;
+
+ proto_tree_add_text(object_tree, tvb, offset, 3, "Reserved");
+ offset += 3;
+
+ /* Request Transmission Policy */
+ decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+ offset += 4;
+
+ /* Maximum Sustained Traffic Rate */
+ info_to_display(tvb,object_tree,offset,4,"Maximum Sustained Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_max_sustained_traffic_rate);
+ offset += 4;
+
+ /* Maximum Traffic Burst */
+ info_to_display(tvb,object_tree,offset,4,"Maximum Traffic Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_traffic_burst);
+ offset += 4;
+
+ /* Minimum Reserved Traffic Rate */
+ info_to_display(tvb,object_tree,offset,4,"Minimum Reserved Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_min_reserved_traffic_rate);
+ offset += 4;
+
+ /* Assumed Minimum Reserved Traffic Rate Packet Size */
+ info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
+ offset += 2;
+
+ /* Reserved */
+ info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+ offset += 2;
+}
+
+/* Cops - Section : Non-Real-Time Polling Service */
+static void
+cops_non_real_time_polling_service(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+ proto_item *ti;
+ proto_tree *stt, *object_tree;
+
+ /* Create a subtree */
+ stt = info_to_cops_subtree(tvb,st,n,offset,"Non-Real-Time Polling Service");
+ offset += 4;
+
+ /* Envelope */
+ info_to_display(tvb,stt,offset,1,"Envelope",NULL,FMT_DEC,&hf_cops_pcmm_envelope);
+ offset += 1;
+
+ proto_tree_add_text(stt, tvb, offset, 3, "Reserved");
+ offset += 3;
+
+ /* Authorized Envelope */
+ ti = proto_tree_add_text(stt, tvb, offset, 28, "Authorized Envelope");
+ object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+ /* Traffic Priority */
+ info_to_display(tvb,object_tree,offset,1,"Traffic Priority",NULL,FMT_HEX,&hf_cops_pcmm_traffic_priority);
+ offset += 1;
+
+ proto_tree_add_text(object_tree, tvb, offset, 3, "Reserved");
+ offset += 3;
+
+ /* Request Transmission Policy */
+ decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+ offset += 4;
+
+ /* Maximum Sustained Traffic Rate */
+ info_to_display(tvb,object_tree,offset,4,"Maximum Sustained Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_max_sustained_traffic_rate);
+ offset += 4;
+
+ /* Maximum Traffic Burst */
+ info_to_display(tvb,object_tree,offset,4,"Maximum Traffic Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_traffic_burst);
+ offset += 4;
+
+ /* Minimum Reserved Traffic Rate */
+ info_to_display(tvb,object_tree,offset,4,"Minimum Reserved Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_min_reserved_traffic_rate);
+ offset += 4;
+
+ /* Assumed Minimum Reserved Traffic Rate Packet Size */
+ info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
+ offset += 2;
+
+ /* Reserved */
+ info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+ offset += 2;
+
+ /* Nominal Polling Interval */
+ info_to_display(tvb,object_tree,offset,4,"Nominal Polling Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_polling_interval);
+ offset += 4;
+
+ if (n < 64) return;
+
+ /* Reserved Envelope */
+ ti = proto_tree_add_text(stt, tvb, offset, 24, "Reserved Envelope");
+ object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+ /* Traffic Priority */
+ info_to_display(tvb,object_tree,offset,1,"Traffic Priority",NULL,FMT_HEX,&hf_cops_pcmm_traffic_priority);
+ offset += 1;
+
+ proto_tree_add_text(object_tree, tvb, offset, 3, "Reserved");
+ offset += 3;
+
+ /* Request Transmission Policy */
+ decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+ offset += 4;
+
+ /* Maximum Sustained Traffic Rate */
+ info_to_display(tvb,object_tree,offset,4,"Maximum Sustained Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_max_sustained_traffic_rate);
+ offset += 4;
+
+ /* Maximum Traffic Burst */
+ info_to_display(tvb,object_tree,offset,4,"Maximum Traffic Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_traffic_burst);
+ offset += 4;
+
+ /* Minimum Reserved Traffic Rate */
+ info_to_display(tvb,object_tree,offset,4,"Minimum Reserved Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_min_reserved_traffic_rate);
+ offset += 4;
+
+ /* Assumed Minimum Reserved Traffic Rate Packet Size */
+ info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
+ offset += 2;
+
+ /* Reserved */
+ info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+ offset += 2;
+
+ /* Nominal Polling Interval */
+ info_to_display(tvb,object_tree,offset,4,"Nominal Polling Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_polling_interval);
+ offset += 4;
+
+ if (n < 92) return;
+
+ /* Committed Envelope */
+ ti = proto_tree_add_text(stt, tvb, offset, 24, "Committed Envelope");
+ object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+ /* Traffic Priority */
+ info_to_display(tvb,object_tree,offset,1,"Traffic Priority",NULL,FMT_HEX,&hf_cops_pcmm_traffic_priority);
+ offset += 1;
+
+ proto_tree_add_text(object_tree, tvb, offset, 3, "Reserved");
+ offset += 3;
+
+ /* Request Transmission Policy */
+ decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+ offset += 4;
+
+ /* Maximum Sustained Traffic Rate */
+ info_to_display(tvb,object_tree,offset,4,"Maximum Sustained Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_max_sustained_traffic_rate);
+ offset += 4;
+
+ /* Maximum Traffic Burst */
+ info_to_display(tvb,object_tree,offset,4,"Maximum Traffic Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_traffic_burst);
+ offset += 4;
+
+ /* Minimum Reserved Traffic Rate */
+ info_to_display(tvb,object_tree,offset,4,"Minimum Reserved Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_min_reserved_traffic_rate);
+ offset += 4;
+
+ /* Assumed Minimum Reserved Traffic Rate Packet Size */
+ info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
+ offset += 2;
+
+ /* Reserved */
+ info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+ offset += 2;
+
+ /* Nominal Polling Interval */
+ info_to_display(tvb,object_tree,offset,4,"Nominal Polling Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_polling_interval);
+ offset += 4;
+}
+
+/* Cops - Section : Real-Time Polling Service */
+static void
+cops_real_time_polling_service(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+ proto_item *ti;
+ proto_tree *stt, *object_tree;
+
+ /* Create a subtree */
+ stt = info_to_cops_subtree(tvb,st,n,offset,"Real-Time Polling Service");
+ offset += 4;
+
+ /* Envelope */
+ info_to_display(tvb,stt,offset,1,"Envelope",NULL,FMT_DEC,&hf_cops_pcmm_envelope);
+ offset += 1;
+
+ proto_tree_add_text(stt, tvb, offset, 3, "Reserved");
+ offset += 3;
+
+ /* Authorized Envelope */
+ ti = proto_tree_add_text(stt, tvb, offset, 28, "Authorized Envelope");
+ object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+ /* Request Transmission Policy */
+ decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+ offset += 4;
+
+ /* Maximum Sustained Traffic Rate */
+ info_to_display(tvb,object_tree,offset,4,"Maximum Sustained Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_max_sustained_traffic_rate);
+ offset += 4;
+
+ /* Maximum Traffic Burst */
+ info_to_display(tvb,object_tree,offset,4,"Maximum Traffic Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_traffic_burst);
+ offset += 4;
+
+ /* Minimum Reserved Traffic Rate */
+ info_to_display(tvb,object_tree,offset,4,"Minimum Reserved Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_min_reserved_traffic_rate);
+ offset += 4;
+
+ /* Assumed Minimum Reserved Traffic Rate Packet Size */
+ info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
+ offset += 2;
+
+ /* Reserved */
+ info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+ offset += 2;
+
+ /* Nominal Polling Interval */
+ info_to_display(tvb,object_tree,offset,4,"Nominal Polling Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_polling_interval);
+ offset += 4;
+
+ /* Tolerated Poll Jitter */
+ info_to_display(tvb,object_tree,offset,4,"Tolerated Poll Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_poll_jitter);
+ offset += 4;
+
+ if (n < 64) return;
+
+ /* Reserved Envelope */
+ ti = proto_tree_add_text(stt, tvb, offset, 24, "Reserved Envelope");
+ object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+ /* Request Transmission Policy */
+ decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+ offset += 4;
+
+ /* Maximum Sustained Traffic Rate */
+ info_to_display(tvb,object_tree,offset,4,"Maximum Sustained Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_max_sustained_traffic_rate);
+ offset += 4;
+
+ /* Maximum Traffic Burst */
+ info_to_display(tvb,object_tree,offset,4,"Maximum Traffic Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_traffic_burst);
+ offset += 4;
+
+ /* Minimum Reserved Traffic Rate */
+ info_to_display(tvb,object_tree,offset,4,"Minimum Reserved Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_min_reserved_traffic_rate);
+ offset += 4;
+
+ /* Assumed Minimum Reserved Traffic Rate Packet Size */
+ info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
+ offset += 2;
+
+ /* Reserved */
+ info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+ offset += 2;
+
+ /* Nominal Polling Interval */
+ info_to_display(tvb,object_tree,offset,4,"Nominal Polling Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_polling_interval);
+ offset += 4;
+
+ /* Tolerated Poll Jitter */
+ info_to_display(tvb,object_tree,offset,4,"Tolerated Poll Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_poll_jitter);
+ offset += 4;
+
+ if (n < 92) return;
+
+ /* Committed Envelope */
+ ti = proto_tree_add_text(stt, tvb, offset, 24, "Committed Envelope");
+ object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+ /* Request Transmission Policy */
+ decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+ offset += 4;
+
+ /* Maximum Sustained Traffic Rate */
+ info_to_display(tvb,object_tree,offset,4,"Maximum Sustained Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_max_sustained_traffic_rate);
+ offset += 4;
+
+ /* Maximum Traffic Burst */
+ info_to_display(tvb,object_tree,offset,4,"Maximum Traffic Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_traffic_burst);
+ offset += 4;
+
+ /* Minimum Reserved Traffic Rate */
+ info_to_display(tvb,object_tree,offset,4,"Minimum Reserved Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_min_reserved_traffic_rate);
+ offset += 4;
+
+ /* Assumed Minimum Reserved Traffic Rate Packet Size */
+ info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
+ offset += 2;
+
+ /* Reserved */
+ info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+ offset += 2;
+
+ /* Nominal Polling Interval */
+ info_to_display(tvb,object_tree,offset,4,"Nominal Polling Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_polling_interval);
+ offset += 4;
+
+ /* Tolerated Poll Jitter */
+ info_to_display(tvb,object_tree,offset,4,"Tolerated Poll Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_poll_jitter);
+ offset += 4;
+}
+
+/* Cops - Section : Unsolicited Grant Service */
+static void
+cops_unsolicited_grant_service(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+ proto_item *ti;
+ proto_tree *stt, *object_tree;
+
+ /* Create a subtree */
+ stt = info_to_cops_subtree(tvb,st,n,offset,"Unsolicited Grant Service");
+ offset += 4;
+
+ /* Envelope */
+ info_to_display(tvb,stt,offset,1,"Envelope",NULL,FMT_DEC,&hf_cops_pcmm_envelope);
+ offset += 1;
+
+ proto_tree_add_text(stt, tvb, offset, 3, "Reserved");
+ offset += 3;
+
+ /* Authorized Envelope */
+ ti = proto_tree_add_text(stt, tvb, offset, 16, "Authorized Envelope");
+ object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+ /* Request Transmission Policy */
+ decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+ offset += 4;
+
+ /* Unsolicited Grant Size */
+ info_to_display(tvb,object_tree,offset,2,"Unsolicited Grant Size",NULL,FMT_DEC,&hf_cops_pcmm_unsolicited_grant_size);
+ offset += 2;
+
+ /* Grants Per Interval */
+ info_to_display(tvb,object_tree,offset,1,"Grants Per Interval",NULL,FMT_DEC,&hf_cops_pcmm_grants_per_interval);
+ offset += 1;
+
+ proto_tree_add_text(object_tree, tvb, offset, 1, "Reserved");
+ offset += 1;
+
+ /* Nominal Grant Interval */
+ info_to_display(tvb,object_tree,offset,4,"Nominal Grant Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_grant_interval);
+ offset += 4;
+
+ /* Tolerated Grant Jitter */
+ info_to_display(tvb,object_tree,offset,4,"Tolerated Grant Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_grant_jitter);
+ offset += 4;
+
+ if (n < 40) return;
+
+ /* Reserved Envelope */
+ ti = proto_tree_add_text(stt, tvb, offset, 16, "Reserved Envelope");
+ object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+ /* Request Transmission Policy */
+ decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+ offset += 4;
+
+ /* Unsolicited Grant Size */
+ info_to_display(tvb,object_tree,offset,2,"Unsolicited Grant Size",NULL,FMT_DEC,&hf_cops_pcmm_unsolicited_grant_size);
+ offset += 2;
+
+ /* Grants Per Interval */
+ info_to_display(tvb,object_tree,offset,1,"Grants Per Interval",NULL,FMT_DEC,&hf_cops_pcmm_grants_per_interval);
+ offset += 1;
+
+ proto_tree_add_text(object_tree, tvb, offset, 1, "Reserved");
+ offset += 1;
+
+ /* Nominal Grant Interval */
+ info_to_display(tvb,object_tree,offset,4,"Nominal Grant Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_grant_interval);
+ offset += 4;
+
+ /* Tolerated Grant Jitter */
+ info_to_display(tvb,object_tree,offset,4,"Tolerated Grant Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_grant_jitter);
+ offset += 4;
+
+ if (n < 56) return;
+
+ /* Committed Envelope */
+ ti = proto_tree_add_text(stt, tvb, offset, 16, "Committed Envelope");
+ object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+ /* Request Transmission Policy */
+ decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+ offset += 4;
+
+ /* Unsolicited Grant Size */
+ info_to_display(tvb,object_tree,offset,2,"Unsolicited Grant Size",NULL,FMT_DEC,&hf_cops_pcmm_unsolicited_grant_size);
+ offset += 2;
+
+ /* Grants Per Interval */
+ info_to_display(tvb,object_tree,offset,1,"Grants Per Interval",NULL,FMT_DEC,&hf_cops_pcmm_grants_per_interval);
+ offset += 1;
+
+ proto_tree_add_text(object_tree, tvb, offset, 1, "Reserved");
+ offset += 1;
+
+ /* Nominal Grant Interval */
+ info_to_display(tvb,object_tree,offset,4,"Nominal Grant Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_grant_interval);
+ offset += 4;
+
+ /* Tolerated Grant Jitter */
+ info_to_display(tvb,object_tree,offset,4,"Tolerated Grant Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_grant_jitter);
+ offset += 4;
+}
+
+/* Cops - Section : Unsolicited Grant Service with Activity Detection */
+static void
+cops_ugs_with_activity_detection(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+ proto_item *ti;
+ proto_tree *stt, *object_tree;
+
+ /* Create a subtree */
+ stt = info_to_cops_subtree(tvb,st,n,offset,"Unsolicited Grant Service with Activity Detection");
+ offset += 4;
+
+ /* Envelope */
+ info_to_display(tvb,stt,offset,1,"Envelope",NULL,FMT_DEC,&hf_cops_pcmm_envelope);
+ offset += 1;
+
+ proto_tree_add_text(stt, tvb, offset, 3, "Reserved");
+ offset += 3;
+
+ /* Authorized Envelope */
+ ti = proto_tree_add_text(stt, tvb, offset, 24, "Authorized Envelope");
+ object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+ /* Request Transmission Policy */
+ decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+ offset += 4;
+
+ /* Unsolicited Grant Size */
+ info_to_display(tvb,object_tree,offset,2,"Unsolicited Grant Size",NULL,FMT_DEC,&hf_cops_pcmm_unsolicited_grant_size);
+ offset += 2;
+
+ /* Grants Per Interval */
+ info_to_display(tvb,object_tree,offset,1,"Grants Per Interval",NULL,FMT_DEC,&hf_cops_pcmm_grants_per_interval);
+ offset += 1;
+
+ proto_tree_add_text(object_tree, tvb, offset, 1, "Reserved");
+ offset += 1;
+
+ /* Nominal Grant Interval */
+ info_to_display(tvb,object_tree,offset,4,"Nominal Grant Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_grant_interval);
+ offset += 4;
+
+ /* Tolerated Grant Jitter */
+ info_to_display(tvb,object_tree,offset,4,"Tolerated Grant Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_grant_jitter);
+ offset += 4;
+
+ /* Nominal Polling Interval */
+ info_to_display(tvb,object_tree,offset,4,"Nominal Polling Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_polling_interval);
+ offset += 4;
+
+ /* Tolerated Poll Jitter */
+ info_to_display(tvb,object_tree,offset,4,"Tolerated Poll Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_poll_jitter);
+ offset += 4;
+
+ if (n < 56) return;
+
+ /* Reserved Envelope */
+ ti = proto_tree_add_text(stt, tvb, offset, 24, "Reserved Envelope");
+ object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+ /* Request Transmission Policy */
+ decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+ offset += 4;
+
+ /* Unsolicited Grant Size */
+ info_to_display(tvb,object_tree,offset,2,"Unsolicited Grant Size",NULL,FMT_DEC,&hf_cops_pcmm_unsolicited_grant_size);
+ offset += 2;
+
+ /* Grants Per Interval */
+ info_to_display(tvb,object_tree,offset,1,"Grants Per Interval",NULL,FMT_DEC,&hf_cops_pcmm_grants_per_interval);
+ offset += 1;
+
+ proto_tree_add_text(object_tree, tvb, offset, 1, "Reserved");
+ offset += 1;
+
+ /* Nominal Grant Interval */
+ info_to_display(tvb,object_tree,offset,4,"Nominal Grant Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_grant_interval);
+ offset += 4;
+
+ /* Tolerated Grant Jitter */
+ info_to_display(tvb,object_tree,offset,4,"Tolerated Grant Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_grant_jitter);
+ offset += 4;
+
+ /* Nominal Polling Interval */
+ info_to_display(tvb,object_tree,offset,4,"Nominal Polling Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_polling_interval);
+ offset += 4;
+
+ /* Tolerated Poll Jitter */
+ info_to_display(tvb,object_tree,offset,4,"Tolerated Poll Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_poll_jitter);
+ offset += 4;
+
+ if (n < 80) return;
+
+ /* Committed Envelope */
+ ti = proto_tree_add_text(stt, tvb, offset, 24, "Committed Envelope");
+ object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+ /* Request Transmission Policy */
+ decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+ offset += 4;
+
+ /* Unsolicited Grant Size */
+ info_to_display(tvb,object_tree,offset,2,"Unsolicited Grant Size",NULL,FMT_DEC,&hf_cops_pcmm_unsolicited_grant_size);
+ offset += 2;
+
+ /* Grants Per Interval */
+ info_to_display(tvb,object_tree,offset,1,"Grants Per Interval",NULL,FMT_DEC,&hf_cops_pcmm_grants_per_interval);
+ offset += 1;
+
+ proto_tree_add_text(object_tree, tvb, offset, 1, "Reserved");
+ offset += 1;
+
+ /* Nominal Grant Interval */
+ info_to_display(tvb,object_tree,offset,4,"Nominal Grant Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_grant_interval);
+ offset += 4;
+
+ /* Tolerated Grant Jitter */
+ info_to_display(tvb,object_tree,offset,4,"Tolerated Grant Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_grant_jitter);
+ offset += 4;
+
+ /* Nominal Polling Interval */
+ info_to_display(tvb,object_tree,offset,4,"Nominal Polling Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_polling_interval);
+ offset += 4;
+
+ /* Tolerated Poll Jitter */
+ info_to_display(tvb,object_tree,offset,4,"Tolerated Poll Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_poll_jitter);
+ offset += 4;
+}
+
+/* Cops - Section : Downstream Service */
+static void
+cops_downstream_service(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+ proto_item *ti;
+ proto_tree *stt, *object_tree;
+
+ /* Create a subtree */
+ stt = info_to_cops_subtree(tvb,st,n,offset,"Downstream Service");
+ offset += 4;
+
+ /* Envelope */
+ info_to_display(tvb,stt,offset,1,"Envelope",NULL,FMT_DEC,&hf_cops_pcmm_envelope);
+ offset += 1;
+
+ proto_tree_add_text(stt, tvb, offset, 3, "Reserved");
+ offset += 3;
+
+ /* Authorized Envelope */
+ ti = proto_tree_add_text(stt, tvb, offset, 24, "Authorized Envelope");
+ object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+ /* Traffic Priority */
+ info_to_display(tvb,object_tree,offset,1,"Traffic Priority",NULL,FMT_HEX,&hf_cops_pcmm_traffic_priority);
+ offset += 1;
+
+ proto_tree_add_text(object_tree, tvb, offset, 3, "Reserved");
+ offset += 3;
+
+ /* Maximum Sustained Traffic Rate */
+ info_to_display(tvb,object_tree,offset,4,"Maximum Sustained Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_max_sustained_traffic_rate);
+ offset += 4;
+
+ /* Maximum Traffic Burst */
+ info_to_display(tvb,object_tree,offset,4,"Maximum Traffic Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_traffic_burst);
+ offset += 4;
+
+ /* Minimum Reserved Traffic Rate */
+ info_to_display(tvb,object_tree,offset,4,"Minimum Reserved Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_min_reserved_traffic_rate);
+ offset += 4;
+
+ /* Assumed Minimum Reserved Traffic Rate Packet Size */
+ info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
+ offset += 2;
+
+ /* Reserved */
+ info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+ offset += 2;
+
+ /* Maximum Downstream Latency */
+ info_to_display(tvb,object_tree,offset,4,"Maximum Downstream Latency",NULL,FMT_DEC,&hf_cops_pcmm_max_downstream_latency);
+ offset += 4;
+
+ if (n < 56) return;
+
+ /* Reserved Envelope */
+ ti = proto_tree_add_text(stt, tvb, offset, 24, "Reserved Envelope");
+ object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+ /* Traffic Priority */
+ info_to_display(tvb,object_tree,offset,1,"Traffic Priority",NULL,FMT_HEX,&hf_cops_pcmm_traffic_priority);
+ offset += 1;
+
+ proto_tree_add_text(object_tree, tvb, offset, 3, "Reserved");
+ offset += 3;
+
+ /* Maximum Sustained Traffic Rate */
+ info_to_display(tvb,object_tree,offset,4,"Maximum Sustained Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_max_sustained_traffic_rate);
+ offset += 4;
+
+ /* Maximum Traffic Burst */
+ info_to_display(tvb,object_tree,offset,4,"Maximum Traffic Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_traffic_burst);
+ offset += 4;
+
+ /* Minimum Reserved Traffic Rate */
+ info_to_display(tvb,object_tree,offset,4,"Minimum Reserved Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_min_reserved_traffic_rate);
+ offset += 4;
+
+ /* Assumed Minimum Reserved Traffic Rate Packet Size */
+ info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
+ offset += 2;
+
+ /* Reserved */
+ info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+ offset += 2;
+
+ /* Maximum Downstream Latency */
+ info_to_display(tvb,object_tree,offset,4,"Maximum Downstream Latency",NULL,FMT_DEC,&hf_cops_pcmm_max_downstream_latency);
+ offset += 4;
+
+ if (n < 80) return;
+
+ /* Committed Envelope */
+ ti = proto_tree_add_text(stt, tvb, offset, 24, "Committed Envelope");
+ object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+ /* Traffic Priority */
+ info_to_display(tvb,object_tree,offset,1,"Traffic Priority",NULL,FMT_HEX,&hf_cops_pcmm_traffic_priority);
+ offset += 1;
+
+ proto_tree_add_text(object_tree, tvb, offset, 3, "Reserved");
+ offset += 3;
+
+ /* Maximum Sustained Traffic Rate */
+ info_to_display(tvb,object_tree,offset,4,"Maximum Sustained Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_max_sustained_traffic_rate);
+ offset += 4;
+
+ /* Maximum Traffic Burst */
+ info_to_display(tvb,object_tree,offset,4,"Maximum Traffic Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_traffic_burst);
+ offset += 4;
+
+ /* Minimum Reserved Traffic Rate */
+ info_to_display(tvb,object_tree,offset,4,"Minimum Reserved Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_min_reserved_traffic_rate);
+ offset += 4;
+
+ /* Assumed Minimum Reserved Traffic Rate Packet Size */
+ info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
+ offset += 2;
+
+ /* Reserved */
+ info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+ offset += 2;
+
+ /* Maximum Downstream Latency */
+ info_to_display(tvb,object_tree,offset,4,"Maximum Downstream Latency",NULL,FMT_DEC,&hf_cops_pcmm_max_downstream_latency);
+ offset += 4;
+}
+
+/* Cops - Section : PacketCable Multimedia Event Gereration-Info */
+static void
+cops_mm_event_generation_info(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+
+ proto_tree *stt;
+ guint8 *bcid_str;
+
+ /* Create a subtree */
+ stt = info_to_cops_subtree(tvb,st,n,offset,"Event Generation Info");
+ offset += 4;
+
+ /* Primary Record Keeping Server IP Address */
+ info_to_display(tvb,stt,offset,4,"PRKS IP Address", NULL,FMT_IPv4,&hf_cops_pc_prks_ip);
+ offset += 4;
+
+ /* Primary Record Keeping Server IP Port */
+ info_to_display(tvb,stt,offset,2,"PRKS IP Port",NULL,FMT_DEC,&hf_cops_pc_prks_ip_port);
+ offset += 2;
+
+ /* Reserved */
+ info_to_display(tvb,stt,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+ offset += 2;
+
+ /* Secondary Record Keeping Server IP Address */
+ info_to_display(tvb,stt,offset,4,"SRKS IP Address", NULL,FMT_IPv4,&hf_cops_pc_srks_ip);
+ offset += 4;
+
+ /* Secondary Record Keeping Server IP Port */
+ info_to_display(tvb,stt,offset,2,"SRKS IP Port",NULL,FMT_DEC,&hf_cops_pc_srks_ip_port);
+ offset += 2;
+
+ /* Reserved */
+ info_to_display(tvb,stt,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+ offset += 2;
+
+ /* BCID Timestamp */
+ info_to_display(tvb,stt,offset,4,"BCID - Timestamp",NULL,FMT_HEX,&hf_cops_pc_bcid_ts);
+ offset += 4;
+
+ /* BCID Element ID */
+ bcid_str = (guchar*)tvb_format_text(tvb, offset, 8);
+ proto_tree_add_text(stt, tvb, offset, 8,"%-28s : '%s'","BCID - Element ID",bcid_str);
+ offset += 8;
+
+ /* BCID Time Zone */
+ bcid_str = (guchar*)tvb_format_text(tvb, offset, 8);
+ proto_tree_add_text(stt, tvb, offset, 8,"%-28s : '%s'","BCID - Time Zone",bcid_str);
+ offset += 8;
+
+ /* BCID Event Counter */
+ info_to_display(tvb,stt,offset,4,"BCID - Event Counter",NULL,FMT_DEC,&hf_cops_pc_bcid_ev);
+}
+
+/* Cops - Section : Volume-Based Usage Limit */
+static void
+cops_volume_based_usage_limit(tvbuff_t *tvb, proto_tree *st, guint object_len, guint32 offset) {
+
+ proto_tree *stt;
+
+ /* Create a subtree */
+ stt = info_to_cops_subtree(tvb,st,object_len,offset,"Volume-Based Usage Limit");
+ offset += 4;
+
+ /* Usage Limit */
+ proto_tree_add_item(stt, hf_cops_pcmm_volume_based_usage_limit, tvb, offset, 8,
+ FALSE);
+}
+
+/* Cops - Section : Time-Based Usage Limit */
+static void
+cops_time_based_usage_limit(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+
+ proto_tree *stt;
+
+ /* Create a subtree */
+ stt = info_to_cops_subtree(tvb,st,n,offset,"Time-Based Usage Limit");
+ offset += 4;
+
+ /* Time Limit */
+ info_to_display(tvb,stt,offset,4,"Time Limit", NULL,FMT_DEC,&hf_cops_pcmm_time_based_usage_limit);
+ offset += 4;
+}
+
+/* Cops - Section : Opaque Data */
+static void
+cops_opaque_data(tvbuff_t *tvb, proto_tree *st, guint object_len, guint32 offset) {
+
+ proto_tree *stt;
+
+ /* Create a subtree */
+ stt = info_to_cops_subtree(tvb,st,object_len,offset,"Opaque Data");
+ offset += 4;
+
+ /* Opaque Data */
+ proto_tree_add_text(stt, tvb, offset, 8,"Opaque Data");
+}
+
+/* Cops - Section : Gate Time Info */
+static void
+cops_gate_time_info(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+
+ proto_tree *stt;
+
+ /* Create a subtree */
+ stt = info_to_cops_subtree(tvb,st,n,offset,"Gate Time Info");
+ offset += 4;
+
+ /* Gate Time Info */
+ info_to_display(tvb,stt,offset,4,"Time Committed", NULL,FMT_DEC,&hf_cops_pcmm_gate_time_info);
+ offset += 4;
+}
/* Cops - Section : Gate Usage Info */
static void
stt = info_to_cops_subtree(tvb,st,n,offset,"Gate Usage Info");
offset += 4;
- /* Gate Time Info */
- info_to_display(tvb,stt,offset,4,"Octet Count", NULL,FMT_DEC,&hf_cops_pcmm_gate_usage_info);
- offset += 4;
+ /* Gate Usage Info */
+ info_to_display(tvb,stt,offset,8,"Octet Count", NULL,FMT_DEC,&hf_cops_pcmm_gate_usage_info);
}
/* Cops - Section : PacketCable error */
info_to_display(tvb,stt,offset,4,"Msg Receipt Key", NULL,FMT_HEX,&hf_cops_pcmm_msg_receipt_key);
}
+/* Cops - Section : UserID */
+static void
+cops_userid(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+
+ proto_tree *stt;
+
+ /* Create a subtree */
+ stt = info_to_cops_subtree(tvb, st, n, offset, "UserID");
+ offset += 4;
+
+ /* UserID */
+ info_to_display(tvb, stt, offset, n-4, "UserID", NULL, FMT_STR, &hf_cops_pcmm_userid);
+}
/* PacketCable D-QoS S-Num/S-Type globs */
#define PCDQ_TRANSACTION_ID 0x0101
#define PCMM_TRANSACTION_ID 0x0101
#define PCMM_AMID 0x0201
#define PCMM_SUBSCRIBER_ID 0x0301
+#define PCMM_SUBSCRIBER_ID_V6 0x0302
#define PCMM_GATE_ID 0x0401
#define PCMM_GATE_SPEC 0x0501
#define PCMM_CLASSIFIER 0x0601
#define PCMM_UNSOLICITED_GRANT_SERVICE 0x0706
#define PCMM_UGS_WITH_ACTIVITY_DETECTION 0x0707
#define PCMM_DOWNSTREAM_SERVICE 0x0708
+#define PCMM_UPSTREAM_DROP 0x0709
#define PCMM_EVENT_GENERATION_INFO 0x0801
#define PCMM_VOLUME_BASED_USAGE_LIMIT 0x0901
#define PCMM_TIME_BASED_USAGE_LIMIT 0x0a01
#define PCMM_PSID 0x1101
#define PCMM_SYNCH_OPTIONS 0x1201
#define PCMM_MSG_RECEIPT_KEY 0x1301
+#define PCMM_USERID 0x1501
static void
case PCMM_SUBSCRIBER_ID:
cops_subscriber_id_v4(tvb, tree, object_len, offset);
break;
+ case PCMM_SUBSCRIBER_ID_V6:
+ cops_subscriber_id_v6(tvb, tree, object_len, offset);
+ break;
case PCMM_GATE_ID:
cops_gate_id(tvb, tree, object_len, offset);
break;
cops_docsis_service_class_name(tvb, tree, object_len, offset);
break;
case PCMM_BEST_EFFORT_SERVICE:
- cops_best_effort_service(tvb, tree, object_len, offset);
- break;
+ if (object_len == 40 || object_len == 72 || object_len == 104)
+ cops_best_effort_service_i04(tvb, tree, object_len, offset);
+ else
+ cops_best_effort_service(tvb, tree, object_len, offset);
+ break;
case PCMM_NON_REAL_TIME_POLLING_SERVICE:
- cops_non_real_time_polling_service(tvb, tree, object_len, offset);
+ if (object_len == 44 || object_len == 80 || object_len == 116)
+ cops_non_real_time_polling_service_i04(tvb, tree, object_len, offset);
+ else
+ cops_non_real_time_polling_service(tvb, tree, object_len, offset);
break;
case PCMM_REAL_TIME_POLLING_SERVICE:
- cops_real_time_polling_service(tvb, tree, object_len, offset);
+ if (object_len == 44 || object_len == 80 || object_len == 116)
+ cops_real_time_polling_service_i04(tvb, tree, object_len, offset);
+ else
+ cops_real_time_polling_service(tvb, tree, object_len, offset);
break;
case PCMM_UNSOLICITED_GRANT_SERVICE:
- cops_unsolicited_grant_service(tvb, tree, object_len, offset);
- break;
+ if (object_len == 32 || object_len == 56 || object_len == 80)
+ cops_unsolicited_grant_service_i04(tvb, tree, object_len, offset);
+ else
+ cops_unsolicited_grant_service(tvb, tree, object_len, offset);
+ break;
case PCMM_UGS_WITH_ACTIVITY_DETECTION:
- cops_ugs_with_activity_detection(tvb, tree, object_len, offset);
- break;
+ if (object_len == 40 || object_len == 72 || object_len == 104)
+ cops_ugs_with_activity_detection_i04(tvb, tree, object_len, offset);
+ else
+ cops_ugs_with_activity_detection(tvb, tree, object_len, offset);
+ break;
case PCMM_DOWNSTREAM_SERVICE:
- cops_downstream_service(tvb, tree, object_len, offset);
- break;
+ if (object_len == 40 || object_len == 72 || object_len == 104)
+ cops_downstream_service_i04(tvb, tree, object_len, offset);
+ else
+ cops_downstream_service(tvb, tree, object_len, offset);
+ break;
+ case PCMM_UPSTREAM_DROP:
+ cops_upstream_drop_i04(tvb, tree, object_len, offset);
+ break;
case PCMM_EVENT_GENERATION_INFO:
cops_mm_event_generation_info(tvb, tree, object_len, offset);
break;
case PCMM_MSG_RECEIPT_KEY:
cops_msg_receipt_key(tvb, tree, object_len, offset);
break;
+ case PCMM_USERID:
+ cops_userid(tvb, tree, object_len, offset);
+ break;
+
}
/* Tune offset */