aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGerald Combs <gerald@wireshark.org>2006-02-09 19:41:20 +0000
committerGerald Combs <gerald@wireshark.org>2006-02-09 19:41:20 +0000
commit243fb390670355a27434ae9e7256a4b39ddd0007 (patch)
tree22477a946ee88041f34d3d61715841b3f7c3b7a2
parenta00e7fb4fb8b6004c6d7dfa6f58b21d9843290f8 (diff)
Add PacketCable Multimedia updates. Sponsored by CableLabs.
svn path=/trunk/; revision=17232
-rw-r--r--epan/dissectors/packet-cops.c324
1 files changed, 276 insertions, 48 deletions
diff --git a/epan/dissectors/packet-cops.c b/epan/dissectors/packet-cops.c
index 1e60038be5..d45aa9bda1 100644
--- a/epan/dissectors/packet-cops.c
+++ b/epan/dissectors/packet-cops.c
@@ -398,7 +398,7 @@ static const value_string cops_cperror_vals[] = {
{11, "invalidAttrType" },
{12, "deletedInRef" },
{13, "priSpecificError" },
- {0, NULL },
+ {0, NULL },
};
@@ -547,6 +547,28 @@ static const value_string table_cops_mm_transaction_id[] = {
{13, "Gate Open"},
{14, "Gate Close"},
{15, "Gate Report State"},
+ {16, "Invalid Gate Cmd Err"},
+ {17, "PDP Config"},
+ {18, "PDP Config Ack"},
+ {19, "PDP Config Error"},
+ {20, "Synch Request"},
+ {21, "Synch Report"},
+ {22, "Synch Complete"},
+ {23, "Message Receipt"},
+ {0, NULL },
+};
+
+static const value_string pcmm_activation_state_vals[] = {
+ {0, "Inactive"},
+ {1, "Active"},
+ {0, NULL },
+};
+
+static const value_string pcmm_action_vals[] = {
+ {0, "Add classifier"},
+ {1, "Replace classifier"},
+ {2, "Delete classifier"},
+ {3, "No change"},
{0, NULL },
};
@@ -556,6 +578,18 @@ static const value_string pcmm_flow_spec_service_vals[] = {
{0, NULL },
};
+static const value_string pcmm_report_type_vals[] = {
+ {0, "Standard Report Data"},
+ {1, "Complete Gate Data"},
+ {0, NULL},
+};
+
+static const value_string pcmm_synch_type_vals[] = {
+ {0, "Full Synchronization"},
+ {1, "Incremental Synchronization"},
+ {0, NULL},
+};
+
static const value_string pcmm_packetcable_error_code[] = {
{1, "Insufficient Resources"},
{2, "Unknown GateID"},
@@ -569,6 +603,14 @@ static const value_string pcmm_packetcable_error_code[] = {
{13, "Invalid SubscriberID"},
{14, "Unauthorized AMID"},
{15, "Number of Classifiers Not Supported"},
+ {16, "Policy Exception"},
+ {17, "Invalid Field Value in Object"},
+ {18, "Transport Error"},
+ {19, "Unknown Gate Command"},
+ {20, "Unauthorized PSID"},
+ {21, "No State for PDP"},
+ {22, "Unsupported Synch Type"},
+ {23, "Incremental Data Incomplete"},
{127, "Other, Unspecified Error"},
{0, NULL},
};
@@ -583,15 +625,19 @@ static const value_string pcmm_gate_state[] = {
};
static const value_string pcmm_gate_state_reason[] = {
- {1, "Close initiated by CMTS due to reservation reassignment"},
- {2, "Close initiated by CMTS due to lack of DOCSIS MAC-layer responses"},
- {3, "Close initiated by CMTS due to timer T1 expiration"},
- {4, "Close initiated by CMTS due to timer T2 expiration"},
- {5, "Inactivity timer expired due to Service Flow inactivity (timer T3 expiration)"},
- {6, "Close initiated by CMTS due to lack of Reservation Maintenance"},
- {7, "Gate state unchanged, but volume limit reached"},
- {8, "Close initiated by CMTS due to timer T4 expiration"},
- {9, "Gate state unchanged, but timer T2 expiration caused reservation reduction"},
+ {1, "Close initiated by CMTS due to reservation reassignment"},
+ {2, "Close initiated by CMTS due to lack of DOCSIS MAC-layer responses"},
+ {3, "Close initiated by CMTS due to timer T1 expiration"},
+ {4, "Close initiated by CMTS due to timer T2 expiration"},
+ {5, "Inactivity timer expired due to Service Flow inactivity (timer T3 expiration)"},
+ {6, "Close initiated by CMTS due to lack of Reservation Maintenance"},
+ {7, "Gate state unchanged, but volume limit reached"},
+ {8, "Close initiated by CMTS due to timer T4 expiration"},
+ {9, "Gate state unchanged, but timer T2 expiration caused reservation reduction"},
+ {10, "Gate state unchanged, but time limit reached"},
+ {11, "Close initiated by Policy Server or CMTS, volume limit reached"},
+ {12, "Close initiated by Policy Server or CMTS, time limit reached"},
+ {13, "Close initiated by CMTS, other"},
{65535, "Other"},
{0, NULL},
};
@@ -711,7 +757,8 @@ static gint hf_cops_pc_dfccc_ip_port = -1;
static gint hf_cops_pc_dfccc_id = -1;
/* PacketCable Multimedia */
-static gint hf_cops_pcmm_amid = -1;
+static gint hf_cops_pcmm_amid_app_type = -1;
+static gint hf_cops_pcmm_amid_am_tag = -1;
static gint hf_cops_pcmm_gate_spec_flags = -1;
static gint hf_cops_pcmm_gate_spec_dscp_tos_field = -1;
static gint hf_cops_pcmm_gate_spec_dscp_tos_mask = -1;
@@ -727,10 +774,17 @@ static gint hf_cops_pcmm_classifier_protocol_id = -1;
static gint hf_cops_pcmm_classifier_dscp_tos_field = -1;
static gint hf_cops_pcmm_classifier_dscp_tos_mask = -1;
static gint hf_cops_pcmm_classifier_src_addr = -1;
+static gint hf_cops_pcmm_classifier_src_mask = -1;
static gint hf_cops_pcmm_classifier_dst_addr = -1;
+static gint hf_cops_pcmm_classifier_dst_mask = -1;
static gint hf_cops_pcmm_classifier_src_port = -1;
+static gint hf_cops_pcmm_classifier_src_port_end = -1;
static gint hf_cops_pcmm_classifier_dst_port = -1;
+static gint hf_cops_pcmm_classifier_dst_port_end = -1;
static gint hf_cops_pcmm_classifier_priority = -1;
+static gint hf_cops_pcmm_classifier_classifier_id = -1;
+static gint hf_cops_pcmm_classifier_activation_state = -1;
+static gint hf_cops_pcmm_classifier_action = -1;
static gint hf_cops_pcmm_flow_spec_envelope = -1;
static gint hf_cops_pcmm_flow_spec_service_number = -1;
static gint hf_cops_pcmm_docsis_scn = -1;
@@ -758,6 +812,10 @@ static gint hf_cops_pcmm_packetcable_gate_state = -1;
static gint hf_cops_pcmm_packetcable_gate_state_reason = -1;
static gint hf_cops_pcmm_packetcable_version_info_major = -1;
static gint hf_cops_pcmm_packetcable_version_info_minor = -1;
+static gint hf_cops_pcmm_psid = -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;
/* Initialize the subtree pointers */
@@ -2134,10 +2192,15 @@ void proto_register_cops(void)
"BCID Event Counter", HFILL }
},
- { &hf_cops_pcmm_amid,
- { "AMID", "cops.pc_mm_amid",
+ { &hf_cops_pcmm_amid_app_type,
+ { "AMID Application Type", "cops.pc_mm_amid_application_type",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "PacketCable Multimedia AMID Application Type", HFILL }
+ },
+ { &hf_cops_pcmm_amid_am_tag,
+ { "AMID Application Manager Tag", "cops.pc_mm_amid_am_tag",
FT_UINT32, BASE_DEC, NULL, 0,
- "PacketCable Multimedia AMID", HFILL }
+ "PacketCable Multimedia AMID Application Manager Tag", HFILL }
},
{ &hf_cops_pcmm_gate_spec_flags,
@@ -2216,26 +2279,61 @@ void proto_register_cops(void)
FT_IPv4, 0, 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,
+ "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,
"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,
+ "PacketCable Multimedia Classifier Destination Mask", HFILL }
+ },
{ &hf_cops_pcmm_classifier_src_port,
{ "Source Port", "cops.pc_mm_classifier_src_port",
FT_UINT16, BASE_DEC, NULL, 0,
"PacketCable Multimedia Classifier Source Port", HFILL }
},
+ { &hf_cops_pcmm_classifier_src_port_end,
+ { "Source Port End", "cops.pc_mm_classifier_src_port_end",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ "PacketCable Multimedia Classifier Source Port End", HFILL }
+ },
{ &hf_cops_pcmm_classifier_dst_port,
{ "Destination Port", "cops.pc_mm_classifier_dst_port",
FT_UINT16, BASE_DEC, NULL, 0,
"PacketCable Multimedia Classifier Source Port", HFILL }
},
+ { &hf_cops_pcmm_classifier_dst_port_end,
+ { "Destination Port", "cops.pc_mm_classifier_dst_port_end",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ "PacketCable Multimedia Classifier Source Port End", HFILL }
+ },
{ &hf_cops_pcmm_classifier_priority,
{ "Priority", "cops.pc_mm_classifier_priority",
FT_UINT8, BASE_HEX, NULL, 0,
"PacketCable Multimedia Classifier Priority", HFILL }
},
+ { &hf_cops_pcmm_classifier_classifier_id,
+ { "Priority", "cops.pc_mm_classifier_id",
+ FT_UINT16, BASE_HEX, NULL, 0,
+ "PacketCable Multimedia Classifier ID", HFILL }
+ },
+ { &hf_cops_pcmm_classifier_activation_state,
+ { "Priority", "cops.pc_mm_classifier_activation_state",
+ FT_UINT8, BASE_HEX, pcmm_activation_state_vals, 0,
+ "PacketCable Multimedia Classifier Activation State", HFILL }
+ },
+ { &hf_cops_pcmm_classifier_action,
+ { "Priority", "cops.pc_mm_classifier_action",
+ FT_UINT8, BASE_HEX, pcmm_action_vals, 0,
+ "PacketCable Multimedia Classifier Action", HFILL }
+ },
{ &hf_cops_pcmm_flow_spec_envelope,
{ "Envelope", "cops.pc_mm_fs_envelope",
@@ -2386,6 +2484,28 @@ void proto_register_cops(void)
"PacketCable Multimedia Minor Version Number", HFILL }
},
+ { &hf_cops_pcmm_psid,
+ { "PSID", "cops.pc_mm_psid",
+ FT_UINT32, BASE_HEX, NULL, 0,
+ "PacketCable Multimedia PSID", HFILL }
+ },
+
+ { &hf_cops_pcmm_synch_options_report_type,
+ { "Report Type", "cops.pc_mm_synch_options_report_type",
+ FT_UINT8, BASE_DEC, pcmm_report_type_vals, 0,
+ "PacketCable Multimedia Synch Options Report Type", HFILL }
+ },
+ { &hf_cops_pcmm_synch_options_synch_type,
+ { "Synch Type", "cops.pc_mm_synch_options_synch_type",
+ FT_UINT8, BASE_DEC, pcmm_synch_type_vals, 0,
+ "PacketCable Multimedia Synch Options Synch Type", HFILL }
+ },
+
+ { &hf_cops_pcmm_msg_receipt_key,
+ { "Msg Receipt Key", "cops.pc_mm_msg_receipt_key",
+ FT_UINT32, BASE_HEX, NULL, 0,
+ "PacketCable Multimedia Msg Receipt Key", HFILL }
+ },
/* End of addition for PacketCable */
};
@@ -3070,8 +3190,12 @@ cops_amid(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
stt = info_to_cops_subtree(tvb,st,n,offset,"AMID");
offset += 4;
- /* Gate Identifier */
- info_to_display(tvb,stt,offset,4,"Application Manager ID", NULL,FMT_DEC,&hf_cops_pcmm_amid);
+ /* Application Type */
+ info_to_display(tvb,stt,offset,4,"Application Manager ID Application Type", NULL,FMT_DEC,&hf_cops_pcmm_amid_app_type);
+ offset += 4;
+
+ /* Application Manager Tag */
+ info_to_display(tvb,stt,offset,4,"Application Manager ID Application Manager Tag", NULL,FMT_DEC,&hf_cops_pcmm_amid_am_tag);
}
@@ -3133,48 +3257,87 @@ cops_mm_gate_spec(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
/* Cops - Section : Classifier */
static void
-cops_classifier(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+cops_classifier(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset, gboolean extended) {
- proto_tree *stt;
+ proto_tree *stt;
- /* Create a subtree */
- stt = info_to_cops_subtree(tvb,st,n,offset,"Classifier");
- offset += 4;
+ /* Create a subtree */
+ stt = info_to_cops_subtree(tvb,st,n,offset,
+ extended ? "Extended Classifier" : "Classifier");
+ offset += 4;
- /* Protocol ID */
- info_to_display(tvb,stt,offset,2,"Protocol ID",NULL,FMT_DEC,&hf_cops_pcmm_classifier_protocol_id);
- offset += 2;
+ /* Protocol ID */
+ info_to_display(tvb,stt,offset,2,"Protocol ID",NULL,FMT_DEC,&hf_cops_pcmm_classifier_protocol_id);
+ offset += 2;
- /* DiffServ Code Point */
- info_to_display(tvb,stt,offset,1,"DS Field (DSCP or TOS)",NULL,FMT_HEX,&hf_cops_pcmm_classifier_dscp_tos_field);
- offset += 1;
+ /* DiffServ Code Point */
+ info_to_display(tvb,stt,offset,1,"DS Field (DSCP or TOS)",NULL,FMT_HEX,&hf_cops_pcmm_classifier_dscp_tos_field);
+ offset += 1;
- /* DiffServ Code Point Mask */
- info_to_display(tvb,stt,offset,1,"DS Field (DSCP or TOS) Mask",NULL,FMT_HEX,&hf_cops_pcmm_classifier_dscp_tos_mask);
- offset += 1;
+ /* DiffServ Code Point Mask */
+ info_to_display(tvb,stt,offset,1,"DS Field (DSCP or TOS) Mask",NULL,FMT_HEX,&hf_cops_pcmm_classifier_dscp_tos_mask);
+ offset += 1;
- /* Source IP Address */
- info_to_display(tvb,stt,offset,4,"Source IP Address",NULL,FMT_IPv4,&hf_cops_pcmm_classifier_src_addr);
- offset += 4;
+ /* Source IP Address */
+ info_to_display(tvb,stt,offset,4,"Source IP Address",NULL,FMT_IPv4,&hf_cops_pcmm_classifier_src_addr);
+ offset += 4;
- /* Destination IP Address */
- info_to_display(tvb,stt,offset,4,"Destination IP Address",NULL,FMT_IPv4,&hf_cops_pcmm_classifier_dst_addr);
- offset += 4;
+ if (extended) {
+ /* Source Mask */
+ info_to_display(tvb,stt,offset,4,"Source Mask",NULL,FMT_IPv4,&hf_cops_pcmm_classifier_src_mask);
+ offset += 4;
+ }
- /* Source IP Port */
- info_to_display(tvb,stt,offset,2,"Source IP Port",NULL,FMT_DEC,&hf_cops_pcmm_classifier_src_port);
- offset += 2;
+ /* Destination IP Address */
+ info_to_display(tvb,stt,offset,4,"Destination IP Address",NULL,FMT_IPv4,&hf_cops_pcmm_classifier_dst_addr);
+ offset += 4;
- /* Destination IP Port */
- info_to_display(tvb,stt,offset,2,"Destination IP Port",NULL,FMT_DEC,&hf_cops_pcmm_classifier_dst_port);
- offset += 2;
+ if (extended) {
+ /* Destination Mask */
+ info_to_display(tvb,stt,offset,4,"Destination Mask",NULL,FMT_IPv4,&hf_cops_pcmm_classifier_dst_mask);
+ offset += 4;
+ }
- /* Priority */
- info_to_display(tvb,stt,offset,1,"Priority",NULL,FMT_HEX,&hf_cops_pcmm_classifier_priority);
- offset += 1;
+ /* Source IP Port */
+ info_to_display(tvb,stt,offset,2,"Source IP Port",NULL,FMT_DEC,&hf_cops_pcmm_classifier_src_port);
+ offset += 2;
- /* 3 octets Not specified */
- offset += 3;
+ if (extended) {
+ /* Source Port End */
+ info_to_display(tvb,stt,offset,2,"Source Port End",NULL,FMT_DEC,&hf_cops_pcmm_classifier_src_port_end);
+ offset += 2;
+ }
+
+ /* Destination IP Port */
+ info_to_display(tvb,stt,offset,2,"Destination IP Port",NULL,FMT_DEC,&hf_cops_pcmm_classifier_dst_port);
+ offset += 2;
+
+ if (extended) {
+ /* Destination Port End */
+ info_to_display(tvb,stt,offset,2,"Destination Port End",NULL,FMT_DEC,&hf_cops_pcmm_classifier_dst_port_end);
+ 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;
+
+ /* Activation State */
+ info_to_display(tvb,stt,offset,1,"Activation State",NULL,FMT_HEX,&hf_cops_pcmm_classifier_activation_state);
+ offset += 1;
+
+ /* Action */
+ info_to_display(tvb,stt,offset,1,"Action",NULL,FMT_HEX,&hf_cops_pcmm_classifier_action);
+ offset += 1;
+ }
+
+ /* 3 octets Not specified */
+ offset += 3;
}
/* Cops - Section : Gate Specifications */
@@ -4270,6 +4433,55 @@ cops_version_info(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
offset += 2;
}
+/* Cops - Section : PSID */
+static void
+cops_psid(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,"PSID");
+ offset += 4;
+
+ /* PSID */
+ info_to_display(tvb,stt,offset,4,"PSID", NULL,FMT_HEX,&hf_cops_pcmm_psid);
+}
+
+/* Cops - Section : Synch Options */
+static void
+cops_synch_options(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,"Synch Options");
+ offset += 4;
+
+ proto_tree_add_text(stt, tvb, offset, 2, "Reserved");
+ offset += 2;
+
+ /* Report Type */
+ info_to_display(tvb,stt,offset,1,"Report Type", pcmm_report_type_vals,FMT_DEC,&hf_cops_pcmm_synch_options_report_type);
+ offset += 1;
+
+ /* Sych Type */
+ info_to_display(tvb,stt,offset,1,"Synch Type", pcmm_synch_type_vals,FMT_DEC,&hf_cops_pcmm_synch_options_synch_type);
+ offset += 1;
+}
+
+/* Cops - Section : Msg Receipt Key */
+static void
+cops_msg_receipt_key(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,"Msg Receipt Key");
+ offset += 4;
+
+ /* Msg Receipt Key */
+ info_to_display(tvb,stt,offset,4,"Msg Receipt Key", NULL,FMT_HEX,&hf_cops_pcmm_msg_receipt_key);
+}
/* PacketCable D-QoS S-Num/S-Type globs */
@@ -4403,6 +4615,7 @@ decode_docsis_request_transmission_policy(tvbuff_t *tvb, guint32 offset, proto_t
#define PCMM_GATE_ID 0x0401
#define PCMM_GATE_SPEC 0x0501
#define PCMM_CLASSIFIER 0x0601
+#define PCMM_EXTENDED_CLASSIFIER 0x0602
#define PCMM_FLOW_SPEC 0x0701
#define PCMM_DOCSIS_SERVICE_CLASS_NAME 0x0702
#define PCMM_BEST_EFFORT_SERVICE 0x0703
@@ -4420,6 +4633,9 @@ decode_docsis_request_transmission_policy(tvbuff_t *tvb, guint32 offset, proto_t
#define PCMM_PACKETCABLE_ERROR 0x0e01
#define PCMM_GATE_STATE 0x0f01
#define PCMM_VERSION_INFO 0x1001
+#define PCMM_PSID 0x1101
+#define PCMM_SYNCH_OPTIONS 0x1201
+#define PCMM_MSG_RECEIPT_KEY 0x1301
static void
@@ -4469,7 +4685,10 @@ cops_analyze_packetcable_mm_obj(tvbuff_t *tvb, packet_info *pinfo, proto_tree *t
cops_mm_gate_spec(tvb, tree, object_len, offset);
break;
case PCMM_CLASSIFIER:
- cops_classifier(tvb, tree, object_len, offset);
+ cops_classifier(tvb, tree, object_len, offset, FALSE);
+ break;
+ case PCMM_EXTENDED_CLASSIFIER:
+ cops_classifier(tvb, tree, object_len, offset, TRUE);
break;
case PCMM_FLOW_SPEC:
cops_flow_spec(tvb, tree, object_len, offset);
@@ -4522,6 +4741,15 @@ cops_analyze_packetcable_mm_obj(tvbuff_t *tvb, packet_info *pinfo, proto_tree *t
case PCMM_VERSION_INFO:
cops_version_info(tvb, tree, object_len, offset);
break;
+ case PCMM_PSID:
+ cops_psid(tvb, tree, object_len, offset);
+ break;
+ case PCMM_SYNCH_OPTIONS:
+ cops_synch_options(tvb, tree, object_len, offset);
+ break;
+ case PCMM_MSG_RECEIPT_KEY:
+ cops_msg_receipt_key(tvb, tree, object_len, offset);
+ break;
}
/* Tune offset */