diff options
Diffstat (limited to 'epan/dissectors/packet-radius_packetcable.c')
-rw-r--r-- | epan/dissectors/packet-radius_packetcable.c | 158 |
1 files changed, 95 insertions, 63 deletions
diff --git a/epan/dissectors/packet-radius_packetcable.c b/epan/dissectors/packet-radius_packetcable.c index 9df03463f3..14ef0b7f20 100644 --- a/epan/dissectors/packet-radius_packetcable.c +++ b/epan/dissectors/packet-radius_packetcable.c @@ -86,12 +86,37 @@ static int hf_packetcable_terminal_display_info_general_display = -1; static int hf_packetcable_terminal_display_info_calling_number = -1; static int hf_packetcable_terminal_display_info_calling_name = -1; static int hf_packetcable_terminal_display_info_message_waiting = -1; +static int hf_packetcable_qos_desc_flags_sfst = -1; +static int hf_packetcable_qos_desc_flags_gi = -1; +static int hf_packetcable_qos_desc_flags_tgj = -1; +static int hf_packetcable_qos_desc_flags_gpi = -1; +static int hf_packetcable_qos_desc_flags_ugs = -1; +static int hf_packetcable_qos_desc_flags_tp = -1; +static int hf_packetcable_qos_desc_flags_msr = -1; +static int hf_packetcable_qos_desc_flags_mtb = -1; +static int hf_packetcable_qos_desc_flags_mrtr = -1; +static int hf_packetcable_qos_desc_flags_mps = -1; +static int hf_packetcable_qos_desc_flags_mcb = -1; +static int hf_packetcable_qos_desc_flags_srtp = -1; +static int hf_packetcable_qos_desc_flags_npi = -1; +static int hf_packetcable_qos_desc_flags_tpj = -1; +static int hf_packetcable_qos_desc_flags_toso = -1; +static int hf_packetcable_qos_desc_flags_mdl = -1; + +/* Generated from convert_proto_tree_add_text.pl */ +static int hf_packetcable_bcid_time_zone_offset = -1; +static int hf_packetcable_bcid_element_id = -1; +static int hf_packetcable_electronic_surveillance_indication_df_df_key = -1; +static int hf_packetcable_redirected_from_original_called_party = -1; +static int hf_packetcable_em_header_element_id = -1; +static int hf_packetcable_redirected_from_last_redirecting_party = -1; +static int hf_packetcable_bcid_time_zone_dst = -1; +static int hf_packetcable_em_header_time_zone_offset = -1; +static int hf_packetcable_qos_service_class_name = -1; +static int hf_packetcable_em_header_event_time = -1; +static int hf_packetcable_em_header_time_zone_dst = -1; /* This is slightly ugly. */ -static int hf_packetcable_qos_desc_flags[] = -{ - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -}; static int hf_packetcable_qos_desc_fields[] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -242,26 +267,18 @@ static const value_string packetcable_state_indication_vals[] = /* Decode a PacketCable BCID. */ -/* XXX - This should probably be combinde with the equivalent COPS code */ +/* XXX - This should probably be combined with the equivalent COPS code */ static void decode_packetcable_bcid (tvbuff_t *tvb, proto_tree *tree, int offset) { - guint8 packetcable_buf[64]; - - proto_tree_add_item(tree, hf_packetcable_bcid_timestamp, - tvb, offset, 4, ENC_BIG_ENDIAN); - tvb_memcpy(tvb, packetcable_buf, offset + 4, 8); packetcable_buf[8] = '\0'; - proto_tree_add_text(tree, tvb, offset + 4, 8, - "Element ID: %s", packetcable_buf); - tvb_memcpy(tvb, packetcable_buf, offset + 13, 7); packetcable_buf[7] = '\0'; - proto_tree_add_text(tree, tvb, offset + 12, 8, - "Time Zone: DST: %c, Offset: %s", tvb_get_guint8(tvb, offset + 12), - packetcable_buf); - proto_tree_add_item(tree, hf_packetcable_bcid_event_counter, - tvb, offset + 20, 4, ENC_BIG_ENDIAN); + + proto_tree_add_item(tree, hf_packetcable_bcid_timestamp, tvb, offset, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_packetcable_bcid_element_id, tvb, offset + 4, 8, ENC_ASCII|ENC_NA); + proto_tree_add_item(tree, hf_packetcable_bcid_time_zone_dst, tvb, offset + 12, 1, ENC_NA); + proto_tree_add_item(tree, hf_packetcable_bcid_time_zone_offset, tvb, offset + 13, 7, ENC_ASCII|ENC_NA); + proto_tree_add_item(tree, hf_packetcable_bcid_event_counter, tvb, offset + 20, 4, ENC_BIG_ENDIAN); } static const gchar* dissect_packetcable_em_hdr(proto_tree* tree, tvbuff_t* tvb, packet_info *pinfo _U_) { - guint8 packetcable_buf[64]; proto_item *ti; proto_tree *obj_tree; @@ -271,13 +288,11 @@ static const gchar* dissect_packetcable_em_hdr(proto_tree* tree, tvbuff_t* tvb, proto_tree_add_item(tree, hf_packetcable_em_header_event_message_type, tvb, 26, 2, ENC_BIG_ENDIAN); proto_tree_add_item(tree, hf_packetcable_em_header_element_type, tvb, 28, 2, ENC_BIG_ENDIAN); - tvb_memcpy(tvb, packetcable_buf, 30, 8); packetcable_buf[8] = '\0'; - proto_tree_add_text(tree, tvb, 30, 8, "Element ID: %s", packetcable_buf ); - tvb_memcpy(tvb, packetcable_buf, 39, 7); packetcable_buf[7] = '\0'; - proto_tree_add_text(tree, tvb, 38, 8, "Time Zone: DST: %c, Offset: %s", tvb_get_guint8(tvb, 38), packetcable_buf); + proto_tree_add_item(tree, hf_packetcable_em_header_element_id, tvb, 30, 8, ENC_ASCII|ENC_NA); + proto_tree_add_item(tree, hf_packetcable_em_header_time_zone_dst, tvb, 38, 1, ENC_NA); + proto_tree_add_item(tree, hf_packetcable_em_header_time_zone_offset, tvb, 39, 7, ENC_ASCII|ENC_NA); proto_tree_add_item(tree, hf_packetcable_em_header_sequence_number, tvb, 46, 4, ENC_BIG_ENDIAN); - tvb_memcpy(tvb, packetcable_buf, 50, 18); packetcable_buf[18] = '\0'; - proto_tree_add_text(tree, tvb, 50, 18, "Event Time: %s", packetcable_buf); + proto_tree_add_item(tree, hf_packetcable_em_header_event_time, tvb, 50, 18, ENC_ASCII|ENC_NA); ti = proto_tree_add_item(tree, hf_packetcable_em_header_status, tvb, 68, 4, ENC_BIG_ENDIAN); obj_tree = proto_item_add_subtree(ti, ett_radius_vendor_packetcable_status); @@ -314,24 +329,34 @@ static const gchar* dissect_packetcable_trunk_group_id(proto_tree* tree, tvbuff_ } static const gchar* dissect_packetcable_qos_descriptor(proto_tree* tree, tvbuff_t* tvb, packet_info *pinfo _U_) { - guint8 packetcable_buf[64]; guint32 intval; guint32 packetcable_qos_flags = tvb_get_ntohl(tvb, 0); - proto_item* ti = proto_tree_add_item(tree, hf_packetcable_qos_status, tvb, 0, 4, ENC_BIG_ENDIAN); - proto_tree* obj_tree = proto_item_add_subtree(ti, ett_radius_vendor_packetcable_qos_status); - guint packetcable_qos_off = 20; + static const int * qos_flags[] = { + &hf_packetcable_qos_status_indication, + &hf_packetcable_qos_desc_flags_sfst, + &hf_packetcable_qos_desc_flags_gi, + &hf_packetcable_qos_desc_flags_tgj, + &hf_packetcable_qos_desc_flags_gpi, + &hf_packetcable_qos_desc_flags_ugs, + &hf_packetcable_qos_desc_flags_tp, + &hf_packetcable_qos_desc_flags_msr, + &hf_packetcable_qos_desc_flags_mtb, + &hf_packetcable_qos_desc_flags_mrtr, + &hf_packetcable_qos_desc_flags_mps, + &hf_packetcable_qos_desc_flags_mcb, + &hf_packetcable_qos_desc_flags_srtp, + &hf_packetcable_qos_desc_flags_npi, + &hf_packetcable_qos_desc_flags_tpj, + &hf_packetcable_qos_desc_flags_toso, + &hf_packetcable_qos_desc_flags_mdl, + NULL + }; - proto_tree_add_item(obj_tree, hf_packetcable_qos_status_indication, tvb, 0, 4, ENC_BIG_ENDIAN); - - for (intval = 0; intval < PACKETCABLE_QOS_DESC_BITFIELDS; intval++) { - proto_tree_add_item(obj_tree, hf_packetcable_qos_desc_flags[intval], tvb, 0, 4, ENC_BIG_ENDIAN); - } - - tvb_memcpy(tvb, packetcable_buf, 4, 16); - packetcable_buf[16] = '\0'; + proto_tree_add_bitmask(tree, tvb, 0, hf_packetcable_qos_status, + ett_radius_vendor_packetcable_qos_status, qos_flags, ENC_BIG_ENDIAN); - proto_tree_add_text(tree, tvb, 4, 16, "Service Class Name: %s", packetcable_buf); + proto_tree_add_item(tree, hf_packetcable_qos_service_class_name, tvb, 4, 16, ENC_ASCII|ENC_NA); for (intval = 0; intval < PACKETCABLE_QOS_DESC_BITFIELDS; intval++) { if (packetcable_qos_flags & packetcable_qos_desc_mask[intval]) { @@ -351,15 +376,10 @@ static const gchar* dissect_packetcable_time_adjustment(proto_tree* tree, tvbuff } static const gchar* dissect_packetcable_redirected_from_info(proto_tree* tree, tvbuff_t* tvb, packet_info *pinfo _U_) { - guint8 packetcable_buf[64]; - tvb_memcpy(tvb, packetcable_buf, 0, 20); packetcable_buf[20] = '\0'; - proto_tree_add_text(tree, tvb, 0, 20, - "Last-Redirecting-Party: %s", packetcable_buf); + proto_tree_add_item(tree, hf_packetcable_redirected_from_last_redirecting_party, tvb, 0, 20, ENC_ASCII|ENC_NA); - tvb_memcpy(tvb, packetcable_buf, 20, 20); packetcable_buf[20] = '\0'; - proto_tree_add_text(tree, tvb, 20, 20, - "Original-Called-Party: %s", packetcable_buf); + proto_tree_add_item(tree, hf_packetcable_redirected_from_original_called_party, tvb, 20, 20, ENC_ASCII|ENC_NA); proto_tree_add_item(tree, hf_packetcable_redirected_from_info_number_of_redirections, tvb, 40, 2, ENC_BIG_ENDIAN); @@ -380,7 +400,7 @@ static const gchar* dissect_packetcable_time_electr_surv_ind(proto_tree* tree, t tvb, 8, 2, ENC_BIG_ENDIAN); proto_tree_add_item(tree, hf_packetcable_electronic_surveillance_indication_ccc_port, tvb, 10, 2, ENC_BIG_ENDIAN); - proto_tree_add_text(tree, tvb, 12, tvb_length(tvb) - 12, "DF-DF-Key"); + proto_tree_add_item(tree, hf_packetcable_electronic_surveillance_indication_df_df_key, tvb, 12, -1, ENC_NA); return ""; } @@ -539,82 +559,82 @@ void proto_register_packetcable(void) { FT_UINT32, BASE_DEC, VALS(packetcable_state_indication_vals), PACKETCABLE_QOS_STATE_INDICATION_MASK, "PacketCable QoS Descriptor Attribute QoS State Indication", HFILL } }, - { &hf_packetcable_qos_desc_flags[0], + { &hf_packetcable_qos_desc_flags_sfst, { "Service Flow Scheduling Type","packetcable_avps.qs.flags.sfst", FT_UINT32, BASE_DEC, NULL, PACKETCABLE_SERVICE_FLOW_SCHEDULING_TYPE_MASK, "PacketCable QoS Descriptor Attribute Bitmask: Service Flow Scheduling Type", HFILL } }, - { &hf_packetcable_qos_desc_flags[1], + { &hf_packetcable_qos_desc_flags_gi, { "Grant Interval","packetcable_avps.qs.flags.gi", FT_UINT32, BASE_DEC, NULL, PACKETCABLE_NOMINAL_GRANT_INTERVAL_MASK, "PacketCable QoS Descriptor Attribute Bitmask: Grant Interval", HFILL } }, - { &hf_packetcable_qos_desc_flags[2], + { &hf_packetcable_qos_desc_flags_tgj, { "Tolerated Grant Jitter","packetcable_avps.qs.flags.tgj", FT_UINT32, BASE_DEC, NULL, PACKETCABLE_TOLERATED_GRANT_JITTER_MASK, "PacketCable QoS Descriptor Attribute Bitmask: Tolerated Grant Jitter", HFILL } }, - { &hf_packetcable_qos_desc_flags[3], + { &hf_packetcable_qos_desc_flags_gpi, { "Grants Per Interval","packetcable_avps.qs.flags.gpi", FT_UINT32, BASE_DEC, NULL, PACKETCABLE_GRANTS_PER_INTERVAL_MASK, "PacketCable QoS Descriptor Attribute Bitmask: Grants Per Interval", HFILL } }, - { &hf_packetcable_qos_desc_flags[4], + { &hf_packetcable_qos_desc_flags_ugs, { "Unsolicited Grant Size","packetcable_avps.qs.flags.ugs", FT_UINT32, BASE_DEC, NULL, PACKETCABLE_UNSOLICITED_GRANT_SIZE_MASK, "PacketCable QoS Descriptor Attribute Bitmask: Unsolicited Grant Size", HFILL } }, - { &hf_packetcable_qos_desc_flags[5], + { &hf_packetcable_qos_desc_flags_tp, { "Traffic Priority","packetcable_avps.qs.flags.tp", FT_UINT32, BASE_DEC, NULL, PACKETCABLE_TRAFFIC_PRIORITY_MASK, "PacketCable QoS Descriptor Attribute Bitmask: Traffic Priority", HFILL } }, - { &hf_packetcable_qos_desc_flags[6], + { &hf_packetcable_qos_desc_flags_msr, { "Maximum Sustained Rate","packetcable_avps.qs.flags.msr", FT_UINT32, BASE_DEC, NULL, PACKETCABLE_MAXIMUM_SUSTAINED_RATE_MASK, "PacketCable QoS Descriptor Attribute Bitmask: Maximum Sustained Rate", HFILL } }, - { &hf_packetcable_qos_desc_flags[7], + { &hf_packetcable_qos_desc_flags_mtb, { "Maximum Traffic Burst","packetcable_avps.qs.flags.mtb", FT_UINT32, BASE_DEC, NULL, PACKETCABLE_MAXIMUM_TRAFFIC_BURST_MASK, "PacketCable QoS Descriptor Attribute Bitmask: Maximum Traffic Burst", HFILL } }, - { &hf_packetcable_qos_desc_flags[8], + { &hf_packetcable_qos_desc_flags_mrtr, { "Minimum Reserved Traffic Rate","packetcable_avps.qs.flags.mrtr", FT_UINT32, BASE_DEC, NULL, PACKETCABLE_MINIMUM_RESERVED_TRAFFIC_RATE_MASK, "PacketCable QoS Descriptor Attribute Bitmask: Minimum Reserved Traffic Rate", HFILL } }, - { &hf_packetcable_qos_desc_flags[9], + { &hf_packetcable_qos_desc_flags_mps, { "Minimum Packet Size","packetcable_avps.qs.flags.mps", FT_UINT32, BASE_DEC, NULL, PACKETCABLE_MINIMUM_PACKET_SIZE_MASK, "PacketCable QoS Descriptor Attribute Bitmask: Minimum Packet Size", HFILL } }, - { &hf_packetcable_qos_desc_flags[10], + { &hf_packetcable_qos_desc_flags_mcb, { "Maximum Concatenated Burst","packetcable_avps.qs.flags.mcb", FT_UINT32, BASE_DEC, NULL, PACKETCABLE_MAXIMUM_CONCATENATED_BURST_MASK, "PacketCable QoS Descriptor Attribute Bitmask: Maximum Concatenated Burst", HFILL } }, - { &hf_packetcable_qos_desc_flags[11], + { &hf_packetcable_qos_desc_flags_srtp, { "Status Request/Transmission Policy","packetcable_avps.qs.flags.srtp", FT_UINT32, BASE_DEC, NULL, PACKETCABLE_REQUEST_TRANSMISSION_POLICY_MASK, "PacketCable QoS Descriptor Attribute Bitmask: Status Request/Transmission Policy", HFILL } }, - { &hf_packetcable_qos_desc_flags[12], + { &hf_packetcable_qos_desc_flags_npi, { "Nominal Polling Interval","packetcable_avps.qs.flags.npi", FT_UINT32, BASE_DEC, NULL, PACKETCABLE_NOMINAL_POLLING_INTERVAL_MASK, "PacketCable QoS Descriptor Attribute Bitmask: Nominal Polling Interval", HFILL } }, - { &hf_packetcable_qos_desc_flags[13], + { &hf_packetcable_qos_desc_flags_tpj, { "Tolerated Poll Jitter","packetcable_avps.qs.flags.tpj", FT_UINT32, BASE_DEC, NULL, PACKETCABLE_TOLERATED_POLL_JITTER_MASK, "PacketCable QoS Descriptor Attribute Bitmask: Tolerated Poll Jitter", HFILL } }, - { &hf_packetcable_qos_desc_flags[14], + { &hf_packetcable_qos_desc_flags_toso, { "Type of Service Override","packetcable_avps.qs.flags.toso", FT_UINT32, BASE_DEC, NULL, PACKETCABLE_IP_TYPE_OF_SERVICE_OVERRIDE_MASK, "PacketCable QoS Descriptor Attribute Bitmask: Type of Service Override", HFILL } }, - { &hf_packetcable_qos_desc_flags[15], + { &hf_packetcable_qos_desc_flags_mdl, { "Maximum Downstream Latency","packetcable_avps.qs.flags.mdl", FT_UINT32, BASE_DEC, NULL, PACKETCABLE_MAXIMUM_DOWNSTREAM_LATENCY_MASK, "PacketCable QoS Descriptor Attribute Bitmask: Maximum Downstream Latency", HFILL } @@ -774,7 +794,19 @@ void proto_register_packetcable(void) { { "Message_Waiting","packetcable_avps.tdi.mw", FT_STRING, BASE_NONE, NULL, 0, "PacketCable Terminal_Display_Info Message_Waiting", HFILL } - } + }, + /* Generated from convert_proto_tree_add_text.pl */ + { &hf_packetcable_bcid_element_id, { "Element ID", "packetcable_avps.bcid.element_id", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }}, + { &hf_packetcable_bcid_time_zone_dst, { "Time Zone: DST", "packetcable_avps.bcid.time_zone.dst", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }}, + { &hf_packetcable_bcid_time_zone_offset, { "Time Zone: Offset", "packetcable_avps.bcid.time_zone.offset", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }}, + { &hf_packetcable_em_header_element_id, { "Element ID", "packetcable_avps.emh.element_id", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }}, + { &hf_packetcable_em_header_time_zone_dst, { "Time Zone: DST", "packetcable_avps.emh.time_zone.dst", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }}, + { &hf_packetcable_em_header_time_zone_offset, { "Time Zone: Offset", "packetcable_avps.emh.time_zone.offset", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }}, + { &hf_packetcable_em_header_event_time, { "Event Time", "packetcable_avps.emh.event_time", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }}, + { &hf_packetcable_qos_service_class_name, { "Service Class Name", "packetcable_avps.qs.sc_name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }}, + { &hf_packetcable_redirected_from_last_redirecting_party, { "Last-Redirecting-Party", "packetcable_avps.rfi.last_redirecting_party", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }}, + { &hf_packetcable_redirected_from_original_called_party, { "Original-Called-Party", "packetcable_avps.rfi.original_called_party", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }}, + { &hf_packetcable_electronic_surveillance_indication_df_df_key, { "DF-DF-Key", "packetcable_avps.esi.df_df_key", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }}, }; static gint *ett[] = { |