Lines Matching refs:ax25

42 static int ax25_std_state1_machine(ax25_cb *ax25, struct sk_buff *skb, int frametype, int pf, int t…  in ax25_std_state1_machine()  argument
46 ax25->modulus = AX25_MODULUS; in ax25_std_state1_machine()
47 ax25->window = ax25->ax25_dev->values[AX25_VALUES_WINDOW]; in ax25_std_state1_machine()
48 ax25_send_control(ax25, AX25_UA, pf, AX25_RESPONSE); in ax25_std_state1_machine()
52 ax25->modulus = AX25_EMODULUS; in ax25_std_state1_machine()
53 ax25->window = ax25->ax25_dev->values[AX25_VALUES_EWINDOW]; in ax25_std_state1_machine()
54 ax25_send_control(ax25, AX25_UA, pf, AX25_RESPONSE); in ax25_std_state1_machine()
58 ax25_send_control(ax25, AX25_DM, pf, AX25_RESPONSE); in ax25_std_state1_machine()
63 ax25_calculate_rtt(ax25); in ax25_std_state1_machine()
64 ax25_stop_t1timer(ax25); in ax25_std_state1_machine()
65 ax25_start_t3timer(ax25); in ax25_std_state1_machine()
66 ax25_start_idletimer(ax25); in ax25_std_state1_machine()
67 ax25->vs = 0; in ax25_std_state1_machine()
68 ax25->va = 0; in ax25_std_state1_machine()
69 ax25->vr = 0; in ax25_std_state1_machine()
70 ax25->state = AX25_STATE_3; in ax25_std_state1_machine()
71 ax25->n2count = 0; in ax25_std_state1_machine()
72 if (ax25->sk != NULL) { in ax25_std_state1_machine()
73 bh_lock_sock(ax25->sk); in ax25_std_state1_machine()
74 ax25->sk->sk_state = TCP_ESTABLISHED; in ax25_std_state1_machine()
76 if (!sock_flag(ax25->sk, SOCK_DEAD)) in ax25_std_state1_machine()
77 ax25->sk->sk_state_change(ax25->sk); in ax25_std_state1_machine()
78 bh_unlock_sock(ax25->sk); in ax25_std_state1_machine()
85 if (ax25->modulus == AX25_MODULUS) { in ax25_std_state1_machine()
86 ax25_disconnect(ax25, ECONNREFUSED); in ax25_std_state1_machine()
88 ax25->modulus = AX25_MODULUS; in ax25_std_state1_machine()
89 ax25->window = ax25->ax25_dev->values[AX25_VALUES_WINDOW]; in ax25_std_state1_machine()
106 static int ax25_std_state2_machine(ax25_cb *ax25, struct sk_buff *skb, int frametype, int pf, int t… in ax25_std_state2_machine() argument
111 ax25_send_control(ax25, AX25_DM, pf, AX25_RESPONSE); in ax25_std_state2_machine()
115 ax25_send_control(ax25, AX25_UA, pf, AX25_RESPONSE); in ax25_std_state2_machine()
116 ax25_disconnect(ax25, 0); in ax25_std_state2_machine()
122 ax25_disconnect(ax25, 0); in ax25_std_state2_machine()
129 if (pf) ax25_send_control(ax25, AX25_DM, AX25_POLLON, AX25_RESPONSE); in ax25_std_state2_machine()
144 static int ax25_std_state3_machine(ax25_cb *ax25, struct sk_buff *skb, int frametype, int ns, int n… in ax25_std_state3_machine() argument
152 ax25->modulus = AX25_MODULUS; in ax25_std_state3_machine()
153 ax25->window = ax25->ax25_dev->values[AX25_VALUES_WINDOW]; in ax25_std_state3_machine()
155 ax25->modulus = AX25_EMODULUS; in ax25_std_state3_machine()
156 ax25->window = ax25->ax25_dev->values[AX25_VALUES_EWINDOW]; in ax25_std_state3_machine()
158 ax25_send_control(ax25, AX25_UA, pf, AX25_RESPONSE); in ax25_std_state3_machine()
159 ax25_stop_t1timer(ax25); in ax25_std_state3_machine()
160 ax25_stop_t2timer(ax25); in ax25_std_state3_machine()
161 ax25_start_t3timer(ax25); in ax25_std_state3_machine()
162 ax25_start_idletimer(ax25); in ax25_std_state3_machine()
163 ax25->condition = 0x00; in ax25_std_state3_machine()
164 ax25->vs = 0; in ax25_std_state3_machine()
165 ax25->va = 0; in ax25_std_state3_machine()
166 ax25->vr = 0; in ax25_std_state3_machine()
167 ax25_requeue_frames(ax25); in ax25_std_state3_machine()
171 ax25_send_control(ax25, AX25_UA, pf, AX25_RESPONSE); in ax25_std_state3_machine()
172 ax25_disconnect(ax25, 0); in ax25_std_state3_machine()
176 ax25_disconnect(ax25, ECONNRESET); in ax25_std_state3_machine()
182 ax25->condition &= ~AX25_COND_PEER_RX_BUSY; in ax25_std_state3_machine()
184 ax25->condition |= AX25_COND_PEER_RX_BUSY; in ax25_std_state3_machine()
186 ax25_std_enquiry_response(ax25); in ax25_std_state3_machine()
187 if (ax25_validate_nr(ax25, nr)) { in ax25_std_state3_machine()
188 ax25_check_iframes_acked(ax25, nr); in ax25_std_state3_machine()
190 ax25_std_nr_error_recovery(ax25); in ax25_std_state3_machine()
191 ax25->state = AX25_STATE_1; in ax25_std_state3_machine()
196 ax25->condition &= ~AX25_COND_PEER_RX_BUSY; in ax25_std_state3_machine()
198 ax25_std_enquiry_response(ax25); in ax25_std_state3_machine()
199 if (ax25_validate_nr(ax25, nr)) { in ax25_std_state3_machine()
200 ax25_frames_acked(ax25, nr); in ax25_std_state3_machine()
201 ax25_calculate_rtt(ax25); in ax25_std_state3_machine()
202 ax25_stop_t1timer(ax25); in ax25_std_state3_machine()
203 ax25_start_t3timer(ax25); in ax25_std_state3_machine()
204 ax25_requeue_frames(ax25); in ax25_std_state3_machine()
206 ax25_std_nr_error_recovery(ax25); in ax25_std_state3_machine()
207 ax25->state = AX25_STATE_1; in ax25_std_state3_machine()
212 if (!ax25_validate_nr(ax25, nr)) { in ax25_std_state3_machine()
213 ax25_std_nr_error_recovery(ax25); in ax25_std_state3_machine()
214 ax25->state = AX25_STATE_1; in ax25_std_state3_machine()
217 if (ax25->condition & AX25_COND_PEER_RX_BUSY) { in ax25_std_state3_machine()
218 ax25_frames_acked(ax25, nr); in ax25_std_state3_machine()
220 ax25_check_iframes_acked(ax25, nr); in ax25_std_state3_machine()
222 if (ax25->condition & AX25_COND_OWN_RX_BUSY) { in ax25_std_state3_machine()
223 if (pf) ax25_std_enquiry_response(ax25); in ax25_std_state3_machine()
226 if (ns == ax25->vr) { in ax25_std_state3_machine()
227 ax25->vr = (ax25->vr + 1) % ax25->modulus; in ax25_std_state3_machine()
228 queued = ax25_rx_iframe(ax25, skb); in ax25_std_state3_machine()
229 if (ax25->condition & AX25_COND_OWN_RX_BUSY) in ax25_std_state3_machine()
230 ax25->vr = ns; /* ax25->vr - 1 */ in ax25_std_state3_machine()
231 ax25->condition &= ~AX25_COND_REJECT; in ax25_std_state3_machine()
233 ax25_std_enquiry_response(ax25); in ax25_std_state3_machine()
235 if (!(ax25->condition & AX25_COND_ACK_PENDING)) { in ax25_std_state3_machine()
236 ax25->condition |= AX25_COND_ACK_PENDING; in ax25_std_state3_machine()
237 ax25_start_t2timer(ax25); in ax25_std_state3_machine()
241 if (ax25->condition & AX25_COND_REJECT) { in ax25_std_state3_machine()
242 if (pf) ax25_std_enquiry_response(ax25); in ax25_std_state3_machine()
244 ax25->condition |= AX25_COND_REJECT; in ax25_std_state3_machine()
245 ax25_send_control(ax25, AX25_REJ, pf, AX25_RESPONSE); in ax25_std_state3_machine()
246 ax25->condition &= ~AX25_COND_ACK_PENDING; in ax25_std_state3_machine()
253 ax25_std_establish_data_link(ax25); in ax25_std_state3_machine()
254 ax25->state = AX25_STATE_1; in ax25_std_state3_machine()
269 static int ax25_std_state4_machine(ax25_cb *ax25, struct sk_buff *skb, int frametype, int ns, int n… in ax25_std_state4_machine() argument
277 ax25->modulus = AX25_MODULUS; in ax25_std_state4_machine()
278 ax25->window = ax25->ax25_dev->values[AX25_VALUES_WINDOW]; in ax25_std_state4_machine()
280 ax25->modulus = AX25_EMODULUS; in ax25_std_state4_machine()
281 ax25->window = ax25->ax25_dev->values[AX25_VALUES_EWINDOW]; in ax25_std_state4_machine()
283 ax25_send_control(ax25, AX25_UA, pf, AX25_RESPONSE); in ax25_std_state4_machine()
284 ax25_stop_t1timer(ax25); in ax25_std_state4_machine()
285 ax25_stop_t2timer(ax25); in ax25_std_state4_machine()
286 ax25_start_t3timer(ax25); in ax25_std_state4_machine()
287 ax25_start_idletimer(ax25); in ax25_std_state4_machine()
288 ax25->condition = 0x00; in ax25_std_state4_machine()
289 ax25->vs = 0; in ax25_std_state4_machine()
290 ax25->va = 0; in ax25_std_state4_machine()
291 ax25->vr = 0; in ax25_std_state4_machine()
292 ax25->state = AX25_STATE_3; in ax25_std_state4_machine()
293 ax25->n2count = 0; in ax25_std_state4_machine()
294 ax25_requeue_frames(ax25); in ax25_std_state4_machine()
298 ax25_send_control(ax25, AX25_UA, pf, AX25_RESPONSE); in ax25_std_state4_machine()
299 ax25_disconnect(ax25, 0); in ax25_std_state4_machine()
303 ax25_disconnect(ax25, ECONNRESET); in ax25_std_state4_machine()
309 ax25->condition &= ~AX25_COND_PEER_RX_BUSY; in ax25_std_state4_machine()
311 ax25->condition |= AX25_COND_PEER_RX_BUSY; in ax25_std_state4_machine()
313 ax25_stop_t1timer(ax25); in ax25_std_state4_machine()
314 ax25->n2count = 0; in ax25_std_state4_machine()
315 if (ax25_validate_nr(ax25, nr)) { in ax25_std_state4_machine()
316 ax25_frames_acked(ax25, nr); in ax25_std_state4_machine()
317 if (ax25->vs == ax25->va) { in ax25_std_state4_machine()
318 ax25_start_t3timer(ax25); in ax25_std_state4_machine()
319 ax25->state = AX25_STATE_3; in ax25_std_state4_machine()
321 ax25_requeue_frames(ax25); in ax25_std_state4_machine()
324 ax25_std_nr_error_recovery(ax25); in ax25_std_state4_machine()
325 ax25->state = AX25_STATE_1; in ax25_std_state4_machine()
330 ax25_std_enquiry_response(ax25); in ax25_std_state4_machine()
331 if (ax25_validate_nr(ax25, nr)) { in ax25_std_state4_machine()
332 ax25_frames_acked(ax25, nr); in ax25_std_state4_machine()
334 ax25_std_nr_error_recovery(ax25); in ax25_std_state4_machine()
335 ax25->state = AX25_STATE_1; in ax25_std_state4_machine()
340 ax25->condition &= ~AX25_COND_PEER_RX_BUSY; in ax25_std_state4_machine()
342 ax25_stop_t1timer(ax25); in ax25_std_state4_machine()
343 ax25->n2count = 0; in ax25_std_state4_machine()
344 if (ax25_validate_nr(ax25, nr)) { in ax25_std_state4_machine()
345 ax25_frames_acked(ax25, nr); in ax25_std_state4_machine()
346 if (ax25->vs == ax25->va) { in ax25_std_state4_machine()
347 ax25_start_t3timer(ax25); in ax25_std_state4_machine()
348 ax25->state = AX25_STATE_3; in ax25_std_state4_machine()
350 ax25_requeue_frames(ax25); in ax25_std_state4_machine()
353 ax25_std_nr_error_recovery(ax25); in ax25_std_state4_machine()
354 ax25->state = AX25_STATE_1; in ax25_std_state4_machine()
359 ax25_std_enquiry_response(ax25); in ax25_std_state4_machine()
360 if (ax25_validate_nr(ax25, nr)) { in ax25_std_state4_machine()
361 ax25_frames_acked(ax25, nr); in ax25_std_state4_machine()
362 ax25_requeue_frames(ax25); in ax25_std_state4_machine()
364 ax25_std_nr_error_recovery(ax25); in ax25_std_state4_machine()
365 ax25->state = AX25_STATE_1; in ax25_std_state4_machine()
370 if (!ax25_validate_nr(ax25, nr)) { in ax25_std_state4_machine()
371 ax25_std_nr_error_recovery(ax25); in ax25_std_state4_machine()
372 ax25->state = AX25_STATE_1; in ax25_std_state4_machine()
375 ax25_frames_acked(ax25, nr); in ax25_std_state4_machine()
376 if (ax25->condition & AX25_COND_OWN_RX_BUSY) { in ax25_std_state4_machine()
378 ax25_std_enquiry_response(ax25); in ax25_std_state4_machine()
381 if (ns == ax25->vr) { in ax25_std_state4_machine()
382 ax25->vr = (ax25->vr + 1) % ax25->modulus; in ax25_std_state4_machine()
383 queued = ax25_rx_iframe(ax25, skb); in ax25_std_state4_machine()
384 if (ax25->condition & AX25_COND_OWN_RX_BUSY) in ax25_std_state4_machine()
385 ax25->vr = ns; /* ax25->vr - 1 */ in ax25_std_state4_machine()
386 ax25->condition &= ~AX25_COND_REJECT; in ax25_std_state4_machine()
388 ax25_std_enquiry_response(ax25); in ax25_std_state4_machine()
390 if (!(ax25->condition & AX25_COND_ACK_PENDING)) { in ax25_std_state4_machine()
391 ax25->condition |= AX25_COND_ACK_PENDING; in ax25_std_state4_machine()
392 ax25_start_t2timer(ax25); in ax25_std_state4_machine()
396 if (ax25->condition & AX25_COND_REJECT) { in ax25_std_state4_machine()
397 if (pf) ax25_std_enquiry_response(ax25); in ax25_std_state4_machine()
399 ax25->condition |= AX25_COND_REJECT; in ax25_std_state4_machine()
400 ax25_send_control(ax25, AX25_REJ, pf, AX25_RESPONSE); in ax25_std_state4_machine()
401 ax25->condition &= ~AX25_COND_ACK_PENDING; in ax25_std_state4_machine()
408 ax25_std_establish_data_link(ax25); in ax25_std_state4_machine()
409 ax25->state = AX25_STATE_1; in ax25_std_state4_machine()
422 int ax25_std_frame_in(ax25_cb *ax25, struct sk_buff *skb, int type) in ax25_std_frame_in() argument
426 frametype = ax25_decode(ax25, skb, &ns, &nr, &pf); in ax25_std_frame_in()
428 switch (ax25->state) { in ax25_std_frame_in()
430 queued = ax25_std_state1_machine(ax25, skb, frametype, pf, type); in ax25_std_frame_in()
433 queued = ax25_std_state2_machine(ax25, skb, frametype, pf, type); in ax25_std_frame_in()
436 queued = ax25_std_state3_machine(ax25, skb, frametype, ns, nr, pf, type); in ax25_std_frame_in()
439 queued = ax25_std_state4_machine(ax25, skb, frametype, ns, nr, pf, type); in ax25_std_frame_in()
443 ax25_kick(ax25); in ax25_std_frame_in()