Contributors: 20
Author |
Tokens |
Token Proportion |
Commits |
Commit Proportion |
Michal Kubeček |
105 |
22.58% |
1 |
3.03% |
Arnd Bergmann |
97 |
20.86% |
3 |
9.09% |
Eric Dumazet |
69 |
14.84% |
6 |
18.18% |
Patrick McHardy |
62 |
13.33% |
1 |
3.03% |
Alexander Duyck |
60 |
12.90% |
3 |
9.09% |
Linus Torvalds (pre-git) |
20 |
4.30% |
4 |
12.12% |
Ding Tianhong |
10 |
2.15% |
1 |
3.03% |
Herbert Xu |
6 |
1.29% |
1 |
3.03% |
John Fastabend |
6 |
1.29% |
2 |
6.06% |
Eric W. Biedermann |
5 |
1.08% |
1 |
3.03% |
Michael Braun |
4 |
0.86% |
1 |
3.03% |
Ziyang Xuan |
3 |
0.65% |
1 |
3.03% |
Thomas Karlsson |
3 |
0.65% |
1 |
3.03% |
Linus Torvalds |
3 |
0.65% |
1 |
3.03% |
Vlad Yasevich |
3 |
0.65% |
1 |
3.03% |
David S. Miller |
3 |
0.65% |
1 |
3.03% |
Daniel Borkmann |
2 |
0.43% |
1 |
3.03% |
Li RongQing |
2 |
0.43% |
1 |
3.03% |
Greg Kroah-Hartman |
1 |
0.22% |
1 |
3.03% |
Tejun Heo |
1 |
0.22% |
1 |
3.03% |
Total |
465 |
|
33 |
|
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _LINUX_IF_MACVLAN_H
#define _LINUX_IF_MACVLAN_H
#include <linux/if_link.h>
#include <linux/if_vlan.h>
#include <linux/list.h>
#include <linux/netdevice.h>
#include <linux/netlink.h>
#include <net/netlink.h>
#include <linux/u64_stats_sync.h>
struct macvlan_port;
#define MACVLAN_MC_FILTER_BITS 8
#define MACVLAN_MC_FILTER_SZ (1 << MACVLAN_MC_FILTER_BITS)
struct macvlan_dev {
struct net_device *dev;
struct list_head list;
struct hlist_node hlist;
struct macvlan_port *port;
struct net_device *lowerdev;
netdevice_tracker dev_tracker;
void *accel_priv;
struct vlan_pcpu_stats __percpu *pcpu_stats;
DECLARE_BITMAP(mc_filter, MACVLAN_MC_FILTER_SZ);
netdev_features_t set_features;
enum macvlan_mode mode;
u16 flags;
unsigned int macaddr_count;
u32 bc_queue_len_req;
#ifdef CONFIG_NET_POLL_CONTROLLER
struct netpoll *netpoll;
#endif
};
static inline void macvlan_count_rx(const struct macvlan_dev *vlan,
unsigned int len, bool success,
bool multicast)
{
if (likely(success)) {
struct vlan_pcpu_stats *pcpu_stats;
pcpu_stats = get_cpu_ptr(vlan->pcpu_stats);
u64_stats_update_begin(&pcpu_stats->syncp);
u64_stats_inc(&pcpu_stats->rx_packets);
u64_stats_add(&pcpu_stats->rx_bytes, len);
if (multicast)
u64_stats_inc(&pcpu_stats->rx_multicast);
u64_stats_update_end(&pcpu_stats->syncp);
put_cpu_ptr(vlan->pcpu_stats);
} else {
this_cpu_inc(vlan->pcpu_stats->rx_errors);
}
}
extern void macvlan_common_setup(struct net_device *dev);
extern int macvlan_common_newlink(struct net *src_net, struct net_device *dev,
struct nlattr *tb[], struct nlattr *data[],
struct netlink_ext_ack *extack);
extern void macvlan_dellink(struct net_device *dev, struct list_head *head);
extern int macvlan_link_register(struct rtnl_link_ops *ops);
#if IS_ENABLED(CONFIG_MACVLAN)
static inline struct net_device *
macvlan_dev_real_dev(const struct net_device *dev)
{
struct macvlan_dev *macvlan = netdev_priv(dev);
return macvlan->lowerdev;
}
#else
static inline struct net_device *
macvlan_dev_real_dev(const struct net_device *dev)
{
BUG();
return NULL;
}
#endif
static inline void *macvlan_accel_priv(struct net_device *dev)
{
struct macvlan_dev *macvlan = netdev_priv(dev);
return macvlan->accel_priv;
}
static inline bool macvlan_supports_dest_filter(struct net_device *dev)
{
struct macvlan_dev *macvlan = netdev_priv(dev);
return macvlan->mode == MACVLAN_MODE_PRIVATE ||
macvlan->mode == MACVLAN_MODE_VEPA ||
macvlan->mode == MACVLAN_MODE_BRIDGE;
}
static inline int macvlan_release_l2fw_offload(struct net_device *dev)
{
struct macvlan_dev *macvlan = netdev_priv(dev);
macvlan->accel_priv = NULL;
return dev_uc_add(macvlan->lowerdev, dev->dev_addr);
}
#endif /* _LINUX_IF_MACVLAN_H */