/* * Interface to ax25_send_frame. Changes my level 2 callsign depending * on whether we have a global ROSE callsign or use the default port * callsign.
*/ staticint rose_send_frame(struct sk_buff *skb, struct rose_neigh *neigh)
{ const ax25_address *rose_call;
ax25_cb *ax25s;
/* * Interface to ax25_link_up. Changes my level 2 callsign depending * on whether we have a global ROSE callsign or use the default port * callsign.
*/ staticint rose_link_up(struct rose_neigh *neigh)
{ const ax25_address *rose_call;
ax25_cb *ax25s;
case ROSE_RESTART_CONFIRMATION:
rose_stop_t0timer(neigh);
neigh->restarted = 1; break;
case ROSE_DIAGNOSTIC:
pr_warn("ROSE: received diagnostic #%d - %3ph\n", skb->data[3],
skb->data + 4); break;
default:
printk(KERN_WARNING "ROSE: received unknown %02X with LCI 000\n", frametype); break;
}
if (neigh->restarted) { while ((skbn = skb_dequeue(&neigh->queue)) != NULL) if (!rose_send_frame(skbn, neigh))
kfree_skb(skbn);
}
}
/* * This routine is called when a Restart Request is needed
*/ staticvoid rose_transmit_restart_request(struct rose_neigh *neigh)
{ struct sk_buff *skb; unsignedchar *dptr; int len;
len = AX25_BPQ_HEADER_LEN + AX25_MAX_HEADER_LEN + ROSE_MIN_LEN + 3;
if ((skb = alloc_skb(len, GFP_ATOMIC)) == NULL) return;
if (!rose_send_frame(skb, neigh))
kfree_skb(skb);
}
/* * This routine is called when a Restart Confirmation is needed
*/ staticvoid rose_transmit_restart_confirmation(struct rose_neigh *neigh)
{ struct sk_buff *skb; unsignedchar *dptr; int len;
len = AX25_BPQ_HEADER_LEN + AX25_MAX_HEADER_LEN + ROSE_MIN_LEN + 1;
if ((skb = alloc_skb(len, GFP_ATOMIC)) == NULL) return;
if (!rose_send_frame(skb, neigh))
kfree_skb(skb);
}
/* * This routine is called when a Clear Request is needed outside of the context * of a connected socket.
*/ void rose_transmit_clear_request(struct rose_neigh *neigh, unsignedint lci, unsignedchar cause, unsignedchar diagnostic)
{ struct sk_buff *skb; unsignedchar *dptr; int len;
if (!neigh->dev) return;
len = AX25_BPQ_HEADER_LEN + AX25_MAX_HEADER_LEN + ROSE_MIN_LEN + 3;
if ((skb = alloc_skb(len, GFP_ATOMIC)) == NULL) return;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.