[PATCH 6/6] rtnl: Add l_rtnl_link_set_mtu

Denis Kenzior <[email protected]> Fri, 23 Aug 2024 11:15:50 -0500
Newsgroups dev.linux.lists.ell
Message-ID <[email protected]>
This helper is used to set a given MTU on a network interface (link).
---
 ell/ell.sym |  1 +
 ell/rtnl.c  | 18 ++++++++++++++++++
 ell/rtnl.h  |  4 ++++
 3 files changed, 23 insertions(+)

diff --git a/ell/ell.sym b/ell/ell.sym
index cbeb61ff0f46..00123136a527 100644
--- a/ell/ell.sym
+++ b/ell/ell.sym
@@ -701,6 +701,7 @@ global:
 	l_rtnl_set_linkmode_and_operstate;
 	l_rtnl_set_mac;
 	l_rtnl_set_powered;
+	l_rtnl_link_set_mtu;
 	l_rtnl_ifaddr4_extract;
 	l_rtnl_ifaddr4_dump;
 	l_rtnl_ifaddr4_add;
diff --git a/ell/rtnl.c b/ell/rtnl.c
index da5d219feb48..fbad795949be 100644
--- a/ell/rtnl.c
+++ b/ell/rtnl.c
@@ -787,6 +787,24 @@ LIB_EXPORT uint32_t l_rtnl_set_powered(struct l_netlink *rtnl, int ifindex,
 	return l_netlink_send(rtnl, nlm, cb, user_data, destroy);
 }
 
+LIB_EXPORT uint32_t l_rtnl_link_set_mtu(struct l_netlink *rtnl, int ifindex,
+				uint32_t mtu,
+				l_netlink_command_func_t cb, void *user_data,
+				l_netlink_destroy_func_t destroy)
+{
+	struct l_netlink_message *nlm = l_netlink_message_new(RTM_SETLINK, 0);
+	struct ifinfomsg ifi;
+
+	memset(&ifi, 0, sizeof(ifi));
+	ifi.ifi_family = AF_UNSPEC;
+	ifi.ifi_index = ifindex;
+
+	l_netlink_message_add_header(nlm, &ifi, sizeof(ifi));
+	l_netlink_message_append_u32(nlm, IFLA_MTU, mtu);
+
+	return l_netlink_send(rtnl, nlm, cb, user_data, destroy);
+}
+
 LIB_EXPORT void l_rtnl_ifaddr4_extract(const struct ifaddrmsg *ifa, int bytes,
 				char **label, char **ip, char **broadcast)
 {
diff --git a/ell/rtnl.h b/ell/rtnl.h
index fa5d99eb4b53..d44cda24d6fd 100644
--- a/ell/rtnl.h
+++ b/ell/rtnl.h
@@ -103,6 +103,10 @@ uint32_t l_rtnl_set_powered(struct l_netlink *rtnl, int ifindex, bool powered,
 				l_netlink_command_func_t cb, void *user_data,
 				l_netlink_destroy_func_t destroy);
 
+uint32_t l_rtnl_link_set_mtu(struct l_netlink *rtnl, int ifindex, uint32_t mtu,
+				l_netlink_command_func_t cb, void *user_data,
+				l_netlink_destroy_func_t destroy);
+
 void l_rtnl_ifaddr4_extract(const struct ifaddrmsg *ifa, int bytes,
 				char **label, char **ip, char **broadcast);
 uint32_t l_rtnl_ifaddr4_dump(struct l_netlink *rtnl, l_netlink_command_func_t cb,
-- 
2.45.2