]> Pileus Git - ~andy/linux/blobdiff - include/net/inetpeer.h
Merge branch 'can/at91_can-for-net-2.6' of git://git.pengutronix.de/git/mkl/linux-2.6
[~andy/linux] / include / net / inetpeer.h
index fe239bfe5f7f5082d92214bcb8d48d183473674b..599d96e7411455e75d77ce0e8f85da97754bde42 100644 (file)
 #include <linux/init.h>
 #include <linux/jiffies.h>
 #include <linux/spinlock.h>
+#include <net/ipv6.h>
 #include <asm/atomic.h>
 
+struct inetpeer_addr {
+       union {
+               __be32          a4;
+               __be32          a6[4];
+       };
+       __u16   family;
+};
+
 struct inet_peer {
        /* group together avl_left,avl_right,v4daddr to speedup lookups */
        struct inet_peer __rcu  *avl_left, *avl_right;
-       __be32                  v4daddr;        /* peer's address */
+       struct inetpeer_addr    daddr;
        __u32                   avl_height;
        struct list_head        unused;
        __u32                   dtime;          /* the time of last use of not
@@ -26,7 +35,6 @@ struct inet_peer {
         * Once inet_peer is queued for deletion (refcnt == -1), following fields
         * are not available: rid, ip_id_count, tcp_ts, tcp_ts_stamp
         * We can share memory with rcu_head to keep inet_peer small
-        * (less then 64 bytes)
         */
        union {
                struct {
@@ -42,7 +50,25 @@ struct inet_peer {
 void                   inet_initpeers(void) __init;
 
 /* can be called with or without local BH being disabled */
-struct inet_peer       *inet_getpeer(__be32 daddr, int create);
+struct inet_peer       *inet_getpeer(struct inetpeer_addr *daddr, int create);
+
+static inline struct inet_peer *inet_getpeer_v4(__be32 v4daddr, int create)
+{
+       struct inetpeer_addr daddr;
+
+       daddr.a4 = v4daddr;
+       daddr.family = AF_INET;
+       return inet_getpeer(&daddr, create);
+}
+
+static inline struct inet_peer *inet_getpeer_v6(struct in6_addr *v6daddr, int create)
+{
+       struct inetpeer_addr daddr;
+
+       ipv6_addr_copy((struct in6_addr *)daddr.a6, v6daddr);
+       daddr.family = AF_INET6;
+       return inet_getpeer(&daddr, create);
+}
 
 /* can be called from BH context or outside */
 extern void inet_putpeer(struct inet_peer *p);