| 
									
										
										
										
											2014-11-28 14:34:17 +01: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-15 23:49:36 +01:00
										 |  |  | #include <linux/notifier.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-15 23:49:37 +01:00
										 |  |  | enum netdev_switch_notifier_type { | 
					
						
							|  |  |  | 	NETDEV_SWITCH_FDB_ADD = 1, | 
					
						
							|  |  |  | 	NETDEV_SWITCH_FDB_DEL, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-15 23:49:36 +01:00
										 |  |  | struct netdev_switch_notifier_info { | 
					
						
							|  |  |  | 	struct net_device *dev; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-15 23:49:37 +01:00
										 |  |  | struct netdev_switch_notifier_fdb_info { | 
					
						
							|  |  |  | 	struct netdev_switch_notifier_info info; /* must be first */ | 
					
						
							|  |  |  | 	const unsigned char *addr; | 
					
						
							|  |  |  | 	u16 vid; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-15 23:49:36 +01: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 14:34:17 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifdef CONFIG_NET_SWITCHDEV
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int netdev_switch_parent_id_get(struct net_device *dev, | 
					
						
							|  |  |  | 				struct netdev_phys_item_id *psid); | 
					
						
							| 
									
										
										
										
											2014-11-28 14:34:20 +01:00
										 |  |  | int netdev_switch_port_stp_update(struct net_device *dev, u8 state); | 
					
						
							| 
									
										
										
										
											2015-01-15 23:49:36 +01: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-29 22:40:13 -08: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); | 
					
						
							| 
									
										
										
										
											2014-11-28 14:34:17 +01: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 14:34:20 +01:00
										 |  |  | static inline int netdev_switch_port_stp_update(struct net_device *dev, | 
					
						
							|  |  |  | 						u8 state) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return -EOPNOTSUPP; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-15 23:49:36 +01: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 10:25:56 +01:00
										 |  |  | 					       struct netdev_switch_notifier_info *info) | 
					
						
							| 
									
										
										
										
											2015-01-15 23:49:36 +01:00
										 |  |  | { | 
					
						
							|  |  |  | 	return NOTIFY_DONE; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-29 22:40:13 -08: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; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-28 14:34:17 +01:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif /* _LINUX_SWITCHDEV_H_ */
 |