Lines Matching refs:ax25

26 #include <net/ax25.h>
63 static void ax25_cb_del(ax25_cb *ax25)
65 if (!hlist_unhashed(&ax25->ax25_node)) {
67 hlist_del_init(&ax25->ax25_node);
69 ax25_cb_put(ax25);
156 void ax25_cb_add(ax25_cb *ax25)
159 ax25_cb_hold(ax25);
160 hlist_add_head(&ax25->ax25_node, &ax25_list);
286 ax25_cb *ax25 = from_timer(ax25, t, dtimer);
289 sk=ax25->sk;
293 ax25_destroy_socket(ax25);
304 void ax25_destroy_socket(ax25_cb *ax25)
308 ax25_cb_del(ax25);
310 ax25_stop_heartbeat(ax25);
311 ax25_stop_t1timer(ax25);
312 ax25_stop_t2timer(ax25);
313 ax25_stop_t3timer(ax25);
314 ax25_stop_idletimer(ax25);
316 ax25_clear_queues(ax25); /* Flush the queues */
318 if (ax25->sk != NULL) {
319 while ((skb = skb_dequeue(&ax25->sk->sk_receive_queue)) != NULL) {
320 if (skb->sk != ax25->sk) {
336 skb_queue_purge(&ax25->sk->sk_write_queue);
339 if (ax25->sk != NULL) {
340 if (sk_has_allocations(ax25->sk)) {
342 timer_setup(&ax25->dtimer, ax25_destroy_timer, 0);
343 ax25->dtimer.expires = jiffies + 2 * HZ;
344 add_timer(&ax25->dtimer);
346 struct sock *sk=ax25->sk;
347 ax25->sk=NULL;
351 ax25_cb_put(ax25);
365 ax25_cb *ax25;
386 ax25 = ax25_find_cb(&ax25_ctl.source_addr, &ax25_ctl.dest_addr, &digi, ax25_dev->dev);
387 if (!ax25) {
394 ax25_send_control(ax25, AX25_DISC, AX25_POLLON, AX25_COMMAND);
396 if (ax25_dev->dama.slave && ax25->ax25_dev->values[AX25_VALUES_PROTOCOL] == AX25_PROTO_DAMA_SLAVE)
397 ax25_dama_off(ax25);
399 ax25_disconnect(ax25, ENETRESET);
403 if (ax25->modulus == AX25_MODULUS) {
410 ax25->window = ax25_ctl.arg;
416 ax25->rtt = (ax25_ctl.arg * HZ) / 2;
417 ax25->t1 = ax25_ctl.arg * HZ;
423 ax25->t2 = ax25_ctl.arg * HZ;
429 ax25->n2count = 0;
430 ax25->n2 = ax25_ctl.arg;
436 ax25->t3 = ax25_ctl.arg * HZ;
443 ax25->idle = ax25_ctl.arg * 60 * HZ;
449 ax25->paclen = ax25_ctl.arg;
458 ax25_cb_put(ax25);
466 static void ax25_fillin_cb_from_dev(ax25_cb *ax25, ax25_dev *ax25_dev)
468 ax25->rtt = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T1]) / 2;
469 ax25->t1 = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T1]);
470 ax25->t2 = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T2]);
471 ax25->t3 = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T3]);
472 ax25->n2 = ax25_dev->values[AX25_VALUES_N2];
473 ax25->paclen = ax25_dev->values[AX25_VALUES_PACLEN];
474 ax25->idle = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_IDLE]);
475 ax25->backoff = ax25_dev->values[AX25_VALUES_BACKOFF];
478 ax25->modulus = AX25_EMODULUS;
479 ax25->window = ax25_dev->values[AX25_VALUES_EWINDOW];
481 ax25->modulus = AX25_MODULUS;
482 ax25->window = ax25_dev->values[AX25_VALUES_WINDOW];
490 void ax25_fillin_cb(ax25_cb *ax25, ax25_dev *ax25_dev)
492 ax25->ax25_dev = ax25_dev;
494 if (ax25->ax25_dev != NULL) {
495 ax25_fillin_cb_from_dev(ax25, ax25_dev);
502 ax25->rtt = msecs_to_jiffies(AX25_DEF_T1) / 2;
503 ax25->t1 = msecs_to_jiffies(AX25_DEF_T1);
504 ax25->t2 = msecs_to_jiffies(AX25_DEF_T2);
505 ax25->t3 = msecs_to_jiffies(AX25_DEF_T3);
506 ax25->n2 = AX25_DEF_N2;
507 ax25->paclen = AX25_DEF_PACLEN;
508 ax25->idle = msecs_to_jiffies(AX25_DEF_IDLE);
509 ax25->backoff = AX25_DEF_BACKOFF;
512 ax25->modulus = AX25_EMODULUS;
513 ax25->window = AX25_DEF_EWINDOW;
515 ax25->modulus = AX25_MODULUS;
516 ax25->window = AX25_DEF_WINDOW;
525 ax25_cb *ax25;
527 if ((ax25 = kzalloc(sizeof(*ax25), GFP_ATOMIC)) == NULL)
530 refcount_set(&ax25->refcount, 1);
532 skb_queue_head_init(&ax25->write_queue);
533 skb_queue_head_init(&ax25->frag_queue);
534 skb_queue_head_init(&ax25->ack_queue);
535 skb_queue_head_init(&ax25->reseq_queue);
537 ax25_setup_timers(ax25);
539 ax25_fillin_cb(ax25, NULL);
541 ax25->state = AX25_STATE_0;
543 return ax25;
555 ax25_cb *ax25;
571 ax25 = sk_to_ax25(sk);
575 if (ax25->modulus == AX25_MODULUS) {
586 ax25->window = opt;
594 ax25->rtt = (opt * HZ) >> 1;
595 ax25->t1 = opt * HZ;
603 ax25->t2 = opt * HZ;
611 ax25->n2 = opt;
619 ax25->t3 = opt * HZ;
627 ax25->idle = opt * 60 * HZ;
635 ax25->backoff = opt;
639 ax25->modulus = opt ? AX25_EMODULUS : AX25_MODULUS;
643 ax25->pidincl = opt ? 1 : 0;
647 ax25->iamdigi = opt ? 1 : 0;
655 ax25->paclen = opt;
684 ax25->ax25_dev = ax25_dev_ax25dev(dev);
685 if (!ax25->ax25_dev) {
690 ax25_fillin_cb(ax25, ax25->ax25_dev);
706 ax25_cb *ax25;
726 ax25 = sk_to_ax25(sk);
730 val = ax25->window;
734 val = ax25->t1 / HZ;
738 val = ax25->t2 / HZ;
742 val = ax25->n2;
746 val = ax25->t3 / HZ;
750 val = ax25->idle / (60 * HZ);
754 val = ax25->backoff;
758 val = (ax25->modulus == AX25_EMODULUS);
762 val = ax25->pidincl;
766 val = ax25->iamdigi;
770 val = ax25->paclen;
774 ax25_dev = ax25->ax25_dev;
832 ax25_cb *ax25;
892 ax25 = ax25_sk(sk)->cb = ax25_create_cb();
893 if (!ax25) {
904 ax25->sk = sk;
912 ax25_cb *ax25, *oax25;
918 if ((ax25 = ax25_create_cb()) == NULL) {
930 ax25_cb_put(ax25);
946 ax25->modulus = oax25->modulus;
947 ax25->backoff = oax25->backoff;
948 ax25->pidincl = oax25->pidincl;
949 ax25->iamdigi = oax25->iamdigi;
950 ax25->rtt = oax25->rtt;
951 ax25->t1 = oax25->t1;
952 ax25->t2 = oax25->t2;
953 ax25->t3 = oax25->t3;
954 ax25->n2 = oax25->n2;
955 ax25->idle = oax25->idle;
956 ax25->paclen = oax25->paclen;
957 ax25->window = oax25->window;
959 ax25->ax25_dev = ax25_dev;
960 ax25->source_addr = oax25->source_addr;
963 ax25->digipeat = kmemdup(oax25->digipeat, sizeof(ax25_digi),
965 if (ax25->digipeat == NULL) {
967 ax25_cb_put(ax25);
972 ax25_sk(sk)->cb = ax25;
974 ax25->sk = sk;
982 ax25_cb *ax25;
991 ax25 = sk_to_ax25(sk);
992 ax25_dev = ax25->ax25_dev;
995 switch (ax25->state) {
998 ax25_disconnect(ax25, 0);
1000 ax25_destroy_socket(ax25);
1005 ax25_send_control(ax25, AX25_DISC, AX25_POLLON, AX25_COMMAND);
1007 ax25_disconnect(ax25, 0);
1009 if (!sock_flag(ax25->sk, SOCK_DESTROY))
1010 ax25_destroy_socket(ax25);
1015 ax25_clear_queues(ax25);
1016 ax25->n2count = 0;
1018 switch (ax25->ax25_dev->values[AX25_VALUES_PROTOCOL]) {
1021 ax25_send_control(ax25,
1025 ax25_stop_t2timer(ax25);
1026 ax25_stop_t3timer(ax25);
1027 ax25_stop_idletimer(ax25);
1031 ax25_stop_t3timer(ax25);
1032 ax25_stop_idletimer(ax25);
1036 ax25_calculate_t1(ax25);
1037 ax25_start_t1timer(ax25);
1038 ax25->state = AX25_STATE_2;
1052 ax25_destroy_socket(ax25);
1055 del_timer_sync(&ax25->timer);
1056 del_timer_sync(&ax25->t1timer);
1057 del_timer_sync(&ax25->t2timer);
1058 del_timer_sync(&ax25->t3timer);
1059 del_timer_sync(&ax25->idletimer);
1084 ax25_cb *ax25;
1112 ax25 = sk_to_ax25(sk);
1118 ax25->source_addr = call;
1123 if (ax25->ax25_dev != NULL)
1140 ax25_fillin_cb(ax25, ax25_dev);
1145 ax25_cb_add(ax25);
1161 ax25_cb *ax25 = sk_to_ax25(sk), *ax25t;
1215 kfree(ax25->digipeat);
1216 ax25->digipeat = NULL;
1242 AX25_HBIT) && ax25->iamdigi) {
1262 if ((err = ax25_rt_autobind(ax25, &fsa->fsa_ax25.sax25_call)) < 0) {
1267 ax25_fillin_cb(ax25, ax25->ax25_dev);
1268 ax25_cb_add(ax25);
1270 if (ax25->ax25_dev == NULL) {
1278 (ax25t=ax25_find_cb(&ax25->source_addr, &fsa->fsa_ax25.sax25_call, digi,
1279 ax25->ax25_dev->dev))) {
1286 ax25->dest_addr = fsa->fsa_ax25.sax25_call;
1287 ax25->digipeat = digi;
1300 switch (ax25->ax25_dev->values[AX25_VALUES_PROTOCOL]) {
1303 ax25_std_establish_data_link(ax25);
1308 ax25->modulus = AX25_MODULUS;
1309 ax25->window = ax25->ax25_dev->values[AX25_VALUES_WINDOW];
1310 if (ax25->ax25_dev->dama.slave)
1311 ax25_ds_establish_data_link(ax25);
1313 ax25_std_establish_data_link(ax25);
1318 ax25->state = AX25_STATE_1;
1320 ax25_start_heartbeat(ax25);
1441 ax25_cb *ax25;
1446 ax25 = sk_to_ax25(sk);
1455 fsa->fsa_ax25.sax25_call = ax25->dest_addr;
1457 if (ax25->digipeat != NULL) {
1458 ndigi = ax25->digipeat->ndigi;
1462 ax25->digipeat->calls[i];
1466 fsa->fsa_ax25.sax25_call = ax25->source_addr;
1468 if (ax25->ax25_dev != NULL) {
1470 ax25->ax25_dev->dev->dev_addr, AX25_ADDR_LEN);
1490 ax25_cb *ax25;
1498 ax25 = sk_to_ax25(sk);
1511 if (ax25->ax25_dev == NULL) {
1516 if (len > ax25->ax25_dev->dev->mtu) {
1568 ax25cmp(&ax25->dest_addr, &sax.sax25_call)) {
1587 sax.sax25_call = ax25->dest_addr;
1588 dp = ax25->digipeat;
1593 size = len + ax25->ax25_dev->dev->hard_header_len;
1611 if (!ax25->pidincl)
1623 ax25_output(ax25, ax25->paclen, skb);
1634 lv = ax25_addr_build(skb->data, &ax25->source_addr, &sax.sax25_call,
1642 ax25_queue_xmit(skb, ax25->ax25_dev->dev);
1831 ax25_cb *ax25 = sk_to_ax25(sk);
1834 ax25_info.t1 = ax25->t1 / HZ;
1835 ax25_info.t2 = ax25->t2 / HZ;
1836 ax25_info.t3 = ax25->t3 / HZ;
1837 ax25_info.idle = ax25->idle / (60 * HZ);
1838 ax25_info.n2 = ax25->n2;
1839 ax25_info.t1timer = ax25_display_timer(&ax25->t1timer) / HZ;
1840 ax25_info.t2timer = ax25_display_timer(&ax25->t2timer) / HZ;
1841 ax25_info.t3timer = ax25_display_timer(&ax25->t3timer) / HZ;
1842 ax25_info.idletimer = ax25_display_timer(&ax25->idletimer) / (60 * HZ);
1843 ax25_info.n2count = ax25->n2count;
1844 ax25_info.state = ax25->state;
1847 ax25_info.vs = ax25->vs;
1848 ax25_info.vr = ax25->vr;
1849 ax25_info.va = ax25->va;
1850 ax25_info.vs_max = ax25->vs; /* reserved */
1851 ax25_info.paclen = ax25->paclen;
1852 ax25_info.window = ax25->window;
1936 ax25_cb *ax25 = hlist_entry(v, struct ax25_cb, ax25_node);
1947 ax25,
1948 ax25->ax25_dev == NULL? "???" : ax25->ax25_dev->dev->name,
1949 ax2asc(buf, &ax25->source_addr),
1950 ax25->iamdigi? "*":"");
1951 seq_printf(seq, "%s", ax2asc(buf, &ax25->dest_addr));
1953 for (k=0; (ax25->digipeat != NULL) && (k < ax25->digipeat->ndigi); k++) {
1955 ax2asc(buf, &ax25->digipeat->calls[k]),
1956 ax25->digipeat->repeated[k]? "*":"");
1960 ax25->state,
1961 ax25->vs, ax25->vr, ax25->va,
1962 ax25_display_timer(&ax25->t1timer) / HZ, ax25->t1 / HZ,
1963 ax25_display_timer(&ax25->t2timer) / HZ, ax25->t2 / HZ,
1964 ax25_display_timer(&ax25->t3timer) / HZ, ax25->t3 / HZ,
1965 ax25_display_timer(&ax25->idletimer) / (60 * HZ),
1966 ax25->idle / (60 * HZ),
1967 ax25->n2count, ax25->n2,
1968 ax25->rtt / HZ,
1969 ax25->window,
1970 ax25->paclen);
1972 if (ax25->sk != NULL) {
1974 sk_wmem_alloc_get(ax25->sk),
1975 sk_rmem_alloc_get(ax25->sk),
1976 sock_i_ino(ax25->sk));
2043 proc_create_seq("ax25", 0444, init_net.proc_net, &ax25_info_seqops);
2060 remove_proc_entry("ax25", init_net.proc_net);