OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [net/] [atm/] [lec.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.