Repository: qpid-dispatch Updated Branches: refs/heads/master c2c678a0d -> 99d0377f0
DISPATCH-1145 - Implemented the addr_proxy component of the edge router. Responsibilities 1 and 2 are complete. Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/99d0377f Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/99d0377f Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/99d0377f Branch: refs/heads/master Commit: 99d0377f0866c5355150864cffcb1daed350ab07 Parents: c2c678a Author: Ted Ross <[email protected]> Authored: Fri Oct 12 09:42:21 2018 -0400 Committer: Ted Ross <[email protected]> Committed: Fri Oct 12 10:07:30 2018 -0400 ---------------------------------------------------------------------- include/qpid/dispatch/amqp.h | 1 + include/qpid/dispatch/router_core.h | 7 +- src/CMakeLists.txt | 1 + src/amqp.c | 1 + src/router_core/agent_link.c | 7 +- src/router_core/connections.c | 95 +++++------ .../modules/edge_router/addr_proxy.c | 156 +++++++++++++++++++ .../modules/edge_router/addr_proxy.h | 35 +++++ src/router_core/modules/edge_router/module.c | 8 +- src/router_core/route_tables.c | 4 - src/router_core/router_core_private.h | 1 - tests/system_tests_edge_router.py | 6 +- 12 files changed, 258 insertions(+), 64 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/99d0377f/include/qpid/dispatch/amqp.h ---------------------------------------------------------------------- diff --git a/include/qpid/dispatch/amqp.h b/include/qpid/dispatch/amqp.h index 3820726..5a65c80 100644 --- a/include/qpid/dispatch/amqp.h +++ b/include/qpid/dispatch/amqp.h @@ -126,6 +126,7 @@ extern const char * const QD_CAPABILITY_ANONYMOUS_RELAY; /// @{ extern const char * const QD_CAPABILITY_ROUTER_CONTROL; extern const char * const QD_CAPABILITY_ROUTER_DATA; +extern const char * const QD_CAPABILITY_EDGE_DOWNLINK; /// @} /** @name Dynamic Node Properties */ http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/99d0377f/include/qpid/dispatch/router_core.h ---------------------------------------------------------------------- diff --git a/include/qpid/dispatch/router_core.h b/include/qpid/dispatch/router_core.h index 695e7e5..6deee88 100644 --- a/include/qpid/dispatch/router_core.h +++ b/include/qpid/dispatch/router_core.h @@ -142,9 +142,10 @@ void qdr_send_to2(qdr_core_t *core, qd_message_t *msg, const char *addr, */ typedef enum { - QD_LINK_ENDPOINT, ///< A link to a connected endpoint - QD_LINK_CONTROL, ///< A link to a peer router for control messages - QD_LINK_ROUTER ///< A link to a peer router for routed messages + QD_LINK_ENDPOINT, ///< A link to a connected endpoint + QD_LINK_CONTROL, ///< A link to a peer router for control messages + QD_LINK_ROUTER, ///< A link to a peer router for routed messages + QD_LINK_EDGE_DOWNLINK ///< Default link from an interior router to an edge router } qd_link_type_t; typedef enum { http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/99d0377f/src/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 93a779f..da47242 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -100,6 +100,7 @@ set(qpid_dispatch_SOURCES router_core/transfer.c router_core/core_timer.c router_core/modules/edge_router/module.c + router_core/modules/edge_router/addr_proxy.c router_core/modules/edge_router/connection_manager.c router_core/modules/test_hooks/core_test_hooks.c router_node.c http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/99d0377f/src/amqp.c ---------------------------------------------------------------------- diff --git a/src/amqp.c b/src/amqp.c index 16550a7..08ce122 100644 --- a/src/amqp.c +++ b/src/amqp.c @@ -34,6 +34,7 @@ const int QD_MA_FILTER_LEN = 5; // N tailing inbound entries to searc const char * const QD_CAPABILITY_ROUTER_CONTROL = "qd.router"; const char * const QD_CAPABILITY_ROUTER_DATA = "qd.router-data"; +const char * const QD_CAPABILITY_EDGE_DOWNLINK = "qd.router-edge-downlink"; const char * const QD_CAPABILITY_ANONYMOUS_RELAY = "ANONYMOUS-RELAY"; const char * const QD_DYNAMIC_NODE_PROPERTY_ADDRESS = "x-opt-qd.address"; http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/99d0377f/src/router_core/agent_link.c ---------------------------------------------------------------------- diff --git a/src/router_core/agent_link.c b/src/router_core/agent_link.c index 5ca0f25..9600aca 100644 --- a/src/router_core/agent_link.c +++ b/src/router_core/agent_link.c @@ -74,9 +74,10 @@ const char *qdr_link_columns[] = static const char *qd_link_type_name(qd_link_type_t lt) { switch (lt) { - case QD_LINK_ENDPOINT : return "endpoint"; - case QD_LINK_CONTROL : return "router-control"; - case QD_LINK_ROUTER : return "inter-router"; + case QD_LINK_ENDPOINT : return "endpoint"; + case QD_LINK_CONTROL : return "router-control"; + case QD_LINK_ROUTER : return "inter-router"; + case QD_LINK_EDGE_DOWNLINK : return "edge-downlink"; } return ""; http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/99d0377f/src/router_core/connections.c ---------------------------------------------------------------------- diff --git a/src/router_core/connections.c b/src/router_core/connections.c index 71bd354..041e0f0 100644 --- a/src/router_core/connections.c +++ b/src/router_core/connections.c @@ -482,6 +482,12 @@ qdr_link_t *qdr_link_first_attach(qdr_connection_t *conn, link->link_type = QD_LINK_CONTROL; else if (qdr_terminus_has_capability(local_terminus, QD_CAPABILITY_ROUTER_DATA)) link->link_type = QD_LINK_ROUTER; + else if (qdr_terminus_has_capability(local_terminus, QD_CAPABILITY_EDGE_DOWNLINK)) { + if (conn->core->router_mode == QD_ROUTER_MODE_INTERIOR && + conn->role == QDR_ROLE_EDGE_UPLINK && + dir == QD_OUTGOING) + link->link_type = QD_LINK_EDGE_DOWNLINK; + } qdr_link_setup_histogram(conn, dir, link); @@ -1471,38 +1477,6 @@ static void qdr_attach_link_data_CT(qdr_core_t *core, qdr_connection_t *conn, qd link->priority = next_slot; core->data_links_by_mask_bit[conn->mask_bit].links[next_slot] = link; } - - // - // TODO - This needs to be refactored in terms of a non-inter-router link type - // - else if (conn->role == QDR_ROLE_EDGE_UPLINK) { - if (core->router_mode == QD_ROUTER_MODE_EDGE) { - // - // Associate this link with the uplink address. - // - link->owning_addr = core->uplink_addr; - qdr_add_link_ref(&core->uplink_addr->rlinks, link, QDR_LINK_LIST_CLASS_ADDRESS); - qd_log(core->log, QD_LOG_INFO, "Edge-uplink established to interior router: %s", conn->connection_info->container); - } else if (core->router_mode == QD_ROUTER_MODE_INTERIOR) { - // - // This is a down-link to an edge router. Create a mobile address of the form - // H<edge-router-id>, associate the link to that address, and advertise - // the address on the network. - // - const char *edge_id = conn->connection_info->container; - qdr_address_t *addr = qdr_add_mobile_address_CT(core, "", edge_id, QD_TREATMENT_ANYCAST_BALANCED, true); - link->owning_addr = addr; - qdr_add_link_ref(&addr->rlinks, link, QDR_LINK_LIST_CLASS_ADDRESS); - if (DEQ_SIZE(addr->rlinks) == 1) { - const char *key = (const char*) qd_hash_key_by_handle(addr->hash_handle); - if (key && (*key == QD_ITER_HASH_PREFIX_MOBILE || *key == QD_ITER_HASH_PREFIX_EDGE_SUMMARY)) - qdr_post_mobile_added_CT(core, key); - qdr_addr_start_inlinks_CT(core, addr); - } - - qd_log(core->log, QD_LOG_INFO, "Downlink established to edge router: %s", edge_id); - } - } } @@ -1510,18 +1484,33 @@ static void qdr_detach_link_data_CT(qdr_core_t *core, qdr_connection_t *conn, qd { if (conn->role == QDR_ROLE_INTER_ROUTER) core->data_links_by_mask_bit[conn->mask_bit].links[link->priority] = 0; - // - // TODO - This needs to be refactored in terms of a non-inter-router link type - // - else if (conn->role == QDR_ROLE_EDGE_UPLINK) { - if (core->router_mode == QD_ROUTER_MODE_EDGE) { - qdr_del_link_ref(&core->uplink_addr->rlinks, link, QDR_LINK_LIST_CLASS_ADDRESS); - qd_log(core->log, QD_LOG_INFO, "Edge-uplink lost"); - } else if (core->router_mode == QD_ROUTER_MODE_INTERIOR) { - qdr_del_link_ref(&link->owning_addr->rlinks, link, QDR_LINK_LIST_CLASS_ADDRESS); - qd_log(core->log, QD_LOG_INFO, "Downlink lost to edge router: %s", conn->connection_info->container); - } +} + + +static void qdr_attach_link_downlink_CT(qdr_core_t *core, qdr_connection_t *conn, qdr_link_t *link, qdr_terminus_t *source) +{ + qdr_address_t *addr; + qd_iterator_t *iter = qd_iterator_dup(qdr_terminus_get_address(source)); + qd_iterator_reset_view(iter, ITER_VIEW_ADDRESS_HASH); + qd_iterator_annotate_prefix(iter, QD_ITER_HASH_PREFIX_EDGE_SUMMARY); + + qd_hash_retrieve(core->addr_hash, iter, (void**) &addr); + if (!addr) { + addr = qdr_address_CT(core, QD_TREATMENT_ANYCAST_BALANCED); + qd_hash_insert(core->addr_hash, iter, addr, &addr->hash_handle); + DEQ_INSERT_TAIL(core->addrs, addr); + } + + qdr_add_link_ref(&addr->rlinks, link, QDR_LINK_LIST_CLASS_ADDRESS); + link->owning_addr = addr; + if (DEQ_SIZE(addr->rlinks) == 1) { + const char *key = (const char*) qd_hash_key_by_handle(addr->hash_handle); + if (key && *key == QD_ITER_HASH_PREFIX_EDGE_SUMMARY) + qdr_post_mobile_added_CT(core, key); + qdr_addr_start_inlinks_CT(core, addr); } + + qd_iterator_free(iter); } @@ -1673,13 +1662,12 @@ static void qdr_link_inbound_first_attach_CT(qdr_core_t *core, qdr_action_t *act } case QD_LINK_CONTROL: + case QD_LINK_ROUTER: qdr_link_outbound_second_attach_CT(core, link, source, target); qdr_link_issue_credit_CT(core, link, link->capacity, false); break; - case QD_LINK_ROUTER: - qdr_link_outbound_second_attach_CT(core, link, source, target); - qdr_link_issue_credit_CT(core, link, link->capacity, false); + case QD_LINK_EDGE_DOWNLINK: break; } } else { @@ -1759,6 +1747,11 @@ static void qdr_link_inbound_first_attach_CT(qdr_core_t *core, qdr_action_t *act qdr_attach_link_data_CT(core, conn, link); qdr_link_outbound_second_attach_CT(core, link, source, target); break; + + case QD_LINK_EDGE_DOWNLINK: + qdr_attach_link_downlink_CT(core, conn, link, source); + qdr_link_outbound_second_attach_CT(core, link, source, target); + break; } } } @@ -1827,6 +1820,9 @@ static void qdr_link_inbound_second_attach_CT(qdr_core_t *core, qdr_action_t *ac case QD_LINK_ROUTER: qdr_link_issue_credit_CT(core, link, link->capacity, false); break; + + case QD_LINK_EDGE_DOWNLINK: + break; } } else { // @@ -1860,6 +1856,9 @@ static void qdr_link_inbound_second_attach_CT(qdr_core_t *core, qdr_action_t *ac case QD_LINK_ROUTER: qdr_attach_link_data_CT(core, conn, link); break; + + case QD_LINK_EDGE_DOWNLINK: + break; } } @@ -1960,6 +1959,9 @@ static void qdr_link_inbound_detach_CT(qdr_core_t *core, qdr_action_t *action, b case QD_LINK_ROUTER: break; + + case QD_LINK_EDGE_DOWNLINK: + break; } } else { // @@ -1967,6 +1969,7 @@ static void qdr_link_inbound_detach_CT(qdr_core_t *core, qdr_action_t *action, b // switch (link->link_type) { case QD_LINK_ENDPOINT: + case QD_LINK_EDGE_DOWNLINK: if (addr) { qdr_del_link_ref(&addr->rlinks, link, QDR_LINK_LIST_CLASS_ADDRESS); was_local = true; http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/99d0377f/src/router_core/modules/edge_router/addr_proxy.c ---------------------------------------------------------------------- diff --git a/src/router_core/modules/edge_router/addr_proxy.c b/src/router_core/modules/edge_router/addr_proxy.c new file mode 100644 index 0000000..a71f304 --- /dev/null +++ b/src/router_core/modules/edge_router/addr_proxy.c @@ -0,0 +1,156 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#include "addr_proxy.h" +#include "core_events.h" +#include "router_core_private.h" +#include <stdio.h> +#include <inttypes.h> + +// +// This is the Address Proxy component of the Edge Router module. +// +// Address Proxy has three main responsibilities: +// 1) When an uplink becomes active, the "_uplink" address is properly linked to an +// outgoing anonymous link on the active uplink connection. +// 2) When an uplink becomes active, an incoming link is established over the uplink +// connection that is used to transfer deliveries to topological (dynamic) addresses +// on the edge router. +// 3) Ensure that if there is an active uplink, that uplink should have one incoming +// link for every address for which there is at least one local consumer. +// + +struct qcm_edge_addr_proxy_t { + qdr_core_t *core; + qdrc_event_subscription_t *event_sub; + bool uplink_established; + qdr_address_t *uplink_addr; +}; + + +static qdr_terminus_t *qdr_terminus_edge_downlink(const char *addr) +{ + qdr_terminus_t *term = qdr_terminus(0); + qdr_terminus_add_capability(term, QD_CAPABILITY_EDGE_DOWNLINK); + if (addr) + qdr_terminus_set_address(term, addr); + return term; +} + + +static void on_conn_event(void *context, qdrc_event_t event, qdr_connection_t *conn) +{ + qcm_edge_addr_proxy_t *ap = (qcm_edge_addr_proxy_t*) context; + + switch (event) { + case QDRC_EVENT_CONN_EDGE_ESTABLISHED : { + // + // Flag the uplink as being established. + // + ap->uplink_established = true; + + // + // Attach an anonymous sending link to the interior router. + // + qdr_link_t *link = qdr_create_link_CT(ap->core, conn, + QD_LINK_ENDPOINT, QD_OUTGOING, + qdr_terminus(0), qdr_terminus(0)); + + // + // Associate the anonymous sender with the uplink address. This will cause + // all deliveries destined off-edge to be sent to the interior via the uplink. + // + qdr_add_link_ref(&ap->uplink_addr->rlinks, link, QDR_LINK_LIST_CLASS_ADDRESS); + link->owning_addr = ap->uplink_addr; + + // + // Attach a receiving link for edge summary. This will cause all deliveries + // destined for this router to be delivered via the uplink. + // + link = qdr_create_link_CT(ap->core, conn, + QD_LINK_ENDPOINT, QD_INCOMING, + qdr_terminus_edge_downlink(ap->core->router_id), + qdr_terminus_edge_downlink(0)); + break; + } + + case QDRC_EVENT_CONN_EDGE_LOST : + ap->uplink_established = false; + break; + + default: + assert(false); + break; + } +} + + +static void on_addr_event(void *context, qdrc_event_t event, qdr_address_t *addr) +{ + //qcm_edge_addr_proxy_t *ap = (qcm_edge_addr_proxy_t*) context; + + switch (event) { + case QDRC_EVENT_ADDR_BECAME_LOCAL_DEST : + break; + + case QDRC_EVENT_ADDR_NO_LONGER_LOCAL_DEST : + break; + + default: + assert(false); + break; + } +} + + +qcm_edge_addr_proxy_t *qcm_edge_addr_proxy(qdr_core_t *core) +{ + qcm_edge_addr_proxy_t *ap = NEW(qcm_edge_addr_proxy_t); + + ap->core = core; + ap->uplink_established = false; + + // + // Establish the uplink address to represent destinations reachable via the edge uplink + // + ap->uplink_addr = qdr_add_local_address_CT(core, 'L', "_uplink", QD_TREATMENT_ANYCAST_CLOSEST); + + // + // Subscribe to the core events we'll need to drive this component + // + ap->event_sub = qdrc_event_subscribe_CT(core, + QDRC_EVENT_CONN_EDGE_ESTABLISHED + | QDRC_EVENT_CONN_EDGE_LOST + | QDRC_EVENT_ADDR_BECAME_LOCAL_DEST + | QDRC_EVENT_ADDR_NO_LONGER_LOCAL_DEST, + on_conn_event, + 0, + on_addr_event, + ap); + + return ap; +} + + +void qcm_edge_addr_proxy_final(qcm_edge_addr_proxy_t *ap) +{ + qdrc_event_unsubscribe_CT(ap->core, ap->event_sub); + free(ap); +} + http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/99d0377f/src/router_core/modules/edge_router/addr_proxy.h ---------------------------------------------------------------------- diff --git a/src/router_core/modules/edge_router/addr_proxy.h b/src/router_core/modules/edge_router/addr_proxy.h new file mode 100644 index 0000000..0f5416b --- /dev/null +++ b/src/router_core/modules/edge_router/addr_proxy.h @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#ifndef qcm_edge_router_addr_proxy_types +#define qcm_edge_router_addr_proxy_types 1 + +typedef struct qcm_edge_addr_proxy_t qcm_edge_addr_proxy_t; +#include "router_core_private.h" + +#endif + + +#ifndef qcm_edge_router_addr_proxy +#define qcm_edge_router_addr_proxy 1 + +qcm_edge_addr_proxy_t *qcm_edge_addr_proxy(qdr_core_t *core); +void qcm_edge_addr_proxy_final(qcm_edge_addr_proxy_t *cm); + +#endif http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/99d0377f/src/router_core/modules/edge_router/module.c ---------------------------------------------------------------------- diff --git a/src/router_core/modules/edge_router/module.c b/src/router_core/modules/edge_router/module.c index 8e14307..d115d2b 100644 --- a/src/router_core/modules/edge_router/module.c +++ b/src/router_core/modules/edge_router/module.c @@ -19,9 +19,11 @@ #include "module.h" #include "connection_manager.h" +#include "addr_proxy.h" typedef struct { - qcm_edge_conn_mgr_t *conn_mgr; + qcm_edge_conn_mgr_t *conn_mgr; + qcm_edge_addr_proxy_t *addr_proxy; // TODO - Add pointers to other edge-router state here } qcm_edge_t; @@ -30,7 +32,8 @@ static void qcm_edge_router_init_CT(qdr_core_t *core, void **module_context) { if (core->router_mode == QD_ROUTER_MODE_EDGE) { qcm_edge_t *edge = NEW(qcm_edge_t); - edge->conn_mgr = qcm_edge_conn_mgr(core); + edge->conn_mgr = qcm_edge_conn_mgr(core); + edge->addr_proxy = qcm_edge_addr_proxy(core); // TODO - Add initialization of other edge-router functions here *module_context = edge; } else @@ -44,6 +47,7 @@ static void qcm_edge_router_final_CT(void *module_context) if (edge) { qcm_edge_conn_mgr_final(edge->conn_mgr); + qcm_edge_addr_proxy_final(edge->addr_proxy); // TODO - Add finalization of other edge-router functions here free(edge); } http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/99d0377f/src/router_core/route_tables.c ---------------------------------------------------------------------- diff --git a/src/router_core/route_tables.c b/src/router_core/route_tables.c index a4d3bc1..f9bb1f6 100644 --- a/src/router_core/route_tables.c +++ b/src/router_core/route_tables.c @@ -252,10 +252,6 @@ void qdr_route_table_setup_CT(qdr_core_t *core) } } - - if (core->router_mode == QD_ROUTER_MODE_EDGE) { - core->uplink_addr = qdr_add_local_address_CT(core, 'L', "_uplink", QD_TREATMENT_ANYCAST_CLOSEST); - } } http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/99d0377f/src/router_core/router_core_private.h ---------------------------------------------------------------------- diff --git a/src/router_core/router_core_private.h b/src/router_core/router_core_private.h index 985328d..d1ea32a 100644 --- a/src/router_core/router_core_private.h +++ b/src/router_core/router_core_private.h @@ -764,7 +764,6 @@ struct qdr_core_t { qdr_address_t *routerma_addr_L; qdr_address_t *router_addr_T; qdr_address_t *routerma_addr_T; - qdr_address_t *uplink_addr; qdr_node_list_t routers; ///< List of routers, in order of cost, from lowest to highest qd_bitmask_t *neighbor_free_mask; http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/99d0377f/tests/system_tests_edge_router.py ---------------------------------------------------------------------- diff --git a/tests/system_tests_edge_router.py b/tests/system_tests_edge_router.py index 9819a53..1a70f2f 100644 --- a/tests/system_tests_edge_router.py +++ b/tests/system_tests_edge_router.py @@ -108,28 +108,24 @@ class RouterTest(TestCase): self.assertEqual(None, test.error) def test_06_dynamic_address_interior_to_edge(self): - self.skipTest("Temporarily disabled") test = DynamicAddressTest(self.routers[2].addresses[0], self.routers[0].addresses[0]) test.run() self.assertEqual(None, test.error) def test_07_dynamic_address_edge_to_interior(self): - self.skipTest("Temporarily disabled") test = DynamicAddressTest(self.routers[0].addresses[0], self.routers[2].addresses[0]) test.run() self.assertEqual(None, test.error) def test_08_dynamic_address_edge_to_edge_one_interior(self): - self.skipTest("Temporarily disabled") test = DynamicAddressTest(self.routers[2].addresses[0], self.routers[3].addresses[0]) test.run() self.assertEqual(None, test.error) def test_09_dynamic_address_edge_to_edge_two_interior(self): - self.skipTest("Temporarily disabled") test = DynamicAddressTest(self.routers[2].addresses[0], self.routers[4].addresses[0]) test.run() @@ -253,7 +249,7 @@ class DynamicAddressTest(MessagingHandler): self.sender_conn = None self.receiver = None self.address = None - self.count = 10 + self.count = 300 self.n_rcvd = 0 self.n_sent = 0 self.error = None --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
