1 /* 2 * include/net/switchdev.h - Switch device API 3 * Copyright (c) 2014 Jiri Pirko <jiri@resnulli.us> 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 2 of the License, or 8 * (at your option) any later version. 9 */ 10 #ifndef _LINUX_SWITCHDEV_H_ 11 #define _LINUX_SWITCHDEV_H_ 12 13 #include <linux/netdevice.h> 14 #include <linux/notifier.h> 15 16 enum netdev_switch_notifier_type { 17 NETDEV_SWITCH_FDB_ADD = 1, 18 NETDEV_SWITCH_FDB_DEL, 19 }; 20 21 struct netdev_switch_notifier_info { 22 struct net_device *dev; 23 }; 24 25 struct netdev_switch_notifier_fdb_info { 26 struct netdev_switch_notifier_info info; /* must be first */ 27 const unsigned char *addr; 28 u16 vid; 29 }; 30 31 static inline struct net_device * 32 netdev_switch_notifier_info_to_dev(const struct netdev_switch_notifier_info *info) 33 { 34 return info->dev; 35 } 36 37 #ifdef CONFIG_NET_SWITCHDEV 38 39 int netdev_switch_parent_id_get(struct net_device *dev, 40 struct netdev_phys_item_id *psid); 41 int netdev_switch_port_stp_update(struct net_device *dev, u8 state); 42 int register_netdev_switch_notifier(struct notifier_block *nb); 43 int unregister_netdev_switch_notifier(struct notifier_block *nb); 44 int call_netdev_switch_notifiers(unsigned long val, struct net_device *dev, 45 struct netdev_switch_notifier_info *info); 46 int netdev_switch_port_bridge_setlink(struct net_device *dev, 47 struct nlmsghdr *nlh, u16 flags); 48 int netdev_switch_port_bridge_dellink(struct net_device *dev, 49 struct nlmsghdr *nlh, u16 flags); 50 int ndo_dflt_netdev_switch_port_bridge_dellink(struct net_device *dev, 51 struct nlmsghdr *nlh, u16 flags); 52 int ndo_dflt_netdev_switch_port_bridge_setlink(struct net_device *dev, 53 struct nlmsghdr *nlh, u16 flags); 54 #else 55 56 static inline int netdev_switch_parent_id_get(struct net_device *dev, 57 struct netdev_phys_item_id *psid) 58 { 59 return -EOPNOTSUPP; 60 } 61 62 static inline int netdev_switch_port_stp_update(struct net_device *dev, 63 u8 state) 64 { 65 return -EOPNOTSUPP; 66 } 67 68 static inline int register_netdev_switch_notifier(struct notifier_block *nb) 69 { 70 return 0; 71 } 72 73 static inline int unregister_netdev_switch_notifier(struct notifier_block *nb) 74 { 75 return 0; 76 } 77 78 static inline int call_netdev_switch_notifiers(unsigned long val, struct net_device *dev, 79 struct netdev_switch_notifier_info *info) 80 { 81 return NOTIFY_DONE; 82 } 83 84 static inline int netdev_switch_port_bridge_setlink(struct net_device *dev, 85 struct nlmsghdr *nlh, 86 u16 flags) 87 { 88 return -EOPNOTSUPP; 89 } 90 91 static inline int netdev_switch_port_bridge_dellink(struct net_device *dev, 92 struct nlmsghdr *nlh, 93 u16 flags) 94 { 95 return -EOPNOTSUPP; 96 } 97 98 static inline int ndo_dflt_netdev_switch_port_bridge_dellink(struct net_device *dev, 99 struct nlmsghdr *nlh, 100 u16 flags) 101 { 102 return 0; 103 } 104 105 static inline int ndo_dflt_netdev_switch_port_bridge_setlink(struct net_device *dev, 106 struct nlmsghdr *nlh, 107 u16 flags) 108 { 109 return 0; 110 } 111 112 #endif 113 114 #endif /* _LINUX_SWITCHDEV_H_ */ 115