]> err.no Git - linux-2.6/blobdiff - include/net/addrconf.h
Merge branch 'upstream-net26' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik...
[linux-2.6] / include / net / addrconf.h
index 33b593e174412792347be0d366a1f036e963430e..232da20e7171c8314046ab367fb2428df8844321 100644 (file)
@@ -17,6 +17,7 @@
 
 #define IPV6_MAX_ADDRESSES             16
 
+#include <linux/in.h>
 #include <linux/in6.h>
 
 struct prefix_info {
@@ -54,22 +55,27 @@ struct prefix_info {
 extern int                     addrconf_init(void);
 extern void                    addrconf_cleanup(void);
 
-extern int                     addrconf_add_ifaddr(void __user *arg);
-extern int                     addrconf_del_ifaddr(void __user *arg);
-extern int                     addrconf_set_dstaddr(void __user *arg);
+extern int                     addrconf_add_ifaddr(struct net *net,
+                                                   void __user *arg);
+extern int                     addrconf_del_ifaddr(struct net *net,
+                                                   void __user *arg);
+extern int                     addrconf_set_dstaddr(struct net *net,
+                                                    void __user *arg);
 
-extern int                     ipv6_chk_addr(struct in6_addr *addr,
+extern int                     ipv6_chk_addr(struct net *net,
+                                             struct in6_addr *addr,
                                              struct net_device *dev,
                                              int strict);
+
 #if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE)
-extern int                     ipv6_chk_home_addr(struct in6_addr *addr);
+extern int                     ipv6_chk_home_addr(struct net *net,
+                                                  struct in6_addr *addr);
 #endif
-extern struct inet6_ifaddr *   ipv6_get_ifaddr(struct in6_addr *addr,
-                                               struct net_device *dev,
-                                               int strict);
-extern int                     ipv6_get_saddr(struct dst_entry *dst, 
-                                              struct in6_addr *daddr,
-                                              struct in6_addr *saddr);
+extern struct inet6_ifaddr      *ipv6_get_ifaddr(struct net *net,
+                                                struct in6_addr *addr,
+                                                struct net_device *dev,
+                                                int strict);
+
 extern int                     ipv6_dev_get_saddr(struct net_device *dev, 
                                               struct in6_addr *daddr,
                                               struct in6_addr *saddr);
@@ -83,6 +89,14 @@ extern void                  addrconf_join_solict(struct net_device *dev,
 extern void                    addrconf_leave_solict(struct inet6_dev *idev,
                                        struct in6_addr *addr);
 
+/*
+ *     IPv6 Address Label subsystem (addrlabel.c)
+ */
+extern int                     ipv6_addr_label_init(void);
+extern void                    ipv6_addr_label_rtnl_register(void);
+extern u32                     ipv6_addr_label(const struct in6_addr *addr,
+                                               int type, int ifindex);
+
 /*
  *     multicast prototypes (mcast.c)
  */
@@ -200,29 +214,25 @@ static inline void addrconf_addr_solict_mult(const struct in6_addr *addr,
                                             struct in6_addr *solicited)
 {
        ipv6_addr_set(solicited,
-                     __constant_htonl(0xFF020000), 0,
-                     __constant_htonl(0x1),
-                     __constant_htonl(0xFF000000) | addr->s6_addr32[3]);
+                     htonl(0xFF020000), 0,
+                     htonl(0x1),
+                     htonl(0xFF000000) | addr->s6_addr32[3]);
 }
 
 
 static inline void ipv6_addr_all_nodes(struct in6_addr *addr)
 {
-       ipv6_addr_set(addr,
-                     __constant_htonl(0xFF020000), 0, 0,
-                     __constant_htonl(0x1));
+       ipv6_addr_set(addr, htonl(0xFF020000), 0, 0, htonl(0x1));
 }
 
 static inline void ipv6_addr_all_routers(struct in6_addr *addr)
 {
-       ipv6_addr_set(addr,
-                     __constant_htonl(0xFF020000), 0, 0,
-                     __constant_htonl(0x2));
+       ipv6_addr_set(addr, htonl(0xFF020000), 0, 0, htonl(0x2));
 }
 
 static inline int ipv6_addr_is_multicast(const struct in6_addr *addr)
 {
-       return (addr->s6_addr32[0] & __constant_htonl(0xFF000000)) == __constant_htonl(0xFF000000);
+       return (addr->s6_addr32[0] & htonl(0xFF000000)) == htonl(0xFF000000);
 }
 
 static inline int ipv6_addr_is_ll_all_nodes(const struct in6_addr *addr)
@@ -241,6 +251,26 @@ static inline int ipv6_addr_is_ll_all_routers(const struct in6_addr *addr)
                addr->s6_addr32[3] == htonl(0x00000002));
 }
 
+static inline int ipv6_isatap_eui64(u8 *eui, __be32 addr)
+{
+       eui[0] = (ipv4_is_zeronet(addr) || ipv4_is_private_10(addr) ||
+                 ipv4_is_loopback(addr) || ipv4_is_linklocal_169(addr) ||
+                 ipv4_is_private_172(addr) || ipv4_is_test_192(addr) ||
+                 ipv4_is_anycast_6to4(addr) || ipv4_is_private_192(addr) ||
+                 ipv4_is_test_198(addr) || ipv4_is_multicast(addr) ||
+                 ipv4_is_lbcast(addr)) ? 0x00 : 0x02;
+       eui[1] = 0;
+       eui[2] = 0x5E;
+       eui[3] = 0xFE;
+       memcpy (eui+4, &addr, 4);
+       return 0;
+}
+
+static inline int ipv6_addr_is_isatap(const struct in6_addr *addr)
+{
+       return ((addr->s6_addr32[2] | htonl(0x02000000)) == htonl(0x02005EFE));
+}
+
 #ifdef CONFIG_PROC_FS
 extern int if6_proc_init(void);
 extern void if6_proc_exit(void);