bridge: add flags argument to ndo_bridge_setlink and ndo_bridge_dellink
bridge flags are needed inside ndo_bridge_setlink/dellink handlers to avoid another call to parse IFLA_AF_SPEC inside these handlers This is used later in this series Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
aafb3e98b2
commit
add511b382
7 changed files with 18 additions and 13 deletions
|
@ -4327,7 +4327,8 @@ int be_load_fw(struct be_adapter *adapter, u8 *fw_file)
|
|||
return status;
|
||||
}
|
||||
|
||||
static int be_ndo_bridge_setlink(struct net_device *dev, struct nlmsghdr *nlh)
|
||||
static int be_ndo_bridge_setlink(struct net_device *dev, struct nlmsghdr *nlh,
|
||||
u16 flags)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(dev);
|
||||
struct nlattr *attr, *br_spec;
|
||||
|
|
|
@ -7786,7 +7786,7 @@ static int ixgbe_ndo_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
|
|||
}
|
||||
|
||||
static int ixgbe_ndo_bridge_setlink(struct net_device *dev,
|
||||
struct nlmsghdr *nlh)
|
||||
struct nlmsghdr *nlh, u16 flags)
|
||||
{
|
||||
struct ixgbe_adapter *adapter = netdev_priv(dev);
|
||||
struct nlattr *attr, *br_spec;
|
||||
|
|
|
@ -3722,7 +3722,7 @@ static int rocker_port_fdb_dump(struct sk_buff *skb,
|
|||
}
|
||||
|
||||
static int rocker_port_bridge_setlink(struct net_device *dev,
|
||||
struct nlmsghdr *nlh)
|
||||
struct nlmsghdr *nlh, u16 flags)
|
||||
{
|
||||
struct rocker_port *rocker_port = netdev_priv(dev);
|
||||
struct nlattr *protinfo;
|
||||
|
|
|
@ -1154,13 +1154,15 @@ struct net_device_ops {
|
|||
int idx);
|
||||
|
||||
int (*ndo_bridge_setlink)(struct net_device *dev,
|
||||
struct nlmsghdr *nlh);
|
||||
struct nlmsghdr *nlh,
|
||||
u16 flags);
|
||||
int (*ndo_bridge_getlink)(struct sk_buff *skb,
|
||||
u32 pid, u32 seq,
|
||||
struct net_device *dev,
|
||||
u32 filter_mask);
|
||||
int (*ndo_bridge_dellink)(struct net_device *dev,
|
||||
struct nlmsghdr *nlh);
|
||||
struct nlmsghdr *nlh,
|
||||
u16 flags);
|
||||
int (*ndo_change_carrier)(struct net_device *dev,
|
||||
bool new_carrier);
|
||||
int (*ndo_get_phys_port_id)(struct net_device *dev,
|
||||
|
|
|
@ -494,7 +494,7 @@ static int br_setport(struct net_bridge_port *p, struct nlattr *tb[])
|
|||
}
|
||||
|
||||
/* Change state and parameters on port. */
|
||||
int br_setlink(struct net_device *dev, struct nlmsghdr *nlh)
|
||||
int br_setlink(struct net_device *dev, struct nlmsghdr *nlh, u16 flags)
|
||||
{
|
||||
struct nlattr *protinfo;
|
||||
struct nlattr *afspec;
|
||||
|
@ -550,7 +550,7 @@ int br_setlink(struct net_device *dev, struct nlmsghdr *nlh)
|
|||
}
|
||||
|
||||
/* Delete port information */
|
||||
int br_dellink(struct net_device *dev, struct nlmsghdr *nlh)
|
||||
int br_dellink(struct net_device *dev, struct nlmsghdr *nlh, u16 flags)
|
||||
{
|
||||
struct nlattr *afspec;
|
||||
struct net_bridge_port *p;
|
||||
|
|
|
@ -819,8 +819,8 @@ extern struct rtnl_link_ops br_link_ops;
|
|||
int br_netlink_init(void);
|
||||
void br_netlink_fini(void);
|
||||
void br_ifinfo_notify(int event, struct net_bridge_port *port);
|
||||
int br_setlink(struct net_device *dev, struct nlmsghdr *nlmsg);
|
||||
int br_dellink(struct net_device *dev, struct nlmsghdr *nlmsg);
|
||||
int br_setlink(struct net_device *dev, struct nlmsghdr *nlmsg, u16 flags);
|
||||
int br_dellink(struct net_device *dev, struct nlmsghdr *nlmsg, u16 flags);
|
||||
int br_getlink(struct sk_buff *skb, u32 pid, u32 seq, struct net_device *dev,
|
||||
u32 filter_mask);
|
||||
|
||||
|
|
|
@ -2991,7 +2991,7 @@ static int rtnl_bridge_setlink(struct sk_buff *skb, struct nlmsghdr *nlh)
|
|||
goto out;
|
||||
}
|
||||
|
||||
err = br_dev->netdev_ops->ndo_bridge_setlink(dev, nlh);
|
||||
err = br_dev->netdev_ops->ndo_bridge_setlink(dev, nlh, flags);
|
||||
if (err)
|
||||
goto out;
|
||||
|
||||
|
@ -3002,7 +3002,8 @@ static int rtnl_bridge_setlink(struct sk_buff *skb, struct nlmsghdr *nlh)
|
|||
if (!dev->netdev_ops->ndo_bridge_setlink)
|
||||
err = -EOPNOTSUPP;
|
||||
else
|
||||
err = dev->netdev_ops->ndo_bridge_setlink(dev, nlh);
|
||||
err = dev->netdev_ops->ndo_bridge_setlink(dev, nlh,
|
||||
flags);
|
||||
if (!err) {
|
||||
flags &= ~BRIDGE_FLAGS_SELF;
|
||||
|
||||
|
@ -3064,7 +3065,7 @@ static int rtnl_bridge_dellink(struct sk_buff *skb, struct nlmsghdr *nlh)
|
|||
goto out;
|
||||
}
|
||||
|
||||
err = br_dev->netdev_ops->ndo_bridge_dellink(dev, nlh);
|
||||
err = br_dev->netdev_ops->ndo_bridge_dellink(dev, nlh, flags);
|
||||
if (err)
|
||||
goto out;
|
||||
|
||||
|
@ -3075,7 +3076,8 @@ static int rtnl_bridge_dellink(struct sk_buff *skb, struct nlmsghdr *nlh)
|
|||
if (!dev->netdev_ops->ndo_bridge_dellink)
|
||||
err = -EOPNOTSUPP;
|
||||
else
|
||||
err = dev->netdev_ops->ndo_bridge_dellink(dev, nlh);
|
||||
err = dev->netdev_ops->ndo_bridge_dellink(dev, nlh,
|
||||
flags);
|
||||
|
||||
if (!err) {
|
||||
flags &= ~BRIDGE_FLAGS_SELF;
|
||||
|
|
Loading…
Reference in a new issue