Lines Matching defs:ax25

22 #include <net/ax25.h>
38 static int ax25_rx_fragment(ax25_cb *ax25, struct sk_buff *skb)
42 if (ax25->fragno != 0) {
44 if ((ax25->fragno - 1) == (*skb->data & AX25_SEG_REM)) {
46 ax25->fragno = *skb->data & AX25_SEG_REM;
48 ax25->fraglen += skb->len;
49 skb_queue_tail(&ax25->frag_queue, skb);
52 if (ax25->fragno == 0) {
54 ax25->fraglen,
57 skb_queue_purge(&ax25->frag_queue);
63 skbn->dev = ax25->ax25_dev->dev;
68 while ((skbo = skb_dequeue(&ax25->frag_queue)) != NULL) {
75 ax25->fraglen = 0;
77 if (ax25_rx_iframe(ax25, skbn) == 0)
87 skb_queue_purge(&ax25->frag_queue);
88 ax25->fragno = *skb->data & AX25_SEG_REM;
90 ax25->fraglen = skb->len;
91 skb_queue_tail(&ax25->frag_queue, skb);
103 int ax25_rx_iframe(ax25_cb *ax25, struct sk_buff *skb)
111 ax25_start_idletimer(ax25);
129 skb->dev = ax25->ax25_dev->dev;
137 return ax25_rx_fragment(ax25, skb);
142 return (*func)(skb, ax25);
145 if (ax25->sk != NULL && ax25->ax25_dev->values[AX25_VALUES_CONMODE] == 2) {
146 if ((!ax25->pidincl && ax25->sk->sk_protocol == pid) ||
147 ax25->pidincl) {
148 if (sock_queue_rcv_skb(ax25->sk, skb) == 0)
151 ax25->condition |= AX25_COND_OWN_RX_BUSY;
161 static int ax25_process_rx_frame(ax25_cb *ax25, struct sk_buff *skb, int type, int dama)
165 if (ax25->state == AX25_STATE_0)
168 switch (ax25->ax25_dev->values[AX25_VALUES_PROTOCOL]) {
171 queued = ax25_std_frame_in(ax25, skb, type);
176 if (dama || ax25->ax25_dev->dama.slave)
177 queued = ax25_ds_frame_in(ax25, skb, type);
179 queued = ax25_std_frame_in(ax25, skb, type);
194 ax25_cb *ax25;
307 if ((ax25 = ax25_find_cb(&dest, &src, &reverse_dp, dev)) != NULL) {
314 if (ax25_process_rx_frame(ax25, skb, type, dama) == 0)
317 ax25_cb_put(ax25);
357 ax25 = ax25_sk(make);
369 if ((ax25 = ax25_create_cb()) == NULL) {
374 ax25_fillin_cb(ax25, ax25_dev);
377 ax25->source_addr = dest;
378 ax25->dest_addr = src;
383 if (dp.ndigi && !ax25->digipeat &&
384 (ax25->digipeat = kmalloc(sizeof(ax25_digi), GFP_ATOMIC)) == NULL) {
386 ax25_destroy_socket(ax25);
393 kfree(ax25->digipeat);
394 ax25->digipeat = NULL;
397 memcpy(ax25->digipeat, &reverse_dp, sizeof(ax25_digi));
401 ax25->modulus = AX25_EMODULUS;
402 ax25->window = ax25_dev->values[AX25_VALUES_EWINDOW];
404 ax25->modulus = AX25_MODULUS;
405 ax25->window = ax25_dev->values[AX25_VALUES_WINDOW];
408 ax25_send_control(ax25, AX25_UA, AX25_POLLON, AX25_RESPONSE);
411 if (dama && ax25->ax25_dev->values[AX25_VALUES_PROTOCOL] == AX25_PROTO_DAMA_SLAVE)
412 ax25_dama_on(ax25);
415 ax25->state = AX25_STATE_3;
417 ax25_cb_add(ax25);
419 ax25_start_heartbeat(ax25);
420 ax25_start_t3timer(ax25);
421 ax25_start_idletimer(ax25);