Messages in this thread Patch in this message |  | | From | Jason Wang <> | Subject | [RFC PATCH net-next V2 4/6] macvlan: count the number of vlan in source mode | Date | Mon, 13 Aug 2018 11:17:28 +0800 |
| |
This patch tries to count the number of vlans in source mode. This will be used for implementing XDP rx handler for macvlan.
Signed-off-by: Jason Wang <jasowang@redhat.com> --- drivers/net/macvlan.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index cfda146..b7c814d 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c @@ -53,6 +53,7 @@ struct macvlan_port { struct hlist_head vlan_source_hash[MACVLAN_HASH_SIZE]; DECLARE_BITMAP(mc_filter, MACVLAN_MC_FILTER_SZ); unsigned char perm_addr[ETH_ALEN]; + unsigned long source_count; }; struct macvlan_source_entry { @@ -1433,6 +1434,9 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev, if (err) goto unregister_netdev; + if (vlan->mode == MACVLAN_MODE_SOURCE) + port->source_count++; + list_add_tail_rcu(&vlan->list, &port->vlans); netif_stacked_transfer_operstate(lowerdev, dev); linkwatch_fire_event(dev); @@ -1477,6 +1481,7 @@ static int macvlan_changelink(struct net_device *dev, struct netlink_ext_ack *extack) { struct macvlan_dev *vlan = netdev_priv(dev); + struct macvlan_port *port = vlan->port; enum macvlan_mode mode; bool set_mode = false; enum macvlan_macaddr_mode macmode; @@ -1491,8 +1496,10 @@ static int macvlan_changelink(struct net_device *dev, (vlan->mode == MACVLAN_MODE_PASSTHRU)) return -EINVAL; if (vlan->mode == MACVLAN_MODE_SOURCE && - vlan->mode != mode) + vlan->mode != mode) { macvlan_flush_sources(vlan->port, vlan); + port->source_count--; + } } if (data && data[IFLA_MACVLAN_FLAGS]) { @@ -1510,8 +1517,13 @@ static int macvlan_changelink(struct net_device *dev, } vlan->flags = flags; } - if (set_mode) + if (set_mode) { vlan->mode = mode; + if (mode == MACVLAN_MODE_SOURCE && + vlan->mode != mode) { + port->source_count++; + } + } if (data && data[IFLA_MACVLAN_MACADDR_MODE]) { if (vlan->mode != MACVLAN_MODE_SOURCE) return -EINVAL; -- 2.7.4
|  |