patch-1.3.20 linux/net/ax25/ax25_in.c
Next file: linux/net/ax25/ax25_out.c
Previous file: linux/net/ax25/af_ax25.c
Back to the patch index
Back to the overall index
- Lines: 104
- Date:
Wed Aug 16 15:10:12 1995
- Orig file:
v1.3.19/linux/net/ax25/ax25_in.c
- Orig date:
Mon Jul 31 15:59:04 1995
diff -u --recursive --new-file v1.3.19/linux/net/ax25/ax25_in.c linux/net/ax25/ax25_in.c
@@ -64,6 +64,7 @@
static int ax25_rx_fragment(ax25_cb *ax25, struct sk_buff *skb)
{
struct sk_buff *skbn, *skbo;
+ int hdrlen;
if (ax25->fragno != 0) {
if (!(*skb->data & SEG_FIRST)) {
@@ -86,6 +87,14 @@
}
skb_reserve(skbn, AX25_MAX_HEADER_LEN);
+ skbn->h.raw = skbn->data;
+
+ skbo = skb_dequeue(&ax25->frag_queue);
+ hdrlen = skbo->data - skbo->h.raw;
+ skb_push(skbo, hdrlen);
+ memcpy(skb_put(skbn, skbo->len), skbo->data, skbo->len);
+ skb_pull(skbn, hdrlen);
+ kfree_skb(skbo, FREE_READ);
while ((skbo = skb_dequeue(&ax25->frag_queue)) != NULL) {
memcpy(skb_put(skbn, skbo->len), skbo->data, skbo->len);
@@ -122,13 +131,13 @@
{
int queued = 0;
- skb->h.raw = skb->data;
-
switch (*skb->data) {
#ifdef CONFIG_NETROM
case AX25_P_NETROM:
- skb_pull(skb, 1); /* Remove PID */
- queued = nr_route_frame(skb, ax25);
+ if (ax25_dev_get_value(ax25->device, AX25_VALUES_NETROM)) {
+ skb_pull(skb, 1); /* Remove PID */
+ queued = nr_route_frame(skb, ax25);
+ }
break;
#endif
#ifdef CONFIG_INET
@@ -141,7 +150,7 @@
break;
#endif
case AX25_P_TEXT:
- if (ax25->sk != NULL) {
+ if (ax25->sk != NULL && ax25_dev_get_value(ax25->device, AX25_VALUES_TEXT)) {
if (sock_queue_rcv_skb(ax25->sk, skb) == 0) {
queued = 1;
} else {
@@ -172,11 +181,13 @@
switch (frametype) {
case SABM:
ax25->modulus = MODULUS;
+ ax25->window = ax25_dev_get_value(ax25->device, AX25_VALUES_WINDOW);
ax25_send_control(ax25, UA, pf, C_RESPONSE);
break;
case SABME:
ax25->modulus = EMODULUS;
+ ax25->window = ax25_dev_get_value(ax25->device, AX25_VALUES_EWINDOW);
ax25_send_control(ax25, UA, pf, C_RESPONSE);
break;
@@ -217,6 +228,7 @@
}
} else {
ax25->modulus = MODULUS;
+ ax25->window = ax25_dev_get_value(ax25->device, AX25_VALUES_WINDOW);
}
}
break;
@@ -298,6 +310,7 @@
switch (frametype) {
case SABM:
ax25->modulus = MODULUS;
+ ax25->window = ax25_dev_get_value(ax25->device, AX25_VALUES_WINDOW);
ax25_send_control(ax25, UA, pf, C_RESPONSE);
ax25->condition = 0x00;
ax25->t1timer = 0;
@@ -309,6 +322,7 @@
case SABME:
ax25->modulus = EMODULUS;
+ ax25->window = ax25_dev_get_value(ax25->device, AX25_VALUES_EWINDOW);
ax25_send_control(ax25, UA, pf, C_RESPONSE);
ax25->condition = 0x00;
ax25->t1timer = 0;
@@ -455,6 +469,7 @@
switch (frametype) {
case SABM:
ax25->modulus = MODULUS;
+ ax25->window = ax25_dev_get_value(ax25->device, AX25_VALUES_WINDOW);
ax25_send_control(ax25, UA, pf, C_RESPONSE);
ax25->condition = 0x00;
ax25->t1timer = 0;
@@ -468,6 +483,7 @@
case SABME:
ax25->modulus = EMODULUS;
+ ax25->window = ax25_dev_get_value(ax25->device, AX25_VALUES_EWINDOW);
ax25_send_control(ax25, UA, pf, C_RESPONSE);
ax25->condition = 0x00;
ax25->t1timer = 0;
FUNET's LINUX-ADM group, [email protected]
TCL-scripts by Sam Shen, [email protected]
with Sam's (original) version of this