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