Add new partition keyword for node type groups.
 The following new keywords were added:
 'ALL_CAS' means all CA end ports in the subnet.
 'ALL_SWITCHES' means all Switch end ports in the subnet
 'ALL_ROUTERS' means all Router end ports in the subnet
 For example, to allow firmware upgrade within managed switches we
 need that all switch port 0 to have full membership.

Signed-off-by: Eli Dorfman <[email protected]>
---
 opensm/opensm/osm_prtn.c        |   15 +++++++++------
 opensm/opensm/osm_prtn_config.c |   13 +++++++++++--
 2 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/opensm/opensm/osm_prtn.c b/opensm/opensm/osm_prtn.c
index be51410..8b9301e 100644
--- a/opensm/opensm/osm_prtn.c
+++ b/opensm/opensm/osm_prtn.c
@@ -135,7 +135,7 @@ ib_api_status_t osm_prtn_add_port(osm_log_t * p_log, 
osm_subn_t * p_subn,
 }
 
 ib_api_status_t osm_prtn_add_all(osm_log_t * p_log, osm_subn_t * p_subn,
-                                osm_prtn_t * p, boolean_t full)
+                                osm_prtn_t * p, uint8_t type, boolean_t full)
 {
        cl_qmap_t *p_port_tbl = &p_subn->port_guid_tbl;
        cl_map_item_t *p_item;
@@ -146,10 +146,13 @@ ib_api_status_t osm_prtn_add_all(osm_log_t * p_log, 
osm_subn_t * p_subn,
        while (p_item != cl_qmap_end(p_port_tbl)) {
                p_port = (osm_port_t *) p_item;
                p_item = cl_qmap_next(p_item);
-               status = osm_prtn_add_port(p_log, p_subn, p,
-                                          osm_port_get_guid(p_port), full);
-               if (status != IB_SUCCESS)
-                       goto _err;
+               if (type == 0xff ||
+                       (osm_node_get_type(p_port->p_node) == type)) {
+                       status = osm_prtn_add_port(p_log, p_subn, p,
+                                                  osm_port_get_guid(p_port), 
full);
+                       if (status != IB_SUCCESS)
+                               goto _err;
+               }
        }
 
 _err:
@@ -325,7 +328,7 @@ static ib_api_status_t osm_prtn_make_default(osm_log_t * 
const p_log,
                              IB_DEFAULT_PARTIAL_PKEY);
        if (!p)
                goto _err;
-       status = osm_prtn_add_all(p_log, p_subn, p, no_config);
+       status = osm_prtn_add_all(p_log, p_subn, p, 0xff, no_config);
        if (status != IB_SUCCESS)
                goto _err;
        cl_map_remove(&p->part_guid_tbl, p_subn->sm_port_guid);
diff --git a/opensm/opensm/osm_prtn_config.c b/opensm/opensm/osm_prtn_config.c
index 9511608..cb67377 100644
--- a/opensm/opensm/osm_prtn_config.c
+++ b/opensm/opensm/osm_prtn_config.c
@@ -64,7 +64,7 @@ extern osm_prtn_t *osm_prtn_make_new(osm_log_t * p_log, 
osm_subn_t * p_subn,
                                     const char *name, uint16_t pkey);
 extern ib_api_status_t osm_prtn_add_all(osm_log_t * p_log,
                                        osm_subn_t * p_subn,
-                                       osm_prtn_t * p, boolean_t full);
+                                       osm_prtn_t * p, uint8_t type, boolean_t 
full);
 extern ib_api_status_t osm_prtn_add_port(osm_log_t * p_log,
                                         osm_subn_t * p_subn, osm_prtn_t * p,
                                         ib_net64_t guid, boolean_t full);
@@ -212,7 +212,16 @@ static int partition_add_port(unsigned lineno, struct 
part_conf *conf,
 
        if (!strncmp(name, "ALL", strlen(name))) {
                return osm_prtn_add_all(conf->p_log, conf->p_subn, p,
-                                       full) == IB_SUCCESS ? 0 : -1;
+                                       0xff, full) == IB_SUCCESS ? 0 : -1;
+       } else if (!strncmp(name, "ALL_CAS", strlen(name))) {
+               return osm_prtn_add_all(conf->p_log, conf->p_subn, p,
+                                       IB_NODE_TYPE_CA, full) == IB_SUCCESS ? 
0 : -1;
+       } else if (!strncmp(name, "ALL_SWITCHES", strlen(name))) {
+               return osm_prtn_add_all(conf->p_log, conf->p_subn, p,
+                                       IB_NODE_TYPE_SWITCH, full) == 
IB_SUCCESS ? 0 : -1;
+       } else if (!strncmp(name, "ALL_ROUTERS", strlen(name))) {
+               return osm_prtn_add_all(conf->p_log, conf->p_subn, p,
+                                       IB_NODE_TYPE_ROUTER, full) == 
IB_SUCCESS ? 0 : -1;
        } else if (!strncmp(name, "SELF", strlen(name))) {
                guid = cl_ntoh64(conf->p_subn->sm_port_guid);
        } else {
-- 
1.5.5

_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to