X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=vswitchd%2Fbridge.c;h=d93d5c5b53a7eea41955c8174a2c0fa0de7b7540;hb=109b8459218973f7fba72fc606bcdbbb306592de;hp=e903a808cb4fbe61bf18e4383e0e477aa25a87a6;hpb=144216a3358fc3ddc8a8253dd85978f112cb7bbc;p=openvswitch diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c index e903a808..d93d5c5b 100644 --- a/vswitchd/bridge.c +++ b/vswitchd/bridge.c @@ -243,6 +243,7 @@ bridge_init(const char *remote) ovsdb_idl_omit_alert(idl, &ovsrec_interface_col_statistics); ovsdb_idl_omit_alert(idl, &ovsrec_interface_col_status); ovsdb_idl_omit_alert(idl, &ovsrec_interface_col_cfm_fault); + ovsdb_idl_omit_alert(idl, &ovsrec_interface_col_cfm_remote_mpids); ovsdb_idl_omit_alert(idl, &ovsrec_interface_col_lacp_current); ovsdb_idl_omit(idl, &ovsrec_interface_col_external_ids); @@ -1079,7 +1080,7 @@ bridge_pick_local_hw_addr(struct bridge *br, uint8_t ea[ETH_ADDR_LEN], !eth_addr_is_local(iface_ea) && !eth_addr_is_reserved(iface_ea) && !eth_addr_is_zero(iface_ea) && - eth_addr_compare_3way(iface_ea, ea) < 0) + (!found_addr || eth_addr_compare_3way(iface_ea, ea) < 0)) { memcpy(ea, iface_ea, ETH_ADDR_LEN); *hw_addr_iface = iface; @@ -1247,7 +1248,7 @@ iface_refresh_status(struct iface *iface) iface_get_carrier(iface) ? "up" : "down"); error = netdev_get_mtu(iface->netdev, &mtu); - if (!error && mtu != INT_MAX) { + if (!error) { mtu_64 = mtu; ovsrec_interface_set_mtu(iface->cfg, &mtu_64, 1); } @@ -1262,7 +1263,13 @@ static void iface_refresh_cfm_stats(struct iface *iface) { const struct ovsrec_interface *cfg = iface->cfg; - int fault; + int fault, error; + const uint64_t *rmps; + size_t n_rmps; + + if (iface_is_synthetic(iface)) { + return; + } fault = ofproto_port_get_cfm_fault(iface->port->bridge->ofproto, iface->ofp_port); @@ -1272,6 +1279,15 @@ iface_refresh_cfm_stats(struct iface *iface) } else { ovsrec_interface_set_cfm_fault(cfg, NULL, 0); } + + error = ofproto_port_get_cfm_remote_mpids(iface->port->bridge->ofproto, + iface->ofp_port, &rmps, &n_rmps); + if (error >= 0) { + ovsrec_interface_set_cfm_remote_mpids(cfg, (const int64_t *)rmps, + n_rmps); + } else { + ovsrec_interface_set_cfm_remote_mpids(cfg, NULL, 0); + } } static bool @@ -2606,6 +2622,7 @@ static void iface_configure_cfm(struct iface *iface) { const struct ovsrec_interface *cfg = iface->cfg; + const char *extended_str; struct cfm_settings s; if (!cfg->n_cfm_mpid) { @@ -2620,6 +2637,10 @@ iface_configure_cfm(struct iface *iface) s.interval = 1000; } + extended_str = get_interface_other_config(iface->cfg, "cfm_extended", + "false"); + s.extended = !strcasecmp("true", extended_str); + ofproto_port_set_cfm(iface->port->bridge->ofproto, iface->ofp_port, &s); }