dpif-linux: Use get_32aligned_u64() in an appropriate place.
[openvswitch] / ofproto / ofproto-dpif.c
index 761b59104daee855bea058cf4969e3acb97c7e66..1ffe36a90a48020a2e61308902bfaa7616d1b4cf 100644 (file)
@@ -710,7 +710,7 @@ static void
 get_tables(struct ofproto *ofproto_, struct ofp_table_stats *ots)
 {
     struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
-    struct ovs_dp_stats s;
+    struct dpif_dp_stats s;
 
     strcpy(ots->name, "classifier");
 
@@ -758,6 +758,7 @@ port_construct(struct ofport *port_)
     struct ofport_dpif *port = ofport_dpif_cast(port_);
     struct ofproto_dpif *ofproto = ofproto_dpif_cast(port->up.ofproto);
 
+    ofproto->need_revalidate = true;
     port->odp_port = ofp_port_to_odp_port(port->up.ofp_port);
     port->bundle = NULL;
     port->cfm = NULL;
@@ -778,6 +779,7 @@ port_destruct(struct ofport *port_)
     struct ofport_dpif *port = ofport_dpif_cast(port_);
     struct ofproto_dpif *ofproto = ofproto_dpif_cast(port->up.ofproto);
 
+    ofproto->need_revalidate = true;
     bundle_remove(port_);
     set_cfm(port_, NULL);
     if (ofproto->sflow) {
@@ -988,6 +990,7 @@ bundle_add_port(struct ofbundle *bundle, uint32_t ofp_port,
         }
     }
     if (lacp) {
+        port->bundle->ofproto->need_revalidate = true;
         lacp_slave_register(bundle->lacp, port, lacp);
     }
 
@@ -1565,7 +1568,8 @@ port_run(struct ofport_dpif *ofport)
             ofpbuf_uninit(&packet);
         }
 
-        enable = enable && !cfm_get_fault(ofport->cfm);
+        enable = enable && !cfm_get_fault(ofport->cfm)
+            && cfm_get_opup(ofport->cfm);
     }
 
     if (ofport->bundle) {
@@ -2923,7 +2927,7 @@ rule_modify_actions(struct rule *rule_)
     complete_operation(rule);
 }
 \f
-/* Sends 'packet' out of port 'odp_port' within 'p'.
+/* Sends 'packet' out of port 'odp_port' within 'ofproto'.
  * Returns 0 if successful, otherwise a positive errno value. */
 static int
 send_packet(struct ofproto_dpif *ofproto, uint32_t odp_port,