blob: fa2eca6251298850e75cb06c34b85686cf8c4c91 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
2 * Linux ethernet bridge
3 *
4 * Authors:
5 * Lennert Buytenhek <buytenh@gnu.org>
6 *
Linus Torvalds1da177e2005-04-16 15:20:36 -07007 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version
10 * 2 of the License, or (at your option) any later version.
11 */
Linus Torvalds1da177e2005-04-16 15:20:36 -070012#ifndef _LINUX_IF_BRIDGE_H
13#define _LINUX_IF_BRIDGE_H
14
Linus Torvalds1da177e2005-04-16 15:20:36 -070015
16#include <linux/netdevice.h>
David Howells607ca462012-10-13 10:46:48 +010017#include <uapi/linux/if_bridge.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070018
Linus Lüssing07f8ac42014-06-07 18:26:28 +020019struct br_ip {
20 union {
21 __be32 ip4;
22#if IS_ENABLED(CONFIG_IPV6)
23 struct in6_addr ip6;
24#endif
25 } u;
26 __be16 proto;
27 __u16 vid;
28};
29
30struct br_ip_list {
31 struct list_head list;
32 struct br_ip addr;
33};
34
Eric W. Biederman881d9662007-09-17 11:56:21 -070035extern void brioctl_set(int (*ioctl_hook)(struct net *, unsigned int, void __user *));
Eric Dumazeta386f992010-11-15 06:38:11 +000036
Florian Westphal2f46e072011-01-11 23:55:51 +010037typedef int br_should_route_hook_t(struct sk_buff *skb);
Eric Dumazeta386f992010-11-15 06:38:11 +000038extern br_should_route_hook_t __rcu *br_should_route_hook;
Linus Lüssingf941a6d2014-07-07 05:41:16 +020039
Scott Feldmancf6b8e12014-11-28 14:34:21 +010040#if IS_ENABLED(CONFIG_BRIDGE)
41int br_fdb_external_learn_add(struct net_device *dev,
42 const unsigned char *addr, u16 vid);
43int br_fdb_external_learn_del(struct net_device *dev,
44 const unsigned char *addr, u16 vid);
45#else
46static inline int br_fdb_external_learn_add(struct net_device *dev,
47 const unsigned char *addr, u16 vid)
48{
49 return 0;
50}
51static inline int br_fdb_external_learn_del(struct net_device *dev,
52 const unsigned char *addr, u16 vid)
53{
54 return 0;
55}
56#endif
57
Linus Lüssingf941a6d2014-07-07 05:41:16 +020058#if IS_ENABLED(CONFIG_BRIDGE) && IS_ENABLED(CONFIG_BRIDGE_IGMP_SNOOPING)
Linus Lüssing07f8ac42014-06-07 18:26:28 +020059int br_multicast_list_adjacent(struct net_device *dev,
60 struct list_head *br_ip_list);
Linus Lüssingc34963e2014-07-07 05:41:17 +020061bool br_multicast_has_querier_anywhere(struct net_device *dev, int proto);
Linus Lüssing2cd41432014-06-07 18:26:29 +020062bool br_multicast_has_querier_adjacent(struct net_device *dev, int proto);
Linus Lüssingf941a6d2014-07-07 05:41:16 +020063#else
64static inline int br_multicast_list_adjacent(struct net_device *dev,
65 struct list_head *br_ip_list)
66{
67 return 0;
68}
Linus Lüssingc34963e2014-07-07 05:41:17 +020069static inline bool br_multicast_has_querier_anywhere(struct net_device *dev,
70 int proto)
71{
72 return false;
73}
Linus Lüssingf941a6d2014-07-07 05:41:16 +020074static inline bool br_multicast_has_querier_adjacent(struct net_device *dev,
75 int proto)
76{
77 return false;
78}
79#endif
Linus Torvalds1da177e2005-04-16 15:20:36 -070080
81#endif