nfsd: track last inode only in use_wgather case
[safe/jmp/linux-2.6] / include / net / if_inet6.h
index eb8afe3..38b7813 100644 (file)
@@ -39,8 +39,6 @@ struct inet6_ifaddr
        
        __u32                   valid_lft;
        __u32                   prefered_lft;
-       unsigned long           cstamp; /* created timestamp */
-       unsigned long           tstamp; /* updated timestamp */
        atomic_t                refcnt;
        spinlock_t              lock;
 
@@ -49,6 +47,9 @@ struct inet6_ifaddr
 
        __u16                   scope;
 
+       unsigned long           cstamp; /* created timestamp */
+       unsigned long           tstamp; /* updated timestamp */
+
        struct timer_list       timer;
 
        struct inet6_dev        *idev;
@@ -112,13 +113,13 @@ struct ifmcaddr6
        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;
 };
@@ -148,11 +149,12 @@ 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;
+       DEFINE_SNMP_STAT(struct ipstats_mib, ipv6);
        DEFINE_SNMP_STAT(struct icmpv6_mib, icmpv6);
+       DEFINE_SNMP_STAT(struct icmpv6msg_mib, icmpv6msg);
 };
 
 struct inet6_dev 
@@ -164,11 +166,11 @@ struct inet6_dev
        struct ifmcaddr6        *mc_list;
        struct ifmcaddr6        *mc_tomb;
        rwlock_t                mc_lock;
-       unsigned long           mc_v1_seen;
-       unsigned long           mc_maxdelay;
        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 */
 
@@ -180,11 +182,8 @@ struct inet6_dev
 
 #ifdef CONFIG_IPV6_PRIVACY
        u8                      rndid[8];
-       u8                      entropy[8];
        struct timer_list       regen_timer;
        struct inet6_ifaddr     *tempaddr_list;
-       __u8                    work_eui64[8];
-       __u8                    work_digest[16];
 #endif
 
        struct neigh_parms      *nd_parms;
@@ -192,10 +191,9 @@ struct inet6_dev
        struct ipv6_devconf     cnf;
        struct ipv6_devstat     stats;
        unsigned long           tstamp; /* ipv6InterfaceTable update timestamp */
+       struct rcu_head         rcu;
 };
 
-extern struct ipv6_devconf ipv6_devconf;
-
 static inline void ipv6_eth_mc_map(struct in6_addr *addr, char *buf)
 {
        /*
@@ -269,18 +267,21 @@ static inline void ipv6_arcnet_mc_map(const struct in6_addr *addr, char *buf)
        buf[0] = 0x00;
 }
 
-static inline void ipv6_ib_mc_map(struct in6_addr *addr, char *buf)
+static inline void ipv6_ib_mc_map(const struct in6_addr *addr,
+                                 const unsigned char *broadcast, char *buf)
 {
+       unsigned char scope = broadcast[5] & 0xF;
+
        buf[0]  = 0;            /* Reserved */
        buf[1]  = 0xff;         /* Multicast QPN */
        buf[2]  = 0xff;
        buf[3]  = 0xff;
        buf[4]  = 0xff;
-       buf[5]  = 0x12;         /* link local scope */
+       buf[5]  = 0x10 | scope; /* scope from broadcast address */
        buf[6]  = 0x60;         /* IPv6 signature */
        buf[7]  = 0x1b;
-       buf[8]  = 0;            /* P_Key */
-       buf[9]  = 0;
+       buf[8]  = broadcast[8]; /* P_Key */
+       buf[9]  = broadcast[9];
        memcpy(buf + 10, addr->s6_addr + 6, 10);
 }
 #endif