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
include
net
llc.h
Go to the documentation of this file.
1
#ifndef LLC_H
2
#define LLC_H
3
/*
4
* Copyright (c) 1997 by Procom Technology, Inc.
5
* 2001-2003 by Arnaldo Carvalho de Melo <
[email protected]
>
6
*
7
* This program can be redistributed or modified under the terms of the
8
* GNU General Public License as published by the Free Software Foundation.
9
* This program is distributed without any warranty or implied warranty
10
* of merchantability or fitness for a particular purpose.
11
*
12
* See the GNU General Public License for more details.
13
*/
14
15
#include <
linux/if.h
>
16
#include <linux/if_ether.h>
17
#include <linux/list.h>
18
#include <
linux/spinlock.h
>
19
#include <
linux/rculist_nulls.h
>
20
#include <linux/hash.h>
21
#include <
linux/jhash.h
>
22
23
#include <
linux/atomic.h
>
24
25
struct
net_device
;
26
struct
packet_type
;
27
struct
sk_buff
;
28
29
struct
llc_addr
{
30
unsigned
char
lsap
;
31
unsigned
char
mac
[
IFHWADDRLEN
];
32
};
33
34
#define LLC_SAP_STATE_INACTIVE 1
35
#define LLC_SAP_STATE_ACTIVE 2
36
37
#define LLC_SK_DEV_HASH_BITS 6
38
#define LLC_SK_DEV_HASH_ENTRIES (1<<LLC_SK_DEV_HASH_BITS)
39
40
#define LLC_SK_LADDR_HASH_BITS 6
41
#define LLC_SK_LADDR_HASH_ENTRIES (1<<LLC_SK_LADDR_HASH_BITS)
42
54
struct
llc_sap
{
55
unsigned
char
state
;
56
unsigned
char
p_bit
;
57
unsigned
char
f_bit
;
58
atomic_t
refcnt
;
59
int
(*
rcv_func
)(
struct
sk_buff
*
skb
,
60
struct
net_device
*
dev
,
61
struct
packet_type
*pt,
62
struct
net_device
*orig_dev);
63
struct
llc_addr
laddr
;
64
struct
list_head
node
;
65
spinlock_t
sk_lock
;
66
int
sk_count
;
67
struct
hlist_nulls_head
sk_laddr_hash
[
LLC_SK_LADDR_HASH_ENTRIES
];
68
struct
hlist_head
sk_dev_hash
[
LLC_SK_DEV_HASH_ENTRIES
];
69
};
70
71
static
inline
72
struct
hlist_head
*llc_sk_dev_hash(
struct
llc_sap
*sap,
int
ifindex)
73
{
74
return
&sap->
sk_dev_hash
[ifindex %
LLC_SK_DEV_HASH_ENTRIES
];
75
}
76
77
static
inline
78
u32
llc_sk_laddr_hashfn(
struct
llc_sap
*sap,
const
struct
llc_addr
*
laddr
)
79
{
80
return
hash_32(jhash(laddr->
mac
,
sizeof
(laddr->
mac
), 0),
81
LLC_SK_LADDR_HASH_BITS
);
82
}
83
84
static
inline
85
struct
hlist_nulls_head
*llc_sk_laddr_hash(
struct
llc_sap
*sap,
86
const
struct
llc_addr
*laddr)
87
{
88
return
&sap->
sk_laddr_hash
[llc_sk_laddr_hashfn(sap, laddr)];
89
}
90
91
#define LLC_DEST_INVALID 0
/* Invalid LLC PDU type */
92
#define LLC_DEST_SAP 1
/* Type 1 goes here */
93
#define LLC_DEST_CONN 2
/* Type 2 goes here */
94
95
extern
struct
list_head
llc_sap_list
;
96
extern
spinlock_t
llc_sap_list_lock
;
97
98
extern
int
llc_rcv
(
struct
sk_buff
*
skb
,
struct
net_device
*
dev
,
99
struct
packet_type
*pt,
struct
net_device
*orig_dev);
100
101
extern
int
llc_mac_hdr_init
(
struct
sk_buff
*
skb
,
102
const
unsigned
char
*
sa
,
const
unsigned
char
*
da
);
103
104
extern
void
llc_add_pack
(
int
type
,
void
(*handler)(
struct
llc_sap
*sap,
105
struct
sk_buff
*
skb
));
106
extern
void
llc_remove_pack
(
int
type);
107
108
extern
void
llc_set_station_handler
(
void
(*handler)(
struct
sk_buff
*
skb
));
109
110
extern
struct
llc_sap
*
llc_sap_open
(
unsigned
char
lsap,
111
int
(*rcv)(
struct
sk_buff
*
skb
,
112
struct
net_device
*
dev
,
113
struct
packet_type
*pt,
114
struct
net_device
*orig_dev));
115
static
inline
void
llc_sap_hold(
struct
llc_sap
*sap)
116
{
117
atomic_inc
(&sap->
refcnt
);
118
}
119
120
extern
void
llc_sap_close
(
struct
llc_sap
*sap);
121
122
static
inline
void
llc_sap_put(
struct
llc_sap
*sap)
123
{
124
if
(
atomic_dec_and_test
(&sap->
refcnt
))
125
llc_sap_close
(sap);
126
}
127
128
extern
struct
llc_sap
*
llc_sap_find
(
unsigned
char
sap_value);
129
130
extern
int
llc_build_and_send_ui_pkt
(
struct
llc_sap
*sap,
struct
sk_buff
*
skb
,
131
unsigned
char
*dmac,
unsigned
char
dsap
);
132
133
extern
void
llc_sap_handler
(
struct
llc_sap
*sap,
struct
sk_buff
*
skb
);
134
extern
void
llc_conn_handler
(
struct
llc_sap
*sap,
struct
sk_buff
*
skb
);
135
136
extern
void
llc_station_init
(
void
);
137
extern
void
llc_station_exit
(
void
);
138
139
#ifdef CONFIG_PROC_FS
140
extern
int
llc_proc_init
(
void
);
141
extern
void
llc_proc_exit
(
void
);
142
#else
143
#define llc_proc_init() (0)
144
#define llc_proc_exit() do { } while(0)
145
#endif
/* CONFIG_PROC_FS */
146
#ifdef CONFIG_SYSCTL
147
extern
int
llc_sysctl_init
(
void
);
148
extern
void
llc_sysctl_exit
(
void
);
149
150
extern
int
sysctl_llc2_ack_timeout
;
151
extern
int
sysctl_llc2_busy_timeout
;
152
extern
int
sysctl_llc2_p_timeout
;
153
extern
int
sysctl_llc2_rej_timeout
;
154
#else
155
#define llc_sysctl_init() (0)
156
#define llc_sysctl_exit() do { } while(0)
157
#endif
/* CONFIG_SYSCTL */
158
#endif
/* LLC_H */
Generated on Thu Jan 10 2013 14:51:48 for Linux Kernel by
1.8.2