Hi Sasha,

Here are some osmtest refinements (multicast flow) that
I did while debugging the recent two multicast bugs in
opensm: some comments fixes, creating a group that was
removed because last full member left, and adding one
query to check that invalid delete request really fails.

Signed-off-by: Yevgeny Kliteynik <[EMAIL PROTECTED]>
---
 opensm/osmtest/osmt_multicast.c |   64 ++++++++++++++++++++++++++++++++++----
 1 files changed, 57 insertions(+), 7 deletions(-)

diff --git a/opensm/osmtest/osmt_multicast.c b/opensm/osmtest/osmt_multicast.c
index a397142..57a8772 100644
--- a/opensm/osmtest/osmt_multicast.c
+++ b/opensm/osmtest/osmt_multicast.c
@@ -1813,7 +1813,7 @@ ib_api_status_t osmt_run_mcast_flow(IN osmtest_t * const 
p_osmt)

        /* Lets try another valid join scope state */
        OSM_LOG(&p_osmt->log, OSM_LOG_INFO,
-               "Checking new MGID creation with valid join state 
(o15.0.1.9)...\n");
+               "Checking new MGID creation with valid join state 
(o15.0.2.3)...\n");

        mc_req_rec.mgid = good_mgid;
        mc_req_rec.mgid.raw[12] = 0xFB;
@@ -1853,7 +1853,7 @@ ib_api_status_t osmt_run_mcast_flow(IN osmtest_t * const 
p_osmt)
            IB_MCR_COMPMASK_MGID |
            IB_MCR_COMPMASK_PORT_GID | IB_MCR_COMPMASK_JOIN_STATE;

-       status = osmt_send_mcast_request(p_osmt, 0x1,   /* User Defined query */
+       status = osmt_send_mcast_request(p_osmt, 0x1,   /* SubnAdmSet */
                                         &mc_req_rec, comp_mask, &res_sa_mad);
        if (status != IB_SUCCESS) {
                OSM_LOG(&p_osmt->log, OSM_LOG_ERROR, "ERR 02CC: "
@@ -1862,6 +1862,16 @@ ib_api_status_t osmt_run_mcast_flow(IN osmtest_t * const 
p_osmt)
                goto Exit;
        }

+       p_mc_res = ib_sa_mad_get_payload_ptr(&res_sa_mad);
+       if ((p_mc_res->scope_state & 0x7) != 0x7) {
+               OSM_LOG(&p_osmt->log, OSM_LOG_ERROR, "ERR 02D0: "
+                       "Validating JoinState update failed. "
+                       "Expected 0x27 got 0x%02X\n",
+                       p_mc_res->scope_state);
+               status = IB_ERROR;
+               goto Exit;
+       }
+
        /* o15.0.1.11: */
        /* - Try to join into a MGID that exists with JoinState=SendOnlyMember 
-  */
        /*   see that it updates JoinState. What is the routing change? */
@@ -1869,12 +1879,24 @@ ib_api_status_t osmt_run_mcast_flow(IN osmtest_t * 
const p_osmt)
                "Checking Retry of existing MGID - See JoinState update 
(o15.0.1.11)...\n");

        mc_req_rec.mgid = good_mgid;
-       mc_req_rec.scope_state = 0x22;  /* link-local scope, send only  member 
*/

+       /* first, make sure  that the group exists */
+       mc_req_rec.scope_state = 0x21;
        status = osmt_send_mcast_request(p_osmt, 1,
                                         &mc_req_rec, comp_mask, &res_sa_mad);
        if (status != IB_SUCCESS) {
                OSM_LOG(&p_osmt->log, OSM_LOG_ERROR, "ERR 02CD: "
+                       "Failed to create/join as full member - got %s/%s\n",
+                       ib_get_err_str(status),
+                       ib_get_mad_status_str((ib_mad_t *) (&res_sa_mad)));
+               goto Exit;
+       }
+
+       mc_req_rec.scope_state = 0x22;  /* link-local scope, non-member */
+       status = osmt_send_mcast_request(p_osmt, 1,
+                                        &mc_req_rec, comp_mask, &res_sa_mad);
+       if (status != IB_SUCCESS) {
+               OSM_LOG(&p_osmt->log, OSM_LOG_ERROR, "ERR 02D1: "
                        "Failed to update existing MGID - got %s/%s\n",
                        ib_get_err_str(status),
                        ib_get_mad_status_str((ib_mad_t *) (&res_sa_mad)));
@@ -1899,15 +1921,33 @@ ib_api_status_t osmt_run_mcast_flow(IN osmtest_t * 
const p_osmt)
        mc_req_rec.rate =
            IB_LINK_WIDTH_ACTIVE_1X | IB_PATH_SELECTOR_GREATER_THAN << 6;
        mc_req_rec.mgid = good_mgid;
-       /* link-local scope, non member (so we should not be able to delete) */
-       /*  but the FullMember bit should be gone */
+
        OSM_LOG(&p_osmt->log, OSM_LOG_INFO,
                "Checking Partially delete JoinState (o15.0.1.14)...\n");
-       mc_req_rec.scope_state = 0x22;
+
+       /* link-local scope, both non-member bits,
+          so we should not be able to delete) */
+       mc_req_rec.scope_state = 0x26;
+       OSM_LOG(&p_osmt->log, OSM_LOG_ERROR, EXPECTING_ERRORS_START "\n");
        status = osmt_send_mcast_request(p_osmt, 0,
                                         &mc_req_rec, comp_mask, &res_sa_mad);
-       if ((status != IB_SUCCESS) || (p_mc_res->scope_state != 0x21)) {
+       OSM_LOG(&p_osmt->log, OSM_LOG_ERROR, EXPECTING_ERRORS_END "\n");
+
+       if (status != IB_REMOTE_ERROR) {
                OSM_LOG(&p_osmt->log, OSM_LOG_ERROR, "ERR 02CF: "
+                       "Expected to fail partially update JoinState, "
+                       "but got %s\n",
+                       ib_get_err_str(status));
+               status = IB_ERROR;
+               goto Exit;
+       }
+
+       /* link-local scope, NonMember bit, the FullMember bit should stay */
+       mc_req_rec.scope_state = 0x22;
+       status = osmt_send_mcast_request(p_osmt, 0,
+                                        &mc_req_rec, comp_mask, &res_sa_mad);
+       if (status != IB_SUCCESS) {
+               OSM_LOG(&p_osmt->log, OSM_LOG_ERROR, "ERR 02D3: "
                        "Failed to partially update JoinState : %s/%s\n",
                        ib_get_err_str(status),
                        ib_get_mad_status_str((ib_mad_t *) (&res_sa_mad)));
@@ -1915,6 +1955,16 @@ ib_api_status_t osmt_run_mcast_flow(IN osmtest_t * const 
p_osmt)
                goto Exit;
        }

+       p_mc_res = ib_sa_mad_get_payload_ptr(&res_sa_mad);
+       if (p_mc_res->scope_state != 0x21) {
+               OSM_LOG(&p_osmt->log, OSM_LOG_ERROR, "ERR 02D4: "
+                       "Failed to partially update JoinState : "
+                       "JoinState = 0x%02X, expected 0x%02X\n",
+                       p_mc_res->scope_state, 0x21);
+               status = IB_ERROR;
+               goto Exit;
+       }
+
        /* So far successfully delete state - Now change it */
        mc_req_rec.mgid = good_mgid;
        mc_req_rec.scope_state = 0x24;  /* link-local scope, send only  member 
*/
-- 
1.5.1.4

_______________________________________________
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