/*
Copyright (C) 2021-2022 MaxLinear, Inc.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License, as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public
License along with this program; if not, see
.
SPDX-License-Identifier: GPL-2.0-or-later
*/
#ifndef _BR_COMPAT_H
#define _BR_COMPAT_H
#include
#include
#include
extern int br_compat_multicast_add_port(void *port);
extern void br_compat_multicast_del_port(void *port);
extern void br_compat_multicast_enable_port(void *port);
extern void br_compat_multicast_disable_port(void *port);
extern void br_compat_multicast_init(void *br);
extern void br_compat_multicast_open(void *br);
extern void br_compat_multicast_stop(void *br);
extern void br_compat_multicast_dev_del(void *br);
extern int br_compat_multicast_toggle(void *br, unsigned long val);
extern int br_compat_multicast_set_querier(void *br, unsigned long val);
extern int br_compat_multicast_set_hash_max(void *br, unsigned long val);
extern int br_compat_multicast_set_igmp_version(void *br, unsigned long val);
extern int br_compat_multicast_init_stats(void *br);
extern int br_compat_bridge_create(struct net_device *dev, void **br_data);
extern int br_compat_bridge_port_create(void* br_data, struct net_device *dev, void** br_port);
extern int br_compat_multicast_add_group(void *br_ptr, void* port_ptr, struct br_ip *group, const unsigned char *src);
extern int br_compat_multicast_leave_group(void *br_ptr, void* port_ptr, struct br_ip *group, const unsigned char *src);
extern int br_compat_set_port_flag(void *brcompat_data, unsigned long flag, unsigned long mask);
extern void br_compat_multicast_set_query_use_ifaddr(void *br, unsigned long val);
extern void br_compat_multicast_set_last_member_cnt(void *br, unsigned long val);
extern void br_compat_multicast_set_last_member_intvl(void *br, unsigned long val);
extern void br_compat_multicast_set_membership_intvl(void *br, unsigned long val);
extern void br_compat_multicast_set_query_intvl(void *br, unsigned long val);
extern void br_compat_multicast_set_query_response_intvl(void *br, unsigned long val);
extern int br_compat_get_port_flag(void *brcompat_data, unsigned long *flag, unsigned long mask);
extern void br_compat_multicast_get_querier(void *br, unsigned long *val);
extern void br_compat_multicast_get_igmp_version(void *br, unsigned long *val);
extern void br_compat_multicast_get_query_use_ifaddr(void *br, unsigned long *val);
extern void br_compat_multicast_get_last_member_cnt(void *br, unsigned long *val);
extern void br_compat_multicast_get_last_member_intvl(void *br, unsigned long *val);
extern void br_compat_multicast_get_membership_intvl(void *br, unsigned long *val);
extern void br_compat_multicast_get_query_intvl(void *br, unsigned long *val);
extern void br_compat_multicast_get_query_response_intvl(void *br, unsigned long *val);
extern int br_compat_multicast_fill_info(void *br, struct sk_buff *skb, const struct net_device *br_dev);
extern int br_compat_multicast_fill_slave_info(void *p, struct sk_buff *skb, const struct net_device *br_dev, const struct net_device *dev);
#if IS_ENABLED(CONFIG_IPV6)
extern int br_compat_multicast_set_mld_version(void *br, unsigned long val);
extern void br_compat_multicast_get_mld_version(void *br, unsigned long *val);
#endif
extern int br_compat_get_mtu_set_by_user(struct net_device *dev);
extern int br_compat_set_mtu_set_by_user(struct net_device *dev, int val);
/*
* This hook is used to get a struct net_bridge (cast required) from Open vSwitch device.
* brcompat module initializes this hook after loading.
*/
extern void *(*br_compat_get_bridge_hook)(struct net_device *dev);
extern struct net_bridge_port *(*ovs_port_get_rcu)(const struct net_device *dev);
#endif