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
ax25.h
Go to the documentation of this file.
1
/*
2
* Declarations of AX.25 type objects.
3
*
4
* Alan Cox (GW4PTS) 10/11/93
5
*/
6
#ifndef _AX25_H
7
#define _AX25_H
8
9
#include <
linux/ax25.h
>
10
#include <
linux/spinlock.h
>
11
#include <
linux/timer.h
>
12
#include <linux/list.h>
13
#include <linux/slab.h>
14
#include <
linux/atomic.h
>
15
16
#define AX25_T1CLAMPLO 1
17
#define AX25_T1CLAMPHI (30 * HZ)
18
19
#define AX25_BPQ_HEADER_LEN 16
20
#define AX25_KISS_HEADER_LEN 1
21
22
#define AX25_HEADER_LEN 17
23
#define AX25_ADDR_LEN 7
24
#define AX25_DIGI_HEADER_LEN (AX25_MAX_DIGIS * AX25_ADDR_LEN)
25
#define AX25_MAX_HEADER_LEN (AX25_HEADER_LEN + AX25_DIGI_HEADER_LEN)
26
27
/* AX.25 Protocol IDs */
28
#define AX25_P_ROSE 0x01
29
#define AX25_P_VJCOMP 0x06
/* Compressed TCP/IP packet */
30
/* Van Jacobsen (RFC 1144) */
31
#define AX25_P_VJUNCOMP 0x07
/* Uncompressed TCP/IP packet */
32
/* Van Jacobsen (RFC 1144) */
33
#define AX25_P_SEGMENT 0x08
/* Segmentation fragment */
34
#define AX25_P_TEXNET 0xc3
/* TEXTNET datagram protocol */
35
#define AX25_P_LQ 0xc4
/* Link Quality Protocol */
36
#define AX25_P_ATALK 0xca
/* Appletalk */
37
#define AX25_P_ATALK_ARP 0xcb
/* Appletalk ARP */
38
#define AX25_P_IP 0xcc
/* ARPA Internet Protocol */
39
#define AX25_P_ARP 0xcd
/* ARPA Address Resolution */
40
#define AX25_P_FLEXNET 0xce
/* FlexNet */
41
#define AX25_P_NETROM 0xcf
/* NET/ROM */
42
#define AX25_P_TEXT 0xF0
/* No layer 3 protocol impl. */
43
44
/* AX.25 Segment control values */
45
#define AX25_SEG_REM 0x7F
46
#define AX25_SEG_FIRST 0x80
47
48
#define AX25_CBIT 0x80
/* Command/Response bit */
49
#define AX25_EBIT 0x01
/* HDLC Address Extension bit */
50
#define AX25_HBIT 0x80
/* Has been repeated bit */
51
52
#define AX25_SSSID_SPARE 0x60
/* Unused bits in SSID for standard AX.25 */
53
#define AX25_ESSID_SPARE 0x20
/* Unused bits in SSID for extended AX.25 */
54
#define AX25_DAMA_FLAG 0x20
/* Well, it is *NOT* unused! (dl1bke 951121 */
55
56
#define AX25_COND_ACK_PENDING 0x01
57
#define AX25_COND_REJECT 0x02
58
#define AX25_COND_PEER_RX_BUSY 0x04
59
#define AX25_COND_OWN_RX_BUSY 0x08
60
#define AX25_COND_DAMA_MODE 0x10
61
62
#ifndef _LINUX_NETDEVICE_H
63
#include <linux/netdevice.h>
64
#endif
65
66
/* Upper sub-layer (LAPB) definitions */
67
68
/* Control field templates */
69
#define AX25_I 0x00
/* Information frames */
70
#define AX25_S 0x01
/* Supervisory frames */
71
#define AX25_RR 0x01
/* Receiver ready */
72
#define AX25_RNR 0x05
/* Receiver not ready */
73
#define AX25_REJ 0x09
/* Reject */
74
#define AX25_U 0x03
/* Unnumbered frames */
75
#define AX25_SABM 0x2f
/* Set Asynchronous Balanced Mode */
76
#define AX25_SABME 0x6f
/* Set Asynchronous Balanced Mode Extended */
77
#define AX25_DISC 0x43
/* Disconnect */
78
#define AX25_DM 0x0f
/* Disconnected mode */
79
#define AX25_UA 0x63
/* Unnumbered acknowledge */
80
#define AX25_FRMR 0x87
/* Frame reject */
81
#define AX25_UI 0x03
/* Unnumbered information */
82
#define AX25_XID 0xaf
/* Exchange information */
83
#define AX25_TEST 0xe3
/* Test */
84
85
#define AX25_PF 0x10
/* Poll/final bit for standard AX.25 */
86
#define AX25_EPF 0x01
/* Poll/final bit for extended AX.25 */
87
88
#define AX25_ILLEGAL 0x100
/* Impossible to be a real frame type */
89
90
#define AX25_POLLOFF 0
91
#define AX25_POLLON 1
92
93
/* AX25 L2 C-bit */
94
#define AX25_COMMAND 1
95
#define AX25_RESPONSE 2
96
97
/* Define Link State constants. */
98
99
enum
{
100
AX25_STATE_0
,
/* Listening */
101
AX25_STATE_1
,
/* SABM sent */
102
AX25_STATE_2
,
/* DISC sent */
103
AX25_STATE_3
,
/* Established */
104
AX25_STATE_4
/* Recovery */
105
};
106
107
#define AX25_MODULUS 8
/* Standard AX.25 modulus */
108
#define AX25_EMODULUS 128
/* Extended AX.25 modulus */
109
110
enum
{
111
AX25_PROTO_STD_SIMPLEX
,
112
AX25_PROTO_STD_DUPLEX
,
113
#ifdef CONFIG_AX25_DAMA_SLAVE
114
AX25_PROTO_DAMA_SLAVE,
115
#ifdef CONFIG_AX25_DAMA_MASTER
116
AX25_PROTO_DAMA_MASTER,
117
#define AX25_PROTO_MAX AX25_PROTO_DAMA_MASTER
118
#endif
119
#endif
120
__AX25_PROTO_MAX
,
121
AX25_PROTO_MAX
=
__AX25_PROTO_MAX
-1
122
};
123
124
enum
{
125
AX25_VALUES_IPDEFMODE
,
/* 0=DG 1=VC */
126
AX25_VALUES_AXDEFMODE
,
/* 0=Normal 1=Extended Seq Nos */
127
AX25_VALUES_BACKOFF
,
/* 0=None 1=Linear 2=Exponential */
128
AX25_VALUES_CONMODE
,
/* Allow connected modes - 0=No 1=no "PID text" 2=all PIDs */
129
AX25_VALUES_WINDOW
,
/* Default window size for standard AX.25 */
130
AX25_VALUES_EWINDOW
,
/* Default window size for extended AX.25 */
131
AX25_VALUES_T1
,
/* Default T1 timeout value */
132
AX25_VALUES_T2
,
/* Default T2 timeout value */
133
AX25_VALUES_T3
,
/* Default T3 timeout value */
134
AX25_VALUES_IDLE
,
/* Connected mode idle timer */
135
AX25_VALUES_N2
,
/* Default N2 value */
136
AX25_VALUES_PACLEN
,
/* AX.25 MTU */
137
AX25_VALUES_PROTOCOL
,
/* Std AX.25, DAMA Slave, DAMA Master */
138
AX25_VALUES_DS_TIMEOUT
,
/* DAMA Slave timeout */
139
AX25_MAX_VALUES
/* THIS MUST REMAIN THE LAST ENTRY OF THIS LIST */
140
};
141
142
#define AX25_DEF_IPDEFMODE 0
/* Datagram */
143
#define AX25_DEF_AXDEFMODE 0
/* Normal */
144
#define AX25_DEF_BACKOFF 1
/* Linear backoff */
145
#define AX25_DEF_CONMODE 2
/* Connected mode allowed */
146
#define AX25_DEF_WINDOW 2
/* Window=2 */
147
#define AX25_DEF_EWINDOW 32
/* Module-128 Window=32 */
148
#define AX25_DEF_T1 10000
/* T1=10s */
149
#define AX25_DEF_T2 3000
/* T2=3s */
150
#define AX25_DEF_T3 300000
/* T3=300s */
151
#define AX25_DEF_N2 10
/* N2=10 */
152
#define AX25_DEF_IDLE 0
/* Idle=None */
153
#define AX25_DEF_PACLEN 256
/* Paclen=256 */
154
#define AX25_DEF_PROTOCOL AX25_PROTO_STD_SIMPLEX
/* Standard AX.25 */
155
#define AX25_DEF_DS_TIMEOUT 180000
/* DAMA timeout 3 minutes */
156
157
typedef
struct
ax25_uid_assoc
{
158
struct
hlist_node
uid_node
;
159
atomic_t
refcount
;
160
kuid_t
uid
;
161
ax25_address
call
;
162
}
ax25_uid_assoc
;
163
164
#define ax25_uid_for_each(__ax25, node, list) \
165
hlist_for_each_entry(__ax25, node, list, uid_node)
166
167
#define ax25_uid_hold(ax25) \
168
atomic_inc(&((ax25)->refcount))
169
170
static
inline
void
ax25_uid_put(
ax25_uid_assoc
*assoc)
171
{
172
if
(
atomic_dec_and_test
(&assoc->
refcount
)) {
173
kfree
(assoc);
174
}
175
}
176
177
typedef
struct
{
178
ax25_address
calls[
AX25_MAX_DIGIS
];
179
unsigned
char
repeated[
AX25_MAX_DIGIS
];
180
unsigned
char
ndigi
;
181
signed
char
lastrepeat
;
182
}
ax25_digi
;
183
184
typedef
struct
ax25_route
{
185
struct
ax25_route
*
next
;
186
atomic_t
refcount
;
187
ax25_address
callsign
;
188
struct
net_device
*
dev
;
189
ax25_digi
*
digipeat
;
190
char
ip_mode
;
191
}
ax25_route
;
192
193
static
inline
void
ax25_hold_route(
ax25_route
*ax25_rt)
194
{
195
atomic_inc
(&ax25_rt->
refcount
);
196
}
197
198
extern
void
__ax25_put_route
(
ax25_route
*ax25_rt);
199
200
static
inline
void
ax25_put_route(
ax25_route
*ax25_rt)
201
{
202
if
(
atomic_dec_and_test
(&ax25_rt->
refcount
))
203
__ax25_put_route
(ax25_rt);
204
}
205
206
typedef
struct
{
207
char
slave
;
/* slave_mode? */
208
struct
timer_list
slave_timer;
/* timeout timer */
209
unsigned
short
slave_timeout
;
/* when? */
210
}
ax25_dama_info
;
211
212
struct
ctl_table
;
213
214
typedef
struct
ax25_dev
{
215
struct
ax25_dev
*
next
;
216
struct
net_device
*
dev
;
217
struct
net_device
*
forward
;
218
struct
ctl_table_header
*
sysheader
;
219
int
values
[
AX25_MAX_VALUES
];
220
#if defined(CONFIG_AX25_DAMA_SLAVE) || defined(CONFIG_AX25_DAMA_MASTER)
221
ax25_dama_info
dama;
222
#endif
223
}
ax25_dev
;
224
225
typedef
struct
ax25_cb
{
226
struct
hlist_node
ax25_node
;
227
ax25_address
source_addr
,
dest_addr
;
228
ax25_digi
*
digipeat
;
229
ax25_dev
*
ax25_dev
;
230
unsigned
char
iamdigi
;
231
unsigned
char
state
,
modulus
,
pidincl
;
232
unsigned
short
vs
,
vr
,
va
;
233
unsigned
char
condition
,
backoff
;
234
unsigned
char
n2
,
n2count
;
235
struct
timer_list
t1timer, t2timer, t3timer,
idletimer
;
236
unsigned
long
t1
,
t2
,
t3
,
idle
,
rtt
;
237
unsigned
short
paclen
,
fragno
,
fraglen
;
238
struct
sk_buff_head
write_queue
;
239
struct
sk_buff_head
reseq_queue
;
240
struct
sk_buff_head
ack_queue
;
241
struct
sk_buff_head
frag_queue
;
242
unsigned
char
window
;
243
struct
timer_list
timer
,
dtimer
;
244
struct
sock
*
sk
;
/* Backlink to socket */
245
atomic_t
refcount
;
246
}
ax25_cb
;
247
248
#define ax25_sk(__sk) ((ax25_cb *)(__sk)->sk_protinfo)
249
250
#define ax25_for_each(__ax25, node, list) \
251
hlist_for_each_entry(__ax25, node, list, ax25_node)
252
253
#define ax25_cb_hold(__ax25) \
254
atomic_inc(&((__ax25)->refcount))
255
256
static
__inline__
void
ax25_cb_put(
ax25_cb
*ax25)
257
{
258
if
(
atomic_dec_and_test
(&ax25->
refcount
)) {
259
kfree
(ax25->
digipeat
);
260
kfree
(ax25);
261
}
262
}
263
264
static
inline
__be16
ax25_type_trans(
struct
sk_buff
*
skb
,
struct
net_device
*
dev
)
265
{
266
skb->
dev
=
dev
;
267
skb_reset_mac_header(skb);
268
skb->
pkt_type
=
PACKET_HOST
;
269
return
htons
(
ETH_P_AX25
);
270
}
271
272
/* af_ax25.c */
273
extern
struct
hlist_head
ax25_list
;
274
extern
spinlock_t
ax25_list_lock
;
275
extern
void
ax25_cb_add
(
ax25_cb
*);
276
struct
sock
*
ax25_find_listener
(
ax25_address
*,
int
,
struct
net_device
*,
int
);
277
struct
sock
*
ax25_get_socket
(
ax25_address
*,
ax25_address
*,
int
);
278
extern
ax25_cb
*
ax25_find_cb
(
ax25_address
*,
ax25_address
*,
ax25_digi
*,
struct
net_device
*);
279
extern
void
ax25_send_to_raw
(
ax25_address
*,
struct
sk_buff
*,
int
);
280
extern
void
ax25_destroy_socket
(
ax25_cb
*);
281
extern
ax25_cb
*
__must_check
ax25_create_cb
(
void
);
282
extern
void
ax25_fillin_cb
(
ax25_cb
*,
ax25_dev
*);
283
extern
struct
sock
*
ax25_make_new
(
struct
sock
*,
struct
ax25_dev
*);
284
285
/* ax25_addr.c */
286
extern
const
ax25_address
ax25_bcast
;
287
extern
const
ax25_address
ax25_defaddr
;
288
extern
const
ax25_address
null_ax25_address
;
289
extern
char
*
ax2asc
(
char
*
buf
,
const
ax25_address
*);
290
extern
void
asc2ax
(
ax25_address
*
addr
,
const
char
*callsign);
291
extern
int
ax25cmp
(
const
ax25_address
*,
const
ax25_address
*);
292
extern
int
ax25digicmp
(
const
ax25_digi
*,
const
ax25_digi
*);
293
extern
const
unsigned
char
*
ax25_addr_parse
(
const
unsigned
char
*,
int
,
294
ax25_address
*,
ax25_address
*,
ax25_digi
*,
int
*,
int
*);
295
extern
int
ax25_addr_build
(
unsigned
char
*,
const
ax25_address
*,
296
const
ax25_address
*,
const
ax25_digi
*,
int
,
int
);
297
extern
int
ax25_addr_size
(
const
ax25_digi
*);
298
extern
void
ax25_digi_invert
(
const
ax25_digi
*,
ax25_digi
*);
299
300
/* ax25_dev.c */
301
extern
ax25_dev
*
ax25_dev_list
;
302
extern
spinlock_t
ax25_dev_lock
;
303
304
static
inline
ax25_dev
*ax25_dev_ax25dev(
struct
net_device
*
dev
)
305
{
306
return
dev->
ax25_ptr
;
307
}
308
309
extern
ax25_dev
*
ax25_addr_ax25dev
(
ax25_address
*);
310
extern
void
ax25_dev_device_up
(
struct
net_device
*);
311
extern
void
ax25_dev_device_down
(
struct
net_device
*);
312
extern
int
ax25_fwd_ioctl
(
unsigned
int
,
struct
ax25_fwd_struct
*);
313
extern
struct
net_device
*
ax25_fwd_dev
(
struct
net_device
*);
314
extern
void
ax25_dev_free
(
void
);
315
316
/* ax25_ds_in.c */
317
extern
int
ax25_ds_frame_in
(
ax25_cb
*,
struct
sk_buff
*,
int
);
318
319
/* ax25_ds_subr.c */
320
extern
void
ax25_ds_nr_error_recovery
(
ax25_cb
*);
321
extern
void
ax25_ds_enquiry_response
(
ax25_cb
*);
322
extern
void
ax25_ds_establish_data_link
(
ax25_cb
*);
323
extern
void
ax25_dev_dama_off
(
ax25_dev
*);
324
extern
void
ax25_dama_on
(
ax25_cb
*);
325
extern
void
ax25_dama_off
(
ax25_cb
*);
326
327
/* ax25_ds_timer.c */
328
extern
void
ax25_ds_setup_timer
(
ax25_dev
*);
329
extern
void
ax25_ds_set_timer
(
ax25_dev
*);
330
extern
void
ax25_ds_del_timer
(
ax25_dev
*);
331
extern
void
ax25_ds_timer
(
ax25_cb
*);
332
extern
void
ax25_ds_t1_timeout
(
ax25_cb
*);
333
extern
void
ax25_ds_heartbeat_expiry
(
ax25_cb
*);
334
extern
void
ax25_ds_t3timer_expiry
(
ax25_cb
*);
335
extern
void
ax25_ds_idletimer_expiry
(
ax25_cb
*);
336
337
/* ax25_iface.c */
338
339
struct
ax25_protocol
{
340
struct
ax25_protocol
*
next
;
341
unsigned
int
pid
;
342
int
(*
func
)(
struct
sk_buff
*,
ax25_cb
*);
343
};
344
345
extern
void
ax25_register_pid
(
struct
ax25_protocol
*ap);
346
extern
void
ax25_protocol_release
(
unsigned
int
);
347
348
struct
ax25_linkfail
{
349
struct
hlist_node
lf_node
;
350
void
(*
func
)(
ax25_cb
*,
int
);
351
};
352
353
extern
void
ax25_linkfail_register
(
struct
ax25_linkfail
*lf);
354
extern
void
ax25_linkfail_release
(
struct
ax25_linkfail
*lf);
355
extern
int
__must_check
ax25_listen_register
(
ax25_address
*,
356
struct
net_device
*);
357
extern
void
ax25_listen_release
(
ax25_address
*,
struct
net_device
*);
358
extern
int
(*
ax25_protocol_function
(
unsigned
int
))(
struct
sk_buff
*,
ax25_cb
*);
359
extern
int
ax25_listen_mine
(
ax25_address
*,
struct
net_device
*);
360
extern
void
ax25_link_failed
(
ax25_cb
*,
int
);
361
extern
int
ax25_protocol_is_registered
(
unsigned
int
);
362
363
/* ax25_in.c */
364
extern
int
ax25_rx_iframe
(
ax25_cb
*,
struct
sk_buff
*);
365
extern
int
ax25_kiss_rcv
(
struct
sk_buff
*,
struct
net_device
*,
struct
packet_type
*,
struct
net_device
*);
366
367
/* ax25_ip.c */
368
extern
int
ax25_hard_header
(
struct
sk_buff
*,
struct
net_device
*,
369
unsigned
short
,
const
void
*,
370
const
void
*,
unsigned
int
);
371
extern
int
ax25_rebuild_header
(
struct
sk_buff
*);
372
extern
const
struct
header_ops
ax25_header_ops
;
373
374
/* ax25_out.c */
375
extern
ax25_cb
*
ax25_send_frame
(
struct
sk_buff
*,
int
,
ax25_address
*,
ax25_address
*,
ax25_digi
*,
struct
net_device
*);
376
extern
void
ax25_output
(
ax25_cb
*,
int
,
struct
sk_buff
*);
377
extern
void
ax25_kick
(
ax25_cb
*);
378
extern
void
ax25_transmit_buffer
(
ax25_cb
*,
struct
sk_buff
*,
int
);
379
extern
void
ax25_queue_xmit
(
struct
sk_buff
*
skb
,
struct
net_device
*
dev
);
380
extern
int
ax25_check_iframes_acked
(
ax25_cb
*,
unsigned
short
);
381
382
/* ax25_route.c */
383
extern
void
ax25_rt_device_down
(
struct
net_device
*);
384
extern
int
ax25_rt_ioctl
(
unsigned
int
,
void
__user *);
385
extern
const
struct
file_operations
ax25_route_fops
;
386
extern
ax25_route
*
ax25_get_route
(
ax25_address
*
addr
,
struct
net_device
*
dev
);
387
extern
int
ax25_rt_autobind
(
ax25_cb
*,
ax25_address
*);
388
extern
struct
sk_buff
*
ax25_rt_build_path
(
struct
sk_buff
*,
ax25_address
*,
ax25_address
*,
ax25_digi
*);
389
extern
void
ax25_rt_free
(
void
);
390
391
/* ax25_std_in.c */
392
extern
int
ax25_std_frame_in
(
ax25_cb
*,
struct
sk_buff
*,
int
);
393
394
/* ax25_std_subr.c */
395
extern
void
ax25_std_nr_error_recovery
(
ax25_cb
*);
396
extern
void
ax25_std_establish_data_link
(
ax25_cb
*);
397
extern
void
ax25_std_transmit_enquiry
(
ax25_cb
*);
398
extern
void
ax25_std_enquiry_response
(
ax25_cb
*);
399
extern
void
ax25_std_timeout_response
(
ax25_cb
*);
400
401
/* ax25_std_timer.c */
402
extern
void
ax25_std_heartbeat_expiry
(
ax25_cb
*);
403
extern
void
ax25_std_t1timer_expiry
(
ax25_cb
*);
404
extern
void
ax25_std_t2timer_expiry
(
ax25_cb
*);
405
extern
void
ax25_std_t3timer_expiry
(
ax25_cb
*);
406
extern
void
ax25_std_idletimer_expiry
(
ax25_cb
*);
407
408
/* ax25_subr.c */
409
extern
void
ax25_clear_queues
(
ax25_cb
*);
410
extern
void
ax25_frames_acked
(
ax25_cb
*,
unsigned
short
);
411
extern
void
ax25_requeue_frames
(
ax25_cb
*);
412
extern
int
ax25_validate_nr
(
ax25_cb
*,
unsigned
short
);
413
extern
int
ax25_decode
(
ax25_cb
*,
struct
sk_buff
*,
int
*,
int
*,
int
*);
414
extern
void
ax25_send_control
(
ax25_cb
*,
int
,
int
,
int
);
415
extern
void
ax25_return_dm
(
struct
net_device
*,
ax25_address
*,
ax25_address
*,
ax25_digi
*);
416
extern
void
ax25_calculate_t1
(
ax25_cb
*);
417
extern
void
ax25_calculate_rtt
(
ax25_cb
*);
418
extern
void
ax25_disconnect
(
ax25_cb
*,
int
);
419
420
/* ax25_timer.c */
421
extern
void
ax25_setup_timers
(
ax25_cb
*);
422
extern
void
ax25_start_heartbeat
(
ax25_cb
*);
423
extern
void
ax25_start_t1timer
(
ax25_cb
*);
424
extern
void
ax25_start_t2timer
(
ax25_cb
*);
425
extern
void
ax25_start_t3timer
(
ax25_cb
*);
426
extern
void
ax25_start_idletimer
(
ax25_cb
*);
427
extern
void
ax25_stop_heartbeat
(
ax25_cb
*);
428
extern
void
ax25_stop_t1timer
(
ax25_cb
*);
429
extern
void
ax25_stop_t2timer
(
ax25_cb
*);
430
extern
void
ax25_stop_t3timer
(
ax25_cb
*);
431
extern
void
ax25_stop_idletimer
(
ax25_cb
*);
432
extern
int
ax25_t1timer_running
(
ax25_cb
*);
433
extern
unsigned
long
ax25_display_timer
(
struct
timer_list
*);
434
435
/* ax25_uid.c */
436
extern
int
ax25_uid_policy
;
437
extern
ax25_uid_assoc
*
ax25_findbyuid
(
kuid_t
);
438
extern
int
__must_check
ax25_uid_ioctl
(
int
,
struct
sockaddr_ax25
*);
439
extern
const
struct
file_operations
ax25_uid_fops
;
440
extern
void
ax25_uid_free
(
void
);
441
442
/* sysctl_net_ax25.c */
443
#ifdef CONFIG_SYSCTL
444
extern
int
ax25_register_dev_sysctl
(
ax25_dev
*
ax25_dev
);
445
extern
void
ax25_unregister_dev_sysctl
(
ax25_dev
*
ax25_dev
);
446
#else
447
static
inline
int
ax25_register_dev_sysctl
(
ax25_dev
*
ax25_dev
) {
return
0; }
448
static
inline
void
ax25_unregister_dev_sysctl
(
ax25_dev
*
ax25_dev
) {}
449
#endif
/* CONFIG_SYSCTL */
450
451
#endif
Generated on Thu Jan 10 2013 14:53:00 for Linux Kernel by
1.8.2