1
2
3
4
5
6
7 #ifndef _AX25_H
8 #define _AX25_H
9 #include <linux/ax25.h>
10
11 #define PR_SLOWHZ 10
12
13 #define AX25_T1CLAMPLO (1 * PR_SLOWHZ)
14 #define AX25_T1CLAMPHI (30 * PR_SLOWHZ)
15
16 #define AX25_BROKEN_NETMAC
17
18 #define AX25_BPQ_HEADER_LEN 16
19 #define AX25_KISS_HEADER_LEN 1
20
21 #define AX25_HEADER_LEN 17
22 #define AX25_ADDR_LEN 7
23 #define AX25_DIGI_HEADER_LEN (AX25_MAX_DIGIS * AX25_ADDR_LEN)
24 #define AX25_MAX_HEADER_LEN (AX25_HEADER_LEN + AX25_DIGI_HEADER_LEN)
25
26 #define AX25_P_IP 0xCC
27 #define AX25_P_ARP 0xCD
28 #define AX25_P_TEXT 0xF0
29 #define AX25_P_NETROM 0xCF
30 #define AX25_P_SEGMENT 0x08
31
32 #define SEG_REM 0x7F
33 #define SEG_FIRST 0x80
34
35 #define LAPB_UI 0x03
36 #define LAPB_C 0x80
37 #define LAPB_E 0x01
38
39 #define SSSID_SPARE 0x60
40 #define ESSID_SPARE 0x20
41
42 #define AX25_REPEATED 0x80
43
44 #define ACK_PENDING_CONDITION 0x01
45 #define REJECT_CONDITION 0x02
46 #define PEER_RX_BUSY_CONDITION 0x04
47 #define OWN_RX_BUSY_CONDITION 0x08
48
49 #ifndef _LINUX_NETDEVICE_H
50 #include <linux/netdevice.h>
51 #endif
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 #define I 0x00
78 #define S 0x01
79 #define RR 0x01
80 #define RNR 0x05
81 #define REJ 0x09
82 #define U 0x03
83 #define SABM 0x2f
84 #define SABME 0x6f
85 #define DISC 0x43
86 #define DM 0x0f
87 #define UA 0x63
88 #define FRMR 0x87
89 #define UI 0x03
90 #define PF 0x10
91 #define EPF 0x01
92
93 #define ILLEGAL 0x100
94
95 #define POLLOFF 0
96 #define POLLON 1
97
98
99
100 #define C_COMMAND 1
101 #define C_RESPONSE 2
102
103
104
105 #define AX25_STATE_0 0
106 #define AX25_STATE_1 1
107 #define AX25_STATE_2 2
108 #define AX25_STATE_3 3
109 #define AX25_STATE_4 4
110
111 #define MODULUS 8
112 #define EMODULUS 128
113
114 #define AX25_DEF_IPDEFMODE 'D'
115 #define AX25_DEF_AXDEFMODE 8
116 #define AX25_DEF_NETROM 1
117 #define AX25_DEF_TEXT 1
118 #define AX25_DEF_BACKOFF 'E'
119 #define AX25_DEF_CONMODE 1
120 #define AX25_DEF_WINDOW 2
121 #define AX25_DEF_EWINDOW 32
122 #define AX25_DEF_T1 10
123 #define AX25_DEF_T2 3
124 #define AX25_DEF_T3 300
125 #define AX25_DEF_N2 10
126 #define AX25_DEF_DIGI (AX25_DIGI_INBAND|AX25_DIGI_XBAND)
127
128 typedef struct ax25_uid_assoc {
129 struct ax25_uid_assoc *next;
130 uid_t uid;
131 ax25_address call;
132 } ax25_uid_assoc;
133
134 typedef struct {
135 ax25_address calls[AX25_MAX_DIGIS];
136 unsigned char repeated[AX25_MAX_DIGIS];
137 unsigned char ndigi;
138 char lastrepeat;
139 } ax25_digi;
140
141 typedef struct ax25_cb {
142 struct ax25_cb *next;
143 ax25_address source_addr, dest_addr;
144 struct device *device;
145 unsigned char state, modulus, hdrincl;
146 unsigned short vs, vr, va;
147 unsigned char condition, backoff;
148 unsigned char n2, n2count;
149 unsigned short t1, t2, t3, rtt;
150 unsigned short t1timer, t2timer, t3timer;
151 unsigned short fragno, fraglen;
152 ax25_digi *digipeat;
153 struct sk_buff_head write_queue;
154 struct sk_buff_head reseq_queue;
155 struct sk_buff_head ack_queue;
156 struct sk_buff_head frag_queue;
157 unsigned char window;
158 struct timer_list timer;
159 struct sock *sk;
160 } ax25_cb;
161
162
163 extern char *ax2asc(ax25_address *);
164 extern int ax25cmp(ax25_address *, ax25_address *);
165 extern int ax25_send_frame(struct sk_buff *, ax25_address *, ax25_address *, ax25_digi *, struct device *);
166 extern void ax25_destroy_socket(ax25_cb *);
167 extern struct device *ax25rtr_get_dev(ax25_address *);
168 extern int ax25_encapsulate(struct sk_buff *, struct device *, unsigned short,
169 void *, void *, unsigned int);
170 extern int ax25_rebuild_header(unsigned char *, struct device *, unsigned long, struct sk_buff *);
171 extern ax25_uid_assoc *ax25_uid_list;
172 extern int ax25_uid_policy;
173 extern ax25_address *ax25_findbyuid(uid_t);
174 extern void ax25_queue_xmit(struct sk_buff *, struct device *, int);
175
176 #include <net/ax25call.h>
177
178
179 extern int ax25_process_rx_frame(ax25_cb *, struct sk_buff *, int);
180
181
182 extern void ax25_output(ax25_cb *, struct sk_buff *);
183 extern void ax25_kick(ax25_cb *);
184 extern void ax25_transmit_buffer(ax25_cb *, struct sk_buff *, int);
185 extern void ax25_nr_error_recovery(ax25_cb *);
186 extern void ax25_establish_data_link(ax25_cb *);
187 extern void ax25_transmit_enquiry(ax25_cb *);
188 extern void ax25_enquiry_response(ax25_cb *);
189 extern void ax25_timeout_response(ax25_cb *);
190 extern void ax25_check_iframes_acked(ax25_cb *, unsigned short);
191 extern void ax25_check_need_response(ax25_cb *, int, int);
192
193
194 extern void ax25_rt_rx_frame(ax25_address *, struct device *, ax25_digi *);
195 extern int ax25_rt_get_info(char *, char **, off_t, int, int);
196 extern int ax25_cs_get_info(char *, char **, off_t, int, int);
197 extern int ax25_rt_autobind(ax25_cb *, ax25_address *);
198 extern void ax25_rt_device_down(struct device *);
199 extern int ax25_rt_ioctl(unsigned int, void *);
200 extern void ax25_ip_mode_set(ax25_address *, struct device *, char);
201 extern char ax25_ip_mode_get(ax25_address *, struct device *);
202 extern unsigned short ax25_dev_get_value(struct device *, int);
203 extern void ax25_dev_device_up(struct device *);
204 extern void ax25_dev_device_down(struct device *);
205 extern int ax25_dev_ioctl(unsigned int, void *);
206
207
208 extern void ax25_clear_queues(ax25_cb *);
209 extern void ax25_frames_acked(ax25_cb *, unsigned short);
210 extern void ax25_requeue_frames(ax25_cb *);
211 extern int ax25_validate_nr(ax25_cb *, unsigned short);
212 extern int ax25_decode(ax25_cb *, struct sk_buff *, int *, int *, int *);
213 extern void ax25_send_control(ax25_cb *, int, int, int);
214 extern unsigned short ax25_calculate_t1(ax25_cb *);
215 extern void ax25_calculate_rtt(ax25_cb *);
216 extern unsigned char *ax25_parse_addr(unsigned char *, int, ax25_address *,
217 ax25_address *, ax25_digi *, int *);
218 extern int build_ax25_addr(unsigned char *, ax25_address *, ax25_address *,
219 ax25_digi *, int, int);
220 extern int size_ax25_addr(ax25_digi *);
221 extern void ax25_digi_invert(ax25_digi *, ax25_digi *);
222 extern void ax25_return_dm(struct device *, ax25_address *, ax25_address *, ax25_digi *);
223
224
225 extern void ax25_set_timer(ax25_cb *);
226
227 #endif