X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=vswitchd%2Fbridge.c;h=aead34657a6be143b4222b0221ff3a308042bc3e;hb=be44585c21cc8dbe097a460a930696f0350dc12d;hp=aba0b942ed44249894bd7e4a32b21d22cd158a20;hpb=9ac3fce4d5aea7e963439eb97f7c2d157aef4dfc;p=openvswitch diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c index aba0b942..aead3465 100644 --- a/vswitchd/bridge.c +++ b/vswitchd/bridge.c @@ -244,10 +244,6 @@ bridge_init(const char *remote) ovsdb_idl_omit_alert(idl, &ovsrec_controller_col_status); ovsdb_idl_omit(idl, &ovsrec_controller_col_external_ids); - ovsdb_idl_omit_alert(idl, &ovsrec_maintenance_point_col_fault); - - ovsdb_idl_omit_alert(idl, &ovsrec_monitor_col_fault); - ovsdb_idl_omit(idl, &ovsrec_qos_col_external_ids); ovsdb_idl_omit(idl, &ovsrec_queue_col_external_ids); @@ -1219,33 +1215,20 @@ iface_refresh_status(struct iface *iface) static bool iface_refresh_cfm_stats(struct iface *iface) { - const struct ovsrec_monitor *mon; - const struct cfm *cfm; + const struct ovsrec_interface *cfg = iface->cfg; bool changed = false; - size_t i; + int fault; - mon = iface->cfg->monitor; - cfm = ofproto_port_get_cfm(iface->port->bridge->ofproto, iface->ofp_port); + fault = ofproto_port_get_cfm_fault(iface->port->bridge->ofproto, + iface->ofp_port); - if (!cfm || !mon) { + if (fault < 0) { return false; } - for (i = 0; i < mon->n_remote_mps; i++) { - const struct ovsrec_maintenance_point *mp; - const struct remote_mp *rmp; - - mp = mon->remote_mps[i]; - rmp = cfm_get_remote_mp(cfm, mp->mpid); - - if (mp->n_fault != 1 || mp->fault[0] != rmp->fault) { - ovsrec_maintenance_point_set_fault(mp, &rmp->fault, 1); - changed = true; - } - } - - if (mon->n_fault != 1 || mon->fault[0] != cfm->fault) { - ovsrec_monitor_set_fault(mon, &cfm->fault, 1); + if (cfg->n_cfm_fault != 1 || cfg->cfm_fault[0] != fault) { + bool fault_bool = fault; + ovsrec_interface_set_cfm_fault(cfg, &fault_bool, 1); changed = true; } @@ -2501,38 +2484,28 @@ iface_configure_qos(struct iface *iface, const struct ovsrec_qos *qos) static void iface_configure_cfm(struct iface *iface) { - size_t i; - struct cfm cfm; - uint16_t *remote_mps; - struct ovsrec_monitor *mon; - uint8_t maid[CCM_MAID_LEN]; + const struct ovsrec_interface *cfg = iface->cfg; + struct cfm_settings s; + uint16_t remote_mpid; - mon = iface->cfg->monitor; - - if (!mon) { + if (!cfg->n_cfm_mpid || !cfg->n_cfm_remote_mpid) { ofproto_port_clear_cfm(iface->port->bridge->ofproto, iface->ofp_port); return; } - if (!cfm_generate_maid(mon->md_name, mon->ma_name, maid)) { - VLOG_WARN("interface %s: Failed to generate MAID.", iface->name); - return; - } - - cfm.mpid = mon->mpid; - cfm.interval = mon->interval ? *mon->interval : 1000; - cfm.name = iface->name; - - memcpy(cfm.maid, maid, sizeof cfm.maid); + s.name = iface->name; + s.mpid = *cfg->cfm_mpid; + remote_mpid = *cfg->cfm_remote_mpid; + s.remote_mpids = &remote_mpid; + s.n_remote_mpids = 1; - remote_mps = xzalloc(mon->n_remote_mps * sizeof *remote_mps); - for(i = 0; i < mon->n_remote_mps; i++) { - remote_mps[i] = mon->remote_mps[i]->mpid; + s.interval = atoi(get_interface_other_config(iface->cfg, "cfm_interval", + "0")); + if (s.interval <= 0) { + s.interval = 1000; } - ofproto_port_set_cfm(iface->port->bridge->ofproto, iface->ofp_port, - &cfm, remote_mps, mon->n_remote_mps); - free(remote_mps); + ofproto_port_set_cfm(iface->port->bridge->ofproto, iface->ofp_port, &s); } /* Read carrier or miimon status directly from 'iface''s netdev, according to