upgrade to fedora-2.6.12-1.1398.FC4 + vserver 2.0.rc7
[linux-2.6.git] / include / linux / ip.h
index ed8b641..301e8c6 100644 (file)
@@ -107,7 +107,14 @@ struct ip_options {
 
 #define optlength(opt) (sizeof(struct ip_options) + opt->optlen)
 
-struct inet_opt {
+struct ipv6_pinfo;
+
+struct inet_sock {
+       /* sk and pinet6 has to be the first two members of inet_sock */
+       struct sock             sk;
+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
+       struct ipv6_pinfo       *pinet6;
+#endif
        /* Socket demultiplex comparisons on incoming packets. */
        __u32                   daddr;          /* Foreign IPv4 addr */
        __u32                   rcv_saddr;      /* Bound local IPv4 addr */
@@ -115,18 +122,18 @@ struct inet_opt {
        __u16                   dport;          /* Destination port */
        __u16                   num;            /* Local port */
        __u32                   saddr;          /* Sending source */
-       int                     uc_ttl;         /* Unicast TTL */
-       int                     tos;            /* TOS */
-       unsigned                cmsg_flags;
+       __s16                   uc_ttl;         /* Unicast TTL */
+       __u16                   cmsg_flags;
        struct ip_options       *opt;
        __u16                   sport;          /* Source port */
-       unsigned char           hdrincl;        /* Include headers ? */
+       __u16                   id;             /* ID counter for DF pkts */
+       __u8                    tos;            /* TOS */
        __u8                    mc_ttl;         /* Multicasting TTL */
-       __u8                    mc_loop;        /* Loopback */
        __u8                    pmtudisc;
-       __u16                   id;             /* ID counter for DF pkts */
        unsigned                recverr : 1,
-                               freebind : 1;
+                               freebind : 1,
+                               hdrincl : 1,
+                               mc_loop : 1;
        int                     mc_index;       /* Multicast device index */
        __u32                   mc_addr;
        struct ip_mc_socklist   *mc_list;       /* Group array */
@@ -146,23 +153,27 @@ struct inet_opt {
 };
 
 #define IPCORK_OPT     1       /* ip-options has been held in ipcork.opt */
+#define IPCORK_ALLFRAG 2       /* always fragment (for ipv6 for now) */
 
-struct ipv6_pinfo;
-
-/* WARNING: don't change the layout of the members in inet_sock! */
-struct inet_sock {
-       struct sock       sk;
-#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-       struct ipv6_pinfo *pinet6;
-#endif
-       struct inet_opt   inet;
-};
-
-static inline struct inet_opt * inet_sk(const struct sock *__sk)
+static inline struct inet_sock *inet_sk(const struct sock *sk)
 {
-       return &((struct inet_sock *)__sk)->inet;
+       return (struct inet_sock *)sk;
 }
 
+static inline void __inet_sk_copy_descendant(struct sock *sk_to,
+                                            const struct sock *sk_from,
+                                            const int ancestor_size)
+{
+       memcpy(inet_sk(sk_to) + 1, inet_sk(sk_from) + 1,
+              sk_from->sk_prot->obj_size - ancestor_size);
+}
+#if !(defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE))
+static inline void inet_sk_copy_descendant(struct sock *sk_to,
+                                          const struct sock *sk_from)
+{
+       __inet_sk_copy_descendant(sk_to, sk_from, sizeof(struct inet_sock));
+}
+#endif
 #endif
 
 struct iphdr {