[PATCH] IPv6: Functions Clean-up

From: $B5HF#1QL@(
Date: Sat Nov 02 2002 - 21:54:27 EST


Hello!

This patch cleans up functions in ipv6 stack:

 - export route6_me_harder() as ip6_route_harder() and
   use it from net/ipv6/netfilter/ip6_queue.c.
 - make ip6_addr_prefix() to generate prefix of given address and
   prefix length, instead of doing "ipv6_copy_addr() then
   ipv6_wash_prefix()."

Patch is against 2.5.45.

Thanks in advance.

-------------------------------------------------------------------
Patch-Name: Functions Clean-up
Patch-Id: FIX_2_5_45_FUNC_CLEANUP-20021102
Patch-Author: YOSHIFUJI Hideaki / USAGI Project <yoshfuji@linux-ipv6.org>
Credit: YOSHIFUJI Hideaki / USAGI Project <yoshfuji@linux-ipv6.org>
-------------------------------------------------------------------
Index: include/net/ip6_route.h
===================================================================
RCS file: /cvsroot/usagi/usagi-backport/linux25/include/net/ip6_route.h,v
retrieving revision 1.1.1.1
retrieving revision 1.1.1.1.16.1
diff -u -r1.1.1.1 -r1.1.1.1.16.1
--- include/net/ip6_route.h 7 Oct 2002 10:22:46 -0000 1.1.1.1
+++ include/net/ip6_route.h 2 Nov 2002 14:50:30 -0000 1.1.1.1.16.1
@@ -30,6 +30,8 @@
 extern struct dst_entry * ip6_route_output(struct sock *sk,
                                                  struct flowi *fl);
 
+extern int ip6_route_harder(struct sk_buff *skb);
+
 extern void ip6_route_init(void);
 extern void ip6_route_cleanup(void);
 
Index: net/ipv6/ip6_output.c
===================================================================
RCS file: /cvsroot/usagi/usagi-backport/linux25/net/ipv6/ip6_output.c,v
retrieving revision 1.1.1.3
retrieving revision 1.1.1.3.6.1
diff -u -r1.1.1.3 -r1.1.1.3.6.1
--- net/ipv6/ip6_output.c 30 Oct 2002 09:43:18 -0000 1.1.1.3
+++ net/ipv6/ip6_output.c 2 Nov 2002 14:50:30 -0000 1.1.1.3.6.1
@@ -134,7 +134,7 @@
 
 
 #ifdef CONFIG_NETFILTER
