summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2020-03-09 11:19:47 +0100
committerThomas Haller <thaller@redhat.com>2020-08-17 18:10:33 +0200
commit82158db359ce537db6eb106655f0bbc89f0f5ce6 (patch)
tree1b7caad1d321ea40afea27f4aa5ee95d4e4f0f52
parent0862893e3860487c6fd2c705ab8fa178c0d5da1c (diff)
downloadNetworkManager-82158db359ce537db6eb106655f0bbc89f0f5ce6.tar.gz
ovs/ovsdb: support changing the MTU of an ovs interface
Introduce a nm_ovsdb_set_interface_mtu() function to update the MTU of an ovs interface in the ovsdb. (cherry picked from commit a4c2c1a843ff1492c1bfae2455a334b0d1c8389c) (cherry picked from commit c1be15a66edf1ef1e7de1cc7a0f6e134b8dbdcb7) (cherry picked from commit 990f46505d6d9bd4de40db458978b6c94664de13)
-rw-r--r--src/devices/ovs/nm-ovsdb.c77
-rw-r--r--src/devices/ovs/nm-ovsdb.h3
2 files changed, 64 insertions, 16 deletions
diff --git a/src/devices/ovs/nm-ovsdb.c b/src/devices/ovs/nm-ovsdb.c
index c85115201e..9ed8e06f52 100644
--- a/src/devices/ovs/nm-ovsdb.c
+++ b/src/devices/ovs/nm-ovsdb.c
@@ -118,6 +118,7 @@ typedef enum {
OVSDB_MONITOR,
OVSDB_ADD_INTERFACE,
OVSDB_DEL_INTERFACE,
+ OVSDB_SET_INTERFACE_MTU,
} OvsdbCommand;
typedef struct {
@@ -127,7 +128,10 @@ typedef struct {
OvsdbMethodCallback callback;
gpointer user_data;
union {
- char *ifname;
+ struct {
+ char *ifname;
+ guint32 mtu;
+ };
struct {
NMConnection *bridge;
NMConnection *port;
@@ -169,6 +173,13 @@ _call_trace (const char *comment, OvsdbMethodCall *call, json_t *msg)
msg ? ": " : "",
msg ? str : "");
break;
+ case OVSDB_SET_INTERFACE_MTU:
+ _LOGT ("%s: set-iface-mtu interface=%s%s%s mtu=%u",
+ comment, call->ifname,
+ msg ? ": " : "",
+ msg ? str : "",
+ call->mtu);
+ break;
}
if (msg)
@@ -187,7 +198,7 @@ ovsdb_call_method (NMOvsdb *self, OvsdbCommand command,
const char *ifname,
NMConnection *bridge, NMConnection *port, NMConnection *interface,
NMDevice *bridge_device, NMDevice *interface_device,
- OvsdbMethodCallback callback, gpointer user_data)
+ guint32 mtu, OvsdbMethodCallback callback, gpointer user_data)
{
NMOvsdbPrivate *priv = NM_OVSDB_GET_PRIVATE (self);
OvsdbMethodCall *call;
@@ -215,6 +226,10 @@ ovsdb_call_method (NMOvsdb *self, OvsdbCommand command,
case OVSDB_DEL_INTERFACE:
call->ifname = g_strdup (ifname);
break;
+ case OVSDB_SET_INTERFACE_MTU:
+ call->ifname = g_strdup (ifname);
+ call->mtu = mtu;
+ break;
}
_call_trace ("enqueue", call, NULL);
@@ -821,6 +836,22 @@ ovsdb_next_command (NMOvsdb *self)
"id", call->id,
"method", "transact", "params", params);
break;
+ case OVSDB_SET_INTERFACE_MTU:
+ params = json_array ();
+ json_array_append_new (params, json_string ("Open_vSwitch"));
+ json_array_append_new (params, _inc_next_cfg (priv->db_uuid));
+
+ json_array_append_new (params,
+ json_pack ("{s:s, s:s, s:{s: i}, s:[[s, s, s]]}",
+ "op", "update",
+ "table", "Interface",
+ "row", "mtu_request", call->mtu,
+ "where", "name", "==", call->ifname));
+
+ msg = json_pack ("{s:i, s:s, s:o}",
+ "id", call->id,
+ "method", "transact", "params", params);
+ break;
}
g_return_if_fail (msg);
@@ -1462,7 +1493,7 @@ ovsdb_try_connect (NMOvsdb *self)
/* Queue a monitor call before any other command, ensuring that we have an up
* to date view of existing bridged that we need for add and remove ops. */
ovsdb_call_method (self, OVSDB_MONITOR, NULL,
- NULL, NULL, NULL, NULL, NULL, _monitor_bridges_cb, NULL);
+ NULL, NULL, NULL, NULL, NULL, 0, _monitor_bridges_cb, NULL);
}
/*****************************************************************************/
@@ -1500,11 +1531,8 @@ out:
g_slice_free (OvsdbCall, call);
}
-void
-nm_ovsdb_add_interface (NMOvsdb *self,
- NMConnection *bridge, NMConnection *port, NMConnection *interface,
- NMDevice *bridge_device, NMDevice *interface_device,
- NMOvsdbCallback callback, gpointer user_data)
+static OvsdbCall *
+ovsdb_call_new (NMOvsdbCallback callback, gpointer user_data)
{
OvsdbCall *call;
@@ -1512,24 +1540,40 @@ nm_ovsdb_add_interface (NMOvsdb *self,
call->callback = callback;
call->user_data = user_data;
+ return call;
+}
+
+void
+nm_ovsdb_add_interface (NMOvsdb *self,
+ NMConnection *bridge, NMConnection *port, NMConnection *interface,
+ NMDevice *bridge_device, NMDevice *interface_device,
+ NMOvsdbCallback callback, gpointer user_data)
+{
ovsdb_call_method (self, OVSDB_ADD_INTERFACE, NULL,
bridge, port, interface,
bridge_device, interface_device,
- _transact_cb, call);
+ 0,
+ _transact_cb,
+ ovsdb_call_new (callback, user_data));
}
void
nm_ovsdb_del_interface (NMOvsdb *self, const char *ifname,
NMOvsdbCallback callback, gpointer user_data)
{
- OvsdbCall *call;
-
- call = g_slice_new (OvsdbCall);
- call->callback = callback;
- call->user_data = user_data;
-
ovsdb_call_method (self, OVSDB_DEL_INTERFACE, ifname,
- NULL, NULL, NULL, NULL, NULL, _transact_cb, call);
+ NULL, NULL, NULL, NULL, NULL, 0,
+ _transact_cb,
+ ovsdb_call_new (callback, user_data));
+}
+
+void nm_ovsdb_set_interface_mtu (NMOvsdb *self, const char *ifname, guint32 mtu,
+ NMOvsdbCallback callback, gpointer user_data)
+{
+ ovsdb_call_method (self, OVSDB_SET_INTERFACE_MTU, ifname,
+ NULL, NULL, NULL, NULL, NULL, mtu,
+ _transact_cb,
+ ovsdb_call_new (callback, user_data));
}
/*****************************************************************************/
@@ -1550,6 +1594,7 @@ _clear_call (gpointer data)
g_clear_object (&call->interface_device);
break;
case OVSDB_DEL_INTERFACE:
+ case OVSDB_SET_INTERFACE_MTU:
g_clear_pointer (&call->ifname, g_free);
break;
}
diff --git a/src/devices/ovs/nm-ovsdb.h b/src/devices/ovs/nm-ovsdb.h
index e7f9d71984..9552dcca32 100644
--- a/src/devices/ovs/nm-ovsdb.h
+++ b/src/devices/ovs/nm-ovsdb.h
@@ -48,4 +48,7 @@ void nm_ovsdb_add_interface (NMOvsdb *self,
void nm_ovsdb_del_interface (NMOvsdb *self, const char *ifname,
NMOvsdbCallback callback, gpointer user_data);
+void nm_ovsdb_set_interface_mtu (NMOvsdb *self, const char *ifname, guint32 mtu,
+ NMOvsdbCallback callback, gpointer user_data);
+
#endif /* __NETWORKMANAGER_OVSDB_H__ */