Lines Matching defs:ax25

19 #include <net/ax25.h>
34 static int ax25_rx_fragment(ax25_cb *ax25, struct sk_buff *skb)
38 if (ax25->fragno != 0) {
40 if ((ax25->fragno - 1) == (*skb->data & AX25_SEG_REM)) {
42 ax25->fragno = *skb->data & AX25_SEG_REM;
44 ax25->fraglen += skb->len;
45 skb_queue_tail(&ax25->frag_queue, skb);
48 if (ax25->fragno == 0) {
50 ax25->fraglen,
53 skb_queue_purge(&ax25->frag_queue);
59 skbn->dev = ax25->ax25_dev->dev;
64 while ((skbo = skb_dequeue(&ax25->frag_queue)) != NULL) {
71 ax25->fraglen = 0;
73 if (ax25_rx_iframe(ax25, skbn) == 0)
83 skb_queue_purge(&ax25->frag_queue);
84 ax25->fragno = *skb->data & AX25_SEG_REM;
86 ax25->fraglen = skb->len;
87 skb_queue_tail(&ax25->frag_queue, skb);
99 int ax25_rx_iframe(ax25_cb *ax25, struct sk_buff *skb)
107 ax25_start_idletimer(ax25);
125 skb->dev = ax25->ax25_dev->dev;
133 return ax25_rx_fragment(ax25, skb);
138 return (*func)(skb, ax25);
141 if (ax25->sk != NULL && ax25->ax25_dev->values[AX25_VALUES_CONMODE] == 2) {
142 if ((!ax25->pidincl && ax25->sk->sk_protocol == pid) ||
143 ax25->pidincl) {
144 if (sock_queue_rcv_skb(ax25->sk, skb) == 0)
147 ax25->condition |= AX25_COND_OWN_RX_BUSY;
157 static int ax25_process_rx_frame(ax25_cb *ax25, struct sk_buff *skb, int type, int dama)
161 if (ax25->state == AX25_STATE_0)
164 switch (ax25->ax25_dev->values[AX25_VALUES_PROTOCOL]) {
167 queued = ax25_std_frame_in(ax25, skb, type);
172 if (dama || ax25->ax25_dev->dama.slave)
173 queued = ax25_ds_frame_in(ax25, skb, type);
175 queued = ax25_std_frame_in(ax25, skb, type);
190 ax25_cb *ax25;
303 if ((ax25 = ax25_find_cb(&dest, &src, &reverse_dp, dev)) != NULL) {
310 if (ax25_process_rx_frame(ax25, skb, type, dama) == 0)
313 ax25_cb_put(ax25);
353 ax25 = sk_to_ax25(make);
365 if ((ax25 = ax25_create_cb()) == NULL) {
370 ax25_fillin_cb(ax25, ax25_dev);
373 ax25->source_addr = dest;
374 ax25->dest_addr = src;
379 if (dp.ndigi && !ax25->digipeat &&
380 (ax25->digipeat = kmalloc(sizeof(ax25_digi), GFP_ATOMIC)) == NULL) {
382 ax25_destroy_socket(ax25);
389 kfree(ax25->digipeat);
390 ax25->digipeat = NULL;
393 memcpy(ax25->digipeat, &reverse_dp, sizeof(ax25_digi));
397 ax25->modulus = AX25_EMODULUS;
398 ax25->window = ax25_dev->values[AX25_VALUES_EWINDOW];
400 ax25->modulus = AX25_MODULUS;
401 ax25->window = ax25_dev->values[AX25_VALUES_WINDOW];
404 ax25_send_control(ax25, AX25_UA, AX25_POLLON, AX25_RESPONSE);
407 if (dama && ax25->ax25_dev->values[AX25_VALUES_PROTOCOL] == AX25_PROTO_DAMA_SLAVE)
408 ax25_dama_on(ax25);
411 ax25->state = AX25_STATE_3;
413 ax25_cb_add(ax25);
415 ax25_start_heartbeat(ax25);
416 ax25_start_t3timer(ax25);
417 ax25_start_idletimer(ax25);