summaryrefslogtreecommitdiffstats
path: root/net/ipv4/ip_input.c
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>1998-03-17 22:05:47 +0000
committerRalf Baechle <ralf@linux-mips.org>1998-03-17 22:05:47 +0000
commit27cfca1ec98e91261b1a5355d10a8996464b63af (patch)
tree8e895a53e372fa682b4c0a585b9377d67ed70d0e /net/ipv4/ip_input.c
parent6a76fb7214c477ccf6582bd79c5b4ccc4f9c41b1 (diff)
Look Ma' what I found on my harddisk ...
o New faster syscalls for 2.1.x, too o Upgrade to 2.1.89. Don't try to run this. It's flaky as hell. But feel free to debug ...
Diffstat (limited to 'net/ipv4/ip_input.c')
-rw-r--r--net/ipv4/ip_input.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/net/ipv4/ip_input.c b/net/ipv4/ip_input.c
index 1c3c2da7a..61c364542 100644
--- a/net/ipv4/ip_input.c
+++ b/net/ipv4/ip_input.c
@@ -5,7 +5,7 @@
*
* The Internet Protocol (IP) module.
*
- * Version: $Id: ip_input.c,v 1.24 1997/10/24 17:15:58 kuznet Exp $
+ * Version: $Id: ip_input.c,v 1.2 1997/12/16 05:37:38 ralf Exp $
*
* Authors: Ross Biro, <bir7@leland.Stanford.Edu>
* Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
@@ -97,6 +97,7 @@
* Alan Cox : Multicast routing hooks
* Jos Vos : Do accounting *before* call_in_firewall
* Willy Konynenberg : Transparent proxying support
+ * Mike McLagan : Routing by source
*
*
*
@@ -257,7 +258,7 @@ int ip_local_deliver(struct sk_buff *skb)
{
int ret = ip_fw_demasquerade(&skb);
if (ret < 0) {
- kfree_skb(skb, FREE_WRITE);
+ kfree_skb(skb);
return 0;
}
@@ -267,7 +268,7 @@ int ip_local_deliver(struct sk_buff *skb)
dst_release(skb->dst);
skb->dst = NULL;
if (ip_route_input(skb, iph->daddr, iph->saddr, iph->tos, skb->dev)) {
- kfree_skb(skb, FREE_WRITE);
+ kfree_skb(skb);
return 0;
}
return skb->dst->input(skb);
@@ -312,7 +313,7 @@ int ip_local_deliver(struct sk_buff *skb)
if(ipsec_sk_policy(raw_sk,skb1))
raw_rcv(raw_sk, skb1);
else
- kfree_skb(skb1, FREE_WRITE);
+ kfree_skb(skb1);
}
}
raw_sk = sknext;
@@ -375,12 +376,12 @@ int ip_local_deliver(struct sk_buff *skb)
if(ipsec_sk_policy(raw_sk, skb))
raw_rcv(raw_sk, skb);
else
- kfree_skb(skb, FREE_WRITE);
+ kfree_skb(skb);
}
else if (!flag) /* Free and report errors */
{
icmp_send(skb, ICMP_DEST_UNREACH, ICMP_PROT_UNREACH, 0);
- kfree_skb(skb, FREE_WRITE);
+ kfree_skb(skb);
}
return(0);
@@ -422,7 +423,9 @@ int ip_rcv(struct sk_buff *skb, struct device *dev, struct packet_type *pt)
*/
if (skb->len<sizeof(struct iphdr) || iph->ihl<5 || iph->version != 4
+#ifndef CONFIG_IP_ROUTER
|| ip_fast_csum((unsigned char *)iph, iph->ihl) !=0
+#endif
|| skb->len < ntohs(iph->tot_len))
goto inhdr_error;
@@ -462,18 +465,18 @@ int ip_rcv(struct sk_buff *skb, struct device *dev, struct packet_type *pt)
opt = &(IPCB(skb)->opt);
if (opt->srr) {
- if (!ipv4_config.source_route) {
- if (ipv4_config.log_martians && net_ratelimit())
+ struct in_device *in_dev = dev->ip_ptr;
+ if (in_dev && !IN_DEV_SOURCE_ROUTE(in_dev)) {
+ if (IN_DEV_LOG_MARTIANS(in_dev) && net_ratelimit())
printk(KERN_INFO "source route option %08lx -> %08lx\n",
ntohl(iph->saddr), ntohl(iph->daddr));
goto drop;
}
- if (((struct rtable*)skb->dst)->rt_type == RTN_LOCAL &&
- ip_options_rcv_srr(skb))
+ if (ip_options_rcv_srr(skb))
goto drop;
}
}
-
+
/*
* See if the firewall wants to dispose of the packet.
*/
@@ -501,7 +504,7 @@ int ip_rcv(struct sk_buff *skb, struct device *dev, struct packet_type *pt)
inhdr_error:
ip_statistics.IpInHdrErrors++;
drop:
- kfree_skb(skb, FREE_WRITE);
+ kfree_skb(skb);
return(0);
}