-static int route6_me_harder(struct sk_buff *skb)
+int ip6_route_harder(struct sk_buff *skb)
 {
         struct ipv6hdr *iph = skb->nh.ipv6h;
         struct dst_entry *dst;
@@ -152,7 +152,7 @@
 
         if (dst->error) {
                 if (net_ratelimit())
- printk(KERN_DEBUG "route6_me_harder: No more route.\n");
+ printk(KERN_DEBUG "ip6_route_harder: No more route.\n");
                 return -EINVAL;
         }
 
@@ -168,7 +168,7 @@
 {
 #ifdef CONFIG_NETFILTER
         if (skb->nfcache & NFC_ALTERED){
- if (route6_me_harder(skb) != 0){
+ if (ip6_route_harder(skb) != 0){
                         kfree_skb(skb);
                         return -EINVAL;
                 }
Index: net/ipv6/ipv6_syms.c
===================================================================
RCS file: /cvsroot/usagi/usagi-backport/linux25/net/ipv6/ipv6_syms.c,v
retrieving revision 1.1.1.1
retrieving revision 1.1.1.1.16.1
diff -u -r1.1.1.1 -r1.1.1.1.16.1
--- net/ipv6/ipv6_syms.c 7 Oct 2002 10:20:36 -0000 1.1.1.1
+++ net/ipv6/ipv6_syms.c 2 Nov 2002 14:50:30 -0000 1.1.1.1.16.1
@@ -1,4 +1,5 @@
 
+#include <linux/config.h>
 #include <linux/module.h>
 #include <net/protocol.h>
 #include <net/ipv6.h>
@@ -11,6 +12,9 @@
 EXPORT_SYMBOL(register_inet6addr_notifier);
 EXPORT_SYMBOL(unregister_inet6addr_notifier);
 EXPORT_SYMBOL(ip6_route_output);
+#ifdef CONFIG_NETFILTER
+EXPORT_SYMBOL(ip6_route_harder);
+#endif
 EXPORT_SYMBOL(addrconf_lock);
 EXPORT_SYMBOL(ipv6_setsockopt);
 EXPORT_SYMBOL(ipv6_getsockopt);
Index: net/ipv6/route.c
===================================================================
RCS file: /cvsroot/usagi/usagi-backport/linux25/net/ipv6/route.c,v
retrieving revision 1.1.1.4
retrieving revision 1.1.1.4.6.1
diff -u -r1.1.1.4 -r1.1.1.4.6.1
--- net/ipv6/route.c 30 Oct 2002 09:43:18 -0000 1.1.1.4
+++ net/ipv6/route.c 2 Nov 2002 14:52:05 -0000 1.1.1.4.6.1
@@ -573,15 +573,17 @@
    Remove it only when all the things will work!
  */
 
-static void ipv6_wash_prefix(struct in6_addr *pfx, int plen)
+static void ipv6_addr_prefix(struct in6_addr *pfx,
+ const struct in6_addr *addr, int plen)
 {
         int b = plen&0x7;
- int o = (plen + 7)>>3;
+ int o = plen>>3;
 
+ memcpy(prefix, addr, o);
         if (o < 16)
                 memset(pfx->s6_addr + o, 0, 16 - o);
         if (b != 0)
- pfx->s6_addr[plen>>3] &= (0xFF<<(8-b));
+ pfx->s6_addr[o] = addr->s6_addr[o]&(0xff00 >> b);
 }
 
 static int ipv6_get_mtu(struct net_device *dev)
@@ -654,16 +656,16 @@
                         goto out;
         }
 
- ipv6_addr_copy(&rt->rt6i_dst.addr, &rtmsg->rtmsg_dst);
+ ipv6_addr_prefix(&rt->rt6i_dst.addr,
+ &rtmsg->rtmsg_dst, rtmsg->rtmsg_dst_len);
         rt->rt6i_dst.plen = rtmsg->rtmsg_dst_len;
         if (rt->rt6i_dst.plen == 128)
                rt->u.dst.flags = DST_HOST;
- ipv6_wash_prefix(&rt->rt6i_dst.addr, rt->rt6i_dst.plen);
 
 #ifdef CONFIG_IPV6_SUBTREES
- ipv6_addr_copy(&rt->rt6i_src.addr, &rtmsg->rtmsg_src);
+ ipv6_addr_prefix(&rt->rt6i_src.addr,
+ &rtmsg->rtmsg_src, rtmsg->rtmsg_src_len);
         rt->rt6i_src.plen = rtmsg->rtmsg_src_len;
- ipv6_wash_prefix(&rt->rt6i_src.addr, rt->rt6i_src.plen);
 #endif
 
         rt->rt6i_metric = rtmsg->rtmsg_metric;
Index: net/ipv6/netfilter/ip6_queue.c
===================================================================
RCS file: /cvsroot/usagi/usagi-backport/linux25/net/ipv6/netfilter/ip6_queue.c,v
retrieving revision 1.1.1.2
retrieving revision 1.1.1.2.14.1
diff -u -r1.1.1.2 -r1.1.1.2.14.1
--- net/ipv6/netfilter/ip6_queue.c 8 Oct 2002 03:15:20 -0000 1.1.1.2
+++ net/ipv6/netfilter/ip6_queue.c 2 Nov 2002 14:50:30 -0000 1.1.1.2.14.1
@@ -326,45 +326,6 @@
         return status;
 }
 
-/*
- * Taken from net/ipv6/ip6_output.c
- *
- * We should use the one there, but is defined static
- * so we put this just here and let the things as
- * they are now.
- *
- * If that one is modified, this one should be modified too.
- */
-static int
-route6_me_harder(struct sk_buff *skb)
-{
- struct ipv6hdr *iph = skb->nh.ipv6h;
- struct dst_entry *dst;
- struct flowi fl;
-
- fl.proto = iph->nexthdr;
- fl.fl6_dst = &iph->daddr;
- fl.fl6_src = &iph->saddr;
- fl.oif = skb->sk ? skb->sk->bound_dev_if : 0;
- fl.fl6_flowlabel = 0;
- fl.uli_u.ports.dport = 0;
- fl.uli_u.ports.sport = 0;
-
- dst = ip6_route_output(skb->sk, &fl);
-
- if (dst->error) {
- if (net_ratelimit())
- printk(KERN_DEBUG "route6_me_harder: No more route.\n");
- return -EINVAL;
- }
-
- /* Drop old route. */
- dst_release(skb->dst);
-
- skb->dst = dst;
- return 0;
-}
-
 static int
 ipq_mangle_ipv6(ipq_verdict_msg_t *v, struct ipq_queue_entry *e)
 {
@@ -410,7 +371,7 @@
                 struct ipv6hdr *iph = e->skb->nh.ipv6h;
                 if (ipv6_addr_cmp(&iph->daddr, &e->rt_info.daddr) ||
                     ipv6_addr_cmp(&iph->saddr, &e->rt_info.saddr))
- return route6_me_harder(e->skb);
+ return ip6_route_harder(e->skb);
         }
         return 0;
 }
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Thu Nov 07 2002 - 22:00:27 EST