diff options
author | Lubomir Rintel <lkundrak@v3.sk> | 2017-10-09 08:09:26 +0200 |
---|---|---|
committer | Lubomir Rintel <lkundrak@v3.sk> | 2017-10-09 08:09:26 +0200 |
commit | 957b1bf304bf2bc17322c13440b173c9eb401d94 (patch) | |
tree | 05f078c816419c67e4ddcc54a21fb75d8a310a39 | |
parent | b833b4f3dcf54c4c127c8c94d42b572b78b6229f (diff) | |
download | NetworkManager-957b1bf304bf2bc17322c13440b173c9eb401d94.tar.gz |
x
-rw-r--r-- | src/devices/openvswitch/nm-device-ovs-interface.c | 5 | ||||
-rw-r--r-- | src/devices/openvswitch/nm-device-ovs-port.c | 5 | ||||
-rw-r--r-- | src/devices/openvswitch/nm-openvswitch-factory.c | 12 | ||||
-rw-r--r-- | src/devices/openvswitch/nm-ovsdb.c | 238 | ||||
-rw-r--r-- | src/nm-manager.c | 3 |
5 files changed, 208 insertions, 55 deletions
diff --git a/src/devices/openvswitch/nm-device-ovs-interface.c b/src/devices/openvswitch/nm-device-ovs-interface.c index f73c7276f1..0b6ac0334c 100644 --- a/src/devices/openvswitch/nm-device-ovs-interface.c +++ b/src/devices/openvswitch/nm-device-ovs-interface.c @@ -54,6 +54,9 @@ link_changed (NMDevice *device, const NMPlatformLink *pllink) NM_DEVICE_CLASS (nm_device_ovs_interface_parent_class)->link_changed (device, pllink); + +g_printerr ("XXX: IF LINK CHANGD [%p] [%d] [%d]\n", pllink, nm_device_get_state (device), NM_DEVICE_STATE_CONFIG); + if (pllink && nm_device_get_state (device) == NM_DEVICE_STATE_CONFIG) { _LOGD (LOGD_DEVICE, "the link appeared, continuing activation"); nm_device_activate_schedule_stage2_device_config (device); @@ -273,7 +276,7 @@ nm_device_ovs_interface_class_init (NMDeviceOvsInterfaceClass *klass) { NMDeviceClass *device_class = NM_DEVICE_CLASS (klass); -// NM_DEVICE_CLASS_DECLARE_TYPES (klass, NULL, NM_LINK_TYPE_OVS_INTERFACE) + NM_DEVICE_CLASS_DECLARE_TYPES (klass, NULL, NM_LINK_TYPE_OPENVSWITCH); device_class->is_master = TRUE; device_class->link_changed = link_changed; diff --git a/src/devices/openvswitch/nm-device-ovs-port.c b/src/devices/openvswitch/nm-device-ovs-port.c index 6693314f62..8f66830240 100644 --- a/src/devices/openvswitch/nm-device-ovs-port.c +++ b/src/devices/openvswitch/nm-device-ovs-port.c @@ -236,6 +236,8 @@ act_stage2_config (NMDevice *device, NMDeviceStateReason *out_failure_reason) } #endif + +#if 0 static void add_iface_cb (GError *error, gpointer user_data) { @@ -251,6 +253,7 @@ add_iface_cb (GError *error, gpointer user_data) g_object_unref (slave); } +#endif #if 0 static gboolean @@ -310,11 +313,13 @@ enslave_slave (NMDevice *device, NMDevice *slave, NMConnection *connection, gboo return FALSE; +#if 0 nm_ovsdb_transact (nm_ovsdb_get (), NM_OVSDB_ADD_IFACE, nm_device_get_iface (bridge), nm_device_get_applied_connection (device), nm_device_get_applied_connection (slave), add_iface_cb, g_object_ref (slave)); +#endif #if 0 NMDevice *port = NULL; diff --git a/src/devices/openvswitch/nm-openvswitch-factory.c b/src/devices/openvswitch/nm-openvswitch-factory.c index e286a22556..cdd514e8f9 100644 --- a/src/devices/openvswitch/nm-openvswitch-factory.c +++ b/src/devices/openvswitch/nm-openvswitch-factory.c @@ -104,6 +104,7 @@ ovsdb_device_added (NMOvsdb *ovsdb, const char *type, const char *name, NMDevice *device = NULL; g_printerr ("ADDED: [%s] %s\n", type, name); +return; device = device_from_type (name, type); g_return_if_fail (device); @@ -137,12 +138,19 @@ create_device (NMDeviceFactory *self, NMConnection *connection, gboolean *out_ignore) { - if (g_strcmp0 (iface, "ovs-system") == 0) + if (g_strcmp0 (iface, "ovs-system") == 0) { + *out_ignore = TRUE; return NULL; + } g_printerr ("CREATE DEVICE [%s]\n", iface); - return device_from_type (iface, nm_connection_get_connection_type (connection)); + if (connection) + return device_from_type (iface, nm_connection_get_connection_type (connection)); + else if (plink) + return device_from_type (iface, NM_SETTING_OVS_INTERFACE_SETTING_NAME); + else + return NULL; #if 0 return (NMDevice *) g_object_new (NM_TYPE_DEVICE_OPENVSWITCH, NM_DEVICE_IFACE, iface, diff --git a/src/devices/openvswitch/nm-ovsdb.c b/src/devices/openvswitch/nm-ovsdb.c index 727b2acecb..5e2c1e7714 100644 --- a/src/devices/openvswitch/nm-ovsdb.c +++ b/src/devices/openvswitch/nm-ovsdb.c @@ -221,6 +221,7 @@ ovsdb_call_method (NMOvsdb *self, OvsdbCommand command, /* Create and process the JSON-RPC messages from ovsdb. */ +#if 0 /** * _fill_bridges: * @@ -244,20 +245,21 @@ _fill_bridges (NMOvsdb *self, NMConnection *exclude_bridge, g_hash_table_iter_init (&iter, priv->bridges); while (g_hash_table_iter_next (&iter, (gpointer) &bridge_uuid, (gpointer) &ovs_bridge)) { - json_array_append_new (*bridges, json_pack ("[s,s]", "uuid", bridge_uuid)); + json_array_append_new (*bridges, json_pack ("[s, s]", "uuid", bridge_uuid)); if ( g_strcmp0 (nm_connection_get_interface_name (exclude_bridge),ovs_bridge->name) == 0 && ovs_bridge->connection_uuid != NULL) { found = TRUE; continue; } - json_array_append_new (*new_bridges, json_pack ("[s,s]", "uuid", bridge_uuid)); + json_array_append_new (*new_bridges, json_pack ("[s, s]", "uuid", bridge_uuid)); } return found; } +#endif /** - * _expect_bridges: + * _expect_ovs_bridges: * * Return a command that will fail the transaction if the actual set of * bridges doesn't match @bridges. This is a way of detecting race conditions @@ -265,10 +267,10 @@ _fill_bridges (NMOvsdb *self, NMConnection *exclude_bridge, * at the same time. */ static void -_expect_bridges (json_t *params, const char *db_uuid, json_t *bridges) +_expect_ovs_bridges (json_t *params, const char *db_uuid, json_t *bridges) { json_array_append_new (params, - json_pack ("{s:s, s:s, s:i, s:[s], s:s, s:[{s:[s, o]}], s:[[s, s, [s, s]]]}", + json_pack ("{s:s, s:s, s:i, s:[s], s:s, s:[{s:[s, O]}], s:[[s, s, [s, s]]]}", "op", "wait", "table", "Open_vSwitch", "timeout", 0, "columns", "bridges", "until", "==", "rows", "bridges", "set", bridges, @@ -277,22 +279,23 @@ _expect_bridges (json_t *params, const char *db_uuid, json_t *bridges) } /** - * _set_bridges: + * _set_ovs_bridges: * * Return a command that will update the list of bridges in @db_uuid * database to @bridges. */ static void -_set_bridges (json_t *params, const char *db_uuid, json_t *new_bridges) +_set_ovs_bridges (json_t *params, const char *db_uuid, json_t *new_bridges) { json_array_append_new (params, - json_pack ("{s:s, s:s, s:{s:[s, o]}, s:[[s, s, [s, s]]]}", + json_pack ("{s:s, s:s, s:{s:[s, O]}, s:[[s, s, [s, s]]]}", "op", "update", "table", "Open_vSwitch", "row", "bridges", "set", new_bridges, "where", "_uuid", "==", "uuid", db_uuid) ); } +#if 0 /* * _fill_ports: * @@ -326,7 +329,7 @@ _fill_ports (NMOvsdb *self, continue; for (i = 0; i < ovs_bridge->ports->len; i++) { port_uuid = g_ptr_array_index (ovs_bridge->ports, i); - json_array_append_new (*ports, json_pack ("[s,s]", "uuid", port_uuid)); + json_array_append_new (*ports, json_pack ("[s, s]", "uuid", port_uuid)); ovs_port = g_hash_table_lookup (priv->ports, port_uuid); if (!ovs_port) @@ -336,15 +339,16 @@ _fill_ports (NMOvsdb *self, found = TRUE; continue; } - json_array_append_new (*new_ports, json_pack ("[s,s]", "uuid", port_uuid)); + json_array_append_new (*new_ports, json_pack ("[s, s]", "uuid", port_uuid)); } } return found; } +#endif /** - * _expect_ports: + * _expect_bridge_ports: * * Return a command that will fail the transaction if the actual set of * ports in @bridge doesn't match @ports. This is a way of detecting @@ -352,10 +356,10 @@ _fill_ports (NMOvsdb *self, * bridge ports at the same time. */ static void -_expect_ports (json_t *params, const char *ifname, json_t *ports) +_expect_bridge_ports (json_t *params, const char *ifname, json_t *ports) { json_array_append_new (params, - json_pack ("{s:s, s:s, s:i, s:[s], s:s, s:[{s:[s, o]}], s:[[s, s, s]]}", + json_pack ("{s:s, s:s, s:i, s:[s], s:s, s:[{s:[s, O]}], s:[[s, s, s]]}", "op", "wait", "table", "Bridge", "timeout", 0, "columns", "ports", "until", "==", "rows", "ports", "set", ports, @@ -364,16 +368,16 @@ _expect_ports (json_t *params, const char *ifname, json_t *ports) } /** - * _set_ports: + * _set_bridge_ports: * * Return a command that will update the list of ports of @bridge * to @ports. */ static void -_set_ports (json_t *params, const char *ifname, json_t *new_ports) +_set_bridge_ports (json_t *params, const char *ifname, json_t *new_ports) { json_array_append_new (params, - json_pack ("{s:s, s:s, s:{s:[s, o]}, s:[[s, s, s]]}", + json_pack ("{s:s, s:s, s:{s:[s, O]}, s:[[s, s, s]]}", "op", "update", "table", "Bridge", "row", "ports", "set", new_ports, "where", "name", "==", ifname) @@ -397,7 +401,9 @@ _ovs_port_by_connection (NMOvsdb *self, NMConnection *port) return NULL; } +#endif +#if 0 /* * _fill_interfaces: * @@ -419,7 +425,7 @@ _fill_interfaces (NMOvsdb *self, for (i = 0; i < ovs_port->interfaces->len; i++) { interface_uuid = g_ptr_array_index (ovs_port->interfaces, i); - json_array_append_new (*interfaces, json_pack ("[s,s]", "uuid", interface_uuid)); + json_array_append_new (*interfaces, json_pack ("[s, s]", "uuid", interface_uuid)); ovs_interface = g_hash_table_lookup (priv->interfaces, interface_uuid); if (!ovs_interface) @@ -427,13 +433,14 @@ _fill_interfaces (NMOvsdb *self, if ( g_strcmp0 (nm_connection_get_interface_name (exclude_interface), ovs_interface->name) == 0 && g_strcmp0 (nm_connection_get_uuid (exclude_interface), ovs_interface->connection_uuid) == 0) continue; - json_array_append_new (*new_interfaces, json_pack ("[s,s]", "uuid", interface_uuid)); + json_array_append_new (*new_interfaces, json_pack ("[s, s]", "uuid", interface_uuid)); } } +#endif /** - * _expect_interfaces: + * _expect_port_interfaces: * * Return a command that will fail the transaction if the actual set of * interfaces in @port doesn't match @interfaces. This is a way of detecting @@ -441,10 +448,10 @@ _fill_interfaces (NMOvsdb *self, * port interfaces at the same time. */ static void -_expect_interfaces (json_t *params, const char *ifname, json_t *interfaces) +_expect_port_interfaces (json_t *params, const char *ifname, json_t *interfaces) { json_array_append_new (params, - json_pack ("{s:s, s:s, s:i, s:[s], s:s, s:[{s:[s, o]}], s:[[s, s, s]]}", + json_pack ("{s:s, s:s, s:i, s:[s], s:s, s:[{s:[s, O]}], s:[[s, s, s]]}", "op", "wait", "table", "Port", "timeout", 0, "columns", "interfaces", "until", "==", "rows", "interfaces", "set", interfaces, @@ -453,16 +460,16 @@ _expect_interfaces (json_t *params, const char *ifname, json_t *interfaces) } /** - * _set_interfaces: + * _set_port_interfaces: * * Return a command that will update the list of interfaces of @port * to @interfaces. */ static void -_set_interfaces (json_t *params, const char *ifname, json_t *new_interfaces) +_set_port_interfaces (json_t *params, const char *ifname, json_t *new_interfaces) { json_array_append_new (params, - json_pack ("{s:s, s:s, s:{s:[s, o]}, s:[[s, s, s]]}", + json_pack ("{s:s, s:s, s:{s:[s, O]}, s:[[s, s, s]]}", "op", "update", "table", "Port", "row", "interfaces", "set", new_interfaces, "where", "name", "==", ifname) @@ -506,14 +513,14 @@ _inc_next_cfg (const char *db_uuid) } /** - * _new_interface: + * _set_interface: * * Returns an commands that adds new interface from a given connection. * If the connection is of a bridge then an internal interface for the * bridge is added, otherwise it's a regular one. */ static void -_new_interface (json_t *params, NMConnection *interface) +_set_interface (json_t *params, NMConnection *interface) { const char *type = NULL; NMSettingOvsInterface *s_ovs_iface; @@ -528,7 +535,7 @@ _new_interface (json_t *params, NMConnection *interface) "name", nm_connection_get_interface_name (interface), "type", type, "external_ids", "map", "NM.connection.uuid", nm_connection_get_uuid (interface), - "uuid-name", "rowIntf")); + "uuid-name", "rowInterface")); } /** @@ -537,7 +544,7 @@ _new_interface (json_t *params, NMConnection *interface) * Returns an commands that adds new port from a given connection. */ static void -_new_port (json_t *params, NMConnection *port, json_t *new_interfaces) +_set_port (json_t *params, NMConnection *port, json_t *new_interfaces) { NMSettingOvsPort *s_ovs_port; const char *vlan_mode = NULL; @@ -575,15 +582,25 @@ _new_port (json_t *params, NMConnection *port, json_t *new_interfaces) json_object_set_new (row, "bond_downdelay", json_integer (bond_downdelay)); json_object_set_new (row, "name", json_string (nm_connection_get_interface_name (port))); -// json_object_set_new (row, "interfaces", json_pack ("[s, s]", "named-uuid", "rowIntf")); - json_object_set_new (row, "interfaces", new_interfaces); +// json_object_set_new (row, "interfaces", json_pack ("[s, s]", "named-uuid", "rowInterface")); +// json_object_set_new (row, "interfaces", new_interfaces); + json_object_set_new (row, "interfaces", json_pack ("[s, O]", "set", new_interfaces)); json_object_set_new (row, "external_ids", json_pack ("[s, [[s, s]]]", "map", "NM.connection.uuid", nm_connection_get_uuid (port))); - json_array_append_new (params, - json_pack ("{s:s, s:s, s:o, s:s}", "op", "insert", "table", "Port", - "row", row, "uuid-name", "rowPort")); + if (json_array_size (new_interfaces) == 1) { + /* Create a new one. */ + json_array_append_new (params, + json_pack ("{s:s, s:s, s:o, s:s}", "op", "insert", "table", "Port", + "row", row, "uuid-name", "rowPort")); + } else { + /* We're updating an existing port. */ + json_array_append_new (params, + json_pack ("{s:s, s:s, s:o, s:[[s, s, s]]}", "op", "update", "table", "Port", + "row", row, "where", + "name", "==", nm_connection_get_interface_name (port))); + } } /** @@ -592,7 +609,7 @@ _new_port (json_t *params, NMConnection *port, json_t *new_interfaces) * Returns an commands that adds new bridge from a given connection. */ static void -_new_bridge (json_t *params, NMConnection *bridge, json_t *new_ports) +_set_bridge (json_t *params, NMConnection *bridge, json_t *new_ports) { NMSettingOvsBridge *s_ovs_bridge; const char *fail_mode = NULL; @@ -623,25 +640,128 @@ _new_bridge (json_t *params, NMConnection *bridge, json_t *new_ports) json_object_set_new (row, "name", json_string (nm_connection_get_interface_name (bridge))); // json_object_set_new (row, "ports", json_pack ("[s, s]", "named-uuid", "rowPort")); - json_object_set_new (row, "ports", new_ports); + json_object_set_new (row, "ports", json_pack ("[s, O]", "set", new_ports)); +// json_object_set_new (row, "ports", new_ports); json_object_set_new (row, "external_ids", json_pack ("[s, [[s, s]]]", "map", "NM.connection.uuid", nm_connection_get_uuid (bridge))); - json_array_append_new (params, - json_pack ("{s:s, s:s, s:o, s:s}", "op", "insert", "table", "Bridge", - "row", row, "uuid-name", "rowBridge")); + if (json_array_size (new_ports) == 1) { + /* Create a new one. */ + json_array_append_new (params, + json_pack ("{s:s, s:s, s:o, s:s}", "op", "insert", "table", "Bridge", + "row", row, "uuid-name", "rowBridge")); + } else { + /* We're updating an existing bridge. */ + json_array_append_new (params, + json_pack ("{s:s, s:s, s:o, s:[[s, s, s]]}", "op", "update", "table", "Bridge", + "row", row, "where", + "name", "==", nm_connection_get_interface_name (bridge))); + } } +static void +_add_interface (NMOvsdb *self, json_t *params, + NMConnection *interface, NMConnection *port, NMConnection *bridge) +{ + NMOvsdbPrivate *priv = NM_OVSDB_GET_PRIVATE (self); + GHashTableIter iter; + const char *bridge_uuid; + const char *port_uuid; + const char *interface_uuid; + OpenvswitchBridge *ovs_bridge = NULL; + OpenvswitchPort *ovs_port = NULL; + OpenvswitchInterface *ovs_interface = NULL; + int pi; + int ii; + json_t *bridges, *new_bridges; + json_t *ports, *new_ports; + json_t *interfaces, *new_interfaces; + + bridges = json_array (); + ports = json_array (); + interfaces = json_array (); + new_bridges = json_array (); + new_ports = json_array (); + new_interfaces = json_array (); + + g_hash_table_iter_init (&iter, priv->bridges); + while (g_hash_table_iter_next (&iter, (gpointer) &bridge_uuid, (gpointer) &ovs_bridge)) { + json_array_append_new (bridges, json_pack ("[s, s]", "uuid", bridge_uuid)); + if ( g_strcmp0 (ovs_bridge->name, nm_connection_get_interface_name (bridge)) != 0) +// || g_strcmp0 (ovs_bridge->connection_uuid, nm_connection_get_connection_uuid (bridge)) != 0) + continue; + for (pi = 0; pi < ovs_bridge->ports->len; pi++) { + port_uuid = g_ptr_array_index (ovs_bridge->ports, pi); + ovs_port = g_hash_table_lookup (priv->ports, port_uuid); + json_array_append_new (ports, json_pack ("[s, s]", "uuid", port_uuid)); + if ( g_strcmp0 (ovs_port->name, nm_connection_get_interface_name (port)) != 0) +// || g_strcmp0 (ovs_port->connection_uuid, nm_connection_get_connection_uuid (port)) != 0) + continue; + for (ii = 0; ii < ovs_port->interfaces->len; ii++) { + interface_uuid = g_ptr_array_index (ovs_port->interfaces, ii); + ovs_interface = g_hash_table_lookup (priv->interfaces, interface_uuid); + json_array_append_new (interfaces, json_pack ("[s, s]", "uuid", interface_uuid)); + + /* The interface exists. Just drop in in the floor, we're creating a new one unconditionally. */ + if ( g_strcmp0 (ovs_interface->name, nm_connection_get_interface_name (interface)) != 0) +// || g_strcmp0 (ovs_interface->connection_uuid, nm_connection_get_connection_uuid (interface)) != 0) + continue; + + json_array_append_new (new_interfaces, json_pack ("[s, s]", "uuid", interface_uuid)); + } + + break; + } + + break; + } + + json_array_extend (new_bridges, bridges); + json_array_extend (new_ports, ports); + + if (json_array_size (interfaces) == 0) { + /* Need to create a port. */ + if (json_array_size (ports) == 0) { + /* Need to create a bridge. */ + _expect_ovs_bridges (params, priv->db_uuid, bridges); + json_array_append_new (new_bridges, json_pack ("[s, s]", "named-uuid", "rowBridge")); + _set_ovs_bridges (params, priv->db_uuid, new_bridges); + } else { + /* Bridge already exists. */ + g_return_if_fail (ovs_bridge); + _expect_bridge_ports (params, ovs_bridge->name, ports); + } + + json_array_append_new (new_ports, json_pack ("[s, s]", "named-uuid", "rowPort")); + _set_bridge (params, bridge, new_ports); + } else { + /* Port already exists */ + g_return_if_fail (ovs_port); + _expect_port_interfaces (params, ovs_port->name, interfaces); + } + + _set_interface (params, interface); + json_array_append_new (new_interfaces, json_pack ("[s, s]", "named-uuid", "rowInterface")); + _set_port (params, port, new_interfaces); + + json_decref (interfaces); + json_decref (ports); + json_decref (bridges); + + json_decref (new_interfaces); + json_decref (new_ports); + json_decref (new_bridges); +} static void _delete_interface (NMOvsdb *self, json_t *params, const char *ifname) @@ -705,8 +825,8 @@ _delete_interface (NMOvsdb *self, json_t *params, const char *ifname) ports_changed = TRUE; } else { if (interfaces_changed) { - _expect_interfaces (params, ovs_port->name, interfaces); - _set_interfaces (params, ovs_port->name, new_interfaces); + _expect_port_interfaces (params, ovs_port->name, interfaces); + _set_port_interfaces (params, ovs_port->name, new_interfaces); } json_array_append_new (new_ports, json_pack ("[s,s]", "uuid", port_uuid)); } @@ -719,8 +839,8 @@ _delete_interface (NMOvsdb *self, json_t *params, const char *ifname) bridges_changed = TRUE; } else { if (ports_changed) { - _expect_ports (params, ovs_bridge->name, ports); - _set_ports (params, ovs_bridge->name, new_ports); + _expect_bridge_ports (params, ovs_bridge->name, ports); + _set_bridge_ports (params, ovs_bridge->name, new_ports); } json_array_append_new (new_bridges, json_pack ("[s,s]", "uuid", bridge_uuid)); } @@ -730,8 +850,8 @@ _delete_interface (NMOvsdb *self, json_t *params, const char *ifname) } if (bridges_changed) { - _expect_bridges (params, priv->db_uuid, bridges); - _set_bridges (params, priv->db_uuid, new_bridges); + _expect_ovs_bridges (params, priv->db_uuid, bridges); + _set_ovs_bridges (params, priv->db_uuid, new_bridges); } } @@ -771,10 +891,12 @@ ovsdb_next_command (NMOvsdb *self) OvsdbMethodCall *call = NULL; char *cmd; json_t *msg = NULL; +#if 0 json_t *ports, *new_ports; json_t *bridges, *new_bridges; - json_t *params; OpenvswitchPort *ovs_port; +#endif + json_t *params; if (!priv->conn) return; @@ -801,6 +923,7 @@ ovsdb_next_command (NMOvsdb *self) "Open_vSwitch", "columns"); break; case OVSDB_ADD_INTERFACE: +#if 0 params = json_array (); json_array_append_new (params, json_string ("Open_vSwitch")); @@ -815,10 +938,10 @@ ovsdb_next_command (NMOvsdb *self) json_decref (ports); json_decref (new_ports); _fill_interfaces (self, ovs_port, call->interface, &ports, &new_ports); - json_array_append_new (new_ports, json_pack ("[s,s]", "named-uuid", "rowIntf")); + json_array_append_new (new_ports, json_pack ("[s,s]", "named-uuid", "rowInterface")); - _expect_interfaces (params, nm_connection_get_interface_name (call->port), ports); - _set_interfaces (params, nm_connection_get_interface_name (call->port), new_ports); + _expect_port_interfaces (params, nm_connection_get_interface_name (call->port), ports); + _set_port_interfaces (params, nm_connection_get_interface_name (call->port), new_ports); } else { /* Create a new port along with the interface. */ json_array_append_new (params, _new_port (call->port)); @@ -828,14 +951,14 @@ ovsdb_next_command (NMOvsdb *self) json_decref (bridges); json_decref (new_bridges); json_array_append_new (new_ports, json_pack ("[s,s]", "named-uuid", "rowPort")); - _expect_ports (params, nm_connection_get_interface_name (call->bridge), ports); - _set_ports (params, nm_connection_get_interface_name (call->bridge), new_ports); + _expect_bridge_ports (params, nm_connection_get_interface_name (call->bridge), ports); + _set_bridge_ports (params, nm_connection_get_interface_name (call->bridge), new_ports); } else { /* Create a new bridge along with the port. */ json_array_append_new (params, _new_bridge (call->bridge)); json_array_append_new (new_bridges, json_pack ("[s,s]", "named-uuid", "rowBridge")); - _expect_bridges (params, priv->db_uuid, bridges); - _set_bridges (params, priv->db_uuid, new_bridges); + _expect_ovs_bridges (params, priv->db_uuid, bridges); + _set_ovs_bridges (params, priv->db_uuid, new_bridges); } } @@ -843,6 +966,17 @@ ovsdb_next_command (NMOvsdb *self) "id", call->id, "method", "transact", "params", params); +#else + params = json_array (); + json_array_append_new (params, json_string ("Open_vSwitch")); + json_array_append_new (params, _inc_next_cfg (priv->db_uuid)); + + _add_interface (self, params, call->interface, call->port, call->bridge); + + msg = json_pack ("{s:i, s:s, s:o}", + "id", call->id, + "method", "transact", "params", params); +#endif break; case OVSDB_DEL_INTERFACE: params = json_array (); diff --git a/src/nm-manager.c b/src/nm-manager.c index 30d36d0774..fc61749daa 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -2331,6 +2331,9 @@ platform_link_added (NMManager *self, gboolean compatible = TRUE; gs_free_error GError *error = NULL; + if (nm_device_get_link_type (candidate) != plink->type) + continue; + if (strcmp (nm_device_get_iface (candidate), plink->name)) continue; |