You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by tr...@apache.org on 2016/03/15 19:32:42 UTC

[2/4] qpid-dispatch git commit: DISPATCH-179 - Significant update to the management model for routes. Removed the singular "route" configuration and replaced it with three distinct object types: address, linkRoute, and autoLink.

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/ab2734f9/src/router_core/route_control.c
----------------------------------------------------------------------
diff --git a/src/router_core/route_control.c b/src/router_core/route_control.c
index 96b5ef9..4e1c57c 100644
--- a/src/router_core/route_control.c
+++ b/src/router_core/route_control.c
@@ -20,85 +20,11 @@
 #include "route_control.h"
 #include <stdio.h>
 
-ALLOC_DEFINE(qdr_route_active_t);
-ALLOC_DEFINE(qdr_route_config_t);
+ALLOC_DEFINE(qdr_link_route_t);
+ALLOC_DEFINE(qdr_auto_link_t);
 ALLOC_DEFINE(qdr_conn_identifier_t);
 
 
-
-static const char *qdr_configure_address_prefix_CT(qdr_core_t              *core,
-                                                   qd_parsed_field_t       *addr_field,
-                                                   char                     cls,
-                                                   qd_address_treatment_t   treatment,
-                                                   qdr_address_config_t   **_addr)
-{
-    if (!addr_field)
-        return "Missing address field";
-
-    qd_field_iterator_t *iter = qd_parse_raw(addr_field);
-    qd_address_iterator_override_prefix(iter, cls);
-    qd_address_iterator_reset_view(iter, ITER_VIEW_ADDRESS_HASH);
-
-    qdr_address_config_t *addr = 0;
-    qd_hash_retrieve(core->addr_hash, iter, (void**) &addr);
-    if (addr)
-        return "Address prefix conflicts with existing prefix";
-
-    addr = new_qdr_address_config_t();
-    DEQ_ITEM_INIT(addr);
-    addr->treatment = treatment;
-
-    if (!!addr) {
-        qd_field_iterator_reset(iter);
-        qd_hash_insert(core->addr_hash, iter, addr, &addr->hash_handle);
-        DEQ_INSERT_TAIL(core->addr_config, addr);
-    }
-
-    *_addr = addr;
-    return 0;
-}
-
-
-static const char *qdr_configure_address_CT(qdr_core_t              *core,
-                                            qd_parsed_field_t       *addr_field,
-                                            char                     cls,
-                                            qd_address_treatment_t   treatment,
-                                            qdr_address_t          **_addr)
-{
-    if (!addr_field)
-        return "Missing address field";
-
-    qd_field_iterator_t *iter = qd_parse_raw(addr_field);
-    qd_address_iterator_override_prefix(iter, cls);
-    qd_address_iterator_reset_view(iter, ITER_VIEW_ADDRESS_HASH);
-
-    qdr_address_t *addr = 0;
-    qd_hash_retrieve(core->addr_hash, iter, (void**) &addr);
-    if (addr)
-        return "Address conflicts with existing address";
-
-    addr = qdr_address_CT(core, treatment);
-
-    if (!!addr) {
-        qd_field_iterator_reset(iter);
-        qd_hash_insert(core->addr_hash, iter, addr, &addr->hash_handle);
-        DEQ_INSERT_TAIL(core->addrs, addr);
-    }
-
-    *_addr = addr;
-    return 0;
-}
-
-
-static void qdr_route_free_CT(qdr_core_t *core, qdr_route_config_t *route)
-{
-    if (route->name)
-        free(route->name);
-    // TODO - Clean up address records
-    free_qdr_route_config_t(route);
-}
-
-
 static qdr_conn_identifier_t *qdr_route_declare_id_CT(qdr_core_t          *core,
                                                       qd_field_iterator_t *conn_id,
                                                       bool                 is_container)
@@ -119,207 +45,138 @@ static qdr_conn_identifier_t *qdr_route_declare_id_CT(qdr_core_t          *core,
     return cid;
 }
 
+
 static void qdr_route_check_id_for_deletion_CT(qdr_core_t *core, qdr_conn_identifier_t *cid)
 {
     //
     // If this connection identifier has no open connection and no referencing routes,
     // it can safely be deleted and removed from the hash index.
     //
-    if (cid->open_connection == 0 && DEQ_IS_EMPTY(cid->active_refs)) {
+    if (cid->open_connection == 0 && DEQ_IS_EMPTY(cid->link_route_refs) && DEQ_IS_EMPTY(cid->auto_link_refs)) {
         qd_hash_remove_by_handle(core->conn_id_hash, cid->hash_handle);
         free_qdr_conn_identifier_t(cid);
     }
 }
 
 
-static void qdr_route_log_CT(qdr_core_t *core, const char *text, qdr_route_config_t *route, qdr_connection_t *conn)
+static void qdr_route_log_CT(qdr_core_t *core, const char *text, const char *name, uint64_t id, qdr_connection_t *conn)
 {
     const char *key = (const char*) qd_hash_key_by_handle(conn->conn_id->hash_handle);
     char  id_string[64];
-    const char *name = route->name ? route->name : id_string;
+    const char *log_name = name ? name : id_string;
 
-    if (!route->name)
-        snprintf(id_string, 64, "%ld", route->identity);
+    if (!name)
+        snprintf(id_string, 64, "%ld", id);
 
-    qd_log(core->log, QD_LOG_INFO, "Route '%s' %s on %s %s",
-           name, text, key[0] == 'L' ? "connection" : "container", &key[1]);
+    qd_log(core->log, QD_LOG_INFO, "%s '%s' on %s %s",
+           log_name, text, key[0] == 'L' ? "connection" : "container", &key[1]);
 }
 
 
-static void qdr_route_activate_CT(qdr_core_t *core, qdr_route_active_t *active, qdr_connection_t *conn)
+static void qdr_link_route_activate_CT(qdr_core_t *core, qdr_link_route_t *lr, qdr_connection_t *conn)
 {
-    qdr_route_config_t *route = active->config;
-    const char         *key;
+    const char *key;
 
-    qdr_route_log_CT(core, "Activated", route, conn);
+    qdr_route_log_CT(core, "Activated Link Route", lr->name, lr->identity, conn);
 
-    if (route->treatment == QD_TREATMENT_LINK_BALANCED) {
-        //
-        // Activate the address(es) for link-routed destinations.  If this is the first
-        // activation for this address, notify the router module of the added address.
-        //
-        if (route->out_addr) {
-            qdr_add_connection_ref(&route->out_addr->conns, conn);
-            if (DEQ_SIZE(route->out_addr->conns) == 1) {
-                key = (const char*) qd_hash_key_by_handle(route->out_addr->hash_handle);
-                if (key)
-                    qdr_post_mobile_added_CT(core, key);
-            }
-        }
-
-        if (route->in_addr) {
-            qdr_add_connection_ref(&route->in_addr->conns, conn);
-            if (DEQ_SIZE(route->in_addr->conns) == 1) {
-                key = (const char*) qd_hash_key_by_handle(route->in_addr->hash_handle);
-                if (key)
-                    qdr_post_mobile_added_CT(core, key);
-            }
+    //
+    // Activate the address for link-routed destinations.  If this is the first
+    // activation for this address, notify the router module of the added address.
+    //
+    if (lr->addr) {
+        qdr_add_connection_ref(&lr->addr->conns, conn);
+        if (DEQ_SIZE(lr->addr->conns) == 1) {
+            key = (const char*) qd_hash_key_by_handle(lr->addr->hash_handle);
+            if (key)
+                qdr_post_mobile_added_CT(core, key);
         }
     }
 }
 
 
-static void qdr_route_deactivate_CT(qdr_core_t *core, qdr_route_active_t *active, qdr_connection_t *conn)
+static void qdr_link_route_deactivate_CT(qdr_core_t *core, qdr_link_route_t *lr, qdr_connection_t *conn)
 {
-    qdr_route_config_t *route = active->config;
-    const char         *key;
+    const char *key;
 
-    qdr_route_log_CT(core, "Deactivated", route, conn);
+    qdr_route_log_CT(core, "Deactivated Link Route", lr->name, lr->identity, conn);
 
-    if (route->treatment == QD_TREATMENT_LINK_BALANCED) {
-        //
-        // Deactivate the address(es) for link-routed destinations.
-        //
-        if (route->out_addr) {
-            qdr_del_connection_ref(&route->out_addr->conns, conn);
-            if (DEQ_IS_EMPTY(route->out_addr->conns)) {
-                key = (const char*) qd_hash_key_by_handle(route->out_addr->hash_handle);
-                if (key)
-                    qdr_post_mobile_removed_CT(core, key);
-            }
-        }
-
-        if (route->in_addr) {
-            qdr_del_connection_ref(&route->in_addr->conns, conn);
-            if (DEQ_IS_EMPTY(route->in_addr->conns)) {
-                key = (const char*) qd_hash_key_by_handle(route->in_addr->hash_handle);
-                if (key)
-                    qdr_post_mobile_removed_CT(core, key);
-            }
+    //
+    // Deactivate the address(es) for link-routed destinations.
+    //
+    if (lr->addr) {
+        qdr_del_connection_ref(&lr->addr->conns, conn);
+        if (DEQ_IS_EMPTY(lr->addr->conns)) {
+            key = (const char*) qd_hash_key_by_handle(lr->addr->hash_handle);
+            if (key)
+                qdr_post_mobile_removed_CT(core, key);
         }
     }
 }
 
 
-const char *qdr_route_create_CT(qdr_core_t             *core,
-                                qd_field_iterator_t    *name,
-                                qdr_route_path_t        path,
-                                qd_address_treatment_t  treatment,
-                                qd_parsed_field_t      *addr_field,
-                                qd_parsed_field_t      *route_addr_field,
-                                qdr_route_config_t    **_route)
+void qdr_route_add_link_route_CT(qdr_core_t             *core,
+                                 qd_field_iterator_t    *name,
+                                 qd_parsed_field_t      *prefix_field,
+                                 qd_parsed_field_t      *conn_id,
+                                 bool                    is_container,
+                                 qd_address_treatment_t  treatment,
+                                 qd_direction_t          dir)
 {
-    const char *error = 0;
-
-    qdr_route_config_t *route = new_qdr_route_config_t();
-    ZERO(route);
-
-    if (name)
-        route->name = (char*) qd_field_iterator_copy(name);
-    route->identity  = qdr_identifier(core);
-    route->path      = path;
-    route->treatment = treatment;
+    qdr_link_route_t *lr = new_qdr_link_route_t();
 
     //
-    // Direct message routing - Create a address prefix with the provided treatment.
+    // Set up the link_route structure
     //
-    if (path == QDR_ROUTE_PATH_DIRECT)
-        error = qdr_configure_address_prefix_CT(core, addr_field, 'Z', treatment, &route->addr_config);
+    ZERO(lr);
+    lr->identity  = qdr_identifier(core);
+    lr->name      = name ? (char*) qd_field_iterator_copy(name) : 0;
+    lr->dir       = dir;
+    lr->treatment = treatment;
 
     //
-    // Link routing - Create inbound and outbound link-route addresses based on the path.
+    // Find or create an address for link-attach routing
     //
-    else if (treatment == QD_TREATMENT_LINK_BALANCED) {
-        if (path == QDR_ROUTE_PATH_SOURCE || path == QDR_ROUTE_PATH_WAYPOINT)
-            error = qdr_configure_address_CT(core, addr_field, 'D', treatment, &route->out_addr);
-        if (path == QDR_ROUTE_PATH_SINK   || path == QDR_ROUTE_PATH_WAYPOINT)
-            error = qdr_configure_address_CT(core, addr_field, 'C', treatment, &route->in_addr);
+    qd_field_iterator_t *iter = qd_parse_raw(prefix_field);
+    qd_address_iterator_reset_view(iter, ITER_VIEW_ADDRESS_HASH);
+    qd_address_iterator_override_prefix(iter, dir == QD_INCOMING ? 'C' : 'D');
+
+    qd_hash_retrieve(core->addr_hash, iter, (void*) &lr->addr);
+    if (!lr->addr) {
+        lr->addr = qdr_address_CT(core, treatment);
+        DEQ_INSERT_TAIL(core->addrs, lr->addr);
+        qd_hash_insert(core->addr_hash, iter, lr->addr, &lr->addr->hash_handle);
     }
 
     //
-    // Indirect message routing cases - Create a normal address with the provided treatment.
+    // Find or create a connection identifier structure for this link route
     //
-    else {
-        error = qdr_configure_address_CT(core, addr_field, '\0', treatment, &route->addr);
-    }
-
-    if (error)
-        qdr_route_free_CT(core, route);
-    else {
-        DEQ_INSERT_TAIL(core->route_config, route);
-        *_route = route;
+    if (conn_id) {
+        lr->conn_id = qdr_route_declare_id_CT(core, qd_parse_raw(conn_id), is_container);
+        DEQ_INSERT_TAIL_N(REF, lr->conn_id->link_route_refs, lr);
+        if (lr->conn_id->open_connection)
+            qdr_link_route_activate_CT(core, lr, lr->conn_id->open_connection);
     }
-
-    return error;
-}
-
-
-void qdr_route_delete_CT(qdr_core_t *core, qdr_route_config_t *route)
-{
 }
 
 
-void qdr_route_connection_add_CT(qdr_core_t         *core,
-                                 qdr_route_config_t *route,
-                                 qd_parsed_field_t  *conn_id,
-                                 bool                is_container)
+void qdr_route_del_link_route_CT(qdr_core_t *core)
 {
-    //
-    // Create a new active record for this route+connection and get a connection identifier
-    // record (find and existing one or create a new one).
-    //
-    qdr_route_active_t    *active = new_qdr_route_active_t();
-    qdr_conn_identifier_t *cid    = qdr_route_declare_id_CT(core, qd_parse_raw(conn_id), is_container);
-
-    //
-    // Initialize the active record in the DOWN state.
-    //
-    DEQ_ITEM_INIT(active);
-    DEQ_ITEM_INIT_N(REF, active);
-    active->in_state  = QDR_ROUTE_STATE_DOWN;
-    active->out_state = QDR_ROUTE_STATE_DOWN;
-    active->in_link   = 0;
-    active->out_link  = 0;
-
-    //
-    // Create the linkages between the route-config, active, and connection-identifier.
-    //
-    active->config  = route;
-    active->conn_id = cid;
-
-    DEQ_INSERT_TAIL(route->active_list, active);
-    DEQ_INSERT_TAIL_N(REF, cid->active_refs, active);
-
-    //
-    // If the connection identifier represents an already open connection, activate the route.
-    //
-    if (cid->open_connection)
-        qdr_route_activate_CT(core, active, cid->open_connection);
 }
 
 
-void qdr_route_connection_delete_CT(qdr_core_t         *core,
-                                    qdr_route_config_t *route,
-                                    qd_parsed_field_t  *conn_id,
-                                    bool                is_container)
+void qdr_route_add_auto_link_CT(qdr_core_t             *core,
+                                qd_field_iterator_t    *name,
+                                qd_parsed_field_t      *addr_field,
+                                qd_address_treatment_t  treatment,
+                                qd_direction_t          dir,
+                                qd_parsed_field_t      *phase_field,
+                                qd_parsed_field_t      *container_id_field,
+                                qd_parsed_field_t      *conn_name_field)
 {
 }
 
 
-void qdr_route_connection_kill_CT(qdr_core_t         *core,
-                                  qdr_route_config_t *route,
-                                  qd_parsed_field_t  *conn_id,
-                                  bool                is_container)
+void qdr_route_del_auto_link_CT(qdr_core_t *core, qdr_auto_link_t *autolink)
 {
 }
 
@@ -339,12 +196,21 @@ void qdr_route_connection_opened_CT(qdr_core_t       *core,
     conn->conn_id        = cid;
 
     //
-    // Activate all routes associated with this remote container.
+    // Activate all link-routes associated with this remote container.
+    //
+    qdr_link_route_t *lr = DEQ_HEAD(cid->link_route_refs);
+    while (lr) {
+        qdr_link_route_activate_CT(core, lr, conn);
+        lr = DEQ_NEXT_N(REF, lr);
+    }
+
+    //
+    // Activate all auto-links associated with this remote container.
     //
-    qdr_route_active_t *active = DEQ_HEAD(cid->active_refs);
-    while (active) {
-        qdr_route_activate_CT(core, active, conn);
-        active = DEQ_NEXT_N(REF, active);
+    qdr_auto_link_t *al = DEQ_HEAD(cid->auto_link_refs);
+    while (al) {
+        //qdr_link_route_activate_CT(core, lr, conn);
+        al = DEQ_NEXT_N(REF, al);
     }
 }
 
@@ -357,12 +223,21 @@ void qdr_route_connection_closed_CT(qdr_core_t *core, qdr_connection_t *conn)
     qdr_conn_identifier_t *cid = conn->conn_id;
     if (cid) {
         //
-        // De-activate all routes associated with this remote container.
+        // Deactivate all link-routes associated with this remote container.
+        //
+        qdr_link_route_t *lr = DEQ_HEAD(cid->link_route_refs);
+        while (lr) {
+            qdr_link_route_deactivate_CT(core, lr, conn);
+            lr = DEQ_NEXT_N(REF, lr);
+        }
+
+        //
+        // Deactivate all auto-links associated with this remote container.
         //
-        qdr_route_active_t *active = DEQ_HEAD(cid->active_refs);
-        while (active) {
-            qdr_route_deactivate_CT(core, active, conn);
-            active = DEQ_NEXT_N(REF, active);
+        qdr_auto_link_t *al = DEQ_HEAD(cid->auto_link_refs);
+        while (al) {
+            //qdr_link_route_deactivate_CT(core, lr, conn);
+            al = DEQ_NEXT_N(REF, al);
         }
 
         cid->open_connection = 0;

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/ab2734f9/src/router_core/route_control.h
----------------------------------------------------------------------
diff --git a/src/router_core/route_control.h b/src/router_core/route_control.h
index 53e1758..5fe8202 100644
--- a/src/router_core/route_control.h
+++ b/src/router_core/route_control.h
@@ -21,30 +21,26 @@
 
 #include "router_core_private.h"
 
-const char *qdr_route_create_CT(qdr_core_t             *core,
-                                qd_field_iterator_t    *name,
-                                qdr_route_path_t        path,
-                                qd_address_treatment_t  treatment,
-                                qd_parsed_field_t      *addr_field,
-                                qd_parsed_field_t      *route_addr_field,
-                                qdr_route_config_t    **route);
-
-void qdr_route_delete_CT(qdr_core_t *core, qdr_route_config_t *route);
+void qdr_route_add_link_route_CT(qdr_core_t             *core,
+                                 qd_field_iterator_t    *name,
+                                 qd_parsed_field_t      *prefix_field,
+                                 qd_parsed_field_t      *conn_id,
+                                 bool                    is_container,
+                                 qd_address_treatment_t  treatment,
+                                 qd_direction_t          dir);
 
-void qdr_route_connection_add_CT(qdr_core_t         *core,
-                                 qdr_route_config_t *route,
-                                 qd_parsed_field_t  *conn_id,
-                                 bool                is_container);
+void qdr_route_del_link_route_CT(qdr_core_t *core);
 
-void qdr_route_connection_delete_CT(qdr_core_t         *core,
-                                    qdr_route_config_t *route,
-                                    qd_parsed_field_t  *conn_id,
-                                    bool                is_container);
+void qdr_route_add_auto_link_CT(qdr_core_t             *core,
+                                qd_field_iterator_t    *name,
+                                qd_parsed_field_t      *addr_field,
+                                qd_address_treatment_t  treatment,
+                                qd_direction_t          dir,
+                                qd_parsed_field_t      *phase_field,
+                                qd_parsed_field_t      *container_id_field,
+                                qd_parsed_field_t      *conn_name_field);
 
-void qdr_route_connection_kill_CT(qdr_core_t         *core,
-                                  qdr_route_config_t *route,
-                                  qd_parsed_field_t  *conn_id,
-                                  bool                is_container);
+void qdr_route_del_auto_link_CT(qdr_core_t *core, qdr_auto_link_t *autolink);
 
 void qdr_route_connection_opened_CT(qdr_core_t       *core,
                                     qdr_connection_t *conn,

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/ab2734f9/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 f44b1c5..c252063 100644
--- a/src/router_core/router_core_private.h
+++ b/src/router_core/router_core_private.h
@@ -31,8 +31,8 @@ typedef struct qdr_node_t            qdr_node_t;
 typedef struct qdr_router_ref_t      qdr_router_ref_t;
 typedef struct qdr_link_ref_t        qdr_link_ref_t;
 typedef struct qdr_forwarder_t       qdr_forwarder_t;
-typedef struct qdr_route_config_t    qdr_route_config_t;
-typedef struct qdr_route_active_t    qdr_route_active_t;
+typedef struct qdr_link_route_t      qdr_link_route_t;
+typedef struct qdr_auto_link_t       qdr_auto_link_t;
 typedef struct qdr_conn_identifier_t qdr_conn_identifier_t;
 typedef struct qdr_connection_ref_t  qdr_connection_ref_t;
 
@@ -316,7 +316,11 @@ void qdr_del_node_ref(qdr_router_ref_list_t *ref_list, qdr_node_t *rnode);
 struct qdr_address_config_t {
     DEQ_LINKS(qdr_address_config_t);
     qd_hash_handle_t       *hash_handle;
+    char                   *name;
+    uint64_t                identity;
     qd_address_treatment_t  treatment;
+    int                     in_phase;
+    int                     out_phase;
 };
 
 ALLOC_DECLARE(qdr_address_config_t);
@@ -397,54 +401,43 @@ struct qdr_connection_t {
 ALLOC_DECLARE(qdr_connection_t);
 DEQ_DECLARE(qdr_connection_t, qdr_connection_list_t);
 
-typedef enum {
-    QDR_ROUTE_PATH_DIRECT,
-    QDR_ROUTE_PATH_SOURCE,
-    QDR_ROUTE_PATH_SINK,
-    QDR_ROUTE_PATH_WAYPOINT
-} qdr_route_path_t;
 
-typedef enum {
-    QDR_ROUTE_STATE_DOWN,
-    QDR_ROUTE_STATE_UP,
-    QDR_ROUTE_STATE_QUIESCING
-} qdr_route_state_t;
-
-struct qdr_route_active_t {
-    DEQ_LINKS(qdr_route_active_t);
-    DEQ_LINKS_N(REF, qdr_route_active_t);
-    qdr_route_config_t    *config;
-    qdr_conn_identifier_t *conn_id;
-    qdr_route_state_t      in_state;
-    qdr_route_state_t      out_state;
-    qdr_link_t            *in_link;
-    qdr_link_t            *out_link;
+struct qdr_link_route_t {
+    DEQ_LINKS(qdr_link_route_t);
+    DEQ_LINKS_N(REF, qdr_link_route_t);
+    uint64_t                identity;
+    char                   *name;
+    qdr_address_t          *addr;
+    qd_direction_t          dir;
+    qdr_conn_identifier_t  *conn_id;
+    qd_address_treatment_t  treatment;
 };
 
-ALLOC_DECLARE(qdr_route_active_t);
-DEQ_DECLARE(qdr_route_active_t, qdr_route_active_list_t);
+ALLOC_DECLARE(qdr_link_route_t);
+DEQ_DECLARE(qdr_link_route_t, qdr_link_route_list_t);
 
-struct qdr_route_config_t {
-    DEQ_LINKS(qdr_route_config_t);
-    char                    *name;
-    uint64_t                 identity;
-    qdr_route_path_t         path;
-    qdr_address_config_t    *addr_config;
-    qdr_address_t           *addr;
-    qdr_address_t           *in_addr;
-    qdr_address_t           *out_addr;
-    qd_address_treatment_t   treatment;
-
-    qdr_route_active_list_t  active_list;
+
+struct qdr_auto_link_t {
+    DEQ_LINKS(qdr_auto_link_t);
+    DEQ_LINKS_N(REF, qdr_auto_link_t);
+    uint64_t               identity;
+    char                  *name;
+    qdr_address_t         *addr;
+    int                    phase;
+    qd_direction_t         dir;
+    qdr_conn_identifier_t *conn_id;
+    qdr_link_t            *link;
 };
 
-ALLOC_DECLARE(qdr_route_config_t);
-DEQ_DECLARE(qdr_route_config_t, qdr_route_config_list_t);
+ALLOC_DECLARE(qdr_auto_link_t);
+DEQ_DECLARE(qdr_auto_link_t, qdr_auto_link_list_t);
+
 
 struct qdr_conn_identifier_t {
-    qd_hash_handle_t        *hash_handle;
-    qdr_connection_t        *open_connection;
-    qdr_route_active_list_t  active_refs;
+    qd_hash_handle_t      *hash_handle;
+    qdr_connection_t      *open_connection;
+    qdr_link_route_list_t  link_route_refs;
+    qdr_auto_link_list_t   auto_link_refs;
 };
 
 ALLOC_DECLARE(qdr_conn_identifier_t);
@@ -463,8 +456,6 @@ struct qdr_core_t {
     qdr_general_work_list_t  work_list;
     qd_timer_t              *work_timer;
 
-    qdr_route_config_list_t  route_config;
-
     qdr_connection_list_t open_connections;
     qdr_link_list_t       open_links;
     //
@@ -505,6 +496,9 @@ struct qdr_core_t {
     const char       *router_id;
 
     qdr_address_config_list_t  addr_config;
+    qdr_auto_link_list_t       auto_links;
+    qdr_link_route_list_t      link_routes;
+    qd_hash_t                 *conn_id_hash;
     qdr_address_list_t         addrs;
     qd_hash_t                 *addr_hash;
     qdr_address_t             *hello_addr;
@@ -524,7 +518,6 @@ struct qdr_core_t {
     uint64_t              next_identifier;
     sys_mutex_t          *id_lock;
 
-    qd_hash_t            *conn_id_hash;
 
     qdr_forwarder_t      *forwarders[QD_TREATMENT_LINK_BALANCED + 1];
 };

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/ab2734f9/src/router_private.h
----------------------------------------------------------------------
diff --git a/src/router_private.h b/src/router_private.h
index 21497b4..533955a 100644
--- a/src/router_private.h
+++ b/src/router_private.h
@@ -38,10 +38,12 @@
 qd_error_t qd_router_python_setup(qd_router_t *router);
 void qd_router_python_free(qd_router_t *router);
 qd_error_t qd_pyrouter_tick(qd_router_t *router);
-qd_error_t qd_router_configure_address(qd_router_t *router, qd_entity_t *entity);
+qd_error_t qd_router_configure_fixed_address(qd_router_t *router, qd_entity_t *entity);
 qd_error_t qd_router_configure_waypoint(qd_router_t *router, qd_entity_t *entity);
 qd_error_t qd_router_configure_lrp(qd_router_t *router, qd_entity_t *entity);
-qd_error_t qd_router_configure_route(qd_router_t *router, qd_entity_t *entity);
+qd_error_t qd_router_configure_address(qd_router_t *router, qd_entity_t *entity);
+qd_error_t qd_router_configure_link_route(qd_router_t *router, qd_entity_t *entity);
+qd_error_t qd_router_configure_auto_link(qd_router_t *router, qd_entity_t *entity);
 
 void qd_router_configure_free(qd_router_t *router);
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org