1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun * Bridge per vlan tunnels
4*4882a593Smuzhiyun *
5*4882a593Smuzhiyun * Authors:
6*4882a593Smuzhiyun * Roopa Prabhu <roopa@cumulusnetworks.com>
7*4882a593Smuzhiyun */
8*4882a593Smuzhiyun
9*4882a593Smuzhiyun #ifndef _BR_PRIVATE_TUNNEL_H
10*4882a593Smuzhiyun #define _BR_PRIVATE_TUNNEL_H
11*4882a593Smuzhiyun
12*4882a593Smuzhiyun struct vtunnel_info {
13*4882a593Smuzhiyun u32 tunid;
14*4882a593Smuzhiyun u16 vid;
15*4882a593Smuzhiyun u16 flags;
16*4882a593Smuzhiyun };
17*4882a593Smuzhiyun
18*4882a593Smuzhiyun /* br_netlink_tunnel.c */
19*4882a593Smuzhiyun int br_parse_vlan_tunnel_info(struct nlattr *attr,
20*4882a593Smuzhiyun struct vtunnel_info *tinfo);
21*4882a593Smuzhiyun int br_process_vlan_tunnel_info(const struct net_bridge *br,
22*4882a593Smuzhiyun const struct net_bridge_port *p,
23*4882a593Smuzhiyun int cmd,
24*4882a593Smuzhiyun struct vtunnel_info *tinfo_curr,
25*4882a593Smuzhiyun struct vtunnel_info *tinfo_last,
26*4882a593Smuzhiyun bool *changed);
27*4882a593Smuzhiyun int br_get_vlan_tunnel_info_size(struct net_bridge_vlan_group *vg);
28*4882a593Smuzhiyun int br_fill_vlan_tunnel_info(struct sk_buff *skb,
29*4882a593Smuzhiyun struct net_bridge_vlan_group *vg);
30*4882a593Smuzhiyun
31*4882a593Smuzhiyun #ifdef CONFIG_BRIDGE_VLAN_FILTERING
32*4882a593Smuzhiyun /* br_vlan_tunnel.c */
33*4882a593Smuzhiyun int vlan_tunnel_init(struct net_bridge_vlan_group *vg);
34*4882a593Smuzhiyun void vlan_tunnel_deinit(struct net_bridge_vlan_group *vg);
35*4882a593Smuzhiyun int nbp_vlan_tunnel_info_delete(const struct net_bridge_port *port, u16 vid);
36*4882a593Smuzhiyun int nbp_vlan_tunnel_info_add(const struct net_bridge_port *port, u16 vid,
37*4882a593Smuzhiyun u32 tun_id);
38*4882a593Smuzhiyun void nbp_vlan_tunnel_info_flush(struct net_bridge_port *port);
39*4882a593Smuzhiyun void vlan_tunnel_info_del(struct net_bridge_vlan_group *vg,
40*4882a593Smuzhiyun struct net_bridge_vlan *vlan);
41*4882a593Smuzhiyun int br_handle_ingress_vlan_tunnel(struct sk_buff *skb,
42*4882a593Smuzhiyun struct net_bridge_port *p,
43*4882a593Smuzhiyun struct net_bridge_vlan_group *vg);
44*4882a593Smuzhiyun int br_handle_egress_vlan_tunnel(struct sk_buff *skb,
45*4882a593Smuzhiyun struct net_bridge_vlan *vlan);
46*4882a593Smuzhiyun bool vlan_tunid_inrange(const struct net_bridge_vlan *v_curr,
47*4882a593Smuzhiyun const struct net_bridge_vlan *v_last);
48*4882a593Smuzhiyun int br_vlan_tunnel_info(const struct net_bridge_port *p, int cmd,
49*4882a593Smuzhiyun u16 vid, u32 tun_id, bool *changed);
50*4882a593Smuzhiyun #else
vlan_tunnel_init(struct net_bridge_vlan_group * vg)51*4882a593Smuzhiyun static inline int vlan_tunnel_init(struct net_bridge_vlan_group *vg)
52*4882a593Smuzhiyun {
53*4882a593Smuzhiyun return 0;
54*4882a593Smuzhiyun }
55*4882a593Smuzhiyun
nbp_vlan_tunnel_info_delete(const struct net_bridge_port * port,u16 vid)56*4882a593Smuzhiyun static inline int nbp_vlan_tunnel_info_delete(const struct net_bridge_port *port,
57*4882a593Smuzhiyun u16 vid)
58*4882a593Smuzhiyun {
59*4882a593Smuzhiyun return 0;
60*4882a593Smuzhiyun }
61*4882a593Smuzhiyun
nbp_vlan_tunnel_info_add(const struct net_bridge_port * port,u16 vid,u32 tun_id)62*4882a593Smuzhiyun static inline int nbp_vlan_tunnel_info_add(const struct net_bridge_port *port,
63*4882a593Smuzhiyun u16 vid, u32 tun_id)
64*4882a593Smuzhiyun {
65*4882a593Smuzhiyun return 0;
66*4882a593Smuzhiyun }
67*4882a593Smuzhiyun
nbp_vlan_tunnel_info_flush(struct net_bridge_port * port)68*4882a593Smuzhiyun static inline void nbp_vlan_tunnel_info_flush(struct net_bridge_port *port)
69*4882a593Smuzhiyun {
70*4882a593Smuzhiyun }
71*4882a593Smuzhiyun
vlan_tunnel_info_del(struct net_bridge_vlan_group * vg,struct net_bridge_vlan * vlan)72*4882a593Smuzhiyun static inline void vlan_tunnel_info_del(struct net_bridge_vlan_group *vg,
73*4882a593Smuzhiyun struct net_bridge_vlan *vlan)
74*4882a593Smuzhiyun {
75*4882a593Smuzhiyun }
76*4882a593Smuzhiyun
br_handle_ingress_vlan_tunnel(struct sk_buff * skb,struct net_bridge_port * p,struct net_bridge_vlan_group * vg)77*4882a593Smuzhiyun static inline int br_handle_ingress_vlan_tunnel(struct sk_buff *skb,
78*4882a593Smuzhiyun struct net_bridge_port *p,
79*4882a593Smuzhiyun struct net_bridge_vlan_group *vg)
80*4882a593Smuzhiyun {
81*4882a593Smuzhiyun return 0;
82*4882a593Smuzhiyun }
83*4882a593Smuzhiyun #endif
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun #endif
86