提交 e5bbef20 编写于 作者: H Herbert Xu 提交者: David S. Miller

[IPV6]: Replace sk_buff ** with sk_buff * in input handlers

With all the users of the double pointers removed from the IPv6 input path,
this patch converts all occurances of sk_buff ** to sk_buff * in IPv6 input
handlers.
Signed-off-by: NHerbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 a224be76
...@@ -249,7 +249,7 @@ extern int ip6_ra_control(struct sock *sk, int sel, ...@@ -249,7 +249,7 @@ extern int ip6_ra_control(struct sock *sk, int sel,
void (*destructor)(struct sock *)); void (*destructor)(struct sock *));
extern int ipv6_parse_hopopts(struct sk_buff **skbp); extern int ipv6_parse_hopopts(struct sk_buff *skb);
extern struct ipv6_txoptions * ipv6_dup_options(struct sock *sk, struct ipv6_txoptions *opt); extern struct ipv6_txoptions * ipv6_dup_options(struct sock *sk, struct ipv6_txoptions *opt);
extern struct ipv6_txoptions * ipv6_renew_options(struct sock *sk, struct ipv6_txoptions *opt, extern struct ipv6_txoptions * ipv6_renew_options(struct sock *sk, struct ipv6_txoptions *opt,
......
...@@ -45,7 +45,7 @@ struct net_protocol { ...@@ -45,7 +45,7 @@ struct net_protocol {
#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
struct inet6_protocol struct inet6_protocol
{ {
int (*handler)(struct sk_buff **skb); int (*handler)(struct sk_buff *skb);
void (*err_handler)(struct sk_buff *skb, void (*err_handler)(struct sk_buff *skb,
struct inet6_skb_parm *opt, struct inet6_skb_parm *opt,
......
...@@ -1051,7 +1051,7 @@ extern int xfrm4_output(struct sk_buff *skb); ...@@ -1051,7 +1051,7 @@ extern int xfrm4_output(struct sk_buff *skb);
extern int xfrm4_tunnel_register(struct xfrm_tunnel *handler, unsigned short family); extern int xfrm4_tunnel_register(struct xfrm_tunnel *handler, unsigned short family);
extern int xfrm4_tunnel_deregister(struct xfrm_tunnel *handler, unsigned short family); extern int xfrm4_tunnel_deregister(struct xfrm_tunnel *handler, unsigned short family);
extern int xfrm6_rcv_spi(struct sk_buff *skb, __be32 spi); extern int xfrm6_rcv_spi(struct sk_buff *skb, __be32 spi);
extern int xfrm6_rcv(struct sk_buff **pskb); extern int xfrm6_rcv(struct sk_buff *skb);
extern int xfrm6_input_addr(struct sk_buff *skb, xfrm_address_t *daddr, extern int xfrm6_input_addr(struct sk_buff *skb, xfrm_address_t *daddr,
xfrm_address_t *saddr, u8 proto); xfrm_address_t *saddr, u8 proto);
extern int xfrm6_tunnel_register(struct xfrm6_tunnel *handler, unsigned short family); extern int xfrm6_tunnel_register(struct xfrm6_tunnel *handler, unsigned short family);
......
...@@ -767,10 +767,9 @@ static int dccp_v6_do_rcv(struct sock *sk, struct sk_buff *skb) ...@@ -767,10 +767,9 @@ static int dccp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
return 0; return 0;
} }
static int dccp_v6_rcv(struct sk_buff **pskb) static int dccp_v6_rcv(struct sk_buff *skb)
{ {
const struct dccp_hdr *dh; const struct dccp_hdr *dh;
struct sk_buff *skb = *pskb;
struct sock *sk; struct sock *sk;
int min_cov; int min_cov;
......
...@@ -102,7 +102,7 @@ EXPORT_SYMBOL_GPL(ipv6_find_tlv); ...@@ -102,7 +102,7 @@ EXPORT_SYMBOL_GPL(ipv6_find_tlv);
struct tlvtype_proc { struct tlvtype_proc {
int type; int type;
int (*func)(struct sk_buff **skbp, int offset); int (*func)(struct sk_buff *skb, int offset);
}; };
/********************* /*********************
...@@ -111,10 +111,8 @@ struct tlvtype_proc { ...@@ -111,10 +111,8 @@ struct tlvtype_proc {
/* An unknown option is detected, decide what to do */ /* An unknown option is detected, decide what to do */
static int ip6_tlvopt_unknown(struct sk_buff **skbp, int optoff) static int ip6_tlvopt_unknown(struct sk_buff *skb, int optoff)
{ {
struct sk_buff *skb = *skbp;
switch ((skb_network_header(skb)[optoff] & 0xC0) >> 6) { switch ((skb_network_header(skb)[optoff] & 0xC0) >> 6) {
case 0: /* ignore */ case 0: /* ignore */
return 1; return 1;
...@@ -139,9 +137,8 @@ static int ip6_tlvopt_unknown(struct sk_buff **skbp, int optoff) ...@@ -139,9 +137,8 @@ static int ip6_tlvopt_unknown(struct sk_buff **skbp, int optoff)
/* Parse tlv encoded option header (hop-by-hop or destination) */ /* Parse tlv encoded option header (hop-by-hop or destination) */
static int ip6_parse_tlv(struct tlvtype_proc *procs, struct sk_buff **skbp) static int ip6_parse_tlv(struct tlvtype_proc *procs, struct sk_buff *skb)
{ {
struct sk_buff *skb = *skbp;
struct tlvtype_proc *curr; struct tlvtype_proc *curr;
const unsigned char *nh = skb_network_header(skb); const unsigned char *nh = skb_network_header(skb);
int off = skb_network_header_len(skb); int off = skb_network_header_len(skb);
...@@ -172,13 +169,13 @@ static int ip6_parse_tlv(struct tlvtype_proc *procs, struct sk_buff **skbp) ...@@ -172,13 +169,13 @@ static int ip6_parse_tlv(struct tlvtype_proc *procs, struct sk_buff **skbp)
/* type specific length/alignment /* type specific length/alignment
checks will be performed in the checks will be performed in the
func(). */ func(). */
if (curr->func(skbp, off) == 0) if (curr->func(skb, off) == 0)
return 0; return 0;
break; break;
} }
} }
if (curr->type < 0) { if (curr->type < 0) {
if (ip6_tlvopt_unknown(skbp, off) == 0) if (ip6_tlvopt_unknown(skb, off) == 0)
return 0; return 0;
} }
break; break;
...@@ -198,9 +195,8 @@ static int ip6_parse_tlv(struct tlvtype_proc *procs, struct sk_buff **skbp) ...@@ -198,9 +195,8 @@ static int ip6_parse_tlv(struct tlvtype_proc *procs, struct sk_buff **skbp)
*****************************/ *****************************/
#if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE) #if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE)
static int ipv6_dest_hao(struct sk_buff **skbp, int optoff) static int ipv6_dest_hao(struct sk_buff *skb, int optoff)
{ {
struct sk_buff *skb = *skbp;
struct ipv6_destopt_hao *hao; struct ipv6_destopt_hao *hao;
struct inet6_skb_parm *opt = IP6CB(skb); struct inet6_skb_parm *opt = IP6CB(skb);
struct ipv6hdr *ipv6h = ipv6_hdr(skb); struct ipv6hdr *ipv6h = ipv6_hdr(skb);
...@@ -271,9 +267,8 @@ static struct tlvtype_proc tlvprocdestopt_lst[] = { ...@@ -271,9 +267,8 @@ static struct tlvtype_proc tlvprocdestopt_lst[] = {
{-1, NULL} {-1, NULL}
}; };
static int ipv6_destopt_rcv(struct sk_buff **skbp) static int ipv6_destopt_rcv(struct sk_buff *skb)
{ {
struct sk_buff *skb = *skbp;
struct inet6_skb_parm *opt = IP6CB(skb); struct inet6_skb_parm *opt = IP6CB(skb);
#if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE) #if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE)
__u16 dstbuf; __u16 dstbuf;
...@@ -295,9 +290,8 @@ static int ipv6_destopt_rcv(struct sk_buff **skbp) ...@@ -295,9 +290,8 @@ static int ipv6_destopt_rcv(struct sk_buff **skbp)
#endif #endif
dst = dst_clone(skb->dst); dst = dst_clone(skb->dst);
if (ip6_parse_tlv(tlvprocdestopt_lst, skbp)) { if (ip6_parse_tlv(tlvprocdestopt_lst, skb)) {
dst_release(dst); dst_release(dst);
skb = *skbp;
skb->transport_header += (skb_transport_header(skb)[1] + 1) << 3; skb->transport_header += (skb_transport_header(skb)[1] + 1) << 3;
opt = IP6CB(skb); opt = IP6CB(skb);
#if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE) #if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE)
...@@ -328,10 +322,8 @@ void __init ipv6_destopt_init(void) ...@@ -328,10 +322,8 @@ void __init ipv6_destopt_init(void)
NONE header. No data in packet. NONE header. No data in packet.
********************************/ ********************************/
static int ipv6_nodata_rcv(struct sk_buff **skbp) static int ipv6_nodata_rcv(struct sk_buff *skb)
{ {
struct sk_buff *skb = *skbp;
kfree_skb(skb); kfree_skb(skb);
return 0; return 0;
} }
...@@ -351,9 +343,8 @@ void __init ipv6_nodata_init(void) ...@@ -351,9 +343,8 @@ void __init ipv6_nodata_init(void)
Routing header. Routing header.
********************************/ ********************************/
static int ipv6_rthdr_rcv(struct sk_buff **skbp) static int ipv6_rthdr_rcv(struct sk_buff *skb)
{ {
struct sk_buff *skb = *skbp;
struct inet6_skb_parm *opt = IP6CB(skb); struct inet6_skb_parm *opt = IP6CB(skb);
struct in6_addr *addr = NULL; struct in6_addr *addr = NULL;
struct in6_addr daddr; struct in6_addr daddr;
...@@ -565,9 +556,8 @@ static inline struct inet6_dev *ipv6_skb_idev(struct sk_buff *skb) ...@@ -565,9 +556,8 @@ static inline struct inet6_dev *ipv6_skb_idev(struct sk_buff *skb)
/* Router Alert as of RFC 2711 */ /* Router Alert as of RFC 2711 */
static int ipv6_hop_ra(struct sk_buff **skbp, int optoff) static int ipv6_hop_ra(struct sk_buff *skb, int optoff)
{ {
struct sk_buff *skb = *skbp;
const unsigned char *nh = skb_network_header(skb); const unsigned char *nh = skb_network_header(skb);
if (nh[optoff + 1] == 2) { if (nh[optoff + 1] == 2) {
...@@ -582,9 +572,8 @@ static int ipv6_hop_ra(struct sk_buff **skbp, int optoff) ...@@ -582,9 +572,8 @@ static int ipv6_hop_ra(struct sk_buff **skbp, int optoff)
/* Jumbo payload */ /* Jumbo payload */
static int ipv6_hop_jumbo(struct sk_buff **skbp, int optoff) static int ipv6_hop_jumbo(struct sk_buff *skb, int optoff)
{ {
struct sk_buff *skb = *skbp;
const unsigned char *nh = skb_network_header(skb); const unsigned char *nh = skb_network_header(skb);
u32 pkt_len; u32 pkt_len;
...@@ -635,9 +624,8 @@ static struct tlvtype_proc tlvprochopopt_lst[] = { ...@@ -635,9 +624,8 @@ static struct tlvtype_proc tlvprochopopt_lst[] = {
{ -1, } { -1, }
}; };
int ipv6_parse_hopopts(struct sk_buff **skbp) int ipv6_parse_hopopts(struct sk_buff *skb)
{ {
struct sk_buff *skb = *skbp;
struct inet6_skb_parm *opt = IP6CB(skb); struct inet6_skb_parm *opt = IP6CB(skb);
/* /*
...@@ -654,8 +642,7 @@ int ipv6_parse_hopopts(struct sk_buff **skbp) ...@@ -654,8 +642,7 @@ int ipv6_parse_hopopts(struct sk_buff **skbp)
} }
opt->hop = sizeof(struct ipv6hdr); opt->hop = sizeof(struct ipv6hdr);
if (ip6_parse_tlv(tlvprochopopt_lst, skbp)) { if (ip6_parse_tlv(tlvprochopopt_lst, skb)) {
skb = *skbp;
skb->transport_header += (skb_transport_header(skb)[1] + 1) << 3; skb->transport_header += (skb_transport_header(skb)[1] + 1) << 3;
opt = IP6CB(skb); opt = IP6CB(skb);
opt->nhoff = sizeof(struct ipv6hdr); opt->nhoff = sizeof(struct ipv6hdr);
......
...@@ -82,7 +82,7 @@ EXPORT_SYMBOL(icmpv6msg_statistics); ...@@ -82,7 +82,7 @@ EXPORT_SYMBOL(icmpv6msg_statistics);
static DEFINE_PER_CPU(struct socket *, __icmpv6_socket) = NULL; static DEFINE_PER_CPU(struct socket *, __icmpv6_socket) = NULL;
#define icmpv6_socket __get_cpu_var(__icmpv6_socket) #define icmpv6_socket __get_cpu_var(__icmpv6_socket)
static int icmpv6_rcv(struct sk_buff **pskb); static int icmpv6_rcv(struct sk_buff *skb);
static struct inet6_protocol icmpv6_protocol = { static struct inet6_protocol icmpv6_protocol = {
.handler = icmpv6_rcv, .handler = icmpv6_rcv,
...@@ -614,9 +614,8 @@ static void icmpv6_notify(struct sk_buff *skb, int type, int code, __be32 info) ...@@ -614,9 +614,8 @@ static void icmpv6_notify(struct sk_buff *skb, int type, int code, __be32 info)
* Handle icmp messages * Handle icmp messages
*/ */
static int icmpv6_rcv(struct sk_buff **pskb) static int icmpv6_rcv(struct sk_buff *skb)
{ {
struct sk_buff *skb = *pskb;
struct net_device *dev = skb->dev; struct net_device *dev = skb->dev;
struct inet6_dev *idev = __in6_dev_get(dev); struct inet6_dev *idev = __in6_dev_get(dev);
struct in6_addr *saddr, *daddr; struct in6_addr *saddr, *daddr;
......
...@@ -125,7 +125,7 @@ int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt ...@@ -125,7 +125,7 @@ int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt
} }
if (hdr->nexthdr == NEXTHDR_HOP) { if (hdr->nexthdr == NEXTHDR_HOP) {
if (ipv6_parse_hopopts(&skb) < 0) { if (ipv6_parse_hopopts(skb) < 0) {
IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS);
rcu_read_unlock(); rcu_read_unlock();
return 0; return 0;
...@@ -199,7 +199,7 @@ static int ip6_input_finish(struct sk_buff *skb) ...@@ -199,7 +199,7 @@ static int ip6_input_finish(struct sk_buff *skb)
!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) !xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb))
goto discard; goto discard;
ret = ipprot->handler(&skb); ret = ipprot->handler(skb);
if (ret > 0) if (ret > 0)
goto resubmit; goto resubmit;
else if (ret == 0) else if (ret == 0)
......
...@@ -628,9 +628,8 @@ static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff *prev, ...@@ -628,9 +628,8 @@ static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff *prev,
return -1; return -1;
} }
static int ipv6_frag_rcv(struct sk_buff **skbp) static int ipv6_frag_rcv(struct sk_buff *skb)
{ {
struct sk_buff *skb = *skbp;
struct frag_hdr *fhdr; struct frag_hdr *fhdr;
struct frag_queue *fq; struct frag_queue *fq;
struct ipv6hdr *hdr = ipv6_hdr(skb); struct ipv6hdr *hdr = ipv6_hdr(skb);
......
...@@ -1668,9 +1668,8 @@ static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb) ...@@ -1668,9 +1668,8 @@ static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
return 0; return 0;
} }
static int tcp_v6_rcv(struct sk_buff **pskb) static int tcp_v6_rcv(struct sk_buff *skb)
{ {
struct sk_buff *skb = *pskb;
struct tcphdr *th; struct tcphdr *th;
struct sock *sk; struct sock *sk;
int ret; int ret;
......
...@@ -87,9 +87,8 @@ int xfrm6_tunnel_deregister(struct xfrm6_tunnel *handler, unsigned short family) ...@@ -87,9 +87,8 @@ int xfrm6_tunnel_deregister(struct xfrm6_tunnel *handler, unsigned short family)
EXPORT_SYMBOL(xfrm6_tunnel_deregister); EXPORT_SYMBOL(xfrm6_tunnel_deregister);
static int tunnel6_rcv(struct sk_buff **pskb) static int tunnel6_rcv(struct sk_buff *skb)
{ {
struct sk_buff *skb = *pskb;
struct xfrm6_tunnel *handler; struct xfrm6_tunnel *handler;
if (!pskb_may_pull(skb, sizeof(struct ipv6hdr))) if (!pskb_may_pull(skb, sizeof(struct ipv6hdr)))
...@@ -106,9 +105,8 @@ static int tunnel6_rcv(struct sk_buff **pskb) ...@@ -106,9 +105,8 @@ static int tunnel6_rcv(struct sk_buff **pskb)
return 0; return 0;
} }
static int tunnel46_rcv(struct sk_buff **pskb) static int tunnel46_rcv(struct sk_buff *skb)
{ {
struct sk_buff *skb = *pskb;
struct xfrm6_tunnel *handler; struct xfrm6_tunnel *handler;
if (!pskb_may_pull(skb, sizeof(struct ipv6hdr))) if (!pskb_may_pull(skb, sizeof(struct ipv6hdr)))
......
...@@ -405,10 +405,9 @@ static inline int udp6_csum_init(struct sk_buff *skb, struct udphdr *uh, ...@@ -405,10 +405,9 @@ static inline int udp6_csum_init(struct sk_buff *skb, struct udphdr *uh,
return 0; return 0;
} }
int __udp6_lib_rcv(struct sk_buff **pskb, struct hlist_head udptable[], int __udp6_lib_rcv(struct sk_buff *skb, struct hlist_head udptable[],
int proto) int proto)
{ {
struct sk_buff *skb = *pskb;
struct sock *sk; struct sock *sk;
struct udphdr *uh; struct udphdr *uh;
struct net_device *dev = skb->dev; struct net_device *dev = skb->dev;
...@@ -494,9 +493,9 @@ int __udp6_lib_rcv(struct sk_buff **pskb, struct hlist_head udptable[], ...@@ -494,9 +493,9 @@ int __udp6_lib_rcv(struct sk_buff **pskb, struct hlist_head udptable[],
return 0; return 0;
} }
static __inline__ int udpv6_rcv(struct sk_buff **pskb) static __inline__ int udpv6_rcv(struct sk_buff *skb)
{ {
return __udp6_lib_rcv(pskb, udp_hash, IPPROTO_UDP); return __udp6_lib_rcv(skb, udp_hash, IPPROTO_UDP);
} }
/* /*
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
#include <net/addrconf.h> #include <net/addrconf.h>
#include <net/inet_common.h> #include <net/inet_common.h>
extern int __udp6_lib_rcv(struct sk_buff **, struct hlist_head [], int ); extern int __udp6_lib_rcv(struct sk_buff *, struct hlist_head [], int );
extern void __udp6_lib_err(struct sk_buff *, struct inet6_skb_parm *, extern void __udp6_lib_err(struct sk_buff *, struct inet6_skb_parm *,
int , int , int , __be32 , struct hlist_head []); int , int , int , __be32 , struct hlist_head []);
......
...@@ -17,9 +17,9 @@ ...@@ -17,9 +17,9 @@
DEFINE_SNMP_STAT(struct udp_mib, udplite_stats_in6) __read_mostly; DEFINE_SNMP_STAT(struct udp_mib, udplite_stats_in6) __read_mostly;
static int udplitev6_rcv(struct sk_buff **pskb) static int udplitev6_rcv(struct sk_buff *skb)
{ {
return __udp6_lib_rcv(pskb, udplite_hash, IPPROTO_UDPLITE); return __udp6_lib_rcv(skb, udplite_hash, IPPROTO_UDPLITE);
} }
static void udplitev6_err(struct sk_buff *skb, static void udplitev6_err(struct sk_buff *skb,
......
...@@ -133,9 +133,9 @@ int xfrm6_rcv_spi(struct sk_buff *skb, __be32 spi) ...@@ -133,9 +133,9 @@ int xfrm6_rcv_spi(struct sk_buff *skb, __be32 spi)
EXPORT_SYMBOL(xfrm6_rcv_spi); EXPORT_SYMBOL(xfrm6_rcv_spi);
int xfrm6_rcv(struct sk_buff **pskb) int xfrm6_rcv(struct sk_buff *skb)
{ {
return xfrm6_rcv_spi(*pskb, 0); return xfrm6_rcv_spi(skb, 0);
} }
EXPORT_SYMBOL(xfrm6_rcv); EXPORT_SYMBOL(xfrm6_rcv);
......
...@@ -954,9 +954,9 @@ static struct inet_protosw sctpv6_stream_protosw = { ...@@ -954,9 +954,9 @@ static struct inet_protosw sctpv6_stream_protosw = {
.flags = SCTP_PROTOSW_FLAG, .flags = SCTP_PROTOSW_FLAG,
}; };
static int sctp6_rcv(struct sk_buff **pskb) static int sctp6_rcv(struct sk_buff *skb)
{ {
return sctp_rcv(*pskb) ? -1 : 0; return sctp_rcv(skb) ? -1 : 0;
} }
static struct inet6_protocol sctpv6_protocol = { static struct inet6_protocol sctpv6_protocol = {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册