#include <linux/kernel.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/neighbour.h>
#include <net/arp.h>
#include <linux/if_vlan.h>
#include <linux/inetdevice.h>
#include <net/addrconf.h>
#include <net/ipv6_stubs.h>
#if IS_ENABLED(CONFIG_IPV6)
#include <net/ip6_checksum.h>
#endif
#include "br_private.h"
void br_recalculate_neigh_suppress_enabled(struct net_bridge *br)
{ … }
#if IS_ENABLED(CONFIG_INET)
static void br_arp_send(struct net_bridge *br, struct net_bridge_port *p,
struct net_device *dev, __be32 dest_ip, __be32 src_ip,
const unsigned char *dest_hw,
const unsigned char *src_hw,
const unsigned char *target_hw,
__be16 vlan_proto, u16 vlan_tci)
{ … }
static int br_chk_addr_ip(struct net_device *dev,
struct netdev_nested_priv *priv)
{ … }
static bool br_is_local_ip(struct net_device *dev, __be32 ip)
{ … }
void br_do_proxy_suppress_arp(struct sk_buff *skb, struct net_bridge *br,
u16 vid, struct net_bridge_port *p)
{ … }
#endif
#if IS_ENABLED(CONFIG_IPV6)
struct nd_msg *br_is_nd_neigh_msg(struct sk_buff *skb, struct nd_msg *msg)
{ … }
static void br_nd_send(struct net_bridge *br, struct net_bridge_port *p,
struct sk_buff *request, struct neighbour *n,
__be16 vlan_proto, u16 vlan_tci, struct nd_msg *ns)
{ … }
static int br_chk_addr_ip6(struct net_device *dev,
struct netdev_nested_priv *priv)
{ … }
static bool br_is_local_ip6(struct net_device *dev, struct in6_addr *addr)
{ … }
void br_do_suppress_nd(struct sk_buff *skb, struct net_bridge *br,
u16 vid, struct net_bridge_port *p, struct nd_msg *msg)
{ … }
#endif
bool br_is_neigh_suppress_enabled(const struct net_bridge_port *p, u16 vid)
{ … }