From: Justin Pettit Date: Tue, 12 Mar 2013 21:47:22 +0000 (-0700) Subject: bridge: Store the 'mac_in_use' for interfaces in OVSDB. X-Git-Tag: sliver-openvswitch-1.10.90-1~10^2~72 X-Git-Url: http://git.onelab.eu/?p=sliver-openvswitch.git;a=commitdiff_plain;h=df867eda408180e110d74c6f383b51c95d2b0b6d bridge: Store the 'mac_in_use' for interfaces in OVSDB. It can be useful to remotely determine the MAC addresses of attached interfaces without going through OpenFlow. This adds the MAC address to a new 'mac_in_use' column on the Interface table. Feature #15551 Requested-by: Paul Ingram Signed-off-by: Justin Pettit --- diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c index fed22d3af..1fd431c24 100644 --- a/vswitchd/bridge.c +++ b/vswitchd/bridge.c @@ -345,6 +345,7 @@ bridge_init(const char *remote) ovsdb_idl_omit_alert(idl, &ovsrec_interface_col_link_speed); ovsdb_idl_omit_alert(idl, &ovsrec_interface_col_link_state); ovsdb_idl_omit_alert(idl, &ovsrec_interface_col_link_resets); + ovsdb_idl_omit_alert(idl, &ovsrec_interface_col_mac_in_use); ovsdb_idl_omit_alert(idl, &ovsrec_interface_col_mtu); ovsdb_idl_omit_alert(idl, &ovsrec_interface_col_ofport); ovsdb_idl_omit_alert(idl, &ovsrec_interface_col_statistics); @@ -1698,6 +1699,7 @@ iface_refresh_status(struct iface *iface) int64_t bps; int mtu; int64_t mtu_64; + uint8_t mac[ETH_ADDR_LEN]; int error; if (iface_is_synthetic(iface)) { @@ -1733,6 +1735,16 @@ iface_refresh_status(struct iface *iface) } else { ovsrec_interface_set_mtu(iface->cfg, NULL, 0); } + + error = netdev_get_etheraddr(iface->netdev, mac); + if (!error) { + char mac_string[32]; + + sprintf(mac_string, ETH_ADDR_FMT, ETH_ADDR_ARGS(mac)); + ovsrec_interface_set_mac_in_use(iface->cfg, mac_string); + } else { + ovsrec_interface_set_mac_in_use(iface->cfg, NULL); + } } /* Writes 'iface''s CFM statistics to the database. 'iface' must not be @@ -3330,6 +3342,7 @@ iface_clear_db_record(const struct ovsrec_interface *if_cfg) ovsrec_interface_set_duplex(if_cfg, NULL); ovsrec_interface_set_link_speed(if_cfg, NULL, 0); ovsrec_interface_set_link_state(if_cfg, NULL); + ovsrec_interface_set_mac_in_use(if_cfg, NULL); ovsrec_interface_set_mtu(if_cfg, NULL, 0); ovsrec_interface_set_cfm_fault(if_cfg, NULL, 0); ovsrec_interface_set_cfm_fault_status(if_cfg, NULL, 0); diff --git a/vswitchd/vswitch.ovsschema b/vswitchd/vswitch.ovsschema index a7901a86a..594ffb46c 100644 --- a/vswitchd/vswitch.ovsschema +++ b/vswitchd/vswitch.ovsschema @@ -1,6 +1,6 @@ {"name": "Open_vSwitch", - "version": "7.0.0", - "cksum": "3537583872 17299", + "version": "7.1.0", + "cksum": "2234055133 17444", "tables": { "Open_vSwitch": { "columns": { @@ -174,6 +174,10 @@ "ingress_policing_burst": { "type": {"key": {"type": "integer", "minInteger": 0}}}, + "mac_in_use": { + "type": {"key": {"type": "string"}, + "min": 0, "max": 1}, + "ephemeral": true}, "mac": { "type": {"key": {"type": "string"}, "min": 0, "max": 1}}, diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml index 30588a746..85d4edbb9 100644 --- a/vswitchd/vswitch.xml +++ b/vswitchd/vswitch.xml @@ -1131,6 +1131,10 @@ on a host. + + The MAC address in use by this interface. + +

Ethernet address to set for this interface. If unset then the default MAC address is used: