forked from osmocom/wireshark
Add support for draft-ietf-rserpool-policies-04.txt.
svn path=/trunk/; revision=20996
This commit is contained in:
parent
0204c1dc93
commit
af7bdd06db
|
@ -2,6 +2,7 @@
|
|||
* Routines for Aggregate Server Access Protocol (ASAP)
|
||||
* 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-asap-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$
|
||||
*
|
||||
|
@ -65,6 +66,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;
|
||||
|
@ -311,29 +316,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_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_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 1
|
||||
#define LEAST_USED_POLICY 2
|
||||
#define LEAST_USED_WITH_DEG 3
|
||||
#define WEIGHTED_ROUND_ROBIN 4
|
||||
#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
|
||||
|
@ -716,8 +776,12 @@ proto_register_asap(void)
|
|||
{ &hf_tcp_port, { "Port", "asap.tcp_transport_port", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL } },
|
||||
{ &hf_udp_port, { "Port", "asap.udp_transport_port", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL } },
|
||||
{ &hf_udp_reserved, { "Reserved", "asap.udp_transport_reserved", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL } },
|
||||
{ &hf_policy_type, { "Policy type", "asap.pool_member_slection_policy_type", FT_UINT8, BASE_DEC, VALS(policy_type_values), 0x0, "", HFILL } },
|
||||
{ &hf_policy_value, { "Policy value", "asap.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", "asap.pool_handle_pool_handle", FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL } },
|
||||
{ &hf_pe_pe_identifier, { "PE identifier", "asap.pool_element_pe_identifier", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL } },
|
||||
{ &hf_home_enrp_id, { "Home ENRP server identifier", "asap.pool_element_home_enrp_server_identifier", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL } },
|
||||
|
|
|
@ -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_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_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 1
|
||||
#define LEAST_USED_POLICY 2
|
||||
#define LEAST_USED_WITH_DEG 3
|
||||
#define WEIGHTED_ROUND_ROBIN 4
|
||||
#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 } },
|
||||
|
|
Loading…
Reference in New Issue