taglinefilesource code
ax25155include/net/sock.hax25_cb      *ax25;
ax25159net/ax25/af_ax25.cstatic void ax25_remove_socket(ax25_cb *ax25)
ax25167net/ax25/af_ax25.cif ((s = ax25_list) == ax25) {
ax25174net/ax25/af_ax25.cif (s->next == ax25) {
ax25175net/ax25/af_ax25.cs->next = ax25->next;
ax25225net/ax25/af_ax25.cstatic void ax25_insert_socket(ax25_cb *ax25)
ax25232net/ax25/af_ax25.cax25->next = ax25_list;
ax25233net/ax25/af_ax25.cax25_list  = ax25;
ax25375net/ax25/af_ax25.cvoid ax25_destroy_socket(ax25_cb *ax25)  /* Not static as its used by the timer */
ax25383net/ax25/af_ax25.cdel_timer(&ax25->timer);
ax25385net/ax25/af_ax25.cax25_remove_socket(ax25);
ax25386net/ax25/af_ax25.cax25_clear_tx_queue(ax25);  /* Flush the send queue */
ax25388net/ax25/af_ax25.cif (ax25->sk != NULL) {
ax25389net/ax25/af_ax25.cwhile ((skb = skb_dequeue(&ax25->sk->receive_queue)) != NULL) {
ax25390net/ax25/af_ax25.cif (skb->sk != ax25->sk) {      /* A pending connection */
ax25392net/ax25/af_ax25.cax25_set_timer(skb->sk->ax25);
ax25393net/ax25/af_ax25.cskb->sk->ax25->state = AX25_STATE_0;
ax25400net/ax25/af_ax25.cif (ax25->digipeat != NULL) {
ax25401net/ax25/af_ax25.ckfree_s(ax25->digipeat, sizeof(ax25_digi));
ax25402net/ax25/af_ax25.cax25->digipeat = NULL;
ax25405net/ax25/af_ax25.cif (ax25->sk != NULL) {
ax25406net/ax25/af_ax25.cif (ax25->sk->wmem_alloc || ax25->sk->rmem_alloc) { /* Defer: outstanding buffers */
ax25407net/ax25/af_ax25.cinit_timer(&ax25->timer);
ax25408net/ax25/af_ax25.cax25->timer.expires  = 10 * HZ;
ax25409net/ax25/af_ax25.cax25->timer.function = ax25_destroy_timer;
ax25410net/ax25/af_ax25.cax25->timer.data     = (unsigned long)ax25;
ax25411net/ax25/af_ax25.cadd_timer(&ax25->timer);
ax25413net/ax25/af_ax25.ckfree_s(ax25->sk, sizeof(*ax25->sk));
ax25414net/ax25/af_ax25.ckfree_s(ax25, sizeof(*ax25));
ax25417net/ax25/af_ax25.ckfree_s(ax25, sizeof(*ax25));
ax25494net/ax25/af_ax25.cax25_cb *ax25;
ax25496net/ax25/af_ax25.cif ((ax25 = (ax25_cb *)kmalloc(sizeof(*ax25), GFP_ATOMIC)) == NULL)
ax25499net/ax25/af_ax25.cskb_queue_head_init(&ax25->write_queue);
ax25500net/ax25/af_ax25.cskb_queue_head_init(&ax25->ack_queue);
ax25502net/ax25/af_ax25.cinit_timer(&ax25->timer);
ax25504net/ax25/af_ax25.cax25->rtt     = DEFAULT_T1;
ax25505net/ax25/af_ax25.cax25->t1      = DEFAULT_T1;
ax25506net/ax25/af_ax25.cax25->t2      = DEFAULT_T2;
ax25507net/ax25/af_ax25.cax25->n2      = DEFAULT_N2;
ax25508net/ax25/af_ax25.cax25->t3      = DEFAULT_T3;
ax25510net/ax25/af_ax25.cax25->condition = 0x00;
ax25511net/ax25/af_ax25.cax25->t1timer   = 0;
ax25512net/ax25/af_ax25.cax25->t2timer   = 0;
ax25513net/ax25/af_ax25.cax25->t3timer   = 0;
ax25514net/ax25/af_ax25.cax25->n2count   = 0;
ax25516net/ax25/af_ax25.cax25->va      = 0;
ax25517net/ax25/af_ax25.cax25->vr      = 0;
ax25518net/ax25/af_ax25.cax25->vs      = 0;
ax25520net/ax25/af_ax25.cax25->window   = DEFAULT_WINDOW;
ax25521net/ax25/af_ax25.cax25->device   = NULL;
ax25522net/ax25/af_ax25.cax25->digipeat = NULL;
ax25523net/ax25/af_ax25.cax25->sk       = NULL;
ax25525net/ax25/af_ax25.cax25->state    = AX25_STATE_0;
ax25527net/ax25/af_ax25.cmemset(&ax25->dest_addr,   '\0', sizeof(ax25_address));
ax25528net/ax25/af_ax25.cmemset(&ax25->source_addr, '\0', sizeof(ax25_address));
ax25530net/ax25/af_ax25.creturn ax25;
ax25535net/ax25/af_ax25.cax25_cb *ax25;
ax25545net/ax25/af_ax25.cfor (ax25 = ax25_list; ax25 != NULL; ax25 = ax25->next) {
ax25546net/ax25/af_ax25.cif (ax25->sk != NULL && ax25->sk->type != SOCK_SEQPACKET)
ax25549net/ax25/af_ax25.cif (ax25cmp(&ax25->source_addr, src) == 0 && ax25cmp(&ax25->dest_addr, dest) == 0 && ax25->device == dev) {
ax25550net/ax25/af_ax25.cax25_output(ax25, skb);
ax25555net/ax25/af_ax25.cif ((ax25 = ax25_create_cb()) == NULL)
ax25558net/ax25/af_ax25.cax25->device = dev;
ax25560net/ax25/af_ax25.cmemcpy(&ax25->source_addr, src,  sizeof(ax25_address));
ax25561net/ax25/af_ax25.cmemcpy(&ax25->dest_addr,   dest, sizeof(ax25_address));
ax25563net/ax25/af_ax25.cax25_establish_data_link(ax25);
ax25564net/ax25/af_ax25.cax25_insert_socket(ax25);
ax25566net/ax25/af_ax25.cax25->state = AX25_STATE_1;
ax25568net/ax25/af_ax25.cax25_set_timer(ax25);
ax25570net/ax25/af_ax25.cax25_output(ax25, skb);
ax25636net/ax25/af_ax25.csk->ax25->window = opt;
ax25642net/ax25/af_ax25.csk->ax25->t1 = opt * PR_SLOWHZ;
ax25648net/ax25/af_ax25.csk->ax25->t2 = opt * PR_SLOWHZ;
ax25654net/ax25/af_ax25.csk->ax25->n2 = opt;
ax25660net/ax25/af_ax25.csk->ax25->t3 = opt * PR_SLOWHZ;
ax25685net/ax25/af_ax25.cval = sk->ax25->window;
ax25689net/ax25/af_ax25.cval = sk->ax25->t1 / PR_SLOWHZ;
ax25693net/ax25/af_ax25.cval = sk->ax25->t2 / PR_SLOWHZ;
ax25697net/ax25/af_ax25.cval = sk->ax25->n2;
ax25701net/ax25/af_ax25.cval = sk->ax25->t3 / PR_SLOWHZ;
ax25749net/ax25/af_ax25.cax25_cb *ax25;
ax25754net/ax25/af_ax25.cif ((ax25 = ax25_create_cb()) == NULL) {
ax25771net/ax25/af_ax25.ckfree_s((void *)ax25, sizeof(*ax25));
ax25811net/ax25/af_ax25.cax25->sk = sk;
ax25812net/ax25/af_ax25.csk->ax25 = ax25;
ax25820net/ax25/af_ax25.cax25_cb *ax25;
ax25825net/ax25/af_ax25.cif ((ax25 = ax25_create_cb()) == NULL) {
ax25841net/ax25/af_ax25.ckfree_s((void *)ax25, sizeof(*ax25));
ax25877net/ax25/af_ax25.cax25->rtt    = osk->ax25->rtt;
ax25878net/ax25/af_ax25.cax25->t1     = osk->ax25->t1;
ax25879net/ax25/af_ax25.cax25->t2     = osk->ax25->t2;
ax25880net/ax25/af_ax25.cax25->t3     = osk->ax25->t3;
ax25881net/ax25/af_ax25.cax25->n2     = osk->ax25->n2;
ax25883net/ax25/af_ax25.cax25->window = osk->ax25->window;
ax25884net/ax25/af_ax25.cax25->device = dev;
ax25886net/ax25/af_ax25.cmemcpy(&ax25->source_addr, &osk->ax25->source_addr, sizeof(ax25_address));
ax25888net/ax25/af_ax25.cif (osk->ax25->digipeat != NULL) {
ax25889net/ax25/af_ax25.cif ((ax25->digipeat = (ax25_digi *)kmalloc(sizeof(ax25_digi), GFP_ATOMIC)) == NULL) {
ax25891net/ax25/af_ax25.ckfree_s(ax25, sizeof(*ax25));
ax25896net/ax25/af_ax25.csk->ax25 = ax25;
ax25897net/ax25/af_ax25.cax25->sk = sk;
ax25916net/ax25/af_ax25.cswitch (sk->ax25->state) {
ax25920net/ax25/af_ax25.cax25_destroy_socket(sk->ax25);
ax25924net/ax25/af_ax25.cax25_send_control(sk->ax25, DISC | PF, C_RESPONSE);
ax25925net/ax25/af_ax25.csk->ax25->state = AX25_STATE_0;
ax25928net/ax25/af_ax25.cax25_destroy_socket(sk->ax25);
ax25932net/ax25/af_ax25.cax25_send_control(sk->ax25, DM | PF, C_RESPONSE);
ax25933net/ax25/af_ax25.csk->ax25->state = AX25_STATE_0;
ax25936net/ax25/af_ax25.cax25_destroy_socket(sk->ax25);
ax25941net/ax25/af_ax25.cax25_clear_tx_queue(sk->ax25);
ax25942net/ax25/af_ax25.csk->ax25->n2count = 0;
ax25943net/ax25/af_ax25.cax25_send_control(sk->ax25, DISC | PF, C_COMMAND);
ax25944net/ax25/af_ax25.csk->ax25->t3timer = 0;
ax25945net/ax25/af_ax25.csk->ax25->t1timer = sk->ax25->t1 = ax25_calculate_t1(sk->ax25);
ax25946net/ax25/af_ax25.csk->ax25->state   = AX25_STATE_2;
ax25957net/ax25/af_ax25.cax25_destroy_socket(sk->ax25);
ax25999net/ax25/af_ax25.cmemcpy(&sk->ax25->source_addr, &addr->fsa_ax25.sax25_call, sizeof(ax25_address));
ax251001net/ax25/af_ax25.cmemcpy(&sk->ax25->source_addr, call, sizeof(ax25_address));
ax251017net/ax25/af_ax25.csk->ax25->device = dev;
ax251018net/ax25/af_ax25.cax25_insert_socket(sk->ax25);
ax251066net/ax25/af_ax25.cif (sk->ax25->digipeat == NULL) {
ax251067net/ax25/af_ax25.cif ((sk->ax25->digipeat = (ax25_digi *)kmalloc(sizeof(ax25_digi), GFP_KERNEL)) == NULL)
ax251071net/ax25/af_ax25.csk->ax25->digipeat->ndigi = ndigi;
ax251074net/ax25/af_ax25.csk->ax25->digipeat->repeated[ct] = 0;
ax251075net/ax25/af_ax25.cmemcpy(&sk->ax25->digipeat->calls[ct], &ap[ct], sizeof(ax25_address));
ax251079net/ax25/af_ax25.csk->ax25->digipeat->lastrepeat = 0;
ax251087net/ax25/af_ax25.cif ((err = ax25_rt_autobind(sk->ax25, &addr->sax25_call)) < 0)
ax251089net/ax25/af_ax25.cax25_insert_socket(sk->ax25);    /* Finish the bind */
ax251092net/ax25/af_ax25.cif (sk->type == SOCK_SEQPACKET && ax25_find_cb(&sk->ax25->source_addr, &addr->sax25_call, sk->ax25->device) != NULL)
ax251095net/ax25/af_ax25.cmemcpy(&sk->ax25->dest_addr, &addr->sax25_call, sizeof(ax25_address));
ax251107net/ax25/af_ax25.cax25_establish_data_link(sk->ax25);
ax251108net/ax25/af_ax25.csk->ax25->state     = AX25_STATE_1;
ax251109net/ax25/af_ax25.cax25_set_timer(sk->ax25);    /* Start going SABM SABM until a UA or a give up and DM */
ax251206net/ax25/af_ax25.caddr = &sk->ax25->dest_addr;
ax251208net/ax25/af_ax25.caddr = &sk->ax25->source_addr;
ax251217net/ax25/af_ax25.cif (sk->ax25->digipeat != NULL) {
ax251218net/ax25/af_ax25.cndigi = sk->ax25->digipeat->ndigi;
ax251222net/ax25/af_ax25.cmemcpy(&sax->fsa_digipeater[i], &sk->ax25->digipeat->calls[i], sizeof(ax25_address));
ax251235net/ax25/af_ax25.cax25_cb *ax25;
ax251357net/ax25/af_ax25.cif ((ax25 = ax25_find_cb(&dest, &src, dev)) != NULL) {
ax251362net/ax25/af_ax25.cif (ax25_process_rx_frame(ax25, skb, type) == 0)
ax251389net/ax25/af_ax25.cax25 = make->ax25;
ax251394net/ax25/af_ax25.cif (dp.ndigi != 0 && ax25->digipeat == NULL && (ax25->digipeat = kmalloc(sizeof(ax25_digi), GFP_ATOMIC)) == NULL) {
ax251396net/ax25/af_ax25.cax25_destroy_socket(ax25);
ax251401net/ax25/af_ax25.cif (ax25->digipeat != NULL) {
ax251402net/ax25/af_ax25.ckfree_s(ax25->digipeat, sizeof(ax25_digi));
ax251403net/ax25/af_ax25.cax25->digipeat = NULL;
ax251407net/ax25/af_ax25.cax25_digi_invert(&dp, ax25->digipeat);
ax251430net/ax25/af_ax25.cif ((ax25 = ax25_create_cb()) == NULL) {
ax251444net/ax25/af_ax25.cmemcpy(&ax25->source_addr, &dest, sizeof(ax25_address));
ax251445net/ax25/af_ax25.cmemcpy(&ax25->dest_addr,   &src,  sizeof(ax25_address));
ax251447net/ax25/af_ax25.cax25->device = dev;
ax251449net/ax25/af_ax25.cax25_send_control(ax25, UA | PF, C_RESPONSE);
ax251451net/ax25/af_ax25.cax25->t3timer = ax25->t3;
ax251452net/ax25/af_ax25.cax25->state   = AX25_STATE_3;
ax251454net/ax25/af_ax25.cax25_insert_socket(ax25);
ax251456net/ax25/af_ax25.cax25_set_timer(ax25);
ax251495net/ax25/af_ax25.cif (sk->ax25->device == NULL)
ax251530net/ax25/af_ax25.cif (sk->type == SOCK_SEQPACKET && memcmp(&sk->ax25->dest_addr, &sax.sax25_call, sizeof(ax25_address)) != 0)
ax251542net/ax25/af_ax25.cmemcpy(&sax.sax25_call, &sk->ax25->dest_addr, sizeof(ax25_address));
ax251543net/ax25/af_ax25.cdp = sk->ax25->digipeat;
ax251573net/ax25/af_ax25.casmptr   += (lv = build_ax25_addr(asmptr, &sk->ax25->source_addr, &sax.sax25_call, dp, C_COMMAND));
ax251596net/ax25/af_ax25.cax25_output(sk->ax25, skb);  /* Shove it onto the queue and kick */
ax251600net/ax25/af_ax25.cdev_queue_xmit(skb, sk->ax25->device, SOPRI_NORMAL);
ax251784net/ax25/af_ax25.cax25_cb *ax25;
ax251795net/ax25/af_ax25.cfor (ax25 = ax25_list; ax25 != NULL; ax25 = ax25->next) {
ax251796net/ax25/af_ax25.cif ((dev = ax25->device) == NULL)
ax251802net/ax25/af_ax25.cax2asc(&ax25->dest_addr));
ax251804net/ax25/af_ax25.cax2asc(&ax25->source_addr), devname,
ax251805net/ax25/af_ax25.cax25->state,
ax251806net/ax25/af_ax25.cax25->vs, ax25->vr, ax25->va,
ax251807net/ax25/af_ax25.cax25->t1timer / PR_SLOWHZ,
ax251808net/ax25/af_ax25.cax25->t1      / PR_SLOWHZ,
ax251809net/ax25/af_ax25.cax25->t2timer / PR_SLOWHZ,
ax251810net/ax25/af_ax25.cax25->t2      / PR_SLOWHZ,
ax251811net/ax25/af_ax25.cax25->t3timer / PR_SLOWHZ,
ax251812net/ax25/af_ax25.cax25->t3      / PR_SLOWHZ,
ax251813net/ax25/af_ax25.cax25->n2count, ax25->n2,
ax251814net/ax25/af_ax25.cax25->rtt     / PR_SLOWHZ,
ax251815net/ax25/af_ax25.cax25->window);
ax251817net/ax25/af_ax25.cif (ax25->sk != NULL) {
ax251819net/ax25/af_ax25.cax25->sk->wmem_alloc,
ax251820net/ax25/af_ax25.cax25->sk->rmem_alloc);
ax2560net/ax25/ax25_in.cstatic int ax25_rx_iframe(ax25_cb *ax25, struct sk_buff *skb, unsigned char *iframe)
ax2568net/ax25/ax25_in.cif (ax25->digipeat == NULL)
ax2569net/ax25/ax25_in.cqueued = nr_route_frame(skb, ax25->device);
ax2574net/ax25/ax25_in.cax25_ip_mode_set(&ax25->dest_addr, ax25->device, 'V');
ax2582net/ax25/ax25_in.cif (ax25->sk != NULL) {
ax2583net/ax25/ax25_in.cif (sock_queue_rcv_skb(ax25->sk, skb) == 0) {
ax2586net/ax25/ax25_in.cax25->condition |= OWN_RX_BUSY_CONDITION;
ax25103net/ax25/ax25_in.cstatic int ax25_state1_machine(ax25_cb *ax25, struct sk_buff *skb, unsigned char *frame, int frametype, int type)
ax25109net/ax25/ax25_in.cax25_send_control(ax25, UA | pf, C_RESPONSE);
ax25113net/ax25/ax25_in.cax25_send_control(ax25, DM | pf, C_RESPONSE);
ax25118net/ax25/ax25_in.cax25_calculate_rtt(ax25);
ax25119net/ax25/ax25_in.cax25->t1timer = 0;
ax25120net/ax25/ax25_in.cax25->t3timer = ax25->t3;
ax25121net/ax25/ax25_in.cax25->vs      = 0;
ax25122net/ax25/ax25_in.cax25->va      = 0;
ax25123net/ax25/ax25_in.cax25->vr      = 0;
ax25124net/ax25/ax25_in.cax25->state   = AX25_STATE_3;
ax25125net/ax25/ax25_in.cax25->n2count = 0;
ax25126net/ax25/ax25_in.cif (ax25->sk != NULL) {
ax25127net/ax25/ax25_in.cax25->sk->state = TCP_ESTABLISHED;
ax25129net/ax25/ax25_in.cif (!ax25->sk->dead)
ax25130net/ax25/ax25_in.cax25->sk->state_change(ax25->sk);
ax25137net/ax25/ax25_in.cax25_clear_tx_queue(ax25);
ax25138net/ax25/ax25_in.cax25->state = AX25_STATE_0;
ax25139net/ax25/ax25_in.cif (ax25->sk != NULL) {
ax25140net/ax25/ax25_in.cax25->sk->state = TCP_CLOSE;
ax25141net/ax25/ax25_in.cax25->sk->err   = ECONNREFUSED;
ax25142net/ax25/ax25_in.cif (!ax25->sk->dead)
ax25143net/ax25/ax25_in.cax25->sk->state_change(ax25->sk);
ax25144net/ax25/ax25_in.cax25->sk->dead  = 1;
ax25161net/ax25/ax25_in.cstatic int ax25_state2_machine(ax25_cb *ax25, struct sk_buff *skb, unsigned char *frame, int frametype, int type)
ax25167net/ax25/ax25_in.cax25_send_control(ax25, DM | pf, C_RESPONSE);
ax25171net/ax25/ax25_in.cax25_send_control(ax25, UA | pf, C_RESPONSE);
ax25176net/ax25/ax25_in.cax25->state = AX25_STATE_0;
ax25177net/ax25/ax25_in.cif (ax25->sk != NULL) {
ax25178net/ax25/ax25_in.cax25->sk->state = TCP_CLOSE;
ax25179net/ax25/ax25_in.cax25->sk->err   = 0;
ax25180net/ax25/ax25_in.cif (!ax25->sk->dead)
ax25181net/ax25/ax25_in.cax25->sk->state_change(ax25->sk);
ax25182net/ax25/ax25_in.cax25->sk->dead  = 1;
ax25189net/ax25/ax25_in.cax25->state = AX25_STATE_0;
ax25190net/ax25/ax25_in.cif (ax25->sk != NULL) {
ax25191net/ax25/ax25_in.cax25->sk->state = TCP_CLOSE;
ax25192net/ax25/ax25_in.cax25->sk->err   = 0;
ax25193net/ax25/ax25_in.cif (!ax25->sk->dead)
ax25194net/ax25/ax25_in.cax25->sk->state_change(ax25->sk);
ax25195net/ax25/ax25_in.cax25->sk->dead  = 1;
ax25205net/ax25/ax25_in.cax25_send_control(ax25, DM | PF, C_RESPONSE);
ax25220net/ax25/ax25_in.cstatic int ax25_state3_machine(ax25_cb *ax25, struct sk_buff *skb, unsigned char *frame, int frametype, int type)
ax25229net/ax25/ax25_in.cax25_send_control(ax25, UA | pf, C_RESPONSE);
ax25230net/ax25/ax25_in.cax25->condition = 0x00;
ax25231net/ax25/ax25_in.cax25->t1timer   = 0;
ax25232net/ax25/ax25_in.cax25->t3timer   = ax25->t3;
ax25233net/ax25/ax25_in.cax25->vs        = 0;
ax25234net/ax25/ax25_in.cax25->va        = 0;
ax25235net/ax25/ax25_in.cax25->vr        = 0;
ax25239net/ax25/ax25_in.cax25_clear_tx_queue(ax25);
ax25240net/ax25/ax25_in.cax25_send_control(ax25, UA | pf, C_RESPONSE);
ax25241net/ax25/ax25_in.cax25->t3timer = 0;
ax25242net/ax25/ax25_in.cax25->state   = AX25_STATE_0;
ax25243net/ax25/ax25_in.cif (ax25->sk != NULL) {
ax25244net/ax25/ax25_in.cax25->sk->state = TCP_CLOSE;
ax25245net/ax25/ax25_in.cax25->sk->err   = 0;
ax25246net/ax25/ax25_in.cif (!ax25->sk->dead)
ax25247net/ax25/ax25_in.cax25->sk->state_change(ax25->sk);
ax25248net/ax25/ax25_in.cax25->sk->dead  = 1;
ax25253net/ax25/ax25_in.cax25_establish_data_link(ax25);
ax25254net/ax25/ax25_in.cax25->state = AX25_STATE_1;
ax25258net/ax25/ax25_in.cax25_clear_tx_queue(ax25);
ax25259net/ax25/ax25_in.cax25->t3timer = 0;
ax25260net/ax25/ax25_in.cax25->state   = AX25_STATE_0;
ax25261net/ax25/ax25_in.cif (ax25->sk) {
ax25262net/ax25/ax25_in.cax25->sk->state = TCP_CLOSE;
ax25263net/ax25/ax25_in.cax25->sk->err   = ECONNRESET;
ax25264net/ax25/ax25_in.cif (!ax25->sk->dead)
ax25265net/ax25/ax25_in.cax25->sk->state_change(ax25->sk);
ax25266net/ax25/ax25_in.cax25->sk->dead         = 1;
ax25271net/ax25/ax25_in.cax25->condition |= PEER_RX_BUSY_CONDITION;
ax25272net/ax25/ax25_in.cax25_check_need_response(ax25, type, pf);
ax25273net/ax25/ax25_in.cif (ax25_validate_nr(ax25, nr)) {
ax25274net/ax25/ax25_in.cax25_check_iframes_acked(ax25, nr);
ax25276net/ax25/ax25_in.cax25_nr_error_recovery(ax25);
ax25277net/ax25/ax25_in.cax25->state = AX25_STATE_1;
ax25282net/ax25/ax25_in.cax25->condition &= ~PEER_RX_BUSY_CONDITION;
ax25283net/ax25/ax25_in.cax25_check_need_response(ax25, type, pf);
ax25284net/ax25/ax25_in.cif (ax25_validate_nr(ax25, nr)) {
ax25285net/ax25/ax25_in.cax25_check_iframes_acked(ax25, nr);
ax25287net/ax25/ax25_in.cax25_nr_error_recovery(ax25);
ax25288net/ax25/ax25_in.cax25->state = AX25_STATE_1;
ax25293net/ax25/ax25_in.cax25->condition &= ~PEER_RX_BUSY_CONDITION;
ax25294net/ax25/ax25_in.cax25_check_need_response(ax25, type, pf);
ax25295net/ax25/ax25_in.cif (ax25_validate_nr(ax25, nr)) {
ax25296net/ax25/ax25_in.cax25_frames_acked(ax25, nr);
ax25297net/ax25/ax25_in.cax25_calculate_rtt(ax25);
ax25298net/ax25/ax25_in.cax25->t1timer = 0;
ax25299net/ax25/ax25_in.cax25->t3timer = ax25->t3;
ax25301net/ax25/ax25_in.cax25_nr_error_recovery(ax25);
ax25302net/ax25/ax25_in.cax25->state = AX25_STATE_1;
ax25309net/ax25/ax25_in.cif (!ax25_validate_nr(ax25, nr)) {
ax25310net/ax25/ax25_in.cax25_nr_error_recovery(ax25);
ax25311net/ax25/ax25_in.cax25->state = AX25_STATE_1;
ax25314net/ax25/ax25_in.cif (ax25->condition & PEER_RX_BUSY_CONDITION) {
ax25315net/ax25/ax25_in.cax25_frames_acked(ax25, nr);
ax25317net/ax25/ax25_in.cax25_check_iframes_acked(ax25, nr);
ax25319net/ax25/ax25_in.cif (ax25->condition & OWN_RX_BUSY_CONDITION) {
ax25320net/ax25/ax25_in.cif (pf) ax25_enquiry_response(ax25);
ax25323net/ax25/ax25_in.cif (ns == ax25->vr) {
ax25324net/ax25/ax25_in.cqueued = ax25_rx_iframe(ax25, skb, frame);
ax25325net/ax25/ax25_in.cif (ax25->condition & OWN_RX_BUSY_CONDITION) {
ax25326net/ax25/ax25_in.cif (pf) ax25_enquiry_response(ax25);
ax25329net/ax25/ax25_in.cax25->vr = (ax25->vr + 1) % MODULUS;
ax25330net/ax25/ax25_in.cax25->condition &= ~REJECT_CONDITION;
ax25332net/ax25/ax25_in.cax25_enquiry_response(ax25);
ax25334net/ax25/ax25_in.cif (!(ax25->condition & ACK_PENDING_CONDITION)) {
ax25335net/ax25/ax25_in.cax25->t2timer = ax25->t2;
ax25336net/ax25/ax25_in.cax25->condition |= ACK_PENDING_CONDITION;
ax25340net/ax25/ax25_in.cif (ax25->condition & REJECT_CONDITION) {
ax25341net/ax25/ax25_in.cif (pf) ax25_enquiry_response(ax25);
ax25343net/ax25/ax25_in.cax25->condition |= REJECT_CONDITION;
ax25344net/ax25/ax25_in.cax25_send_control(ax25, REJ | pf, C_RESPONSE);
ax25345net/ax25/ax25_in.cax25->condition &= ~ACK_PENDING_CONDITION;
ax25352net/ax25/ax25_in.cax25_establish_data_link(ax25);
ax25353net/ax25/ax25_in.cax25->state = AX25_STATE_1;
ax25368net/ax25/ax25_in.cstatic int ax25_state4_machine(ax25_cb *ax25, struct sk_buff *skb, unsigned char *frame, int frametype, int type)
ax25377net/ax25/ax25_in.cax25_send_control(ax25, UA | pf, C_RESPONSE);
ax25378net/ax25/ax25_in.cax25->condition = 0x00;
ax25379net/ax25/ax25_in.cax25->t1timer   = 0;
ax25380net/ax25/ax25_in.cax25->t3timer   = ax25->t3;
ax25381net/ax25/ax25_in.cax25->vs        = 0;
ax25382net/ax25/ax25_in.cax25->va        = 0;
ax25383net/ax25/ax25_in.cax25->vr        = 0;
ax25384net/ax25/ax25_in.cax25->state     = AX25_STATE_3;
ax25385net/ax25/ax25_in.cax25->n2count   = 0;
ax25389net/ax25/ax25_in.cax25_clear_tx_queue(ax25);
ax25390net/ax25/ax25_in.cax25_send_control(ax25, UA | pf, C_RESPONSE);
ax25391net/ax25/ax25_in.cax25->t3timer = 0;
ax25392net/ax25/ax25_in.cax25->state   = AX25_STATE_0;
ax25393net/ax25/ax25_in.cif (ax25->sk != NULL) {
ax25394net/ax25/ax25_in.cax25->sk->state = TCP_CLOSE;
ax25395net/ax25/ax25_in.cax25->sk->err   = 0;
ax25396net/ax25/ax25_in.cif (!ax25->sk->dead)
ax25397net/ax25/ax25_in.cax25->sk->state_change(ax25->sk);
ax25398net/ax25/ax25_in.cax25->sk->dead  = 1;
ax25403net/ax25/ax25_in.cax25_establish_data_link(ax25);
ax25404net/ax25/ax25_in.cax25->state = AX25_STATE_1;
ax25408net/ax25/ax25_in.cax25_clear_tx_queue(ax25);
ax25409net/ax25/ax25_in.cax25->t3timer = 0;
ax25410net/ax25/ax25_in.cax25->state   = AX25_STATE_0;
ax25411net/ax25/ax25_in.cif (ax25->sk != NULL) {
ax25412net/ax25/ax25_in.cax25->sk->state = TCP_CLOSE;
ax25413net/ax25/ax25_in.cax25->sk->err   = ECONNRESET;
ax25414net/ax25/ax25_in.cif (!ax25->sk->dead)
ax25415net/ax25/ax25_in.cax25->sk->state_change(ax25->sk);
ax25416net/ax25/ax25_in.cax25->sk->dead  = 1;
ax25421net/ax25/ax25_in.cax25->condition |= PEER_RX_BUSY_CONDITION;
ax25423net/ax25/ax25_in.cax25->t1timer = 0;
ax25424net/ax25/ax25_in.cif (ax25_validate_nr(ax25, nr)) {
ax25425net/ax25/ax25_in.cax25_frames_acked(ax25, nr);
ax25426net/ax25/ax25_in.cif (ax25->vs == ax25->va) {
ax25427net/ax25/ax25_in.cax25->t3timer = ax25->t3;
ax25428net/ax25/ax25_in.cax25->n2count = 0;
ax25429net/ax25/ax25_in.cax25->state   = AX25_STATE_3;
ax25432net/ax25/ax25_in.cax25_nr_error_recovery(ax25);
ax25433net/ax25/ax25_in.cax25->state = AX25_STATE_1;
ax25438net/ax25/ax25_in.cax25_enquiry_response(ax25);
ax25439net/ax25/ax25_in.cif (ax25_validate_nr(ax25, nr)) {
ax25440net/ax25/ax25_in.cax25_frames_acked(ax25, nr);
ax25442net/ax25/ax25_in.cax25_nr_error_recovery(ax25);
ax25443net/ax25/ax25_in.cax25->state = AX25_STATE_1;
ax25448net/ax25/ax25_in.cax25->condition &= ~PEER_RX_BUSY_CONDITION;
ax25450net/ax25/ax25_in.cax25->t1timer = 0;
ax25451net/ax25/ax25_in.cif (ax25_validate_nr(ax25, nr)) {
ax25452net/ax25/ax25_in.cax25_frames_acked(ax25, nr);
ax25453net/ax25/ax25_in.cif (ax25->vs == ax25->va) {
ax25454net/ax25/ax25_in.cax25->t3timer = ax25->t3;
ax25455net/ax25/ax25_in.cax25->n2count = 0;
ax25456net/ax25/ax25_in.cax25->state   = AX25_STATE_3;
ax25459net/ax25/ax25_in.cax25_nr_error_recovery(ax25);
ax25460net/ax25/ax25_in.cax25->state = AX25_STATE_1;
ax25465net/ax25/ax25_in.cax25_enquiry_response(ax25);
ax25466net/ax25/ax25_in.cif (ax25_validate_nr(ax25, nr)) {
ax25467net/ax25/ax25_in.cax25_frames_acked(ax25, nr);
ax25469net/ax25/ax25_in.cax25_nr_error_recovery(ax25);
ax25470net/ax25/ax25_in.cax25->state = AX25_STATE_1;
ax25475net/ax25/ax25_in.cax25->condition &= ~PEER_RX_BUSY_CONDITION;
ax25477net/ax25/ax25_in.cax25->t1timer = 0;
ax25478net/ax25/ax25_in.cif (ax25_validate_nr(ax25, nr)) {
ax25479net/ax25/ax25_in.cax25_frames_acked(ax25, nr);
ax25480net/ax25/ax25_in.cif (ax25->vs == ax25->va) {
ax25481net/ax25/ax25_in.cax25->t3timer = ax25->t3;
ax25482net/ax25/ax25_in.cax25->n2count = 0;
ax25483net/ax25/ax25_in.cax25->state   = AX25_STATE_3;
ax25486net/ax25/ax25_in.cax25_nr_error_recovery(ax25);
ax25487net/ax25/ax25_in.cax25->state = AX25_STATE_1;
ax25492net/ax25/ax25_in.cax25_enquiry_response(ax25);
ax25493net/ax25/ax25_in.cif (ax25_validate_nr(ax25, nr)) {
ax25494net/ax25/ax25_in.cax25_frames_acked(ax25, nr);
ax25496net/ax25/ax25_in.cax25_nr_error_recovery(ax25);
ax25497net/ax25/ax25_in.cax25->state = AX25_STATE_1;
ax25504net/ax25/ax25_in.cif (!ax25_validate_nr(ax25, nr)) {
ax25505net/ax25/ax25_in.cax25_nr_error_recovery(ax25);
ax25506net/ax25/ax25_in.cax25->state = AX25_STATE_1;
ax25509net/ax25/ax25_in.cax25_frames_acked(ax25, nr);
ax25510net/ax25/ax25_in.cif (ax25->condition & OWN_RX_BUSY_CONDITION) {
ax25511net/ax25/ax25_in.cif (pf) ax25_enquiry_response(ax25);
ax25514net/ax25/ax25_in.cif (ns == ax25->vr) {
ax25515net/ax25/ax25_in.cqueued = ax25_rx_iframe(ax25, skb, frame);
ax25516net/ax25/ax25_in.cif (ax25->condition & OWN_RX_BUSY_CONDITION) {
ax25517net/ax25/ax25_in.cif (pf) ax25_enquiry_response(ax25);
ax25520net/ax25/ax25_in.cax25->vr = (ax25->vr + 1) % MODULUS;
ax25521net/ax25/ax25_in.cax25->condition &= ~REJECT_CONDITION;
ax25523net/ax25/ax25_in.cax25_enquiry_response(ax25);
ax25525net/ax25/ax25_in.cif (!(ax25->condition & ACK_PENDING_CONDITION)) {
ax25526net/ax25/ax25_in.cax25->t2timer = ax25->t2;
ax25527net/ax25/ax25_in.cax25->condition |= ACK_PENDING_CONDITION;
ax25531net/ax25/ax25_in.cif (ax25->condition & REJECT_CONDITION) {
ax25532net/ax25/ax25_in.cif (pf) ax25_enquiry_response(ax25);
ax25534net/ax25/ax25_in.cax25->condition |= REJECT_CONDITION;
ax25535net/ax25/ax25_in.cax25_send_control(ax25, REJ | pf, C_RESPONSE);
ax25536net/ax25/ax25_in.cax25->condition &= ~ACK_PENDING_CONDITION;
ax25543net/ax25/ax25_in.cax25_establish_data_link(ax25);
ax25544net/ax25/ax25_in.cax25->state = AX25_STATE_1;
ax25557net/ax25/ax25_in.cint ax25_process_rx_frame(ax25_cb *ax25, struct sk_buff *skb, int type)
ax25562net/ax25/ax25_in.cdel_timer(&ax25->timer);
ax25568net/ax25/ax25_in.cswitch (ax25->state) {
ax25570net/ax25/ax25_in.cqueued = ax25_state1_machine(ax25, skb, frame, frametype, type);
ax25573net/ax25/ax25_in.cqueued = ax25_state2_machine(ax25, skb, frame, frametype, type);
ax25576net/ax25/ax25_in.cqueued = ax25_state3_machine(ax25, skb, frame, frametype, type);
ax25579net/ax25/ax25_in.cqueued = ax25_state4_machine(ax25, skb, frame, frametype, type);
ax25582net/ax25/ax25_in.cprintk("ax25_process_rx_frame: frame received - state = %d\n", ax25->state);
ax25586net/ax25/ax25_in.cax25_set_timer(ax25);
ax2550net/ax25/ax25_out.cint ax25_output(ax25_cb *ax25, struct sk_buff *skb)
ax2552net/ax25/ax25_out.cskb_queue_tail(&ax25->write_queue, skb);  /* Throw it on the queue */
ax2554net/ax25/ax25_out.cif (ax25->state == AX25_STATE_3 || ax25->state == AX25_STATE_4)
ax2555net/ax25/ax25_out.cax25_kick(ax25);
ax2564net/ax25/ax25_out.cstatic void ax25_send_iframe(ax25_cb *ax25, struct sk_buff *skb, int poll_bit)
ax2575net/ax25/ax25_out.c*frame |= (ax25->vr << 5);
ax2576net/ax25/ax25_out.c*frame |= (ax25->vs << 1);
ax2578net/ax25/ax25_out.cax25_transmit_buffer(ax25, skb, C_COMMAND);  
ax2581net/ax25/ax25_out.cvoid ax25_kick(ax25_cb *ax25)
ax2587net/ax25/ax25_out.cdel_timer(&ax25->timer);
ax2589net/ax25/ax25_out.cstart = (skb_peek(&ax25->ack_queue) == NULL) ? ax25->va : ax25->vs;
ax2590net/ax25/ax25_out.cend   = (ax25->va + ax25->window) % MODULUS;
ax2592net/ax25/ax25_out.cif (!(ax25->condition & PEER_RX_BUSY_CONDITION) &&
ax2594net/ax25/ax25_out.cskb_peek(&ax25->write_queue) != NULL) {
ax2596net/ax25/ax25_out.cax25->vs = start;
ax25107net/ax25/ax25_out.cskb  = skb_dequeue(&ax25->write_queue);
ax25110net/ax25/ax25_out.cskb_queue_head(&ax25->write_queue, skb);
ax25114net/ax25/ax25_out.cnext = (ax25->vs + 1) % MODULUS;
ax25116net/ax25/ax25_out.clast = (next == end) || skb_peek(&ax25->write_queue) == NULL;
ax25123net/ax25/ax25_out.cax25_send_iframe(ax25, skbn, (last) ? PF : 0);
ax25125net/ax25/ax25_out.cax25->vs = next;
ax25130net/ax25/ax25_out.cskb_queue_tail(&ax25->ack_queue, skb);
ax25134net/ax25/ax25_out.c} while (!last && skb_peek(&ax25->write_queue) != NULL);
ax25136net/ax25/ax25_out.cax25->condition &= ~ACK_PENDING_CONDITION;
ax25138net/ax25/ax25_out.cif (ax25->t1timer == 0) {
ax25139net/ax25/ax25_out.cax25->t3timer = 0;
ax25140net/ax25/ax25_out.cax25->t1timer = ax25->t1 = ax25_calculate_t1(ax25);
ax25144net/ax25/ax25_out.cax25_set_timer(ax25);
ax25147net/ax25/ax25_out.cvoid ax25_transmit_buffer(ax25_cb *ax25, struct sk_buff *skb, int type)
ax25151net/ax25/ax25_out.cif (ax25->device == NULL) {
ax25152net/ax25/ax25_out.cif (ax25->sk != NULL) {
ax25153net/ax25/ax25_out.cax25->sk->state = TCP_CLOSE;
ax25154net/ax25/ax25_out.cax25->sk->err   = ENETUNREACH;
ax25155net/ax25/ax25_out.cif (!ax25->sk->dead)
ax25156net/ax25/ax25_out.cax25->sk->state_change(ax25->sk);
ax25157net/ax25/ax25_out.cax25->sk->dead  = 1;
ax25163net/ax25/ax25_out.cptr   += build_ax25_addr(ptr, &ax25->source_addr, &ax25->dest_addr, ax25->digipeat, type);
ax25167net/ax25/ax25_out.cdev_queue_xmit(skb, ax25->device, SOPRI_NORMAL);
ax25175net/ax25/ax25_out.cvoid ax25_nr_error_recovery(ax25_cb *ax25)
ax25177net/ax25/ax25_out.cax25_establish_data_link(ax25);
ax25180net/ax25/ax25_out.cvoid ax25_establish_data_link(ax25_cb *ax25)
ax25182net/ax25/ax25_out.cax25->condition = 0x00;
ax25183net/ax25/ax25_out.cax25->n2count   = 0;
ax25185net/ax25/ax25_out.cax25_send_control(ax25, SABM | PF, C_COMMAND);
ax25187net/ax25/ax25_out.cax25->t3timer = 0;
ax25188net/ax25/ax25_out.cax25->t2timer = 0;
ax25189net/ax25/ax25_out.cax25->t1timer = ax25->t1 = ax25_calculate_t1(ax25);
ax25192net/ax25/ax25_out.cvoid ax25_transmit_enquiry(ax25_cb *ax25)
ax25194net/ax25/ax25_out.cif (ax25->condition & OWN_RX_BUSY_CONDITION)
ax25195net/ax25/ax25_out.cax25_send_control(ax25, RNR | PF, C_COMMAND);
ax25197net/ax25/ax25_out.cax25_send_control(ax25, RR | PF, C_COMMAND);
ax25199net/ax25/ax25_out.cax25->condition &= ~ACK_PENDING_CONDITION;
ax25201net/ax25/ax25_out.cax25->t1timer = ax25->t1 = ax25_calculate_t1(ax25);
ax25204net/ax25/ax25_out.cvoid ax25_enquiry_response(ax25_cb *ax25)
ax25206net/ax25/ax25_out.cif (ax25->condition & OWN_RX_BUSY_CONDITION)
ax25207net/ax25/ax25_out.cax25_send_control(ax25, RNR | PF, C_RESPONSE);
ax25209net/ax25/ax25_out.cax25_send_control(ax25, RR | PF, C_RESPONSE);
ax25211net/ax25/ax25_out.cax25->condition &= ~ACK_PENDING_CONDITION;
ax25214net/ax25/ax25_out.cvoid ax25_check_iframes_acked(ax25_cb *ax25, unsigned short nr)
ax25216net/ax25/ax25_out.cif (ax25->vs == nr) {
ax25217net/ax25/ax25_out.cax25_frames_acked(ax25, nr);
ax25218net/ax25/ax25_out.cax25_calculate_rtt(ax25);
ax25219net/ax25/ax25_out.cax25->t1timer = 0;
ax25220net/ax25/ax25_out.cax25->t3timer = ax25->t3;
ax25222net/ax25/ax25_out.cif (ax25->va != nr) {
ax25223net/ax25/ax25_out.cax25_frames_acked(ax25, nr);
ax25224net/ax25/ax25_out.cax25->t1timer = ax25->t1 = ax25_calculate_t1(ax25);
ax25229net/ax25/ax25_out.cvoid ax25_check_need_response(ax25_cb *ax25, int type, int pf)
ax25232net/ax25/ax25_out.cax25_enquiry_response(ax25);
ax25230net/ax25/ax25_route.cint ax25_rt_autobind(ax25_cb *ax25, ax25_address *addr)
ax25240net/ax25/ax25_route.cif ((ax25->device = ax25_rt->dev) == NULL)
ax25245net/ax25/ax25_route.ccall = (ax25_address *)ax25->device->dev_addr;
ax25247net/ax25/ax25_route.cmemcpy(&ax25->source_addr, call, sizeof(ax25_address));
ax25248net/ax25/ax25_route.cif (ax25->sk != NULL)
ax25249net/ax25/ax25_route.cax25->sk->zapped = 0;
ax2552net/ax25/ax25_subr.cvoid ax25_clear_tx_queue(ax25_cb *ax25)
ax2556net/ax25/ax25_subr.cwhile ((skb = skb_dequeue(&ax25->write_queue)) != NULL) {
ax2561net/ax25/ax25_subr.cwhile ((skb = skb_dequeue(&ax25->ack_queue)) != NULL) {
ax2572net/ax25/ax25_subr.cvoid ax25_frames_acked(ax25_cb *ax25, unsigned short nr)
ax2579net/ax25/ax25_subr.cif (ax25->va != nr) {
ax2580net/ax25/ax25_subr.cwhile (skb_peek(&ax25->ack_queue) != NULL && ax25->va != nr) {
ax2581net/ax25/ax25_subr.cskb = skb_dequeue(&ax25->ack_queue);
ax2584net/ax25/ax25_subr.cax25->va = (ax25->va + 1) % MODULUS;
ax2593net/ax25/ax25_subr.cwhile ((skb = skb_dequeue(&ax25->ack_queue)) != NULL) {
ax2595net/ax25/ax25_subr.cskb_queue_head(&ax25->write_queue, skb);
ax25106net/ax25/ax25_subr.cint ax25_validate_nr(ax25_cb *ax25, unsigned short nr)
ax25108net/ax25/ax25_subr.cunsigned short vc = ax25->va;
ax25110net/ax25/ax25_subr.cwhile (vc != ax25->vs) {
ax25115net/ax25/ax25_subr.cif (nr == ax25->vs) return 1;
ax25139net/ax25/ax25_subr.cvoid ax25_send_control(ax25_cb *ax25, int frametype, int type)
ax25146net/ax25/ax25_subr.cif ((dev = ax25->device) == NULL)
ax25149net/ax25/ax25_subr.cif ((skb = alloc_skb(16 + 1 + size_ax25_addr(ax25->digipeat), GFP_ATOMIC)) == NULL)
ax25152net/ax25/ax25_subr.cif (ax25->sk != NULL) {
ax25153net/ax25/ax25_subr.cskb->sk = ax25->sk;
ax25154net/ax25/ax25_subr.cax25->sk->wmem_alloc += skb->mem_len;
ax25159net/ax25/ax25_subr.cdptr += 1 + size_ax25_addr(ax25->digipeat);  /* KISS byte & 2 calls */
ax25165net/ax25/ax25_subr.cframetype |= (ax25->vr << 5);
ax25170net/ax25/ax25_subr.cskb->len  = len + size_ax25_addr(ax25->digipeat) + 1;
ax25172net/ax25/ax25_subr.cax25_transmit_buffer(ax25, skb, type);
ax25215net/ax25/ax25_subr.cunsigned short ax25_calculate_t1(ax25_cb *ax25)
ax25219net/ax25/ax25_subr.cfor (t = 2, n = 0; n < ax25->n2count; n++)
ax25222net/ax25/ax25_subr.creturn t * ax25->rtt;
ax25228net/ax25/ax25_subr.cvoid ax25_calculate_rtt(ax25_cb *ax25)
ax25230net/ax25/ax25_subr.cif (ax25->n2count == 0)
ax25231net/ax25/ax25_subr.cax25->rtt = (9 * ax25->rtt + ax25->t1 - ax25->t1timer) / 10;
ax25234net/ax25/ax25_subr.cif (ax25->rtt < 1 * PR_SLOWHZ)
ax25235net/ax25/ax25_subr.cax25->rtt = 1 * PR_SLOWHZ;
ax2553net/ax25/ax25_timer.cvoid ax25_set_timer(ax25_cb *ax25)
ax2559net/ax25/ax25_timer.cdel_timer(&ax25->timer);
ax2562net/ax25/ax25_timer.cax25->timer.next     = ax25->timer.prev = NULL;  
ax2563net/ax25/ax25_timer.cax25->timer.data     = (unsigned long)ax25;
ax2564net/ax25/ax25_timer.cax25->timer.function = &ax25_timer;
ax2566net/ax25/ax25_timer.cax25->timer.expires = 10;
ax2567net/ax25/ax25_timer.cadd_timer(&ax25->timer);
ax2570net/ax25/ax25_timer.cstatic void ax25_reset_timer(ax25_cb *ax25)
ax2576net/ax25/ax25_timer.cdel_timer(&ax25->timer);
ax2579net/ax25/ax25_timer.cax25->timer.data     = (unsigned long)ax25;
ax2580net/ax25/ax25_timer.cax25->timer.function = &ax25_timer;
ax2581net/ax25/ax25_timer.cax25->timer.expires  = 10;
ax2582net/ax25/ax25_timer.cadd_timer(&ax25->timer);
ax2593net/ax25/ax25_timer.cax25_cb *ax25 = (ax25_cb *)param;
ax2595net/ax25/ax25_timer.cswitch (ax25->state) {
ax2599net/ax25/ax25_timer.cif ((ax25->sk != NULL && ax25->sk->dead) || ax25->sk == NULL) {
ax25100net/ax25/ax25_timer.cdel_timer(&ax25->timer);
ax25101net/ax25/ax25_timer.cax25_destroy_socket(ax25);
ax25111net/ax25/ax25_timer.cif (ax25->sk != NULL) {
ax25112net/ax25/ax25_timer.cif (ax25->sk->rmem_alloc < (ax25->sk->rcvbuf / 2) && (ax25->condition & OWN_RX_BUSY_CONDITION)) {
ax25113net/ax25/ax25_timer.cax25->condition &= ~OWN_RX_BUSY_CONDITION;
ax25114net/ax25/ax25_timer.cax25_send_control(ax25, RR, C_RESPONSE);
ax25115net/ax25/ax25_timer.cax25->condition &= ~ACK_PENDING_CONDITION;
ax25122net/ax25/ax25_timer.cax25_kick(ax25);
ax25129net/ax25/ax25_timer.cif (ax25->t2timer > 0 && --ax25->t2timer == 0) {
ax25130net/ax25/ax25_timer.cif (ax25->state == AX25_STATE_3 || ax25->state == AX25_STATE_4) {
ax25131net/ax25/ax25_timer.cif (ax25->condition & ACK_PENDING_CONDITION) {
ax25132net/ax25/ax25_timer.cax25->condition &= ~ACK_PENDING_CONDITION;
ax25133net/ax25/ax25_timer.cax25_enquiry_response(ax25);
ax25138net/ax25/ax25_timer.cif (ax25->t3timer > 0 && --ax25->t3timer == 0) {
ax25139net/ax25/ax25_timer.cif (ax25->state == AX25_STATE_3) {
ax25140net/ax25/ax25_timer.cax25->n2count = 0;
ax25141net/ax25/ax25_timer.cax25_transmit_enquiry(ax25);
ax25142net/ax25/ax25_timer.cax25->state   = AX25_STATE_4;
ax25144net/ax25/ax25_timer.cax25->t3timer = ax25->t3;
ax25147net/ax25/ax25_timer.cif (ax25->t1timer == 0 || --ax25->t1timer > 0) {
ax25148net/ax25/ax25_timer.cax25_reset_timer(ax25);
ax25152net/ax25/ax25_timer.cswitch (ax25->state) {
ax25154net/ax25/ax25_timer.cif (ax25->n2count == ax25->n2) {
ax25156net/ax25/ax25_timer.cnr_link_failed(&ax25->dest_addr, ax25->device);
ax25158net/ax25/ax25_timer.cax25_clear_tx_queue(ax25);
ax25159net/ax25/ax25_timer.cax25->state = AX25_STATE_0;
ax25160net/ax25/ax25_timer.cif (ax25->sk != NULL) {
ax25161net/ax25/ax25_timer.cax25->sk->state = TCP_CLOSE;
ax25162net/ax25/ax25_timer.cax25->sk->err   = ETIMEDOUT;
ax25163net/ax25/ax25_timer.cif (!ax25->sk->dead)
ax25164net/ax25/ax25_timer.cax25->sk->state_change(ax25->sk);
ax25165net/ax25/ax25_timer.cax25->sk->dead  = 1;
ax25168net/ax25/ax25_timer.cax25->n2count++;
ax25169net/ax25/ax25_timer.cax25_send_control(ax25, SABM | PF, C_COMMAND);
ax25174net/ax25/ax25_timer.cif (ax25->n2count == ax25->n2) {
ax25176net/ax25/ax25_timer.cnr_link_failed(&ax25->dest_addr, ax25->device);
ax25178net/ax25/ax25_timer.cax25_clear_tx_queue(ax25);
ax25179net/ax25/ax25_timer.cax25->state = AX25_STATE_0;
ax25180net/ax25/ax25_timer.cif (ax25->sk != NULL) {
ax25181net/ax25/ax25_timer.cax25->sk->state = TCP_CLOSE;
ax25182net/ax25/ax25_timer.cax25->sk->err   = ETIMEDOUT;
ax25183net/ax25/ax25_timer.cif (!ax25->sk->dead)
ax25184net/ax25/ax25_timer.cax25->sk->state_change(ax25->sk);
ax25185net/ax25/ax25_timer.cax25->sk->dead  = 1;
ax25188net/ax25/ax25_timer.cax25->n2count++;
ax25189net/ax25/ax25_timer.cax25_send_control(ax25, DISC | PF, C_COMMAND);
ax25194net/ax25/ax25_timer.cax25->n2count = 1;
ax25195net/ax25/ax25_timer.cax25_transmit_enquiry(ax25);
ax25196net/ax25/ax25_timer.cax25->state   = AX25_STATE_4;
ax25200net/ax25/ax25_timer.cif (ax25->n2count == ax25->n2) {
ax25202net/ax25/ax25_timer.cnr_link_failed(&ax25->dest_addr, ax25->device);
ax25204net/ax25/ax25_timer.cax25_clear_tx_queue(ax25);
ax25205net/ax25/ax25_timer.cax25_send_control(ax25, DM | PF, C_RESPONSE);
ax25206net/ax25/ax25_timer.cax25->state = AX25_STATE_0;
ax25207net/ax25/ax25_timer.cif (ax25->sk != NULL) {
ax25208net/ax25/ax25_timer.cax25->sk->state = TCP_CLOSE;
ax25209net/ax25/ax25_timer.cax25->sk->err   = ETIMEDOUT;
ax25210net/ax25/ax25_timer.cif (!ax25->sk->dead)
ax25211net/ax25/ax25_timer.cax25->sk->state_change(ax25->sk);
ax25212net/ax25/ax25_timer.cax25->sk->dead  = 1;
ax25215net/ax25/ax25_timer.cax25->n2count++;
ax25216net/ax25/ax25_timer.cax25_transmit_enquiry(ax25);
ax25221net/ax25/ax25_timer.cax25->t1timer = ax25->t1 = ax25_calculate_t1(ax25);
ax25223net/ax25/ax25_timer.cax25_set_timer(ax25);
ax2561net/netrom/nr_route.cstatic int nr_add_node(ax25_address *nr, char *mnemonic, ax25_address *ax25,
ax2575net/netrom/nr_route.cif (ax25cmp(ax25, &nr_neigh->callsign) == 0 && nr_neigh->dev == dev)
ax2585net/netrom/nr_route.cmemcpy(&nr_neigh->callsign, ax25, sizeof(ax25_address));