~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/net/atm/lec.h

Version: ~ [ 2.4.0 ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  *
  3  * Lan Emulation client header file
  4  *
  5  * Marko Kiiskila carnil@cs.tut.fi
  6  *
  7  */
  8 
  9 #ifndef _LEC_H_
 10 #define _LEC_H_
 11 
 12 #include <linux/config.h>
 13 #include <linux/atmdev.h>
 14 #include <linux/netdevice.h>
 15 #include <linux/atmlec.h>
 16 
 17 #if defined (CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE)
 18 #include <linux/if_bridge.h>
 19 struct net_bridge_fdb_entry *(*br_fdb_get_hook)(struct net_bridge *br,
 20                                                 unsigned char *addr);
 21 void (*br_fdb_put_hook)(struct net_bridge_fdb_entry *ent);
 22 #endif /* defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE) */
 23 
 24 #define LEC_HEADER_LEN 16
 25 
 26 struct lecdatahdr_8023 {
 27   unsigned short le_header;
 28   unsigned char h_dest[ETH_ALEN];
 29   unsigned char h_source[ETH_ALEN];
 30   unsigned short h_type;
 31 };
 32 
 33 struct lecdatahdr_8025 {
 34   unsigned short le_header;
 35   unsigned char ac_pad;
 36   unsigned char fc;
 37   unsigned char h_dest[ETH_ALEN];
 38   unsigned char h_source[ETH_ALEN];
 39 };
 40 
 41 /*
 42  * Operations that LANE2 capable device can do. Two first functions
 43  * are used to make the device do things. See spec 3.1.3 and 3.1.4.
 44  *
 45  * The third function is intented for the MPOA component sitting on
 46  * top of the LANE device. The MPOA component assigns it's own function
 47  * to (*associate_indicator)() and the LANE device will use that
 48  * function to tell about TLVs it sees floating through.
 49  *
 50  */
 51 struct lane2_ops {
 52         int  (*resolve)(struct net_device *dev, u8 *dst_mac, int force,
 53                         u8 **tlvs, u32 *sizeoftlvs);
 54         int  (*associate_req)(struct net_device *dev, u8 *lan_dst,
 55                               u8 *tlvs, u32 sizeoftlvs);
 56         void (*associate_indicator)(struct net_device *dev, u8 *mac_addr,
 57                                     u8 *tlvs, u32 sizeoftlvs);
 58 };
 59 
 60 struct atm_lane_ops {
 61         int (*lecd_attach)(struct atm_vcc *vcc, int arg);
 62         int (*mcast_attach)(struct atm_vcc *vcc, int arg);
 63         int (*vcc_attach)(struct atm_vcc *vcc, void *arg);
 64         struct net_device **(*get_lecs)(void);
 65 };
 66 
 67 /*
 68  * ATM LAN Emulation supports both LLC & Dix Ethernet EtherType
 69  * frames. 
 70  * 1. Dix Ethernet EtherType frames encoded by placing EtherType
 71  *    field in h_type field. Data follows immediatelly after header.
 72  * 2. LLC Data frames whose total length, including LLC field and data,
 73  *    but not padding required to meet the minimum data frame length, 
 74  *    is less than 1536(0x0600) MUST be encoded by placing that length
 75  *    in the the h_type field. The LLC field follows header immediatelly.
 76  * 3. LLC data frames longer than this maximum MUST be encoded by placing
 77  *    the value 0 in the h_type field.
 78  *
 79  */
 80 
 81 /* Hash table size */
 82 #define LEC_ARP_TABLE_SIZE 16
 83 
 84 struct lec_priv {
 85         struct net_device_stats stats;
 86         unsigned short lecid;      /* Lecid of this client */
 87         struct lec_arp_table *lec_arp_empty_ones;
 88         /* Used for storing VCC's that don't have a MAC address attached yet */
 89         struct lec_arp_table *lec_arp_tables[LEC_ARP_TABLE_SIZE];
 90         /* Actual LE ARP table */
 91         struct lec_arp_table *lec_no_forward;
 92         /* Used for storing VCC's (and forward packets from) which are to
 93            age out by not using them to forward packets. 
 94            This is because to some LE clients there will be 2 VCCs. Only
 95            one of them gets used. */
 96         struct lec_arp_table *mcast_fwds;
 97         /* With LANEv2 it is possible that BUS (or a special multicast server)
 98            establishes multiple Multicast Forward VCCs to us. This list
 99            collects all those VCCs. LANEv1 client has only one item in this
100            list. These entries are not aged out. */
101         atomic_t lec_arp_lock_var;
102         struct atm_vcc *mcast_vcc; /* Default Multicast Send VCC */
103         struct atm_vcc *lecd;
104         struct timer_list lec_arp_timer;
105         /* C10 */
106         unsigned int maximum_unknown_frame_count;
107 /* Within the period of time defined by this variable, the client will send 
108    no more than C10 frames to BUS for a given unicast destination. (C11) */
109         unsigned long max_unknown_frame_time;
110 /* If no traffic has been sent in this vcc for this period of time,
111    vcc will be torn down (C12)*/
112         unsigned long vcc_timeout_period;
113 /* An LE Client MUST not retry an LE_ARP_REQUEST for a 
114    given frame's LAN Destination more than maximum retry count times,
115    after the first LEC_ARP_REQUEST (C13)*/
116         unsigned short max_retry_count;
117 /* Max time the client will maintain an entry in its arp cache in
118    absence of a verification of that relationship (C17)*/
119         unsigned long aging_time;
120 /* Max time the client will maintain an entry in cache when
121    topology change flag is true (C18) */
122         unsigned long forward_delay_time;
123 /* Topology change flag  (C19)*/
124         int topology_change;
125 /* Max time the client expects an LE_ARP_REQUEST/LE_ARP_RESPONSE
126    cycle to take (C20)*/
127         unsigned long arp_response_time;
128 /* Time limit ot wait to receive an LE_FLUSH_RESPONSE after the
129    LE_FLUSH_REQUEST has been sent before taking recover action. (C21)*/
130         unsigned long flush_timeout;
131 /* The time since sending a frame to the bus after which the
132    LE Client may assume that the frame has been either discarded or
133    delivered to the recipient (C22) */
134         unsigned long path_switching_delay;
135 
136         u8 *tlvs;          /* LANE2: TLVs are new                */
137         u32 sizeoftlvs;    /* The size of the tlv array in bytes */
138         int lane_version;  /* LANE2                              */
139         int itfnum;        /* e.g. 2 for lec2, 5 for lec5        */
140         struct lane2_ops *lane2_ops; /* can be NULL for LANE v1  */
141         int is_proxy;      /* bridge between ATM and Ethernet    */
142         int is_trdev;      /* Device type, 0 = Ethernet, 1 = TokenRing */
143 };
144 
145 int lecd_attach(struct atm_vcc *vcc, int arg);
146 int lec_vcc_attach(struct atm_vcc *vcc, void *arg);
147 int lec_mcast_attach(struct atm_vcc *vcc, int arg);
148 struct net_device **get_dev_lec(void);
149 int make_lec(struct atm_vcc *vcc);
150 int send_to_lecd(struct lec_priv *priv,
151                  atmlec_msg_type type, unsigned char *mac_addr,
152                  unsigned char *atm_addr, struct sk_buff *data);
153 void lec_push(struct atm_vcc *vcc, struct sk_buff *skb);
154 
155 void atm_lane_init(void);
156 void atm_lane_init_ops(struct atm_lane_ops *ops);
157 #endif _LEC_H_
158 
159 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.