2014-11-28 16:34:17 +03:00
/*
* include / net / switchdev . h - Switch device API
* Copyright ( c ) 2014 Jiri Pirko < jiri @ resnulli . us >
*
* 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 .
*/
# ifndef _LINUX_SWITCHDEV_H_
# define _LINUX_SWITCHDEV_H_
# include <linux/netdevice.h>
2015-01-16 01:49:36 +03:00
# include <linux/notifier.h>
2015-01-16 01:49:37 +03:00
enum netdev_switch_notifier_type {
NETDEV_SWITCH_FDB_ADD = 1 ,
NETDEV_SWITCH_FDB_DEL ,
} ;
2015-01-16 01:49:36 +03:00
struct netdev_switch_notifier_info {
struct net_device * dev ;
} ;
2015-01-16 01:49:37 +03:00
struct netdev_switch_notifier_fdb_info {
struct netdev_switch_notifier_info info ; /* must be first */
const unsigned char * addr ;
u16 vid ;
} ;
2015-01-16 01:49:36 +03:00
static inline struct net_device *
netdev_switch_notifier_info_to_dev ( const struct netdev_switch_notifier_info * info )
{
return info - > dev ;
}
2014-11-28 16:34:17 +03:00
# ifdef CONFIG_NET_SWITCHDEV
int netdev_switch_parent_id_get ( struct net_device * dev ,
struct netdev_phys_item_id * psid ) ;
2014-11-28 16:34:20 +03:00
int netdev_switch_port_stp_update ( struct net_device * dev , u8 state ) ;
2015-01-16 01:49:36 +03:00
int register_netdev_switch_notifier ( struct notifier_block * nb ) ;
int unregister_netdev_switch_notifier ( struct notifier_block * nb ) ;
int call_netdev_switch_notifiers ( unsigned long val , struct net_device * dev ,
struct netdev_switch_notifier_info * info ) ;
2015-01-30 09:40:13 +03:00
int netdev_switch_port_bridge_setlink ( struct net_device * dev ,
struct nlmsghdr * nlh , u16 flags ) ;
int netdev_switch_port_bridge_dellink ( struct net_device * dev ,
struct nlmsghdr * nlh , u16 flags ) ;
int ndo_dflt_netdev_switch_port_bridge_dellink ( struct net_device * dev ,
struct nlmsghdr * nlh , u16 flags ) ;
int ndo_dflt_netdev_switch_port_bridge_setlink ( struct net_device * dev ,
struct nlmsghdr * nlh , u16 flags ) ;
2015-03-06 08:21:15 +03:00
int netdev_switch_fib_ipv4_add ( u32 dst , int dst_len , struct fib_info * fi ,
u8 tos , u8 type , u32 tb_id ) ;
int netdev_switch_fib_ipv4_del ( u32 dst , int dst_len , struct fib_info * fi ,
u8 tos , u8 type , u32 tb_id ) ;
2014-11-28 16:34:17 +03:00
# else
static inline int netdev_switch_parent_id_get ( struct net_device * dev ,
struct netdev_phys_item_id * psid )
{
return - EOPNOTSUPP ;
}
2014-11-28 16:34:20 +03:00
static inline int netdev_switch_port_stp_update ( struct net_device * dev ,
u8 state )
{
return - EOPNOTSUPP ;
}
2015-01-16 01:49:36 +03:00
static inline int register_netdev_switch_notifier ( struct notifier_block * nb )
{
return 0 ;
}
static inline int unregister_netdev_switch_notifier ( struct notifier_block * nb )
{
return 0 ;
}
static inline int call_netdev_switch_notifiers ( unsigned long val , struct net_device * dev ,
2015-01-18 12:25:56 +03:00
struct netdev_switch_notifier_info * info )
2015-01-16 01:49:36 +03:00
{
return NOTIFY_DONE ;
}
2015-01-30 09:40:13 +03:00
static inline int netdev_switch_port_bridge_setlink ( struct net_device * dev ,
struct nlmsghdr * nlh ,
u16 flags )
{
return - EOPNOTSUPP ;
}
static inline int netdev_switch_port_bridge_dellink ( struct net_device * dev ,
struct nlmsghdr * nlh ,
u16 flags )
{
return - EOPNOTSUPP ;
}
static inline int ndo_dflt_netdev_switch_port_bridge_dellink ( struct net_device * dev ,
struct nlmsghdr * nlh ,
u16 flags )
{
return 0 ;
}
static inline int ndo_dflt_netdev_switch_port_bridge_setlink ( struct net_device * dev ,
struct nlmsghdr * nlh ,
u16 flags )
{
return 0 ;
}
2015-03-06 08:21:15 +03:00
static inline int netdev_switch_fib_ipv4_add ( u32 dst , int dst_len ,
struct fib_info * fi ,
u8 tos , u8 type , u32 tb_id )
{
return 0 ;
}
static inline int netdev_switch_fib_ipv4_del ( u32 dst , int dst_len ,
struct fib_info * fi ,
u8 tos , u8 type , u32 tb_id )
{
return 0 ;
}
2014-11-28 16:34:17 +03:00
# endif
# endif /* _LINUX_SWITCHDEV_H_ */