summaryrefslogtreecommitdiffstats
path: root/net/ipv4
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>1997-12-01 04:02:08 +0000
committerRalf Baechle <ralf@linux-mips.org>1997-12-01 04:02:08 +0000
commitfd095d09f2d475dc2e8599b1b8bae1cd65e91685 (patch)
tree217f87a997699505e0dd752931409b9f10fffe65 /net/ipv4
parentc02e0599c4233f97071928f8118841954bacdadf (diff)
Merge with 2.1.56 as first part of merging back my code.
Diffstat (limited to 'net/ipv4')
-rw-r--r--net/ipv4/arp.c5
-rw-r--r--net/ipv4/tcp_output.c7
2 files changed, 8 insertions, 4 deletions
diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c
index ebf2c6c6b..472f64811 100644
--- a/net/ipv4/arp.c
+++ b/net/ipv4/arp.c
@@ -797,10 +797,11 @@ static struct arp_table * arp_alloc(int how)
entry = (struct arp_table *)neigh_alloc(sizeof(struct arp_table),
&arp_neigh_ops);
- atomic_set(&entry->u.neigh.refcnt, 1);
if (entry != NULL)
{
+ atomic_set(&entry->u.neigh.refcnt, 1);
+
if (how)
atomic_inc(&arp_size);
@@ -1265,7 +1266,7 @@ void arp_send(int type, int ptype, u32 dest_ip,
arp = (struct arphdr *) skb_put(skb,sizeof(struct arphdr) + 2*(dev->addr_len+4));
skb->arp = 1;
skb->dev = dev;
- skb->protocol = htons (ETH_P_IP);
+ skb->protocol = htons (ETH_P_ARP);
/*
* Fill the device header for the ARP frame
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index ddb398938..74dbd2266 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -5,7 +5,7 @@
*
* Implementation of the Transmission Control Protocol(TCP).
*
- * Version: $Id: tcp_output.c,v 1.1.1.1 1997/06/01 03:16:26 ralf Exp $
+ * Version: $Id: tcp_output.c,v 1.2 1997/09/12 01:34:42 ralf Exp $
*
* Authors: Ross Biro, <bir7@leland.Stanford.Edu>
* Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
@@ -605,11 +605,14 @@ static int tcp_retrans_try_collapse(struct sock *sk, struct sk_buff *skb)
memcpy(skb_put(skb, size2), ((char *) th2) + (th2->doff << 2), size2);
/* Update sizes on original skb, both TCP and IP. */
- skb->end_seq += size2;
+ skb->end_seq += buff->end_seq - buff->seq;
if (th2->urg) {
th1->urg = 1;
th1->urg_ptr = th2->urg_ptr + size1;
}
+ if (th2->fin) {
+ th1->fin = 1;
+ }
/* ... and off you go. */
kfree_skb(buff, FREE_WRITE);