diff options
| author | Jeff Garzik <jgarzik@pobox.com> | 2005-08-30 03:48:57 -0400 |
|---|---|---|
| committer | Jeff Garzik <jgarzik@pobox.com> | 2005-08-30 03:48:57 -0400 |
| commit | 2fcf522509cceea524b6e7ece8fd6759b682175a (patch) | |
| tree | d356e87307e451cce5497ad8daeeeb047befe489 /net/ipv4/raw.c | |
| parent | da61396d24e37258817e42537c482e962b4742f7 (diff) | |
| parent | 1fdab81e675c6ef76a49b8aabb7eaf4be51d1b80 (diff) | |
/spare/repo/libata-dev branch 'master'
Diffstat (limited to 'net/ipv4/raw.c')
| -rw-r--r-- | net/ipv4/raw.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c index d1835b1bc8c4..304bb0a1d4f0 100644 --- a/net/ipv4/raw.c +++ b/net/ipv4/raw.c | |||
| @@ -59,7 +59,6 @@ | |||
| 59 | #include <linux/netdevice.h> | 59 | #include <linux/netdevice.h> |
| 60 | #include <linux/in_route.h> | 60 | #include <linux/in_route.h> |
| 61 | #include <linux/route.h> | 61 | #include <linux/route.h> |
| 62 | #include <linux/tcp.h> | ||
| 63 | #include <linux/skbuff.h> | 62 | #include <linux/skbuff.h> |
| 64 | #include <net/dst.h> | 63 | #include <net/dst.h> |
| 65 | #include <net/sock.h> | 64 | #include <net/sock.h> |
| @@ -71,6 +70,7 @@ | |||
| 71 | #include <net/udp.h> | 70 | #include <net/udp.h> |
| 72 | #include <net/raw.h> | 71 | #include <net/raw.h> |
| 73 | #include <net/snmp.h> | 72 | #include <net/snmp.h> |
| 73 | #include <net/tcp_states.h> | ||
| 74 | #include <net/inet_common.h> | 74 | #include <net/inet_common.h> |
| 75 | #include <net/checksum.h> | 75 | #include <net/checksum.h> |
| 76 | #include <net/xfrm.h> | 76 | #include <net/xfrm.h> |
| @@ -150,10 +150,11 @@ static __inline__ int icmp_filter(struct sock *sk, struct sk_buff *skb) | |||
| 150 | * RFC 1122: SHOULD pass TOS value up to the transport layer. | 150 | * RFC 1122: SHOULD pass TOS value up to the transport layer. |
| 151 | * -> It does. And not only TOS, but all IP header. | 151 | * -> It does. And not only TOS, but all IP header. |
| 152 | */ | 152 | */ |
| 153 | void raw_v4_input(struct sk_buff *skb, struct iphdr *iph, int hash) | 153 | int raw_v4_input(struct sk_buff *skb, struct iphdr *iph, int hash) |
| 154 | { | 154 | { |
| 155 | struct sock *sk; | 155 | struct sock *sk; |
| 156 | struct hlist_head *head; | 156 | struct hlist_head *head; |
| 157 | int delivered = 0; | ||
| 157 | 158 | ||
| 158 | read_lock(&raw_v4_lock); | 159 | read_lock(&raw_v4_lock); |
| 159 | head = &raw_v4_htable[hash]; | 160 | head = &raw_v4_htable[hash]; |
| @@ -164,6 +165,7 @@ void raw_v4_input(struct sk_buff *skb, struct iphdr *iph, int hash) | |||
| 164 | skb->dev->ifindex); | 165 | skb->dev->ifindex); |
| 165 | 166 | ||
| 166 | while (sk) { | 167 | while (sk) { |
| 168 | delivered = 1; | ||
| 167 | if (iph->protocol != IPPROTO_ICMP || !icmp_filter(sk, skb)) { | 169 | if (iph->protocol != IPPROTO_ICMP || !icmp_filter(sk, skb)) { |
| 168 | struct sk_buff *clone = skb_clone(skb, GFP_ATOMIC); | 170 | struct sk_buff *clone = skb_clone(skb, GFP_ATOMIC); |
| 169 | 171 | ||
| @@ -177,6 +179,7 @@ void raw_v4_input(struct sk_buff *skb, struct iphdr *iph, int hash) | |||
| 177 | } | 179 | } |
| 178 | out: | 180 | out: |
| 179 | read_unlock(&raw_v4_lock); | 181 | read_unlock(&raw_v4_lock); |
| 182 | return delivered; | ||
| 180 | } | 183 | } |
| 181 | 184 | ||
| 182 | void raw_err (struct sock *sk, struct sk_buff *skb, u32 info) | 185 | void raw_err (struct sock *sk, struct sk_buff *skb, u32 info) |
