cfm: Don't report unexpected remote endpoints.
authorEthan Jackson <ethan@nicira.com>
Fri, 25 Mar 2011 01:36:56 +0000 (18:36 -0700)
committerEthan Jackson <ethan@nicira.com>
Mon, 28 Mar 2011 18:30:55 +0000 (11:30 -0700)
Before this patch, CFM would report unexpected remote maintenance
points in the database.  This commit no longer exposes this
information.

Information about precisely why a link is faulty is more interesting
to a system administrator debugging a problem than a controller
which will generally only care about whether or not a link is
faulty.  For simplicity sake, this commit removes this information
from the database where it was somewhat awkwardly placed.  In the
future it may be valuable to report the information through
ovs-appctl commands for debugging purposes.

lib/cfm.c
lib/cfm.h
vswitchd/bridge.c
vswitchd/vswitch.ovsschema
vswitchd/vswitch.xml

index bdefde6c10379567dc5ed8d73a0fa53c08385a06..d0f3ee05c4251d720e464c8ff0d5de57870355f9 100644 (file)
--- a/lib/cfm.c
+++ b/lib/cfm.c
@@ -43,6 +43,9 @@ struct cfm_internal {
 
     long long ccm_sent;    /* The time we last sent a CCM. */
     long long fault_check; /* The time we last checked for faults. */
+
+    struct hmap x_remote_mps;   /* Unexpected remote MPs. */
+    struct hmap x_remote_maids; /* Unexpected remote MAIDs. */
 };
 
 static int
@@ -138,14 +141,15 @@ cfm_create(void)
     cfm  = &cfmi->cfm;
 
     hmap_init(&cfm->remote_mps);
-    hmap_init(&cfm->x_remote_mps);
-    hmap_init(&cfm->x_remote_maids);
+    hmap_init(&cfmi->x_remote_mps);
+    hmap_init(&cfmi->x_remote_maids);
     return cfm;
 }
 
 void
 cfm_destroy(struct cfm *cfm)
 {
+    struct cfm_internal *cfmi = cfm_to_internal(cfm);
     struct remote_mp *rmp, *rmp_next;
     struct remote_maid *rmaid, *rmaid_next;
 
@@ -158,20 +162,20 @@ cfm_destroy(struct cfm *cfm)
         free(rmp);
     }
 
-    HMAP_FOR_EACH_SAFE (rmp, rmp_next, node, &cfm->x_remote_mps) {
-        hmap_remove(&cfm->x_remote_mps, &rmp->node);
+    HMAP_FOR_EACH_SAFE (rmp, rmp_next, node, &cfmi->x_remote_mps) {
+        hmap_remove(&cfmi->x_remote_mps, &rmp->node);
         free(rmp);
     }
 
-    HMAP_FOR_EACH_SAFE (rmaid, rmaid_next, node, &cfm->x_remote_maids) {
-        hmap_remove(&cfm->x_remote_maids, &rmaid->node);
+    HMAP_FOR_EACH_SAFE (rmaid, rmaid_next, node, &cfmi->x_remote_maids) {
+        hmap_remove(&cfmi->x_remote_maids, &rmaid->node);
         free(rmaid);
     }
 
     hmap_destroy(&cfm->remote_mps);
-    hmap_destroy(&cfm->x_remote_mps);
-    hmap_destroy(&cfm->x_remote_maids);
-    free(cfm_to_internal(cfm));
+    hmap_destroy(&cfmi->x_remote_mps);
+    hmap_destroy(&cfmi->x_remote_maids);
+    free(cfmi);
 }
 
 /* Should be run periodically to update fault statistics messages. */
@@ -202,22 +206,22 @@ cfm_run(struct cfm *cfm)
             fault      = rmp->fault || fault;
         }
 
