aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/icmp.c
diff options
context:
space:
mode:
authorPavel Emelyanov <xemul@openvz.org>2007-11-20 01:35:07 -0500
committerDavid S. Miller <davem@davemloft.net>2008-01-28 17:54:28 -0500
commit7bc54c90307b4bc3d7fb2ffd6ad8fbda0671a45e (patch)
tree74e2030d9603c41ce5dc3699862804a69300b7dc /net/ipv4/icmp.c
parente372c41401993b45c721c4d92730e7e0a79f7c1b (diff)
[IPv4] RAW: Compact the API for the kernel
The raw sockets functions are explicitly used from inside the kernel in two places: 1. in ip_local_deliver_finish to intercept skb-s 2. in icmp_error For this purposes many functions and even data structures, that are naturally internal for raw protocol, are exported. Compact the API to two functions and hide all the other (including hash table and rwlock) inside the net/ipv4/raw.c Signed-off-by: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/icmp.c')
-rw-r--r--net/ipv4/icmp.c15
1 files changed, 1 insertions, 14 deletions
diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c
index 82baea02648..13d74598d3e 100644
--- a/net/ipv4/icmp.c
+++ b/net/ipv4/icmp.c
@@ -603,7 +603,6 @@ static void icmp_unreach(struct sk_buff *skb)
603 struct icmphdr *icmph; 603 struct icmphdr *icmph;
604 int hash, protocol; 604 int hash, protocol;
605 struct net_protocol *ipprot; 605 struct net_protocol *ipprot;
606 struct sock *raw_sk;
607 u32 info = 0; 606 u32 info = 0;
608 607
609 /* 608 /*
@@ -697,21 +696,9 @@ static void icmp_unreach(struct sk_buff *skb)
697 /* 696 /*
698 * Deliver ICMP message to raw sockets. Pretty useless feature? 697 * Deliver ICMP message to raw sockets. Pretty useless feature?
699 */ 698 */
699 raw_icmp_error(skb, protocol, info);
700 700
701 /* Note: See raw.c and net/raw.h, RAWV4_HTABLE_SIZE==MAX_INET_PROTOS */
702 hash = protocol & (MAX_INET_PROTOS - 1); 701 hash = protocol & (MAX_INET_PROTOS - 1);
703 read_lock(&raw_v4_lock);
704 if ((raw_sk = sk_head(&raw_v4_htable[hash])) != NULL) {
705 while ((raw_sk = __raw_v4_lookup(raw_sk, protocol, iph->daddr,
706 iph->saddr,
707 skb->dev->ifindex)) != NULL) {
708 raw_err(raw_sk, skb, info);
709 raw_sk = sk_next(raw_sk);
710 iph = (struct iphdr *)skb->data;
711 }
712 }
713 read_unlock(&raw_v4_lock);
714
715 rcu_read_lock(); 702 rcu_read_lock();
716 ipprot = rcu_dereference(inet_protos[hash]); 703 ipprot = rcu_dereference(inet_protos[hash]);
717 if (ipprot && ipprot->err_handler) 704 if (ipprot && ipprot->err_handler)