=================================================================== ChangeSet@1.2335, 2005-01-15 19:24:18-02:00, acme@toy.ghostprotocols.net [IPV6] merge raw6_sock with raw6_opt No need for two structs, follow the new inet_sock layout style. Signed-off-by: Arnaldo Carvalho de Melo Signed-off-by: David S. Miller include/linux/ipv6.h | 23 +++++++++++------------ net/ipv6/raw.c | 41 +++++++++++++++++++++-------------------- 2 files changed, 32 insertions(+), 32 deletions(-) diff -Nru a/include/linux/ipv6.h b/include/linux/ipv6.h --- a/include/linux/ipv6.h 2005-01-17 23:22:12 -02:00 +++ b/include/linux/ipv6.h 2005-01-17 23:22:12 -02:00 @@ -247,27 +247,26 @@ } cork; }; -struct raw6_opt { +/* WARNING: don't change the layout of the members in {raw,udp,tcp}6_sock! */ +struct raw6_sock { + /* inet_sock has to be the first member of raw6_sock */ + struct inet_sock inet; __u32 checksum; /* perform checksum */ __u32 offset; /* checksum offset */ - struct icmp6_filter filter; -}; - -/* WARNING: don't change the layout of the members in {raw,udp,tcp}6_sock! */ -struct raw6_sock { - struct inet_sock inet; - struct raw6_opt raw6; - struct ipv6_pinfo inet6; + /* ipv6_pinfo has to be the last member of raw6_sock, see inet6_sk_generic */ + struct ipv6_pinfo inet6; }; struct udp6_sock { struct udp_sock udp; + /* ipv6_pinfo has to be the last member of udp6_sock, see inet6_sk_generic */ struct ipv6_pinfo inet6; }; struct tcp6_sock { struct tcp_sock tcp; + /* ipv6_pinfo has to be the last member of tcp6_sock, see inet6_sk_generic */ struct ipv6_pinfo inet6; }; @@ -277,9 +276,9 @@ return inet_sk(__sk)->pinet6; } -static inline struct raw6_opt * raw6_sk(const struct sock *__sk) +static inline struct raw6_sock *raw6_sk(const struct sock *sk) { - return &((struct raw6_sock *)__sk)->raw6; + return (struct raw6_sock *)sk; } static inline void inet_sk_copy_descendant(struct sock *sk_to, @@ -304,7 +303,7 @@ return NULL; } -static inline struct raw6_opt * raw6_sk(const struct sock *__sk) +static inline struct raw6_sock *raw6_sk(const struct sock *sk) { return NULL; } diff -Nru a/net/ipv6/raw.c b/net/ipv6/raw.c --- a/net/ipv6/raw.c 2005-01-17 23:22:12 -02:00 +++ b/net/ipv6/raw.c 2005-01-17 23:22:12 -02:00 @@ -115,10 +115,10 @@ static __inline__ int icmpv6_filter(struct sock *sk, struct sk_buff *skb) { struct icmp6hdr *icmph; - struct raw6_opt *opt = raw6_sk(sk); + struct raw6_sock *rp = raw6_sk(sk); if (pskb_may_pull(skb, sizeof(struct icmp6hdr))) { - __u32 *data = &opt->filter.data[0]; + __u32 *data = &rp->filter.data[0]; int bit_nr; icmph = (struct icmp6hdr *) skb->data; @@ -315,14 +315,14 @@ int rawv6_rcv(struct sock *sk, struct sk_buff *skb) { struct inet_sock *inet = inet_sk(sk); - struct raw6_opt *raw_opt = raw6_sk(sk); + struct raw6_sock *rp = raw6_sk(sk); if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb)) { kfree_skb(skb); return NET_RX_DROP; } - if (!raw_opt->checksum) + if (!rp->checksum) skb->ip_summed = CHECKSUM_UNNECESSARY; if (skb->ip_summed != CHECKSUM_UNNECESSARY) { @@ -451,21 +451,22 @@ goto out_free; } -static int rawv6_push_pending_frames(struct sock *sk, struct flowi *fl, struct raw6_opt *opt, int len) +static int rawv6_push_pending_frames(struct sock *sk, struct flowi *fl, + struct raw6_sock *rp, int len) { struct sk_buff *skb; int err = 0; u16 *csum; u32 tmp_csum; - if (!opt->checksum) + if (!rp->checksum) goto send; if ((skb = skb_peek(&sk->sk_write_queue)) == NULL) goto out; - if (opt->offset + 1 < len) - csum = (u16 *)(skb->h.raw + opt->offset); + if (rp->offset + 1 < len) + csum = (u16 *)(skb->h.raw + rp->offset); else { err = -EINVAL; goto out; @@ -609,7 +610,7 @@ struct in6_addr *daddr, *final_p = NULL, final; struct inet_sock *inet = inet_sk(sk); struct ipv6_pinfo *np = inet6_sk(sk); - struct raw6_opt *raw_opt = raw6_sk(sk); + struct raw6_sock *rp = raw6_sk(sk); struct ipv6_txoptions *opt = NULL; struct ip6_flowlabel *flowlabel = NULL; struct dst_entry *dst = NULL; @@ -771,7 +772,7 @@ if (err) ip6_flush_pending_frames(sk); else if (!(msg->msg_flags & MSG_MORE)) - err = rawv6_push_pending_frames(sk, &fl, raw_opt, len); + err = rawv6_push_pending_frames(sk, &fl, rp, len); } done: ip6_dst_store(sk, dst, @@ -838,7 +839,7 @@ static int rawv6_setsockopt(struct sock *sk, int level, int optname, char __user *optval, int optlen) { - struct raw6_opt *opt = raw6_sk(sk); + struct raw6_sock *rp = raw6_sk(sk); int val; switch(level) { @@ -868,10 +869,10 @@ if (val > 0 && (val&1)) return(-EINVAL); if (val < 0) { - opt->checksum = 0; + rp->checksum = 0; } else { - opt->checksum = 1; - opt->offset = val; + rp->checksum = 1; + rp->offset = val; } return 0; @@ -885,7 +886,7 @@ static int rawv6_getsockopt(struct sock *sk, int level, int optname, char __user *optval, int __user *optlen) { - struct raw6_opt *opt = raw6_sk(sk); + struct raw6_sock *rp = raw6_sk(sk); int val, len; switch(level) { @@ -910,10 +911,10 @@ switch (optname) { case IPV6_CHECKSUM: - if (opt->checksum == 0) + if (rp->checksum == 0) val = -1; else - val = opt->offset; + val = rp->offset; break; default: @@ -966,9 +967,9 @@ static int rawv6_init_sk(struct sock *sk) { if (inet_sk(sk)->num == IPPROTO_ICMPV6) { - struct raw6_opt *opt = raw6_sk(sk); - opt->checksum = 1; - opt->offset = 2; + struct raw6_sock *rp = raw6_sk(sk); + rp->checksum = 1; + rp->offset = 2; } return(0); }