| 
									
										
										
										
											2013-02-08 17:17:06 +00:00
										 |  |  | #ifndef _NET_MRP_H
 | 
					
						
							|  |  |  | #define _NET_MRP_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define MRP_END_MARK		0x0
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct mrp_pdu_hdr { | 
					
						
							|  |  |  | 	u8	version; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct mrp_msg_hdr { | 
					
						
							|  |  |  | 	u8	attrtype; | 
					
						
							|  |  |  | 	u8	attrlen; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct mrp_vecattr_hdr { | 
					
						
							|  |  |  | 	__be16	lenflags; | 
					
						
							|  |  |  | 	unsigned char	firstattrvalue[]; | 
					
						
							|  |  |  | #define MRP_VECATTR_HDR_LEN_MASK cpu_to_be16(0x1FFF)
 | 
					
						
							|  |  |  | #define MRP_VECATTR_HDR_FLAG_LA cpu_to_be16(0x2000)
 | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | enum mrp_vecattr_event { | 
					
						
							|  |  |  | 	MRP_VECATTR_EVENT_NEW, | 
					
						
							|  |  |  | 	MRP_VECATTR_EVENT_JOIN_IN, | 
					
						
							|  |  |  | 	MRP_VECATTR_EVENT_IN, | 
					
						
							|  |  |  | 	MRP_VECATTR_EVENT_JOIN_MT, | 
					
						
							|  |  |  | 	MRP_VECATTR_EVENT_MT, | 
					
						
							|  |  |  | 	MRP_VECATTR_EVENT_LV, | 
					
						
							|  |  |  | 	__MRP_VECATTR_EVENT_MAX | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct mrp_skb_cb { | 
					
						
							|  |  |  | 	struct mrp_msg_hdr	*mh; | 
					
						
							|  |  |  | 	struct mrp_vecattr_hdr	*vah; | 
					
						
							|  |  |  | 	unsigned char		attrvalue[]; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline struct mrp_skb_cb *mrp_cb(struct sk_buff *skb) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	BUILD_BUG_ON(sizeof(struct mrp_skb_cb) > | 
					
						
							|  |  |  | 		     FIELD_SIZEOF(struct sk_buff, cb)); | 
					
						
							|  |  |  | 	return (struct mrp_skb_cb *)skb->cb; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | enum mrp_applicant_state { | 
					
						
							|  |  |  | 	MRP_APPLICANT_INVALID, | 
					
						
							|  |  |  | 	MRP_APPLICANT_VO, | 
					
						
							|  |  |  | 	MRP_APPLICANT_VP, | 
					
						
							|  |  |  | 	MRP_APPLICANT_VN, | 
					
						
							|  |  |  | 	MRP_APPLICANT_AN, | 
					
						
							|  |  |  | 	MRP_APPLICANT_AA, | 
					
						
							|  |  |  | 	MRP_APPLICANT_QA, | 
					
						
							|  |  |  | 	MRP_APPLICANT_LA, | 
					
						
							|  |  |  | 	MRP_APPLICANT_AO, | 
					
						
							|  |  |  | 	MRP_APPLICANT_QO, | 
					
						
							|  |  |  | 	MRP_APPLICANT_AP, | 
					
						
							|  |  |  | 	MRP_APPLICANT_QP, | 
					
						
							|  |  |  | 	__MRP_APPLICANT_MAX | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | #define MRP_APPLICANT_MAX	(__MRP_APPLICANT_MAX - 1)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | enum mrp_event { | 
					
						
							|  |  |  | 	MRP_EVENT_NEW, | 
					
						
							|  |  |  | 	MRP_EVENT_JOIN, | 
					
						
							|  |  |  | 	MRP_EVENT_LV, | 
					
						
							|  |  |  | 	MRP_EVENT_TX, | 
					
						
							|  |  |  | 	MRP_EVENT_R_NEW, | 
					
						
							|  |  |  | 	MRP_EVENT_R_JOIN_IN, | 
					
						
							|  |  |  | 	MRP_EVENT_R_IN, | 
					
						
							|  |  |  | 	MRP_EVENT_R_JOIN_MT, | 
					
						
							|  |  |  | 	MRP_EVENT_R_MT, | 
					
						
							|  |  |  | 	MRP_EVENT_R_LV, | 
					
						
							|  |  |  | 	MRP_EVENT_R_LA, | 
					
						
							|  |  |  | 	MRP_EVENT_REDECLARE, | 
					
						
							|  |  |  | 	MRP_EVENT_PERIODIC, | 
					
						
							|  |  |  | 	__MRP_EVENT_MAX | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | #define MRP_EVENT_MAX		(__MRP_EVENT_MAX - 1)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | enum mrp_tx_action { | 
					
						
							|  |  |  | 	MRP_TX_ACTION_NONE, | 
					
						
							|  |  |  | 	MRP_TX_ACTION_S_NEW, | 
					
						
							|  |  |  | 	MRP_TX_ACTION_S_JOIN_IN, | 
					
						
							|  |  |  | 	MRP_TX_ACTION_S_JOIN_IN_OPTIONAL, | 
					
						
							|  |  |  | 	MRP_TX_ACTION_S_IN_OPTIONAL, | 
					
						
							|  |  |  | 	MRP_TX_ACTION_S_LV, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct mrp_attr { | 
					
						
							|  |  |  | 	struct rb_node			node; | 
					
						
							|  |  |  | 	enum mrp_applicant_state	state; | 
					
						
							|  |  |  | 	u8				type; | 
					
						
							|  |  |  | 	u8				len; | 
					
						
							|  |  |  | 	unsigned char			value[]; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | enum mrp_applications { | 
					
						
							|  |  |  | 	MRP_APPLICATION_MVRP, | 
					
						
							|  |  |  | 	__MRP_APPLICATION_MAX | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | #define MRP_APPLICATION_MAX	(__MRP_APPLICATION_MAX - 1)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct mrp_application { | 
					
						
							|  |  |  | 	enum mrp_applications	type; | 
					
						
							|  |  |  | 	unsigned int		maxattr; | 
					
						
							|  |  |  | 	struct packet_type	pkttype; | 
					
						
							|  |  |  | 	unsigned char		group_address[ETH_ALEN]; | 
					
						
							|  |  |  | 	u8			version; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct mrp_applicant { | 
					
						
							|  |  |  | 	struct mrp_application	*app; | 
					
						
							|  |  |  | 	struct net_device	*dev; | 
					
						
							|  |  |  | 	struct timer_list	join_timer; | 
					
						
							| 
									
										
										
										
											2013-09-18 12:24:40 -07:00
										 |  |  | 	struct timer_list	periodic_timer; | 
					
						
							| 
									
										
										
										
											2013-02-08 17:17:06 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	spinlock_t		lock; | 
					
						
							|  |  |  | 	struct sk_buff_head	queue; | 
					
						
							|  |  |  | 	struct sk_buff		*pdu; | 
					
						
							|  |  |  | 	struct rb_root		mad; | 
					
						
							|  |  |  | 	struct rcu_head		rcu; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct mrp_port { | 
					
						
							|  |  |  | 	struct mrp_applicant __rcu	*applicants[MRP_APPLICATION_MAX + 1]; | 
					
						
							|  |  |  | 	struct rcu_head			rcu; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-21 10:22:46 -07:00
										 |  |  | int mrp_register_application(struct mrp_application *app); | 
					
						
							|  |  |  | void mrp_unregister_application(struct mrp_application *app); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int mrp_init_applicant(struct net_device *dev, struct mrp_application *app); | 
					
						
							|  |  |  | void mrp_uninit_applicant(struct net_device *dev, struct mrp_application *app); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int mrp_request_join(const struct net_device *dev, | 
					
						
							|  |  |  | 		     const struct mrp_application *app, | 
					
						
							|  |  |  | 		     const void *value, u8 len, u8 type); | 
					
						
							|  |  |  | void mrp_request_leave(const struct net_device *dev, | 
					
						
							|  |  |  | 		       const struct mrp_application *app, | 
					
						
							|  |  |  | 		       const void *value, u8 len, u8 type); | 
					
						
							| 
									
										
										
										
											2013-02-08 17:17:06 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #endif /* _NET_MRP_H */
 |