-        HMAP_FOR_EACH_SAFE (rmp, rmp_next, node, &cfm->x_remote_mps) {
+        HMAP_FOR_EACH_SAFE (rmp, rmp_next, node, &cfmi->x_remote_mps) {
             if (cfmi->fault_check > rmp->recv_time) {
-                hmap_remove(&cfm->x_remote_mps, &rmp->node);
+                hmap_remove(&cfmi->x_remote_mps, &rmp->node);
                 free(rmp);
             }
         }
 
-        HMAP_FOR_EACH_SAFE (rmaid, rmaid_next, node, &cfm->x_remote_maids) {
+        HMAP_FOR_EACH_SAFE (rmaid, rmaid_next, node, &cfmi->x_remote_maids) {
             if (cfmi->fault_check > rmaid->recv_time) {
-                hmap_remove(&cfm->x_remote_maids, &rmaid->node);
+                hmap_remove(&cfmi->x_remote_maids, &rmaid->node);
                 free(rmaid);
             }
         }
 
-        fault = (fault || !hmap_is_empty(&cfm->x_remote_mps)
-                 || !hmap_is_empty(&cfm->x_remote_maids));
+        fault = (fault || !hmap_is_empty(&cfmi->x_remote_mps)
+                 || !hmap_is_empty(&cfmi->x_remote_maids));
 
         cfm->fault        = fault;
         cfmi->fault_check = now;
@@ -289,6 +293,7 @@ cfm_configure(struct cfm *cfm)
 void
 cfm_update_remote_mps(struct cfm *cfm, const uint16_t *mpids, size_t n_mpids)
 {
+    struct cfm_internal *cfmi = cfm_to_internal(cfm);
     size_t i;
     struct hmap new_rmps;
     struct remote_mp *rmp, *rmp_next;
@@ -305,8 +310,8 @@ cfm_update_remote_mps(struct cfm *cfm, const uint16_t *mpids, size_t n_mpids)
 
         if ((rmp = lookup_remote_mp(&cfm->remote_mps, mpid))) {
             hmap_remove(&cfm->remote_mps, &rmp->node);
-        } else if ((rmp = lookup_remote_mp(&cfm->x_remote_mps, mpid))) {
-            hmap_remove(&cfm->x_remote_mps, &rmp->node);
+        } else if ((rmp = lookup_remote_mp(&cfmi->x_remote_mps, mpid))) {
+            hmap_remove(&cfmi->x_remote_mps, &rmp->node);
         } else {
             rmp = xzalloc(sizeof *rmp);
             rmp->mpid = mpid;
@@ -409,14 +414,14 @@ cfm_process_heartbeat(struct cfm *cfm, const struct ofpbuf *p)
     if (memcmp(ccm->maid, cfm->maid, sizeof ccm->maid)) {
         struct remote_maid *rmaid;
 
-        rmaid = lookup_remote_maid(&cfm->x_remote_maids, ccm->maid);
+        rmaid = lookup_remote_maid(&cfmi->x_remote_maids, ccm->maid);
         if (rmaid) {
             rmaid->recv_time = time_msec();
         } else {
             rmaid = xzalloc(sizeof *rmaid);
             rmaid->recv_time = time_msec();
             memcpy(rmaid->maid, ccm->maid, sizeof rmaid->maid);
-            hmap_insert(&cfm->x_remote_maids, &rmaid->node,
+            hmap_insert(&cfmi->x_remote_maids, &rmaid->node,
                         hash_bytes(ccm->maid, CCM_MAID_LEN, 0));
         }
         cfm->fault = true;
@@ -428,13 +433,13 @@ cfm_process_heartbeat(struct cfm *cfm, const struct ofpbuf *p)
         rmp = lookup_remote_mp(&cfm->remote_mps, ccm_mpid);
 
         if (!rmp) {
-            rmp = lookup_remote_mp(&cfm->x_remote_mps, ccm_mpid);
+            rmp = lookup_remote_mp(&cfmi->x_remote_mps, ccm_mpid);
         }
 
         if (!rmp) {
             rmp = xzalloc(sizeof *rmp);
             rmp->mpid = ccm_mpid;
-            hmap_insert(&cfm->x_remote_mps, &rmp->node, hash_mpid(ccm_mpid));
+            hmap_insert(&cfmi->x_remote_mps, &rmp->node, hash_mpid(ccm_mpid));
             rmp->fault = true;
         }
 
index 651b1c4b27a840b3146995e5cebbc782f1deae6b..e4bb6dffc52b327d6ebeb03cb956767f2e397d29 100644 (file)
--- a/lib/cfm.h
+++ b/lib/cfm.h
@@ -59,8 +59,6 @@ struct cfm {
 
     /* Statistics. */
     struct hmap remote_mps;     /* Expected remote MPs. */
-    struct hmap x_remote_mps;   /* Unexpected remote MPs. */
-    struct hmap x_remote_maids; /* Unexpected remote MAIDs. */
     bool fault;                 /* Indicates connectivity vaults. */
 };
 
index b57860f94485e3ebb1869da6029f41f46f2a7bfc..96e4cf1a47db4ceabeac5bfabf100e61b8997bf2 100644 (file)
@@ -1220,55 +1220,6 @@ iface_refresh_cfm_stats(struct iface *iface)
         ovsrec_maintenance_point_set_fault(mp, &rmp->fault, 1);
     }
 
-    if (hmap_is_empty(&cfm->x_remote_mps)) {
-        ovsrec_monitor_set_unexpected_remote_mpids(mon, NULL, 0);
-    } else {
-        size_t length;
-        struct remote_mp *rmp;
-        int64_t *x_remote_mps;
-
-        length = hmap_count(&cfm->x_remote_mps);
-        x_remote_mps = xzalloc(length * sizeof *x_remote_mps);
-
-        i = 0;
-        HMAP_FOR_EACH (rmp, node, &cfm->x_remote_mps) {
-            x_remote_mps[i++] = rmp->mpid;
-        }
-
-        ovsrec_monitor_set_unexpected_remote_mpids(mon, x_remote_mps, length);
-        free(x_remote_mps);
-    }
-
-    if (hmap_is_empty(&cfm->x_remote_maids)) {
-        ovsrec_monitor_set_unexpected_remote_maids(mon, NULL, 0);
-    } else {
-        size_t length;
-        char **x_remote_maids;
-        struct remote_maid *rmaid;
-
-        length = hmap_count(&cfm->x_remote_maids);
-        x_remote_maids = xzalloc(length * sizeof *x_remote_maids);
-
-        i = 0;
-        HMAP_FOR_EACH (rmaid, node, &cfm->x_remote_maids) {
-            size_t j;
-
-            x_remote_maids[i] = xzalloc(CCM_MAID_LEN * 2 + 1);
-
-            for (j = 0; j < CCM_MAID_LEN; j++) {
-                 snprintf(&x_remote_maids[i][j * 2], 3, "%02hhx",
-                          rmaid->maid[j]);
-            }
-            i++;
-        }
-        ovsrec_monitor_set_unexpected_remote_maids(mon, x_remote_maids, length);
-
-        for (i = 0; i < length; i++) {
-            free(x_remote_maids[i]);
-        }
-        free(x_remote_maids);
-    }
-
     ovsrec_monitor_set_fault(mon, &cfm->fault, 1);
 }
 
index 98e4a1006bf661ef583109648cdc035000fcf7a9..5afb606d521e45bda42fb3abbefe044d827a7ac8 100644 (file)
@@ -1,6 +1,6 @@
 {"name": "Open_vSwitch",
- "version": "3.0.1",
- "cksum": "1940448373 15497",
+ "version": "3.1.0",
+ "cksum": "2572059147 15155",
  "tables": {
    "Open_vSwitch": {
      "columns": {
            "key": { "type": "uuid", "refTable": "Maintenance_Point"},
            "min": 0,
            "max": "unlimited"}},
-       "unexpected_remote_mpids": {
-         "type": {
-           "key": { "type": "integer"},
-           "min": 0,
-           "max": "unlimited"},
-         "ephemeral": true},
-       "unexpected_remote_maids": {
-         "type": {
-           "key": "string",
-           "min": 0,
-           "max": "unlimited"},
-         "ephemeral": true},
        "fault": {
          "type": {
            "key": { "type": "boolean"},
index 36d08a443ff63e374c24bc6bafe7604d27f24d48..b74c55c8c7bea197cca76b13d36d82980befb687 100644 (file)
     </group>
 
     <group title="Monitor Status">
-      <column name="unexpected_remote_mpids">
-        A set of MPIDs representing MPs to which this <ref table="Monitor"/>
-        has detected connectivity that are not in the
-        <ref column="remote_mps"/> set.  This <ref table="Monitor"/> should not
-        have connectivity to any MPs not listed in <ref column="remote_mps"/>.
-        Thus, if this set is non-empty a fault is indicated.
-      </column>
-
-      <column name="unexpected_remote_maids">
-        A set of MAIDs representing foreign Maintenance Associations (MAs)
-        which this <ref table="Monitor"/> has detected connectivity to. A
-        <ref table="Monitor"/> should not have connectivity to a Maintenance
-        Association other than its own.  Thus, if this set is non-empty a fault
-        is indicated.
-      </column>
-
       <column name="fault">
         Indicates a Connectivity Fault caused by a configuration error, a down
         remote MP, or unexpected connectivity to a remote MAID or remote MP.