1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
|
/*
* include/net/ax25dev.h
*
* intra-kernel interface declaration, anything needed by device drivers for
* AX.25 interfaces is defined here.
*
*/
#ifndef _NET_AX25DEV_H
#define _NET_AX25DEV_H
#include <linux/netdevice.h>
#include <linux/sysctl.h>
#include <linux/tqueue.h>
#include <linux/timer.h>
#ifndef AX25_TICS
#define AX25_TICS (HZ/10)
#endif
#define AX25_MAX_DEVICES 20 /* Max No of AX.25 devices */
#define AX25_DEV_MAGIC 0x88babe73
enum {
AX25_VALUES_IPDEFMODE, /* 0=DG 1=VC */
AX25_VALUES_AXDEFMODE, /* 0=Normal 1=Extended Seq Nos */
AX25_VALUES_BACKOFF, /* 0=None 1=Linear 2=Exponential */
AX25_VALUES_CONMODE, /* Allow connected modes - 0=No 1=no "PID text" 2=all PIDs */
AX25_VALUES_WINDOW, /* Default window size for standard AX.25 */
AX25_VALUES_EWINDOW, /* Default window size for extended AX.25 */
AX25_VALUES_T1, /* Default T1 timeout value */
AX25_VALUES_T2, /* Default T2 timeout value */
AX25_VALUES_T3, /* Default T3 timeout value */
AX25_VALUES_IDLE, /* Connected mode idle timer */
AX25_VALUES_N2, /* Default N2 value */
AX25_VALUES_PACLEN, /* AX.25 MTU */
AX25_VALUES_PROTOCOL, /* What is this? */
AX25_VALUES_DAMA_SLAVE_TIMEOUT, /* DAMA */
AX25_VALUES_MEDIA_DUPLEX, /* Duplex type */
AX25_VALUES_MEDIA_TXDELAY, /* TX-Delay */
AX25_VALUES_MEDIA_TXTAIL, /* TX-Tail */
AX25_VALUES_MEDIA_TXBITRATE, /* TX-Bitrate */
AX25_VALUES_MEDIA_RXBITRATE, /* RX-Bitrate */
AX25_VALUES_MEDIA_SLOTTIME, /* Slottime */
AX25_VALUES_MEDIA_PPERSISTENCE, /* P-Persistence */
AX25_VALUES_MEDIA_AUTO_ADJUST, /* Enable/disable auto adjustment */
AX25_VALUES_DUMMY_0, /* For future use */
AX25_VALUES_DUMMY_1, /* For future use */
AX25_VALUES_DUMMY_2, /* For future use */
AX25_VALUES_DUMMY_3, /* For future use */
AX25_VALUES_DUMMY_4, /* For future use */
AX25_VALUES_DUMMY_5, /* For future use */
AX25_VALUES_DUMMY_6, /* For future use */
AX25_VALUES_DUMMY_7, /* For future use */
AX25_MAX_VALUES /* THIS MUST REMAIN THE LAST ENTRY OF THIS LIST */
};
#define AX25_DEF_IPDEFMODE 1 /* VC */
#define AX25_DEF_AXDEFMODE 0 /* Normal */
#define AX25_DEF_BACKOFF 1 /* Linear backoff */
#define AX25_DEF_CONMODE 2 /* Connected mode allowed */
#define AX25_DEF_WINDOW 7 /* Window=7 */
#define AX25_DEF_EWINDOW 32 /* Module-128 Window=32 */
#define AX25_DEF_T1 (10 * AX25_SLOWHZ) /* T1=10s */
#define AX25_DEF_T2 (3 * AX25_SLOWHZ) /* T2=3s */
#define AX25_DEF_T3 (90 * AX25_SLOWHZ) /* T3=90s */
#define AX25_DEF_N2 10 /* N2=10 */
#define AX25_DEF_IDLE (120 * AX25_SLOWHZ) /* Idle=120s */
#define AX25_DEF_PACLEN 256 /* Paclen=256 */
#define AX25_DEF_PROTOCOL 1 /* 0=CSMA; 1=CSMA/DAMA slave auto; 2=DAMA master */
#define AX25_DEF_DAMA_SLAVE_TIMEOUT 0 /* ? */
#define AX25_DEF_MEDIA_DUPLEX 0 /* Half duplex */
#define AX25_DEF_MEDIA_TXDELAY 60 /* 60 ms */
#define AX25_DEF_MEDIA_TXTAIL 10 /* 10 ms */
#define AX25_DEF_MEDIA_TXBITRATE 9600 /* 9600 bps */
#define AX25_DEF_MEDIA_RXBITRATE 9600 /* 9600 bps */
#define AX25_DEF_MEDIA_SLOTTIME 10 /* 10 ms */
#define AX25_DEF_MEDIA_PPERSISTENCE 32 /* 32/256 */
#define AX25_DEF_MEDIA_AUTO_ADJUST 1 /* Auto adjust on */
struct ax25_dev {
unsigned long magic;
struct net_device *netdev; /* backlink to the network device */
struct net_device *forward;
struct timer_list timer;
struct timer_list tics;
struct tq_struct task_queue;
struct sk_buff_head unproto_queue;
int needs_transmit;
unsigned int dama_mode;
struct {
struct ax25_cb *ready;
struct ax25_cb *all;
} list;
struct {
unsigned char fast; /*
* set for "infinitely"
* fast channels to skip
* arbitration
*/
/* downcalls */
unsigned int (*dcd)(struct net_device *dev); /* required: report dcd state */
unsigned int (*ptt)(struct net_device *dev); /* required: report ptt state */
unsigned int (*cts)(struct net_device *dev); /* optional: report "clear to send" */
void (*rts)(struct net_device *dev); /* optional: forced "key transmitter" */
void (*parameter_change_notify)( /* configure media parameter */
struct net_device *dev,
int id, /* parameter type */
int old, /* old value */
int new); /* new value */
} hw;
struct ctl_table systable[AX25_MAX_VALUES+1];
int values[AX25_MAX_VALUES];
/* handled by DDI layer */
unsigned int bit_per_jiffie; /* internal use */
unsigned int jiffies_per_slot; /* internal use */
unsigned char dcd_memory; /* internal use */
unsigned char dcd_dropped; /* internal use */
unsigned char dama_polled; /* internal use */
unsigned int bytes_sent;
unsigned int max_bytes;
/* statistics */
unsigned long tx_iframes;
unsigned long rx_iframes;
unsigned long tx_bytes;
unsigned long rx_bytes;
unsigned long rx_rejects;
rwlock_t ready_lock;
};
#define DAMA_SLAVE (1<<0)
#define DAMA_MASTER (1<<1)
#define AX25_PTR(dev) ((struct ax25_dev *)dev->ax25_ptr)
extern void register_ax25device(struct net_device *dev);
extern void unregister_ax25device(struct net_device *dev);
/*
* Call this function from device driver code for reading a parameter
*/
extern inline int ax25_dev_get_value(struct net_device *dev, int valueno)
{
struct ax25_dev *ax25_device = AX25_PTR(dev);
return ax25_device->values[valueno];
}
/*
* Call this function from device driver code for writing a parameter
*/
extern inline void ax25_dev_set_value(struct net_device *dev, int valueno, int newvalue)
{
struct ax25_dev *ax25_device = AX25_PTR(dev);
ax25_device->values[valueno] = newvalue;
}
#endif /* _NET_AX25DEV_H */
|