mirror of
https://github.com/torvalds/linux.git
synced 2024-12-28 13:51:44 +00:00
[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: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a224be766b
commit
e5bbef20e0
@ -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 {
|
|||||||
#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);
|
|||||||
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 @@ discard:
|
|||||||
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);
|
|||||||
|
|
||||||
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 {
|
|||||||
|
|
||||||
/* 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)
|
|||||||
|
|
||||||
/* 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)
|
|||||||
/* 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 @@ bad:
|
|||||||
*****************************/
|
*****************************/
|
||||||
|
|
||||||
#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[] = {
|
|||||||
{-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)
|
|||||||
#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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
|
|
||||||
/* 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)
|
|||||||
|
|
||||||
/* 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[] = {
|
|||||||
{ -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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
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);
|
|||||||
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)
|
|||||||
* 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
|
|||||||
}
|
}
|
||||||
|
|
||||||
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 @@ resubmit:
|
|||||||
!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 @@ out_fail:
|
|||||||
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 @@ ipv6_pktoptions:
|
|||||||
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)
|
|||||||
|
|
||||||
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 @@ drop:
|
|||||||
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,
|
|||||||
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 @@ discard:
|
|||||||
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 @@
|
|||||||
#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 @@
|
|||||||
|
|
||||||
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 @@ drop:
|
|||||||
|
|
||||||
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 = {
|
|||||||
.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 = {
|
||||||
|
Loading…
Reference in New Issue
Block a user