[977] in linux-net channel archive
IP patch
daemon@ATHENA.MIT.EDU (Alan Cox)
Thu Aug 24 00:23:26 1995
Date: Wed, 23 Aug 95 15:13 BST
From: iialan@iifeak.swan.ac.uk (Alan Cox)
To: linux-net@vger.rutgers.edu, torvalds@cs.Helsinki.FI
This fixes the pushdown panic on slip/ppp quits or some routing shifts. I
submitted it for 1.3.14, 1.3.17 and now again - third time lucky remembering
to add this one Linus ;)
Alan
--- ip.c.ook Tue Jul 18 00:15:32 1995
+++ ip.c Tue Jul 18 00:15:32 1995
@@ -201,6 +201,26 @@
return mac;
}
+static int ip_send_room(struct sk_buff *skb, unsigned long daddr, int len, struct device *dev, unsigned long saddr)
+{
+ int mac = 0;
+
+ skb->dev = dev;
+ skb->arp = 1;
+ if (dev->hard_header)
+ {
+ skb_reserve(skb,MAX_HEADER);
+ mac = dev->hard_header(skb, dev, ETH_P_IP, NULL, NULL, len);
+ if (mac < 0)
+ {
+ mac = -mac;
+ skb->arp = 0;
+ skb->raddr = daddr; /* next routing address */
+ }
+ }
+ return mac;
+}
+
int ip_id_count = 0;
/*
@@ -283,7 +303,10 @@
* Now build the MAC header.
*/
- tmp = ip_send(skb, raddr, len, *dev, saddr);
+ if(type==IPPROTO_TCP)
+ tmp = ip_send_room(skb, raddr, len, *dev, saddr);
+ else
+ tmp = ip_send(skb, raddr, len, *dev, saddr);
/*
* Book keeping