Lines Matching refs:ax25
35 static int ax25_ds_state1_machine(ax25_cb *ax25, struct sk_buff *skb, int frametype, int pf, int ty… in ax25_ds_state1_machine() argument
39 ax25->modulus = AX25_MODULUS; in ax25_ds_state1_machine()
40 ax25->window = ax25->ax25_dev->values[AX25_VALUES_WINDOW]; in ax25_ds_state1_machine()
41 ax25_send_control(ax25, AX25_UA, pf, AX25_RESPONSE); in ax25_ds_state1_machine()
45 ax25->modulus = AX25_EMODULUS; in ax25_ds_state1_machine()
46 ax25->window = ax25->ax25_dev->values[AX25_VALUES_EWINDOW]; in ax25_ds_state1_machine()
47 ax25_send_control(ax25, AX25_UA, pf, AX25_RESPONSE); in ax25_ds_state1_machine()
51 ax25_send_control(ax25, AX25_DM, pf, AX25_RESPONSE); in ax25_ds_state1_machine()
55 ax25_calculate_rtt(ax25); in ax25_ds_state1_machine()
56 ax25_stop_t1timer(ax25); in ax25_ds_state1_machine()
57 ax25_start_t3timer(ax25); in ax25_ds_state1_machine()
58 ax25_start_idletimer(ax25); in ax25_ds_state1_machine()
59 ax25->vs = 0; in ax25_ds_state1_machine()
60 ax25->va = 0; in ax25_ds_state1_machine()
61 ax25->vr = 0; in ax25_ds_state1_machine()
62 ax25->state = AX25_STATE_3; in ax25_ds_state1_machine()
63 ax25->n2count = 0; in ax25_ds_state1_machine()
64 if (ax25->sk != NULL) { in ax25_ds_state1_machine()
65 bh_lock_sock(ax25->sk); in ax25_ds_state1_machine()
66 ax25->sk->sk_state = TCP_ESTABLISHED; in ax25_ds_state1_machine()
71 if (!sock_flag(ax25->sk, SOCK_DEAD)) in ax25_ds_state1_machine()
72 ax25->sk->sk_state_change(ax25->sk); in ax25_ds_state1_machine()
73 bh_unlock_sock(ax25->sk); in ax25_ds_state1_machine()
75 ax25_dama_on(ax25); in ax25_ds_state1_machine()
81 ax25_std_enquiry_response(ax25); in ax25_ds_state1_machine()
86 ax25_disconnect(ax25, ECONNREFUSED); in ax25_ds_state1_machine()
91 ax25_send_control(ax25, AX25_SABM, AX25_POLLON, AX25_COMMAND); in ax25_ds_state1_machine()
103 static int ax25_ds_state2_machine(ax25_cb *ax25, struct sk_buff *skb, int frametype, int pf, int ty… in ax25_ds_state2_machine() argument
108 ax25_send_control(ax25, AX25_DISC, AX25_POLLON, AX25_COMMAND); in ax25_ds_state2_machine()
109 ax25_dama_off(ax25); in ax25_ds_state2_machine()
113 ax25_send_control(ax25, AX25_UA, pf, AX25_RESPONSE); in ax25_ds_state2_machine()
114 ax25_dama_off(ax25); in ax25_ds_state2_machine()
115 ax25_disconnect(ax25, 0); in ax25_ds_state2_machine()
121 ax25_dama_off(ax25); in ax25_ds_state2_machine()
122 ax25_disconnect(ax25, 0); in ax25_ds_state2_machine()
131 ax25_send_control(ax25, AX25_DISC, AX25_POLLON, AX25_COMMAND); in ax25_ds_state2_machine()
132 ax25_dama_off(ax25); in ax25_ds_state2_machine()
148 static int ax25_ds_state3_machine(ax25_cb *ax25, struct sk_buff *skb, int frametype, int ns, int nr… in ax25_ds_state3_machine() argument
156 ax25->modulus = AX25_MODULUS; in ax25_ds_state3_machine()
157 ax25->window = ax25->ax25_dev->values[AX25_VALUES_WINDOW]; in ax25_ds_state3_machine()
159 ax25->modulus = AX25_EMODULUS; in ax25_ds_state3_machine()
160 ax25->window = ax25->ax25_dev->values[AX25_VALUES_EWINDOW]; in ax25_ds_state3_machine()
162 ax25_send_control(ax25, AX25_UA, pf, AX25_RESPONSE); in ax25_ds_state3_machine()
163 ax25_stop_t1timer(ax25); in ax25_ds_state3_machine()
164 ax25_start_t3timer(ax25); in ax25_ds_state3_machine()
165 ax25_start_idletimer(ax25); in ax25_ds_state3_machine()
166 ax25->condition = 0x00; in ax25_ds_state3_machine()
167 ax25->vs = 0; in ax25_ds_state3_machine()
168 ax25->va = 0; in ax25_ds_state3_machine()
169 ax25->vr = 0; in ax25_ds_state3_machine()
170 ax25_requeue_frames(ax25); in ax25_ds_state3_machine()
171 ax25_dama_on(ax25); in ax25_ds_state3_machine()
175 ax25_send_control(ax25, AX25_UA, pf, AX25_RESPONSE); in ax25_ds_state3_machine()
176 ax25_dama_off(ax25); in ax25_ds_state3_machine()
177 ax25_disconnect(ax25, 0); in ax25_ds_state3_machine()
181 ax25_dama_off(ax25); in ax25_ds_state3_machine()
182 ax25_disconnect(ax25, ECONNRESET); in ax25_ds_state3_machine()
188 ax25->condition &= ~AX25_COND_PEER_RX_BUSY; in ax25_ds_state3_machine()
190 ax25->condition |= AX25_COND_PEER_RX_BUSY; in ax25_ds_state3_machine()
192 if (ax25_validate_nr(ax25, nr)) { in ax25_ds_state3_machine()
193 if (ax25_check_iframes_acked(ax25, nr)) in ax25_ds_state3_machine()
194 ax25->n2count=0; in ax25_ds_state3_machine()
196 ax25_ds_enquiry_response(ax25); in ax25_ds_state3_machine()
198 ax25_ds_nr_error_recovery(ax25); in ax25_ds_state3_machine()
199 ax25->state = AX25_STATE_1; in ax25_ds_state3_machine()
204 ax25->condition &= ~AX25_COND_PEER_RX_BUSY; in ax25_ds_state3_machine()
206 if (ax25_validate_nr(ax25, nr)) { in ax25_ds_state3_machine()
207 if (ax25->va != nr) in ax25_ds_state3_machine()
208 ax25->n2count=0; in ax25_ds_state3_machine()
210 ax25_frames_acked(ax25, nr); in ax25_ds_state3_machine()
211 ax25_calculate_rtt(ax25); in ax25_ds_state3_machine()
212 ax25_stop_t1timer(ax25); in ax25_ds_state3_machine()
213 ax25_start_t3timer(ax25); in ax25_ds_state3_machine()
214 ax25_requeue_frames(ax25); in ax25_ds_state3_machine()
217 ax25_ds_enquiry_response(ax25); in ax25_ds_state3_machine()
219 ax25_ds_nr_error_recovery(ax25); in ax25_ds_state3_machine()
220 ax25->state = AX25_STATE_1; in ax25_ds_state3_machine()
225 if (!ax25_validate_nr(ax25, nr)) { in ax25_ds_state3_machine()
226 ax25_ds_nr_error_recovery(ax25); in ax25_ds_state3_machine()
227 ax25->state = AX25_STATE_1; in ax25_ds_state3_machine()
230 if (ax25->condition & AX25_COND_PEER_RX_BUSY) { in ax25_ds_state3_machine()
231 ax25_frames_acked(ax25, nr); in ax25_ds_state3_machine()
232 ax25->n2count = 0; in ax25_ds_state3_machine()
234 if (ax25_check_iframes_acked(ax25, nr)) in ax25_ds_state3_machine()
235 ax25->n2count = 0; in ax25_ds_state3_machine()
237 if (ax25->condition & AX25_COND_OWN_RX_BUSY) { in ax25_ds_state3_machine()
238 if (pf) ax25_ds_enquiry_response(ax25); in ax25_ds_state3_machine()
241 if (ns == ax25->vr) { in ax25_ds_state3_machine()
242 ax25->vr = (ax25->vr + 1) % ax25->modulus; in ax25_ds_state3_machine()
243 queued = ax25_rx_iframe(ax25, skb); in ax25_ds_state3_machine()
244 if (ax25->condition & AX25_COND_OWN_RX_BUSY) in ax25_ds_state3_machine()
245 ax25->vr = ns; /* ax25->vr - 1 */ in ax25_ds_state3_machine()
246 ax25->condition &= ~AX25_COND_REJECT; in ax25_ds_state3_machine()
248 ax25_ds_enquiry_response(ax25); in ax25_ds_state3_machine()
250 if (!(ax25->condition & AX25_COND_ACK_PENDING)) { in ax25_ds_state3_machine()
251 ax25->condition |= AX25_COND_ACK_PENDING; in ax25_ds_state3_machine()
252 ax25_start_t2timer(ax25); in ax25_ds_state3_machine()
256 if (ax25->condition & AX25_COND_REJECT) { in ax25_ds_state3_machine()
257 if (pf) ax25_ds_enquiry_response(ax25); in ax25_ds_state3_machine()
259 ax25->condition |= AX25_COND_REJECT; in ax25_ds_state3_machine()
260 ax25_ds_enquiry_response(ax25); in ax25_ds_state3_machine()
261 ax25->condition &= ~AX25_COND_ACK_PENDING; in ax25_ds_state3_machine()
268 ax25_ds_establish_data_link(ax25); in ax25_ds_state3_machine()
269 ax25->state = AX25_STATE_1; in ax25_ds_state3_machine()
282 int ax25_ds_frame_in(ax25_cb *ax25, struct sk_buff *skb, int type) in ax25_ds_frame_in() argument
286 frametype = ax25_decode(ax25, skb, &ns, &nr, &pf); in ax25_ds_frame_in()
288 switch (ax25->state) { in ax25_ds_frame_in()
290 queued = ax25_ds_state1_machine(ax25, skb, frametype, pf, type); in ax25_ds_frame_in()
293 queued = ax25_ds_state2_machine(ax25, skb, frametype, pf, type); in ax25_ds_frame_in()
296 queued = ax25_ds_state3_machine(ax25, skb, frametype, ns, nr, pf, type); in ax25_ds_frame_in()