net: qualcomm: rmnet: Allow partial updates of IFLA_FLAGS
authorBjorn Andersson <bjorn.andersson@linaro.org>
Tue, 15 Jun 2021 23:27:07 +0000 (18:27 -0500)
committerDavid S. Miller <davem@davemloft.net>
Wed, 16 Jun 2021 19:16:22 +0000 (12:16 -0700)
The idiomatic way to handle the changelink flags/mask pair seems to be
allow partial updates of the driver's link flags. In contrast the rmnet
driver masks the incoming flags and then use that as the new flags.

Change the rmnet driver to follow the common scheme, before the
introduction of IFLA_RMNET_FLAGS handling in iproute2 et al.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Reviewed-by: Alex Elder <elder@linaro.org>
Reviewed-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c

index 8d51b0cb545ca6edeb96505c2665360863982a91..27b1663c476e7c348f851a7e3e9fb9e488d51d6c 100644 (file)
@@ -163,7 +163,8 @@ static int rmnet_newlink(struct net *src_net, struct net_device *dev,
                struct ifla_rmnet_flags *flags;
 
                flags = nla_data(data[IFLA_RMNET_FLAGS]);
-               data_format = flags->flags & flags->mask;
+               data_format &= ~flags->mask;
+               data_format |= flags->flags & flags->mask;
        }
 
        netdev_dbg(dev, "data format [0x%08X]\n", data_format);
@@ -336,7 +337,8 @@ static int rmnet_changelink(struct net_device *dev, struct nlattr *tb[],
 
                old_data_format = port->data_format;
                flags = nla_data(data[IFLA_RMNET_FLAGS]);
-               port->data_format = flags->flags & flags->mask;
+               port->data_format &= ~flags->mask;
+               port->data_format |= flags->flags & flags->mask;
 
                if (rmnet_vnd_update_dev_mtu(port, real_dev)) {
                        port->data_format = old_data_format;