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 12struct vtunnel_info { 13 u32 tunid; 14 u16 vid; 15 u16 flags; 16}; 17 18/* br_netlink_tunnel.c */ 19int br_parse_vlan_tunnel_info(struct nlattr *attr, 20 struct vtunnel_info *tinfo); 21int 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); 27int br_get_vlan_tunnel_info_size(struct net_bridge_vlan_group *vg); 28int br_fill_vlan_tunnel_info(struct sk_buff *skb, 29 struct net_bridge_vlan_group *vg); 30bool vlan_tunid_inrange(const struct net_bridge_vlan *v_curr, 31 const struct net_bridge_vlan *v_last); 32int br_vlan_tunnel_info(const struct net_bridge_port *p, int cmd, 33 u16 vid, u32 tun_id, bool *changed); 34 35#ifdef CONFIG_BRIDGE_VLAN_FILTERING 36/* br_vlan_tunnel.c */ 37int vlan_tunnel_init(struct net_bridge_vlan_group *vg); 38void vlan_tunnel_deinit(struct net_bridge_vlan_group *vg); 39int nbp_vlan_tunnel_info_delete(const struct net_bridge_port *port, u16 vid); 40int nbp_vlan_tunnel_info_add(const struct net_bridge_port *port, u16 vid, 41 u32 tun_id); 42void nbp_vlan_tunnel_info_flush(struct net_bridge_port *port); 43void vlan_tunnel_info_del(struct net_bridge_vlan_group *vg, 44 struct net_bridge_vlan *vlan); 45void br_handle_ingress_vlan_tunnel(struct sk_buff *skb, 46 struct net_bridge_port *p, 47 struct net_bridge_vlan_group *vg); 48int br_handle_egress_vlan_tunnel(struct sk_buff *skb, 49 struct net_bridge_vlan *vlan); 50#else 51static inline int vlan_tunnel_init(struct net_bridge_vlan_group *vg) 52{ 53 return 0; 54} 55 56static inline int nbp_vlan_tunnel_info_delete(const struct net_bridge_port *port, 57 u16 vid) 58{ 59 return 0; 60} 61 62static 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 68static inline void nbp_vlan_tunnel_info_flush(struct net_bridge_port *port) 69{ 70} 71 72static inline void vlan_tunnel_info_del(struct net_bridge_vlan_group *vg, 73 struct net_bridge_vlan *vlan) 74{ 75} 76 77static 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