linux/include/net/mrp.h
<<
>>
Prefs
   1#ifndef _NET_MRP_H
   2#define _NET_MRP_H
   3
   4#define MRP_END_MARK            0x0
   5
   6struct mrp_pdu_hdr {
   7        u8      version;
   8};
   9
  10struct mrp_msg_hdr {
  11        u8      attrtype;
  12        u8      attrlen;
  13};
  14
  15struct mrp_vecattr_hdr {
  16        __be16  lenflags;
  17        unsigned char   firstattrvalue[];
  18#define MRP_VECATTR_HDR_LEN_MASK cpu_to_be16(0x1FFF)
  19#define MRP_VECATTR_HDR_FLAG_LA cpu_to_be16(0x2000)
  20};
  21
  22enum mrp_vecattr_event {
  23        MRP_VECATTR_EVENT_NEW,
  24        MRP_VECATTR_EVENT_JOIN_IN,
  25        MRP_VECATTR_EVENT_IN,
  26        MRP_VECATTR_EVENT_JOIN_MT,
  27        MRP_VECATTR_EVENT_MT,
  28        MRP_VECATTR_EVENT_LV,
  29        __MRP_VECATTR_EVENT_MAX
  30};
  31
  32struct mrp_skb_cb {
  33        struct mrp_msg_hdr      *mh;
  34        struct mrp_vecattr_hdr  *vah;
  35        unsigned char           attrvalue[];
  36};
  37
  38static inline struct mrp_skb_cb *mrp_cb(struct sk_buff *skb)
  39{
  40        BUILD_BUG_ON(sizeof(struct mrp_skb_cb) >
  41                     FIELD_SIZEOF(struct sk_buff, cb));
  42        return (struct mrp_skb_cb *)skb->cb;
  43}
  44
  45enum mrp_applicant_state {
  46        MRP_APPLICANT_INVALID,
  47        MRP_APPLICANT_VO,
  48        MRP_APPLICANT_VP,
  49        MRP_APPLICANT_VN,
  50        MRP_APPLICANT_AN,
  51        MRP_APPLICANT_AA,
  52        MRP_APPLICANT_QA,
  53        MRP_APPLICANT_LA,
  54        MRP_APPLICANT_AO,
  55        MRP_APPLICANT_QO,
  56        MRP_APPLICANT_AP,
  57        MRP_APPLICANT_QP,
  58        __MRP_APPLICANT_MAX
  59};
  60#define MRP_APPLICANT_MAX       (__MRP_APPLICANT_MAX - 1)
  61
  62enum mrp_event {
  63        MRP_EVENT_NEW,
  64        MRP_EVENT_JOIN,
  65        MRP_EVENT_LV,
  66        MRP_EVENT_TX,
  67        MRP_EVENT_R_NEW,
  68        MRP_EVENT_R_JOIN_IN,
  69        MRP_EVENT_R_IN,
  70        MRP_EVENT_R_JOIN_MT,
  71        MRP_EVENT_R_MT,
  72        MRP_EVENT_R_LV,
  73        MRP_EVENT_R_LA,
  74        MRP_EVENT_REDECLARE,
  75        MRP_EVENT_PERIODIC,
  76        __MRP_EVENT_MAX
  77};
  78#define MRP_EVENT_MAX           (__MRP_EVENT_MAX - 1)
  79
  80enum mrp_tx_action {
  81        MRP_TX_ACTION_NONE,
  82        MRP_TX_ACTION_S_NEW,
  83        MRP_TX_ACTION_S_JOIN_IN,
  84        MRP_TX_ACTION_S_JOIN_IN_OPTIONAL,
  85        MRP_TX_ACTION_S_IN_OPTIONAL,
  86        MRP_TX_ACTION_S_LV,
  87};
  88
  89struct mrp_attr {
  90        struct rb_node                  node;
  91        enum mrp_applicant_state        state;
  92        u8                              type;
  93        u8                              len;
  94        unsigned char                   value[];
  95};
  96
  97enum mrp_applications {
  98        MRP_APPLICATION_MVRP,
  99        __MRP_APPLICATION_MAX
 100};
 101#define MRP_APPLICATION_MAX     (__MRP_APPLICATION_MAX - 1)
 102
 103struct mrp_application {
 104        enum mrp_applications   type;
 105        unsigned int            maxattr;
 106        struct packet_type      pkttype;
 107        unsigned char           group_address[ETH_ALEN];
 108        u8                      version;
 109};
 110
 111struct mrp_applicant {
 112        struct mrp_application  *app;
 113        struct net_device       *dev;
 114        struct timer_list       join_timer;
 115        struct timer_list       periodic_timer;
 116
 117        spinlock_t              lock;
 118        struct sk_buff_head     queue;
 119        struct sk_buff          *pdu;
 120        struct rb_root          mad;
 121        struct rcu_head         rcu;
 122};
 123
 124struct mrp_port {
 125        struct mrp_applicant __rcu      *applicants[MRP_APPLICATION_MAX + 1];
 126        struct rcu_head                 rcu;
 127};
 128
 129extern int      mrp_register_application(struct mrp_application *app);
 130extern void     mrp_unregister_application(struct mrp_application *app);
 131
 132extern int      mrp_init_applicant(struct net_device *dev,
 133                                    struct mrp_application *app);
 134extern void     mrp_uninit_applicant(struct net_device *dev,
 135                                      struct mrp_application *app);
 136
 137extern int      mrp_request_join(const struct net_device *dev,
 138                                  const struct mrp_application *app,
 139                                  const void *value, u8 len, u8 type);
 140extern void     mrp_request_leave(const struct net_device *dev,
 141                                   const struct mrp_application *app,
 142                                   const void *value, u8 len, u8 type);
 143
 144#endif /* _NET_MRP_H */
 145