]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-netlink: add support to configure Generic Segment Offload
authorSusant Sahani <ssahani@vmware.com>
Tue, 12 Jan 2021 12:35:31 +0000 (13:35 +0100)
committerSusant Sahani <ssahani@vmware.com>
Tue, 12 Jan 2021 12:35:31 +0000 (13:35 +0100)
src/libsystemd/sd-netlink/netlink-util.c
src/libsystemd/sd-netlink/netlink-util.h

index 09e2158c9e880f8860d5e80a3fa61567aa2346ae..56cde0ffb05504cc34731be655a3fea4c7bcd384 100644 (file)
@@ -58,14 +58,15 @@ int rtnl_set_link_name(sd_netlink **rtnl, int ifindex, const char *name) {
 }
 
 int rtnl_set_link_properties(sd_netlink **rtnl, int ifindex, const char *alias,
-                             const struct ether_addr *mac, uint32_t mtu) {
+                             const struct ether_addr *mac, uint32_t mtu,
+                             uint32_t gso_max_size, size_t gso_max_segments) {
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *message = NULL;
         int r;
 
         assert(rtnl);
         assert(ifindex > 0);
 
-        if (!alias && !mac && mtu == 0)
+        if (!alias && !mac && mtu == 0 && gso_max_size == 0 && gso_max_segments == 0)
                 return 0;
 
         if (!*rtnl) {
@@ -96,6 +97,18 @@ int rtnl_set_link_properties(sd_netlink **rtnl, int ifindex, const char *alias,
                         return r;
         }
 
+        if (gso_max_size > 0) {
+                r = sd_netlink_message_append_u32(message, IFLA_GSO_MAX_SIZE, gso_max_size);
+                if (r < 0)
+                        return r;
+        }
+
+        if (gso_max_segments > 0) {
+                r = sd_netlink_message_append_u32(message, IFLA_GSO_MAX_SEGS, gso_max_segments);
+                if (r < 0)
+                        return r;
+        }
+
         r = sd_netlink_call(*rtnl, message, 0, NULL);
         if (r < 0)
                 return r;
index d28d07a9f5edc331394482d318a09c98457d2879..08b273b5e8a0008aab368c115bc4f679162abf5d 100644 (file)
@@ -70,7 +70,8 @@ static inline bool rtnl_message_type_is_mdb(uint16_t type) {
 }
 
 int rtnl_set_link_name(sd_netlink **rtnl, int ifindex, const char *name);
-int rtnl_set_link_properties(sd_netlink **rtnl, int ifindex, const char *alias, const struct ether_addr *mac, uint32_t mtu);
+int rtnl_set_link_properties(sd_netlink **rtnl, int ifindex, const char *alias, const struct ether_addr *mac, uint32_t mtu,
+                             uint32_t gso_max_size, size_t gso_max_segments);
 int rtnl_get_link_alternative_names(sd_netlink **rtnl, int ifindex, char ***ret);
 int rtnl_set_link_alternative_names(sd_netlink **rtnl, int ifindex, char * const *alternative_names);
 int rtnl_set_link_alternative_names_by_ifname(sd_netlink **rtnl, const char *ifname, char * const *alternative_names);