Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
net
ethernet
chelsio
cxgb4
l2t.h
Go to the documentation of this file.
1
/*
2
* This file is part of the Chelsio T4 Ethernet driver for Linux.
3
*
4
* Copyright (c) 2003-2010 Chelsio Communications, Inc. All rights reserved.
5
*
6
* This software is available to you under a choice of one of two
7
* licenses. You may choose to be licensed under the terms of the GNU
8
* General Public License (GPL) Version 2, available from the file
9
* COPYING in the main directory of this source tree, or the
10
* OpenIB.org BSD license below:
11
*
12
* Redistribution and use in source and binary forms, with or
13
* without modification, are permitted provided that the following
14
* conditions are met:
15
*
16
* - Redistributions of source code must retain the above
17
* copyright notice, this list of conditions and the following
18
* disclaimer.
19
*
20
* - Redistributions in binary form must reproduce the above
21
* copyright notice, this list of conditions and the following
22
* disclaimer in the documentation and/or other materials
23
* provided with the distribution.
24
*
25
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
29
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
30
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
31
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32
* SOFTWARE.
33
*/
34
35
#ifndef __CXGB4_L2T_H
36
#define __CXGB4_L2T_H
37
38
#include <
linux/spinlock.h
>
39
#include <linux/if_ether.h>
40
#include <
linux/atomic.h
>
41
42
struct
adapter
;
43
struct
l2t_data
;
44
struct
neighbour
;
45
struct
net_device
;
46
struct
file_operations
;
47
struct
cpl_l2t_write_rpl
;
48
49
/*
50
* Each L2T entry plays multiple roles. First of all, it keeps state for the
51
* corresponding entry of the HW L2 table and maintains a queue of offload
52
* packets awaiting address resolution. Second, it is a node of a hash table
53
* chain, where the nodes of the chain are linked together through their next
54
* pointer. Finally, each node is a bucket of a hash table, pointing to the
55
* first element in its chain through its first pointer.
56
*/
57
struct
l2t_entry
{
58
u16
state
;
/* entry state */
59
u16
idx
;
/* entry index */
60
u32
addr
[4];
/* next hop IP or IPv6 address */
61
int
ifindex
;
/* neighbor's net_device's ifindex */
62
struct
neighbour
*
neigh
;
/* associated neighbour */
63
struct
l2t_entry
*
first
;
/* start of hash chain */
64
struct
l2t_entry
*
next
;
/* next l2t_entry on chain */
65
struct
sk_buff
*
arpq_head
;
/* queue of packets awaiting resolution */
66
struct
sk_buff
*
arpq_tail
;
67
spinlock_t
lock
;
68
atomic_t
refcnt
;
/* entry reference count */
69
u16
hash
;
/* hash bucket the entry is on */
70
u16
vlan
;
/* VLAN TCI (id: bits 0-11, prio: 13-15 */
71
u8
v6
;
/* whether entry is for IPv6 */
72
u8
lport
;
/* associated offload logical interface */
73
u8
dmac
[
ETH_ALEN
];
/* neighbour's MAC address */
74
};
75
76
typedef
void
(*
arp_err_handler_t
)(
void
*
handle
,
struct
sk_buff
*
skb
);
77
78
/*
79
* Callback stored in an skb to handle address resolution failure.
80
*/
81
struct
l2t_skb_cb
{
82
void
*
handle
;
83
arp_err_handler_t
arp_err_handler
;
84
};
85
86
#define L2T_SKB_CB(skb) ((struct l2t_skb_cb *)(skb)->cb)
87
88
static
inline
void
t4_set_arp_err_handler(
struct
sk_buff
*
skb
,
void
*
handle
,
89
arp_err_handler_t
handler)
90
{
91
L2T_SKB_CB
(skb)->handle =
handle
;
92
L2T_SKB_CB
(skb)->arp_err_handler = handler;
93
}
94
95
void
cxgb4_l2t_release
(
struct
l2t_entry
*
e
);
96
int
cxgb4_l2t_send
(
struct
net_device
*
dev
,
struct
sk_buff
*
skb
,
97
struct
l2t_entry
*
e
);
98
struct
l2t_entry
*
cxgb4_l2t_get
(
struct
l2t_data
*
d
,
struct
neighbour
*
neigh
,
99
const
struct
net_device
*physdev,
100
unsigned
int
priority
);
101
102
void
t4_l2t_update
(
struct
adapter
*adap,
struct
neighbour
*
neigh
);
103
struct
l2t_data
*
t4_init_l2t
(
void
);
104
void
do_l2t_write_rpl
(
struct
adapter
*
p
,
const
struct
cpl_l2t_write_rpl
*rpl);
105
106
extern
const
struct
file_operations
t4_l2t_fops
;
107
#endif
/* __CXGB4_L2T_H */
Generated on Thu Jan 10 2013 14:00:17 for Linux Kernel by
1.8.2