Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/kaber/ipmr-2.6
[safe/jmp/linux-2.6] / include / net / if_inet6.h
index b24508a..13f9fc0 100644 (file)
 
 #ifdef __KERNEL__
 
-struct inet6_ifaddr 
-{
+struct inet6_ifaddr {
        struct in6_addr         addr;
        __u32                   prefix_len;
        
        __u32                   valid_lft;
        __u32                   prefered_lft;
-       unsigned long           cstamp; /* created timestamp */
-       unsigned long           tstamp; /* updated timestamp */
        atomic_t                refcnt;
        spinlock_t              lock;
 
@@ -49,25 +46,28 @@ struct inet6_ifaddr
 
        __u16                   scope;
 
+       unsigned long           cstamp; /* created timestamp */
+       unsigned long           tstamp; /* updated timestamp */
+
        struct timer_list       timer;
 
        struct inet6_dev        *idev;
        struct rt6_info         *rt;
 
-       struct inet6_ifaddr     *lst_next;      /* next addr in addr_lst */
-       struct inet6_ifaddr     *if_next;       /* next addr in inet6_dev */
+       struct hlist_node       addr_lst;
+       struct list_head        if_list;
 
 #ifdef CONFIG_IPV6_PRIVACY
-       struct inet6_ifaddr     *tmp_next;      /* next addr in tempaddr_lst */
+       struct list_head        tmp_list;
        struct inet6_ifaddr     *ifpub;
        int                     regen_count;
 #endif
 
        int                     dead;
+       struct rcu_head         rcu;
 };
 
-struct ip6_sf_socklist
-{
+struct ip6_sf_socklist {
        unsigned int            sl_max;
        unsigned int            sl_count;
        struct in6_addr         sl_addr[0];
@@ -78,8 +78,7 @@ struct ip6_sf_socklist
 
 #define IP6_SFBLOCK    10      /* allocate this many at once */
 
-struct ipv6_mc_socklist
-{
+struct ipv6_mc_socklist {
        struct in6_addr         addr;
        int                     ifindex;
        struct ipv6_mc_socklist *next;
@@ -88,8 +87,7 @@ struct ipv6_mc_socklist
        struct ip6_sf_socklist  *sflist;
 };
 
-struct ip6_sf_list
-{
+struct ip6_sf_list {
        struct ip6_sf_list      *sf_next;
        struct in6_addr         sf_addr;
        unsigned long           sf_count[2];    /* include/exclude counts */
@@ -104,36 +102,33 @@ struct ip6_sf_list
 #define MAF_NOREPORT           0x08
 #define MAF_GSQUERY            0x10
 
-struct ifmcaddr6
-{
+struct ifmcaddr6 {
        struct in6_addr         mca_addr;
        struct inet6_dev        *idev;
        struct ifmcaddr6        *next;
        struct ip6_sf_list      *mca_sources;
        struct ip6_sf_list      *mca_tomb;
        unsigned int            mca_sfmode;
+       unsigned char           mca_crcount;
        unsigned long           mca_sfcount[2];
        struct timer_list       mca_timer;
        unsigned                mca_flags;
        int                     mca_users;
        atomic_t                mca_refcnt;
        spinlock_t              mca_lock;
-       unsigned char           mca_crcount;
        unsigned long           mca_cstamp;
        unsigned long           mca_tstamp;
 };
 
 /* Anycast stuff */
 
-struct ipv6_ac_socklist
-{
+struct ipv6_ac_socklist {
        struct in6_addr         acl_addr;
        int                     acl_ifindex;
        struct ipv6_ac_socklist *acl_next;
 };
 
-struct ifacaddr6
-{
+struct ifacaddr6 {
        struct in6_addr         aca_addr;
        struct inet6_dev        *aca_idev;
        struct rt6_info         *aca_rt;
@@ -148,7 +143,6 @@ struct ifacaddr6
 #define        IFA_HOST        IPV6_ADDR_LOOPBACK
 #define        IFA_LINK        IPV6_ADDR_LINKLOCAL
 #define        IFA_SITE        IPV6_ADDR_SITELOCAL
-#define        IFA_GLOBAL      0x0000U
 
 struct ipv6_devstat {
        struct proc_dir_entry   *proc_dir_entry;
@@ -157,20 +151,19 @@ struct ipv6_devstat {
        DEFINE_SNMP_STAT(struct icmpv6msg_mib, icmpv6msg);
 };
 
-struct inet6_dev 
-{
-       struct net_device               *dev;
+struct inet6_dev {
+       struct net_device       *dev;
 
-       struct inet6_ifaddr     *addr_list;
+       struct list_head        addr_list;
 
        struct ifmcaddr6        *mc_list;
        struct ifmcaddr6        *mc_tomb;
-       rwlock_t                mc_lock;
-       unsigned long           mc_v1_seen;
-       unsigned long           mc_maxdelay;
+       spinlock_t              mc_lock;
        unsigned char           mc_qrv;
        unsigned char           mc_gq_running;
        unsigned char           mc_ifc_count;
+       unsigned long           mc_v1_seen;
+       unsigned long           mc_maxdelay;
        struct timer_list       mc_gq_timer;    /* general query timer */
        struct timer_list       mc_ifc_timer;   /* interface change timer */
 
@@ -183,7 +176,7 @@ struct inet6_dev
 #ifdef CONFIG_IPV6_PRIVACY
        u8                      rndid[8];
        struct timer_list       regen_timer;
-       struct inet6_ifaddr     *tempaddr_list;
+       struct list_head        tempaddr_list;
 #endif
 
        struct neigh_parms      *nd_parms;
@@ -194,8 +187,6 @@ struct inet6_dev
        struct rcu_head         rcu;
 };
 
-extern struct ipv6_devconf ipv6_devconf;
-
 static inline void ipv6_eth_mc_map(struct in6_addr *addr, char *buf)
 {
        /*