Linux Audio

Check our new training course

Loading...
  1#ifndef _NET_GARP_H
  2#define _NET_GARP_H
  3
  4#include <net/stp.h>
  5
  6#define GARP_PROTOCOL_ID	0x1
  7#define GARP_END_MARK		0x0
  8
  9struct garp_pdu_hdr {
 10	__be16	protocol;
 11};
 12
 13struct garp_msg_hdr {
 14	u8	attrtype;
 15};
 16
 17enum garp_attr_event {
 18	GARP_LEAVE_ALL,
 19	GARP_JOIN_EMPTY,
 20	GARP_JOIN_IN,
 21	GARP_LEAVE_EMPTY,
 22	GARP_LEAVE_IN,
 23	GARP_EMPTY,
 24};
 25
 26struct garp_attr_hdr {
 27	u8	len;
 28	u8	event;
 29	u8	data[];
 30};
 31
 32struct garp_skb_cb {
 33	u8	cur_type;
 34};
 35
 36static inline struct garp_skb_cb *garp_cb(struct sk_buff *skb)
 37{
 38	BUILD_BUG_ON(sizeof(struct garp_skb_cb) >
 39		     FIELD_SIZEOF(struct sk_buff, cb));
 40	return (struct garp_skb_cb *)skb->cb;
 41}
 42
 43enum garp_applicant_state {
 44	GARP_APPLICANT_INVALID,
 45	GARP_APPLICANT_VA,
 46	GARP_APPLICANT_AA,
 47	GARP_APPLICANT_QA,
 48	GARP_APPLICANT_LA,
 49	GARP_APPLICANT_VP,
 50	GARP_APPLICANT_AP,
 51	GARP_APPLICANT_QP,
 52	GARP_APPLICANT_VO,
 53	GARP_APPLICANT_AO,
 54	GARP_APPLICANT_QO,
 55	__GARP_APPLICANT_MAX
 56};
 57#define GARP_APPLICANT_MAX	(__GARP_APPLICANT_MAX - 1)
 58
 59enum garp_event {
 60	GARP_EVENT_REQ_JOIN,
 61	GARP_EVENT_REQ_LEAVE,
 62	GARP_EVENT_R_JOIN_IN,
 63	GARP_EVENT_R_JOIN_EMPTY,
 64	GARP_EVENT_R_EMPTY,
 65	GARP_EVENT_R_LEAVE_IN,
 66	GARP_EVENT_R_LEAVE_EMPTY,
 67	GARP_EVENT_TRANSMIT_PDU,
 68	__GARP_EVENT_MAX
 69};
 70#define GARP_EVENT_MAX		(__GARP_EVENT_MAX - 1)
 71
 72enum garp_action {
 73	GARP_ACTION_NONE,
 74	GARP_ACTION_S_JOIN_IN,
 75	GARP_ACTION_S_LEAVE_EMPTY,
 76};
 77
 78struct garp_attr {
 79	struct rb_node			node;
 80	enum garp_applicant_state	state;
 81	u8				type;
 82	u8				dlen;
 83	unsigned char			data[];
 84};
 85
 86enum garp_applications {
 87	GARP_APPLICATION_GVRP,
 88	__GARP_APPLICATION_MAX
 89};
 90#define GARP_APPLICATION_MAX	(__GARP_APPLICATION_MAX - 1)
 91
 92struct garp_application {
 93	enum garp_applications	type;
 94	unsigned int		maxattr;
 95	struct stp_proto	proto;
 96};
 97
 98struct garp_applicant {
 99	struct garp_application	*app;
100	struct net_device	*dev;
101	struct timer_list	join_timer;
102
103	spinlock_t		lock;
104	struct sk_buff_head	queue;
105	struct sk_buff		*pdu;
106	struct rb_root		gid;
107	struct rcu_head		rcu;
108};
109
110struct garp_port {
111	struct garp_applicant __rcu	*applicants[GARP_APPLICATION_MAX + 1];
112	struct rcu_head			rcu;
113};
114
115int garp_register_application(struct garp_application *app);
116void garp_unregister_application(struct garp_application *app);
117
118int garp_init_applicant(struct net_device *dev, struct garp_application *app);
119void garp_uninit_applicant(struct net_device *dev,
120			   struct garp_application *app);
121
122int garp_request_join(const struct net_device *dev,
123		      const struct garp_application *app, const void *data,
124		      u8 len, u8 type);
125void garp_request_leave(const struct net_device *dev,
126			const struct garp_application *app,
127			const void *data, u8 len, u8 type);
128
129#endif /* _NET_GARP_H */
  1/* SPDX-License-Identifier: GPL-2.0 */
  2#ifndef _NET_GARP_H
  3#define _NET_GARP_H
  4
  5#include <linux/if_ether.h>
  6#include <linux/types.h>
  7#include <net/stp.h>
  8
  9#define GARP_PROTOCOL_ID	0x1
 10#define GARP_END_MARK		0x0
 11
 12struct garp_pdu_hdr {
 13	__be16	protocol;
 14};
 15
 16struct garp_msg_hdr {
 17	u8	attrtype;
 18};
 19
 20enum garp_attr_event {
 21	GARP_LEAVE_ALL,
 22	GARP_JOIN_EMPTY,
 23	GARP_JOIN_IN,
 24	GARP_LEAVE_EMPTY,
 25	GARP_LEAVE_IN,
 26	GARP_EMPTY,
 27};
 28
 29struct garp_attr_hdr {
 30	u8	len;
 31	u8	event;
 32	u8	data[];
 33};
 34
 35struct garp_skb_cb {
 36	u8	cur_type;
 37};
 38
 39static inline struct garp_skb_cb *garp_cb(struct sk_buff *skb)
 40{
 41	BUILD_BUG_ON(sizeof(struct garp_skb_cb) >
 42		     sizeof_field(struct sk_buff, cb));
 43	return (struct garp_skb_cb *)skb->cb;
 44}
 45
 46enum garp_applicant_state {
 47	GARP_APPLICANT_INVALID,
 48	GARP_APPLICANT_VA,
 49	GARP_APPLICANT_AA,
 50	GARP_APPLICANT_QA,
 51	GARP_APPLICANT_LA,
 52	GARP_APPLICANT_VP,
 53	GARP_APPLICANT_AP,
 54	GARP_APPLICANT_QP,
 55	GARP_APPLICANT_VO,
 56	GARP_APPLICANT_AO,
 57	GARP_APPLICANT_QO,
 58	__GARP_APPLICANT_MAX
 59};
 60#define GARP_APPLICANT_MAX	(__GARP_APPLICANT_MAX - 1)
 61
 62enum garp_event {
 63	GARP_EVENT_REQ_JOIN,
 64	GARP_EVENT_REQ_LEAVE,
 65	GARP_EVENT_R_JOIN_IN,
 66	GARP_EVENT_R_JOIN_EMPTY,
 67	GARP_EVENT_R_EMPTY,
 68	GARP_EVENT_R_LEAVE_IN,
 69	GARP_EVENT_R_LEAVE_EMPTY,
 70	GARP_EVENT_TRANSMIT_PDU,
 71	__GARP_EVENT_MAX
 72};
 73#define GARP_EVENT_MAX		(__GARP_EVENT_MAX - 1)
 74
 75enum garp_action {
 76	GARP_ACTION_NONE,
 77	GARP_ACTION_S_JOIN_IN,
 78	GARP_ACTION_S_LEAVE_EMPTY,
 79};
 80
 81struct garp_attr {
 82	struct rb_node			node;
 83	enum garp_applicant_state	state;
 84	u8				type;
 85	u8				dlen;
 86	unsigned char			data[];
 87};
 88
 89enum garp_applications {
 90	GARP_APPLICATION_GVRP,
 91	__GARP_APPLICATION_MAX
 92};
 93#define GARP_APPLICATION_MAX	(__GARP_APPLICATION_MAX - 1)
 94
 95struct garp_application {
 96	enum garp_applications	type;
 97	unsigned int		maxattr;
 98	struct stp_proto	proto;
 99};
100
101struct garp_applicant {
102	struct garp_application	*app;
103	struct net_device	*dev;
104	struct timer_list	join_timer;
105
106	spinlock_t		lock;
107	struct sk_buff_head	queue;
108	struct sk_buff		*pdu;
109	struct rb_root		gid;
110	struct rcu_head		rcu;
111};
112
113struct garp_port {
114	struct garp_applicant __rcu	*applicants[GARP_APPLICATION_MAX + 1];
115	struct rcu_head			rcu;
116};
117
118int garp_register_application(struct garp_application *app);
119void garp_unregister_application(struct garp_application *app);
120
121int garp_init_applicant(struct net_device *dev, struct garp_application *app);
122void garp_uninit_applicant(struct net_device *dev,
123			   struct garp_application *app);
124
125int garp_request_join(const struct net_device *dev,
126		      const struct garp_application *app, const void *data,
127		      u8 len, u8 type);
128void garp_request_leave(const struct net_device *dev,
129			const struct garp_application *app,
130			const void *data, u8 len, u8 type);
131
132#endif /* _NET_GARP_H */