Skip to content

Commit

Permalink
net: Add GARP applicant-only participant
Browse files Browse the repository at this point in the history
Add an implementation of the GARP (Generic Attribute Registration Protocol)
applicant-only participant. This will be used by the following patch to
add GVRP support to the VLAN code.

Signed-off-by: Patrick McHardy <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
kaber authored and davem330 committed Jul 6, 2008
1 parent 7c85fbf commit eca9eba
Show file tree
Hide file tree
Showing 5 changed files with 767 additions and 0 deletions.
2 changes: 2 additions & 0 deletions include/linux/netdevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -740,6 +740,8 @@ struct net_device
struct net_bridge_port *br_port;
/* macvlan */
struct macvlan_port *macvlan_port;
/* GARP */
struct garp_port *garp_port;

/* class/net/name entry */
struct device dev;
Expand Down
127 changes: 127 additions & 0 deletions include/net/garp.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
#ifndef _NET_GARP_H
#define _NET_GARP_H

#include <net/stp.h>

#define GARP_PROTOCOL_ID 0x1
#define GARP_END_MARK 0x0

struct garp_pdu_hdr {
__be16 protocol;
};

struct garp_msg_hdr {
u8 attrtype;
};

enum garp_attr_event {
GARP_LEAVE_ALL,
GARP_JOIN_EMPTY,
GARP_JOIN_IN,
GARP_LEAVE_EMPTY,
GARP_LEAVE_IN,
GARP_EMPTY,
};

struct garp_attr_hdr {
u8 len;
u8 event;
u8 data[];
};

struct garp_skb_cb {
u8 cur_type;
};

static inline struct garp_skb_cb *garp_cb(struct sk_buff *skb)
{
BUILD_BUG_ON(sizeof(struct garp_skb_cb) >
FIELD_SIZEOF(struct sk_buff, cb));
return (struct garp_skb_cb *)skb->cb;
}

enum garp_applicant_state {
GARP_APPLICANT_INVALID,
GARP_APPLICANT_VA,
GARP_APPLICANT_AA,
GARP_APPLICANT_QA,
GARP_APPLICANT_LA,
GARP_APPLICANT_VP,
GARP_APPLICANT_AP,
GARP_APPLICANT_QP,
GARP_APPLICANT_VO,
GARP_APPLICANT_AO,
GARP_APPLICANT_QO,
__GARP_APPLICANT_MAX
};
#define GARP_APPLICANT_MAX (__GARP_APPLICANT_MAX - 1)

enum garp_event {
GARP_EVENT_REQ_JOIN,
GARP_EVENT_REQ_LEAVE,
GARP_EVENT_R_JOIN_IN,
GARP_EVENT_R_JOIN_EMPTY,
GARP_EVENT_R_EMPTY,
GARP_EVENT_R_LEAVE_IN,
GARP_EVENT_R_LEAVE_EMPTY,
GARP_EVENT_TRANSMIT_PDU,
__GARP_EVENT_MAX
};
#define GARP_EVENT_MAX (__GARP_EVENT_MAX - 1)

enum garp_action {
GARP_ACTION_NONE,
GARP_ACTION_S_JOIN_IN,
GARP_ACTION_S_LEAVE_EMPTY,
};

struct garp_attr {
struct rb_node node;
enum garp_applicant_state state;
u8 type;
u8 dlen;
unsigned char data[];
};

enum garp_applications {
__GARP_APPLICATION_MAX
};
#define GARP_APPLICATION_MAX (__GARP_APPLICATION_MAX - 1)

struct garp_application {
enum garp_applications type;
unsigned int maxattr;
struct stp_proto proto;
};

struct garp_applicant {
struct garp_application *app;
struct net_device *dev;
struct timer_list join_timer;

spinlock_t lock;
struct sk_buff_head queue;
struct sk_buff *pdu;
struct rb_root gid;
};

struct garp_port {
struct garp_applicant *applicants[GARP_APPLICATION_MAX + 1];
};

extern int garp_register_application(struct garp_application *app);
extern void garp_unregister_application(struct garp_application *app);

extern int garp_init_applicant(struct net_device *dev,
struct garp_application *app);
extern void garp_uninit_applicant(struct net_device *dev,
struct garp_application *app);

extern int garp_request_join(const struct net_device *dev,
const struct garp_application *app,
const void *data, u8 len, u8 type);
extern void garp_request_leave(const struct net_device *dev,
const struct garp_application *app,
const void *data, u8 len, u8 type);

#endif /* _NET_GARP_H */
4 changes: 4 additions & 0 deletions net/802/Kconfig
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
config STP
tristate
select LLC

config GARP
tristate
select STP
1 change: 1 addition & 0 deletions net/802/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@ obj-$(CONFIG_HIPPI) += hippi.o
obj-$(CONFIG_IPX) += p8022.o psnap.o p8023.o
obj-$(CONFIG_ATALK) += p8022.o psnap.o
obj-$(CONFIG_STP) += stp.o
obj-$(CONFIG_GARP) += garp.o
Loading

0 comments on commit eca9eba

Please sign in to comment.