aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-enrp.c
diff options
context:
space:
mode:
authortuexen <tuexen@f5534014-38df-0310-8fa8-9805f1628bb7>2007-03-07 20:28:48 +0000
committertuexen <tuexen@f5534014-38df-0310-8fa8-9805f1628bb7>2007-03-07 20:28:48 +0000
commitbef12e0544b1eeaa648f92cc73231804950d91ac (patch)
treedd9003b8ba30c64de5d4d44549b9c5216da548ae /epan/dissectors/packet-enrp.c
parent3d5dcbc532cc19116dfa63b0c922bd9b699448da (diff)
Add support for draft-ietf-rserpool-policies-04.txt.
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@20996 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'epan/dissectors/packet-enrp.c')
-rw-r--r--epan/dissectors/packet-enrp.c102
1 files changed, 83 insertions, 19 deletions
diff --git a/epan/dissectors/packet-enrp.c b/epan/dissectors/packet-enrp.c
index 76e9fd7975..f5567a7003 100644
--- a/epan/dissectors/packet-enrp.c
+++ b/epan/dissectors/packet-enrp.c
@@ -2,6 +2,7 @@
* Routines for Endpoint Handlespace Redundancy Protocol (ENRP)
* It is hopefully (needs testing) compilant to
* http://www.ietf.org/internet-drafts/draft-ietf-rserpool-common-param-09.txt
+ * http://www.ietf.org/internet-drafts/draft-ietf-rserpool-policies-04.txt
* http://www.ietf.org/internet-drafts/draft-ietf-rserpool-enrp-12.txt
*
* The code is not as simple as possible for the current protocol
@@ -11,7 +12,7 @@
* TODO:
* - check message lengths
*
- * Copyright 2004, 2005 Michael Tuexen <tuexen [AT] fh-muenster.de>
+ * Copyright 2004, 2005, 2006, 2007 Michael Tuexen <tuexen [AT] fh-muenster.de>
*
* $Id$
*
@@ -66,6 +67,10 @@ static int hf_udp_port = -1;
static int hf_udp_reserved = -1;
static int hf_policy_type = -1;
static int hf_policy_value = -1;
+static int hf_policy_weight = -1;
+static int hf_policy_priority = -1;
+static int hf_policy_load = -1;
+static int hf_policy_degradation = -1;
static int hf_pool_handle = -1;
static int hf_pe_pe_identifier = -1;
static int hf_home_enrp_id = -1;
@@ -320,29 +325,84 @@ dissect_udp_transport_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_t
dissect_parameters(parameters_tvb, parameter_tree);
}
-#define POLICY_TYPE_LENGTH 1
-#define POLICY_VALUE_LENGTH 3
-
-#define POLICY_TYPE_OFFSET PARAMETER_VALUE_OFFSET
-#define POLICY_VALUE_OFFSET (POLICY_TYPE_OFFSET + POLICY_TYPE_LENGTH)
-
-#define ROUND_ROBIN_POLICY 1
-#define LEAST_USED_POLICY 2
-#define LEAST_USED_WITH_DEG 3
-#define WEIGHTED_ROUND_ROBIN 4
+#define POLICY_TYPE_LENGTH 4
+#define POLICY_WEIGHT_LENGTH 4
+#define POLICY_PRIORITY_LENGTH 4
+#define POLICY_LOAD_LENGTH 4
+#define POLICY_DEGRADATION_LENGTH 4
+
+#define POLICY_TYPE_OFFSET PARAMETER_VALUE_OFFSET
+#define POLICY_VALUE_OFFSET (POLICY_TYPE_OFFSET + POLICY_TYPE_LENGTH)
+#define POLICY_WEIGHT_OFFSET POLICY_VALUE_OFFSET
+#define POLICY_PRIORITY_OFFSET POLICY_VALUE_OFFSET
+#define POLICY_LOAD_OFFSET POLICY_VALUE_OFFSET
+#define POLICY_DEGRADATION_OFFSET (POLICY_LOAD_OFFSET + POLICY_LOAD_LENGTH)
+
+#define ROUND_ROBIN_POLICY 0x00000001
+#define WEIGHTED_ROUND_ROBIN_POLICY 0x00000002
+#define RANDOM_POLICY 0x00000003
+#define WEIGHTED_RANDOM_POLICY 0x00000004
+#define PRIORITY_POLICY 0x00000005
+#define LEAST_USED_POLICY 0x40000001
+#define LEAST_USED_WITH_DEG_POLICY 0x40000002
+#define PRIORITY_LEAST_USED_POLICY 0x40000003
+#define RANDOMIZED_LEAST_USED_POLICY 0x40000004
static const value_string policy_type_values[] = {
- { ROUND_ROBIN_POLICY, "Round robin" },
- { LEAST_USED_POLICY, "Least used" },
- { LEAST_USED_WITH_DEG, "Least used with degradation" },
- { WEIGHTED_ROUND_ROBIN, "Weighted round robin" },
- { 0, NULL } };
+ { ROUND_ROBIN_POLICY, "Round robin" },
+ { WEIGHTED_ROUND_ROBIN_POLICY, "Weighted round robin" },
+ { RANDOM_POLICY, "Random"},
+ { WEIGHTED_RANDOM_POLICY, "Weighted random" },
+ { PRIORITY_POLICY, "Priority" },
+ { LEAST_USED_POLICY, "Least used" },
+ { LEAST_USED_WITH_DEG_POLICY, "Least used with degradation" },
+ { PRIORITY_LEAST_USED_POLICY, "Priority least used" },
+ { RANDOMIZED_LEAST_USED_POLICY, "Randomized least used" },
+ { 0, NULL } };
static void
dissect_pool_member_selection_policy_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree)
{
+ guint32 type;
+ guint length;
+
proto_tree_add_item(parameter_tree, hf_policy_type, parameter_tvb, POLICY_TYPE_OFFSET, POLICY_TYPE_LENGTH, NETWORK_BYTE_ORDER);
- proto_tree_add_item(parameter_tree, hf_policy_value, parameter_tvb, POLICY_VALUE_OFFSET, POLICY_VALUE_LENGTH, NETWORK_BYTE_ORDER);
+ type = tvb_get_ntohl(parameter_tvb, POLICY_TYPE_OFFSET);
+ switch (type) {
+ case ROUND_ROBIN_POLICY:
+ break;
+ case WEIGHTED_ROUND_ROBIN_POLICY:
+ proto_tree_add_item(parameter_tree, hf_policy_weight, parameter_tvb, POLICY_WEIGHT_OFFSET, POLICY_WEIGHT_LENGTH, NETWORK_BYTE_ORDER);
+ break;
+ case RANDOM_POLICY:
+ break;
+ case WEIGHTED_RANDOM_POLICY:
+ proto_tree_add_item(parameter_tree, hf_policy_weight, parameter_tvb, POLICY_WEIGHT_OFFSET, POLICY_WEIGHT_LENGTH, NETWORK_BYTE_ORDER);
+ break;
+ case PRIORITY_POLICY:
+ proto_tree_add_item(parameter_tree, hf_policy_weight, parameter_tvb, POLICY_PRIORITY_OFFSET, POLICY_PRIORITY_LENGTH, NETWORK_BYTE_ORDER);
+ break;
+ case LEAST_USED_POLICY:
+ proto_tree_add_item(parameter_tree, hf_policy_load, parameter_tvb, POLICY_LOAD_OFFSET, POLICY_LOAD_LENGTH, NETWORK_BYTE_ORDER);
+ break;
+ case LEAST_USED_WITH_DEG_POLICY:
+ proto_tree_add_item(parameter_tree, hf_policy_load, parameter_tvb, POLICY_LOAD_OFFSET, POLICY_LOAD_LENGTH, NETWORK_BYTE_ORDER);
+ proto_tree_add_item(parameter_tree, hf_policy_degradation, parameter_tvb, POLICY_DEGRADATION_OFFSET, POLICY_DEGRADATION_LENGTH, NETWORK_BYTE_ORDER);
+ break;
+ case PRIORITY_LEAST_USED_POLICY:
+ proto_tree_add_item(parameter_tree, hf_policy_load, parameter_tvb, POLICY_LOAD_OFFSET, POLICY_LOAD_LENGTH, NETWORK_BYTE_ORDER);
+ proto_tree_add_item(parameter_tree, hf_policy_degradation, parameter_tvb, POLICY_DEGRADATION_OFFSET, POLICY_DEGRADATION_LENGTH, NETWORK_BYTE_ORDER);
+ break;
+ case RANDOMIZED_LEAST_USED_POLICY:
+ proto_tree_add_item(parameter_tree, hf_policy_load, parameter_tvb, POLICY_LOAD_OFFSET, POLICY_LOAD_LENGTH, NETWORK_BYTE_ORDER);
+ break;
+ default:
+ length = tvb_length(parameter_tvb) - POLICY_TYPE_LENGTH;
+ if (length > 0) {
+ proto_tree_add_item(parameter_tree, hf_policy_value, parameter_tvb, POLICY_VALUE_OFFSET, length, NETWORK_BYTE_ORDER);
+ }
+ break;
+ }
}
#define POOL_HANDLE_OFFSET PARAMETER_VALUE_OFFSET
@@ -884,8 +944,12 @@ proto_register_enrp(void)
{ &hf_tcp_port, { "Port", "enrp.tcp_transport_port", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL } },
{ &hf_udp_port, { "Port", "enrp.udp_transport_port", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL } },
{ &hf_udp_reserved, { "Reserved", "enrp.udp_transport_reserved", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL } },
- { &hf_policy_type, { "Policy type", "enrp.pool_member_slection_policy_type", FT_UINT8, BASE_DEC, VALS(policy_type_values), 0x0, "", HFILL } },
- { &hf_policy_value, { "Policy value", "enrp.pool_member_slection_policy_value", FT_INT24, BASE_DEC, NULL, 0x0, "", HFILL } },
+ { &hf_policy_type, { "Policy type", "asap.pool_member_slection_policy_type", FT_UINT32, BASE_DEC, VALS(policy_type_values), 0x0, "", HFILL } },
+ { &hf_policy_weight, { "Policy weight", "asap.pool_member_slection_policy_weight", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL } },
+ { &hf_policy_priority, { "Policy priority", "asap.pool_member_slection_policy_priority", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL } },
+ { &hf_policy_load, { "Policy load", "asap.pool_member_slection_policy_load", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL } },
+ { &hf_policy_degradation, { "Policy degradation", "asap.pool_member_slection_policy_degradation", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL } },
+ { &hf_policy_value, { "Policy value", "asap.pool_member_slection_policy_value", FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL } },
{ &hf_pool_handle, { "Pool handle", "enrp.pool_handle_pool_handle", FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL } },
{ &hf_pe_pe_identifier, { "PE identifier", "enrp.pool_element_pe_identifier", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL } },
{ &hf_home_enrp_id, { "Home ENRP server identifier", "enrp.pool_element_home_enrp_server_identifier", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL } },