Re: [PATCH net-next 3/3] vxlan: move flag sets to use a helper func vxlan_nl2conf
From: Roopa Prabhu <hidden>
Date: 2018-11-29 09:25:54
On Wed, Nov 28, 2018 at 2:10 PM Roopa Prabhu [off-list ref] wrote:
From: Roopa Prabhu <redacted> Signed-off-by: Roopa Prabhu <redacted> ---
just noticed a typo in the title, spinning v2.
quoted hunk ↗ jump to hunk
drivers/net/vxlan.c | 95 ++++++++++++++++++++++++----------------------------- 1 file changed, 43 insertions(+), 52 deletions(-)diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index 4cb6b50..47671fd 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c@@ -3374,6 +3374,23 @@ static int __vxlan_dev_create(struct net *net, struct net_device *dev, return err; } +/* Set/clear flags based on attribute */ +static void vxlan_nl2flag(struct vxlan_config *conf, struct nlattr *tb[], + int attrtype, unsigned long mask) +{ + unsigned long flags; + + if (!tb[attrtype]) + return; + + if (nla_get_u8(tb[attrtype])) + flags = conf->flags | mask; + else + flags = conf->flags & ~mask; + + conf->flags = flags; +} + static int vxlan_nl2conf(struct nlattr *tb[], struct nlattr *data[], struct net_device *dev, struct vxlan_config *conf, bool changelink, struct netlink_ext_ack *extack)@@ -3458,45 +3475,27 @@ static int vxlan_nl2conf(struct nlattr *tb[], struct nlattr *data[], if (data[IFLA_VXLAN_TTL]) conf->ttl = nla_get_u8(data[IFLA_VXLAN_TTL]); - if (data[IFLA_VXLAN_TTL_INHERIT]) - conf->flags |= VXLAN_F_TTL_INHERIT; + vxlan_nl2flag(conf, data, IFLA_VXLAN_TTL_INHERIT, + VXLAN_F_TTL_INHERIT); if (data[IFLA_VXLAN_LABEL]) conf->label = nla_get_be32(data[IFLA_VXLAN_LABEL]) & IPV6_FLOWLABEL_MASK; - if (data[IFLA_VXLAN_LEARNING]) { - if (nla_get_u8(data[IFLA_VXLAN_LEARNING])) - conf->flags |= VXLAN_F_LEARN; - else - conf->flags &= ~VXLAN_F_LEARN; - } else if (!changelink) { + if (data[IFLA_VXLAN_LEARNING]) + vxlan_nl2flag(conf, data, IFLA_VXLAN_LEARNING, + VXLAN_F_LEARN); + else if (!changelink) /* default to learn on a new device */ conf->flags |= VXLAN_F_LEARN; - } if (data[IFLA_VXLAN_AGEING]) conf->age_interval = nla_get_u32(data[IFLA_VXLAN_AGEING]); - if (data[IFLA_VXLAN_PROXY]) { - if (nla_get_u8(data[IFLA_VXLAN_PROXY])) - conf->flags |= VXLAN_F_PROXY; - } - - if (data[IFLA_VXLAN_RSC]) { - if (nla_get_u8(data[IFLA_VXLAN_RSC])) - conf->flags |= VXLAN_F_RSC; - } - - if (data[IFLA_VXLAN_L2MISS]) { - if (nla_get_u8(data[IFLA_VXLAN_L2MISS])) - conf->flags |= VXLAN_F_L2MISS; - } - - if (data[IFLA_VXLAN_L3MISS]) { - if (nla_get_u8(data[IFLA_VXLAN_L3MISS])) - conf->flags |= VXLAN_F_L3MISS; - } + vxlan_nl2flag(conf, data, IFLA_VXLAN_PROXY, VXLAN_F_PROXY); + vxlan_nl2flag(conf, data, IFLA_VXLAN_RSC, VXLAN_F_RSC); + vxlan_nl2flag(conf, data, IFLA_VXLAN_L2MISS, VXLAN_F_L2MISS); + vxlan_nl2flag(conf, data, IFLA_VXLAN_L3MISS, VXLAN_F_L3MISS); if (data[IFLA_VXLAN_LIMIT]) { if (changelink) {@@ -3514,8 +3513,8 @@ static int vxlan_nl2conf(struct nlattr *tb[], struct nlattr *data[], "Cannot change metadata flag"); return -EOPNOTSUPP; } - if (nla_get_u8(data[IFLA_VXLAN_COLLECT_METADATA])) - conf->flags |= VXLAN_F_COLLECT_METADATA; + vxlan_nl2flag(conf, data, IFLA_VXLAN_COLLECT_METADATA, + VXLAN_F_COLLECT_METADATA); } if (data[IFLA_VXLAN_PORT_RANGE]) {@@ -3553,34 +3552,26 @@ static int vxlan_nl2conf(struct nlattr *tb[], struct nlattr *data[], conf->flags |= VXLAN_F_UDP_ZERO_CSUM_TX; } - if (data[IFLA_VXLAN_UDP_ZERO_CSUM6_TX]) { - if (nla_get_u8(data[IFLA_VXLAN_UDP_ZERO_CSUM6_TX])) - conf->flags |= VXLAN_F_UDP_ZERO_CSUM6_TX; - } + vxlan_nl2flag(conf, data, IFLA_VXLAN_UDP_ZERO_CSUM6_TX, + VXLAN_F_UDP_ZERO_CSUM6_TX); - if (data[IFLA_VXLAN_UDP_ZERO_CSUM6_RX]) { - if (nla_get_u8(data[IFLA_VXLAN_UDP_ZERO_CSUM6_RX])) - conf->flags |= VXLAN_F_UDP_ZERO_CSUM6_RX; - } + vxlan_nl2flag(conf, data, IFLA_VXLAN_UDP_ZERO_CSUM6_RX, + VXLAN_F_UDP_ZERO_CSUM6_RX); - if (data[IFLA_VXLAN_REMCSUM_TX]) { - if (nla_get_u8(data[IFLA_VXLAN_REMCSUM_TX])) - conf->flags |= VXLAN_F_REMCSUM_TX; - } + vxlan_nl2flag(conf, data, IFLA_VXLAN_REMCSUM_TX, + VXLAN_F_REMCSUM_TX); - if (data[IFLA_VXLAN_REMCSUM_RX]) { - if (nla_get_u8(data[IFLA_VXLAN_REMCSUM_RX])) - conf->flags |= VXLAN_F_REMCSUM_RX; - } + vxlan_nl2flag(conf, data, IFLA_VXLAN_REMCSUM_RX, + VXLAN_F_REMCSUM_RX); - if (data[IFLA_VXLAN_GBP]) - conf->flags |= VXLAN_F_GBP; + vxlan_nl2flag(conf, data, IFLA_VXLAN_GBP, + VXLAN_F_GBP); - if (data[IFLA_VXLAN_GPE]) - conf->flags |= VXLAN_F_GPE; + vxlan_nl2flag(conf, data, IFLA_VXLAN_GPE, + VXLAN_F_GPE); - if (data[IFLA_VXLAN_REMCSUM_NOPARTIAL]) - conf->flags |= VXLAN_F_REMCSUM_NOPARTIAL; + vxlan_nl2flag(conf, data, IFLA_VXLAN_REMCSUM_NOPARTIAL, + VXLAN_F_REMCSUM_NOPARTIAL); if (tb[IFLA_MTU]) { if (changelink) { --2.1.4