129 struct sk_buff {
130
/* These two members must be first. */
131
struct sk_buff *
next;
/* Next buffer in list
*/
132
struct sk_buff * prev;
/* Previous buffer in list
*/
133
134
struct sk_buff_head *
list;
/* List we are on
*/
135
struct sock
*sk;
/* Socket we are owned by
*/
136
struct timeval
stamp;
/* Time we arrived
*/
137
struct net_device
*dev;
/* Device we arrived on/are leaving by
*/
138
139
/* Transport layer header */
140
union
141
{
142
struct tcphdr *th;
143
struct udphdr *uh;
144
struct icmphdr *icmph;
145
struct igmphdr *igmph;
146
struct iphdr *ipiph;
147
struct spxhdr *spxh;
148
unsigned char *raw;
149
} h;
150
151
/* Network layer header */
152
union
153
{
154
struct iphdr *iph;
155
struct ipv6hdr *ipv6h;
156
struct arphdr *arph;
157
struct ipxhdr *ipxh;
158
unsigned char *raw;
159
} nh;
160
161
/* Link layer header */
162
union
163
{
164
struct ethhdr *ethernet;
165
unsigned char *raw;
166
} mac;
167
168
struct dst_entry *dst;
169
170
/*
171
* This is the control
buffer. It is free to use for every
172
* layer. Please put your
private variables there. If you
173
* want to keep them
across layers you have to do a skb_clone()
174
* first. This is owned by
whoever has the skb queued ATM.
175
*/
176
char cb[48];
177
178
unsigned int len;
/* Length of actual data
*/
179
unsigned int
data_len;
180
unsigned int csum;
/* Checksum
*/
181
unsigned char __unused,
/* Dead field, may be reused
*/
182
cloned,
/* head may be cloned (check refcnt to be sure). */
183
pkt_type,
/* Packet class
*/
184
ip_summed;
/* Driver fed us an IP checksum
*/
185
__u32
priority;
/* Packet queueing priority
*/
186
atomic_t
users;
/* User count - see datagram.c,tcp.c
*/
187
unsigned short protocol;
/* Packet protocol from driver.
*/
188
unsigned short security;
/* Security level of packet
*/
189
unsigned int truesize;
/* Buffer size
*/
190
191
unsigned char *head;
/* Head of buffer
*/
192
unsigned char *data;
/* Data head pointer
*/
193
unsigned char *tail;
/* Tail pointer
*/
194
unsigned char *end;
/* End pointer
*/
195
196
void (*destructor)(struct
sk_buff *);
/* Destruct function
*/
197
#ifdef CONFIG_NETFILTER
198
/* Can be used for communication between hooks. */
199
unsigned long nfmark;
200
/* Cache info */
201
__u32
nfcache;
202
/* Associated connection, if any */
203
struct nf_ct_info *nfct;
204
#ifdef CONFIG_NETFILTER_DEBUG
205
unsigned int nf_debug;
206
#endif
207
#endif /*CONFIG_NETFILTER*/
208
209
#if defined(CONFIG_HIPPI)
210
union{
211
__u32 ifield;
212
} private;
213
#endif
214
215
#ifdef CONFIG_NET_SCHED
216
__u32
tc_index;
/* traffic control index */
217
#endif
218
};