mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
[NET] IPV6: Fix whitespace errors.
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
e905a9edab
commit
1ab1457c42
49 changed files with 869 additions and 869 deletions
|
@ -348,10 +348,10 @@ static struct inet6_dev * ipv6_add_dev(struct net_device *dev)
|
|||
if (dev->mtu < IPV6_MIN_MTU)
|
||||
return NULL;
|
||||
|
||||
ndev = kzalloc(sizeof(struct inet6_dev), GFP_KERNEL);
|
||||
ndev = kzalloc(sizeof(struct inet6_dev), GFP_KERNEL);
|
||||
|
||||
if (ndev == NULL)
|
||||
return NULL;
|
||||
if (ndev == NULL)
|
||||
return NULL;
|
||||
|
||||
rwlock_init(&ndev->lock);
|
||||
ndev->dev = dev;
|
||||
|
@ -2056,7 +2056,7 @@ static void sit_add_v4_addrs(struct inet6_dev *idev)
|
|||
return;
|
||||
}
|
||||
|
||||
for (dev = dev_base; dev != NULL; dev = dev->next) {
|
||||
for (dev = dev_base; dev != NULL; dev = dev->next) {
|
||||
struct in_device * in_dev = __in_dev_get_rtnl(dev);
|
||||
if (in_dev && (dev->flags & IFF_UP)) {
|
||||
struct in_ifaddr * ifa;
|
||||
|
@ -2091,7 +2091,7 @@ static void sit_add_v4_addrs(struct inet6_dev *idev)
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -2378,7 +2378,7 @@ static int addrconf_ifdown(struct net_device *dev, int how)
|
|||
return -ENODEV;
|
||||
|
||||
/* Step 1: remove reference to ipv6 device from parent device.
|
||||
Do not dev_put!
|
||||
Do not dev_put!
|
||||
*/
|
||||
if (how == 1) {
|
||||
idev->dead = 1;
|
||||
|
@ -3675,7 +3675,7 @@ int addrconf_sysctl_forward(ctl_table *ctl, int write, struct file * filp,
|
|||
rt6_purge_dflt_routers();
|
||||
}
|
||||
|
||||
return ret;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int addrconf_sysctl_forward_strategy(ctl_table *table,
|
||||
|
@ -3743,19 +3743,19 @@ static struct addrconf_sysctl_table
|
|||
} addrconf_sysctl __read_mostly = {
|
||||
.sysctl_header = NULL,
|
||||
.addrconf_vars = {
|
||||
{
|
||||
{
|
||||
.ctl_name = NET_IPV6_FORWARDING,
|
||||
.procname = "forwarding",
|
||||
.data = &ipv6_devconf.forwarding,
|
||||
.data = &ipv6_devconf.forwarding,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &addrconf_sysctl_forward,
|
||||
.proc_handler = &addrconf_sysctl_forward,
|
||||
.strategy = &addrconf_sysctl_forward_strategy,
|
||||
},
|
||||
{
|
||||
.ctl_name = NET_IPV6_HOP_LIMIT,
|
||||
.procname = "hop_limit",
|
||||
.data = &ipv6_devconf.hop_limit,
|
||||
.data = &ipv6_devconf.hop_limit,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec,
|
||||
|
@ -3764,116 +3764,116 @@ static struct addrconf_sysctl_table
|
|||
.ctl_name = NET_IPV6_MTU,
|
||||
.procname = "mtu",
|
||||
.data = &ipv6_devconf.mtu6,
|
||||
.maxlen = sizeof(int),
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec,
|
||||
.proc_handler = &proc_dointvec,
|
||||
},
|
||||
{
|
||||
.ctl_name = NET_IPV6_ACCEPT_RA,
|
||||
.procname = "accept_ra",
|
||||
.data = &ipv6_devconf.accept_ra,
|
||||
.data = &ipv6_devconf.accept_ra,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec,
|
||||
.proc_handler = &proc_dointvec,
|
||||
},
|
||||
{
|
||||
.ctl_name = NET_IPV6_ACCEPT_REDIRECTS,
|
||||
.procname = "accept_redirects",
|
||||
.data = &ipv6_devconf.accept_redirects,
|
||||
.data = &ipv6_devconf.accept_redirects,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec,
|
||||
.proc_handler = &proc_dointvec,
|
||||
},
|
||||
{
|
||||
.ctl_name = NET_IPV6_AUTOCONF,
|
||||
.procname = "autoconf",
|
||||
.data = &ipv6_devconf.autoconf,
|
||||
.data = &ipv6_devconf.autoconf,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec,
|
||||
.proc_handler = &proc_dointvec,
|
||||
},
|
||||
{
|
||||
.ctl_name = NET_IPV6_DAD_TRANSMITS,
|
||||
.procname = "dad_transmits",
|
||||
.data = &ipv6_devconf.dad_transmits,
|
||||
.data = &ipv6_devconf.dad_transmits,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec,
|
||||
.proc_handler = &proc_dointvec,
|
||||
},
|
||||
{
|
||||
.ctl_name = NET_IPV6_RTR_SOLICITS,
|
||||
.procname = "router_solicitations",
|
||||
.data = &ipv6_devconf.rtr_solicits,
|
||||
.data = &ipv6_devconf.rtr_solicits,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec,
|
||||
.proc_handler = &proc_dointvec,
|
||||
},
|
||||
{
|
||||
.ctl_name = NET_IPV6_RTR_SOLICIT_INTERVAL,
|
||||
.procname = "router_solicitation_interval",
|
||||
.data = &ipv6_devconf.rtr_solicit_interval,
|
||||
.data = &ipv6_devconf.rtr_solicit_interval,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec_jiffies,
|
||||
.proc_handler = &proc_dointvec_jiffies,
|
||||
.strategy = &sysctl_jiffies,
|
||||
},
|
||||
{
|
||||
.ctl_name = NET_IPV6_RTR_SOLICIT_DELAY,
|
||||
.procname = "router_solicitation_delay",
|
||||
.data = &ipv6_devconf.rtr_solicit_delay,
|
||||
.data = &ipv6_devconf.rtr_solicit_delay,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec_jiffies,
|
||||
.proc_handler = &proc_dointvec_jiffies,
|
||||
.strategy = &sysctl_jiffies,
|
||||
},
|
||||
{
|
||||
.ctl_name = NET_IPV6_FORCE_MLD_VERSION,
|
||||
.procname = "force_mld_version",
|
||||
.data = &ipv6_devconf.force_mld_version,
|
||||
.data = &ipv6_devconf.force_mld_version,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec,
|
||||
.proc_handler = &proc_dointvec,
|
||||
},
|
||||
#ifdef CONFIG_IPV6_PRIVACY
|
||||
{
|
||||
.ctl_name = NET_IPV6_USE_TEMPADDR,
|
||||
.procname = "use_tempaddr",
|
||||
.data = &ipv6_devconf.use_tempaddr,
|
||||
.data = &ipv6_devconf.use_tempaddr,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec,
|
||||
.proc_handler = &proc_dointvec,
|
||||
},
|
||||
{
|
||||
.ctl_name = NET_IPV6_TEMP_VALID_LFT,
|
||||
.procname = "temp_valid_lft",
|
||||
.data = &ipv6_devconf.temp_valid_lft,
|
||||
.data = &ipv6_devconf.temp_valid_lft,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec,
|
||||
.proc_handler = &proc_dointvec,
|
||||
},
|
||||
{
|
||||
.ctl_name = NET_IPV6_TEMP_PREFERED_LFT,
|
||||
.procname = "temp_prefered_lft",
|
||||
.data = &ipv6_devconf.temp_prefered_lft,
|
||||
.data = &ipv6_devconf.temp_prefered_lft,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec,
|
||||
.proc_handler = &proc_dointvec,
|
||||
},
|
||||
{
|
||||
.ctl_name = NET_IPV6_REGEN_MAX_RETRY,
|
||||
.procname = "regen_max_retry",
|
||||
.data = &ipv6_devconf.regen_max_retry,
|
||||
.data = &ipv6_devconf.regen_max_retry,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec,
|
||||
.proc_handler = &proc_dointvec,
|
||||
},
|
||||
{
|
||||
.ctl_name = NET_IPV6_MAX_DESYNC_FACTOR,
|
||||
.procname = "max_desync_factor",
|
||||
.data = &ipv6_devconf.max_desync_factor,
|
||||
.data = &ipv6_devconf.max_desync_factor,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec,
|
||||
.proc_handler = &proc_dointvec,
|
||||
},
|
||||
#endif
|
||||
{
|
||||
|
@ -3887,18 +3887,18 @@ static struct addrconf_sysctl_table
|
|||
{
|
||||
.ctl_name = NET_IPV6_ACCEPT_RA_DEFRTR,
|
||||
.procname = "accept_ra_defrtr",
|
||||
.data = &ipv6_devconf.accept_ra_defrtr,
|
||||
.data = &ipv6_devconf.accept_ra_defrtr,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec,
|
||||
.proc_handler = &proc_dointvec,
|
||||
},
|
||||
{
|
||||
.ctl_name = NET_IPV6_ACCEPT_RA_PINFO,
|
||||
.procname = "accept_ra_pinfo",
|
||||
.data = &ipv6_devconf.accept_ra_pinfo,
|
||||
.data = &ipv6_devconf.accept_ra_pinfo,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec,
|
||||
.proc_handler = &proc_dointvec,
|
||||
},
|
||||
#ifdef CONFIG_IPV6_ROUTER_PREF
|
||||
{
|
||||
|
@ -4066,12 +4066,12 @@ static void addrconf_sysctl_unregister(struct ipv6_devconf *p)
|
|||
|
||||
int register_inet6addr_notifier(struct notifier_block *nb)
|
||||
{
|
||||
return atomic_notifier_chain_register(&inet6addr_chain, nb);
|
||||
return atomic_notifier_chain_register(&inet6addr_chain, nb);
|
||||
}
|
||||
|
||||
int unregister_inet6addr_notifier(struct notifier_block *nb)
|
||||
{
|
||||
return atomic_notifier_chain_unregister(&inet6addr_chain,nb);
|
||||
return atomic_notifier_chain_unregister(&inet6addr_chain,nb);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -4124,9 +4124,9 @@ int __init addrconf_init(void)
|
|||
|
||||
void __exit addrconf_cleanup(void)
|
||||
{
|
||||
struct net_device *dev;
|
||||
struct inet6_dev *idev;
|
||||
struct inet6_ifaddr *ifa;
|
||||
struct net_device *dev;
|
||||
struct inet6_dev *idev;
|
||||
struct inet6_ifaddr *ifa;
|
||||
int i;
|
||||
|
||||
unregister_netdevice_notifier(&ipv6_dev_notf);
|
||||
|
|
|
@ -763,7 +763,7 @@ static void cleanup_ipv6_mibs(void)
|
|||
static int __init inet6_init(void)
|
||||
{
|
||||
struct sk_buff *dummy_skb;
|
||||
struct list_head *r;
|
||||
struct list_head *r;
|
||||
int err;
|
||||
|
||||
BUILD_BUG_ON(sizeof(struct inet6_skb_parm) > sizeof(dummy_skb->cb));
|
||||
|
@ -933,11 +933,11 @@ static void __exit inet6_exit(void)
|
|||
#ifdef CONFIG_PROC_FS
|
||||
if6_proc_exit();
|
||||
ac6_proc_exit();
|
||||
ipv6_misc_proc_exit();
|
||||
udp6_proc_exit();
|
||||
udplite6_proc_exit();
|
||||
tcp6_proc_exit();
|
||||
raw6_proc_exit();
|
||||
ipv6_misc_proc_exit();
|
||||
udp6_proc_exit();
|
||||
udplite6_proc_exit();
|
||||
tcp6_proc_exit();
|
||||
raw6_proc_exit();
|
||||
#endif
|
||||
#ifdef CONFIG_IPV6_MIP6
|
||||
mip6_fini();
|
||||
|
|
|
@ -347,9 +347,9 @@ static int ah6_input(struct xfrm_state *x, struct sk_buff *skb)
|
|||
nexthdr = ah->nexthdr;
|
||||
ah_hlen = (ah->hdrlen + 2) << 2;
|
||||
|
||||
if (ah_hlen != XFRM_ALIGN8(sizeof(struct ipv6_auth_hdr) + ahp->icv_full_len) &&
|
||||
ah_hlen != XFRM_ALIGN8(sizeof(struct ipv6_auth_hdr) + ahp->icv_trunc_len))
|
||||
goto out;
|
||||
if (ah_hlen != XFRM_ALIGN8(sizeof(struct ipv6_auth_hdr) + ahp->icv_full_len) &&
|
||||
ah_hlen != XFRM_ALIGN8(sizeof(struct ipv6_auth_hdr) + ahp->icv_trunc_len))
|
||||
goto out;
|
||||
|
||||
if (!pskb_may_pull(skb, ah_hlen))
|
||||
goto out;
|
||||
|
@ -365,7 +365,7 @@ static int ah6_input(struct xfrm_state *x, struct sk_buff *skb)
|
|||
skb->nh.ipv6h->flow_lbl[2] = 0;
|
||||
skb->nh.ipv6h->hop_limit = 0;
|
||||
|
||||
{
|
||||
{
|
||||
u8 auth_data[MAX_AH_AUTH_LEN];
|
||||
|
||||
memcpy(auth_data, ah->auth_data, ahp->icv_trunc_len);
|
||||
|
@ -396,7 +396,7 @@ out:
|
|||
}
|
||||
|
||||
static void ah6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
|
||||
int type, int code, int offset, __be32 info)
|
||||
int type, int code, int offset, __be32 info)
|
||||
{
|
||||
struct ipv6hdr *iph = (struct ipv6hdr*)skb->data;
|
||||
struct ip_auth_hdr *ah = (struct ip_auth_hdr*)(skb->data+offset);
|
||||
|
|
|
@ -55,10 +55,10 @@ int ip6_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
|||
}
|
||||
|
||||
if (addr_len < SIN6_LEN_RFC2133)
|
||||
return -EINVAL;
|
||||
return -EINVAL;
|
||||
|
||||
if (usin->sin6_family != AF_INET6)
|
||||
return -EAFNOSUPPORT;
|
||||
return -EAFNOSUPPORT;
|
||||
|
||||
memset(&fl, 0, sizeof(fl));
|
||||
if (np->sndflow) {
|
||||
|
@ -512,9 +512,9 @@ int datagram_send_ctl(struct msghdr *msg, struct flowi *fl,
|
|||
continue;
|
||||
|
||||
switch (cmsg->cmsg_type) {
|
||||
case IPV6_PKTINFO:
|
||||
case IPV6_2292PKTINFO:
|
||||
if (cmsg->cmsg_len < CMSG_LEN(sizeof(struct in6_pktinfo))) {
|
||||
case IPV6_PKTINFO:
|
||||
case IPV6_2292PKTINFO:
|
||||
if (cmsg->cmsg_len < CMSG_LEN(sizeof(struct in6_pktinfo))) {
|
||||
err = -EINVAL;
|
||||
goto exit_f;
|
||||
}
|
||||
|
@ -554,7 +554,7 @@ int datagram_send_ctl(struct msghdr *msg, struct flowi *fl,
|
|||
break;
|
||||
|
||||
case IPV6_FLOWINFO:
|
||||
if (cmsg->cmsg_len < CMSG_LEN(4)) {
|
||||
if (cmsg->cmsg_len < CMSG_LEN(4)) {
|
||||
err = -EINVAL;
|
||||
goto exit_f;
|
||||
}
|
||||
|
@ -570,7 +570,7 @@ int datagram_send_ctl(struct msghdr *msg, struct flowi *fl,
|
|||
|
||||
case IPV6_2292HOPOPTS:
|
||||
case IPV6_HOPOPTS:
|
||||
if (opt->hopopt || cmsg->cmsg_len < CMSG_LEN(sizeof(struct ipv6_opt_hdr))) {
|
||||
if (opt->hopopt || cmsg->cmsg_len < CMSG_LEN(sizeof(struct ipv6_opt_hdr))) {
|
||||
err = -EINVAL;
|
||||
goto exit_f;
|
||||
}
|
||||
|
@ -590,7 +590,7 @@ int datagram_send_ctl(struct msghdr *msg, struct flowi *fl,
|
|||
break;
|
||||
|
||||
case IPV6_2292DSTOPTS:
|
||||
if (cmsg->cmsg_len < CMSG_LEN(sizeof(struct ipv6_opt_hdr))) {
|
||||
if (cmsg->cmsg_len < CMSG_LEN(sizeof(struct ipv6_opt_hdr))) {
|
||||
err = -EINVAL;
|
||||
goto exit_f;
|
||||
}
|
||||
|
@ -641,7 +641,7 @@ int datagram_send_ctl(struct msghdr *msg, struct flowi *fl,
|
|||
|
||||
case IPV6_2292RTHDR:
|
||||
case IPV6_RTHDR:
|
||||
if (cmsg->cmsg_len < CMSG_LEN(sizeof(struct ipv6_rt_hdr))) {
|
||||
if (cmsg->cmsg_len < CMSG_LEN(sizeof(struct ipv6_rt_hdr))) {
|
||||
err = -EINVAL;
|
||||
goto exit_f;
|
||||
}
|
||||
|
@ -661,7 +661,7 @@ int datagram_send_ctl(struct msghdr *msg, struct flowi *fl,
|
|||
|
||||
len = ((rthdr->hdrlen + 1) << 3);
|
||||
|
||||
if (cmsg->cmsg_len < CMSG_LEN(len)) {
|
||||
if (cmsg->cmsg_len < CMSG_LEN(len)) {
|
||||
err = -EINVAL;
|
||||
goto exit_f;
|
||||
}
|
||||
|
@ -716,7 +716,7 @@ int datagram_send_ctl(struct msghdr *msg, struct flowi *fl,
|
|||
}
|
||||
default:
|
||||
LIMIT_NETDEBUG(KERN_DEBUG "invalid cmsg type: %d\n",
|
||||
cmsg->cmsg_type);
|
||||
cmsg->cmsg_type);
|
||||
err = -EINVAL;
|
||||
break;
|
||||
};
|
||||
|
|
|
@ -166,7 +166,7 @@ static int esp6_input(struct xfrm_state *x, struct sk_buff *skb)
|
|||
}
|
||||
|
||||
/* If integrity check is required, do this. */
|
||||
if (esp->auth.icv_full_len) {
|
||||
if (esp->auth.icv_full_len) {
|
||||
u8 sum[alen];
|
||||
|
||||
ret = esp_mac_digest(esp, skb, 0, skb->len - alen);
|
||||
|
@ -197,7 +197,7 @@ static int esp6_input(struct xfrm_state *x, struct sk_buff *skb)
|
|||
if (esp->conf.ivlen)
|
||||
crypto_blkcipher_set_iv(tfm, esph->enc_data, esp->conf.ivlen);
|
||||
|
||||
{
|
||||
{
|
||||
u8 nexthdr[2];
|
||||
struct scatterlist *sg = &esp->sgbuf[0];
|
||||
u8 padlen;
|
||||
|
@ -256,7 +256,7 @@ static u32 esp6_get_max_size(struct xfrm_state *x, int mtu)
|
|||
}
|
||||
|
||||
static void esp6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
|
||||
int type, int code, int offset, __be32 info)
|
||||
int type, int code, int offset, __be32 info)
|
||||
{
|
||||
struct ipv6hdr *iph = (struct ipv6hdr*)skb->data;
|
||||
struct ipv6_esp_hdr *esph = (struct ipv6_esp_hdr*)(skb->data+offset);
|
||||
|
|
|
@ -572,7 +572,7 @@ void __init ipv6_rthdr_init(void)
|
|||
For now we need to test the engine, so that I created
|
||||
temporary (or permanent) backdoor.
|
||||
If listening socket set IPV6_RTHDR to 2, then we invert header.
|
||||
--ANK (980729)
|
||||
--ANK (980729)
|
||||
*/
|
||||
|
||||
struct ipv6_txoptions *
|
||||
|
@ -635,7 +635,7 @@ static int ipv6_hop_ra(struct sk_buff **skbp, int optoff)
|
|||
return 1;
|
||||
}
|
||||
LIMIT_NETDEBUG(KERN_DEBUG "ipv6_hop_ra: wrong RA length %d\n",
|
||||
skb->nh.raw[optoff+1]);
|
||||
skb->nh.raw[optoff+1]);
|
||||
kfree_skb(skb);
|
||||
return 0;
|
||||
}
|
||||
|
@ -649,7 +649,7 @@ static int ipv6_hop_jumbo(struct sk_buff **skbp, int optoff)
|
|||
|
||||
if (skb->nh.raw[optoff+1] != 4 || (optoff&3) != 2) {
|
||||
LIMIT_NETDEBUG(KERN_DEBUG "ipv6_hop_jumbo: wrong jumbo opt length/alignment %d\n",
|
||||
skb->nh.raw[optoff+1]);
|
||||
skb->nh.raw[optoff+1]);
|
||||
IP6_INC_STATS_BH(ip6_dst_idev(skb->dst),
|
||||
IPSTATS_MIB_INHDRERRORS);
|
||||
goto drop;
|
||||
|
|
|
@ -543,8 +543,8 @@ static void icmpv6_echo_reply(struct sk_buff *skb)
|
|||
}
|
||||
err = icmpv6_push_pending_frames(sk, &fl, &tmp_hdr, skb->len + sizeof(struct icmp6hdr));
|
||||
|
||||
ICMP6_INC_STATS_BH(idev, ICMP6_MIB_OUTECHOREPLIES);
|
||||
ICMP6_INC_STATS_BH(idev, ICMP6_MIB_OUTMSGS);
|
||||
ICMP6_INC_STATS_BH(idev, ICMP6_MIB_OUTECHOREPLIES);
|
||||
ICMP6_INC_STATS_BH(idev, ICMP6_MIB_OUTMSGS);
|
||||
|
||||
out_put:
|
||||
if (likely(idev != NULL))
|
||||
|
|
|
@ -249,81 +249,81 @@ int inet6_hash_connect(struct inet_timewait_death_row *death_row,
|
|||
{
|
||||
struct inet_hashinfo *hinfo = death_row->hashinfo;
|
||||
const unsigned short snum = inet_sk(sk)->num;
|
||||
struct inet_bind_hashbucket *head;
|
||||
struct inet_bind_bucket *tb;
|
||||
struct inet_bind_hashbucket *head;
|
||||
struct inet_bind_bucket *tb;
|
||||
int ret;
|
||||
|
||||
if (snum == 0) {
|
||||
const int low = sysctl_local_port_range[0];
|
||||
const int high = sysctl_local_port_range[1];
|
||||
if (snum == 0) {
|
||||
const int low = sysctl_local_port_range[0];
|
||||
const int high = sysctl_local_port_range[1];
|
||||
const int range = high - low;
|
||||
int i, port;
|
||||
int i, port;
|
||||
static u32 hint;
|
||||
const u32 offset = hint + inet6_sk_port_offset(sk);
|
||||
struct hlist_node *node;
|
||||
struct inet_timewait_sock *tw = NULL;
|
||||
struct inet_timewait_sock *tw = NULL;
|
||||
|
||||
local_bh_disable();
|
||||
local_bh_disable();
|
||||
for (i = 1; i <= range; i++) {
|
||||
port = low + (i + offset) % range;
|
||||
head = &hinfo->bhash[inet_bhashfn(port, hinfo->bhash_size)];
|
||||
spin_lock(&head->lock);
|
||||
head = &hinfo->bhash[inet_bhashfn(port, hinfo->bhash_size)];
|
||||
spin_lock(&head->lock);
|
||||
|
||||
/* Does not bother with rcv_saddr checks,
|
||||
* because the established check is already
|
||||
* unique enough.
|
||||
*/
|
||||
/* Does not bother with rcv_saddr checks,
|
||||
* because the established check is already
|
||||
* unique enough.
|
||||
*/
|
||||
inet_bind_bucket_for_each(tb, node, &head->chain) {
|
||||
if (tb->port == port) {
|
||||
BUG_TRAP(!hlist_empty(&tb->owners));
|
||||
if (tb->fastreuse >= 0)
|
||||
goto next_port;
|
||||
if (!__inet6_check_established(death_row,
|
||||
if (tb->port == port) {
|
||||
BUG_TRAP(!hlist_empty(&tb->owners));
|
||||
if (tb->fastreuse >= 0)
|
||||
goto next_port;
|
||||
if (!__inet6_check_established(death_row,
|
||||
sk, port,
|
||||
&tw))
|
||||
goto ok;
|
||||
goto next_port;
|
||||
}
|
||||
}
|
||||
goto ok;
|
||||
goto next_port;
|
||||
}
|
||||
}
|
||||
|
||||
tb = inet_bind_bucket_create(hinfo->bind_bucket_cachep,
|
||||
tb = inet_bind_bucket_create(hinfo->bind_bucket_cachep,
|
||||
head, port);
|
||||
if (!tb) {
|
||||
spin_unlock(&head->lock);
|
||||
break;
|
||||
}
|
||||
tb->fastreuse = -1;
|
||||
goto ok;
|
||||
if (!tb) {
|
||||
spin_unlock(&head->lock);
|
||||
break;
|
||||
}
|
||||
tb->fastreuse = -1;
|
||||
goto ok;
|
||||
|
||||
next_port:
|
||||
spin_unlock(&head->lock);
|
||||
}
|
||||
local_bh_enable();
|
||||
next_port:
|
||||
spin_unlock(&head->lock);
|
||||
}
|
||||
local_bh_enable();
|
||||
|
||||
return -EADDRNOTAVAIL;
|
||||
return -EADDRNOTAVAIL;
|
||||
|
||||
ok:
|
||||
hint += i;
|
||||
|
||||
/* Head lock still held and bh's disabled */
|
||||
inet_bind_hash(sk, tb, port);
|
||||
/* Head lock still held and bh's disabled */
|
||||
inet_bind_hash(sk, tb, port);
|
||||
if (sk_unhashed(sk)) {
|
||||
inet_sk(sk)->sport = htons(port);
|
||||
__inet6_hash(hinfo, sk);
|
||||
}
|
||||
spin_unlock(&head->lock);
|
||||
inet_sk(sk)->sport = htons(port);
|
||||
__inet6_hash(hinfo, sk);
|
||||
}
|
||||
spin_unlock(&head->lock);
|
||||
|
||||
if (tw) {
|
||||
inet_twsk_deschedule(tw, death_row);
|
||||
inet_twsk_put(tw);
|
||||
}
|
||||
if (tw) {
|
||||
inet_twsk_deschedule(tw, death_row);
|
||||
inet_twsk_put(tw);
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
head = &hinfo->bhash[inet_bhashfn(snum, hinfo->bhash_size)];
|
||||
tb = inet_csk(sk)->icsk_bind_hash;
|
||||
head = &hinfo->bhash[inet_bhashfn(snum, hinfo->bhash_size)];
|
||||
tb = inet_csk(sk)->icsk_bind_hash;
|
||||
spin_lock_bh(&head->lock);
|
||||
|
||||
if (sk_head(&tb->owners) == sk && sk->sk_bind_node.next == NULL) {
|
||||
|
|
|
@ -434,7 +434,7 @@ static struct fib6_node * fib6_add_1(struct fib6_node *root, void *addr,
|
|||
struct fib6_node *pn = NULL;
|
||||
struct rt6key *key;
|
||||
int bit;
|
||||
__be32 dir = 0;
|
||||
__be32 dir = 0;
|
||||
__u32 sernum = fib6_new_sernum();
|
||||
|
||||
RT6_TRACE("fib6_add_1\n");
|
||||
|
|
|
@ -205,8 +205,8 @@ resubmit:
|
|||
if (xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) {
|
||||
IP6_INC_STATS_BH(idev, IPSTATS_MIB_INUNKNOWNPROTOS);
|
||||
icmpv6_send(skb, ICMPV6_PARAMPROB,
|
||||
ICMPV6_UNK_NEXTHDR, nhoff,
|
||||
skb->dev);
|
||||
ICMPV6_UNK_NEXTHDR, nhoff,
|
||||
skb->dev);
|
||||
}
|
||||
} else
|
||||
IP6_INC_STATS_BH(idev, IPSTATS_MIB_INDELIVERS);
|
||||
|
|
|
@ -67,8 +67,8 @@ MODULE_LICENSE("GPL");
|
|||
#define HASH_SIZE 32
|
||||
|
||||
#define HASH(addr) ((__force u32)((addr)->s6_addr32[0] ^ (addr)->s6_addr32[1] ^ \
|
||||
(addr)->s6_addr32[2] ^ (addr)->s6_addr32[3]) & \
|
||||
(HASH_SIZE - 1))
|
||||
(addr)->s6_addr32[2] ^ (addr)->s6_addr32[3]) & \
|
||||
(HASH_SIZE - 1))
|
||||
|
||||
static int ip6ip6_fb_tnl_dev_init(struct net_device *dev);
|
||||
static int ip6ip6_tnl_dev_init(struct net_device *dev);
|
||||
|
@ -502,7 +502,7 @@ static inline int ip6_tnl_rcv_ctl(struct ip6_tnl *t)
|
|||
int ret = 0;
|
||||
|
||||
if (p->flags & IP6_TNL_F_CAP_RCV) {
|
||||
struct net_device *ldev = NULL;
|
||||
struct net_device *ldev = NULL;
|
||||
|
||||
if (p->link)
|
||||
ldev = dev_get_by_index(p->link);
|
||||
|
@ -617,7 +617,7 @@ static inline int ip6_tnl_xmit_ctl(struct ip6_tnl *t)
|
|||
struct ip6_tnl_parm *p = &t->parms;
|
||||
int ret = 0;
|
||||
|
||||
if (p->flags & IP6_TNL_F_CAP_XMIT) {
|
||||
if (p->flags & IP6_TNL_F_CAP_XMIT) {
|
||||
struct net_device *ldev = NULL;
|
||||
|
||||
if (p->link)
|
||||
|
|
|
@ -176,7 +176,7 @@ out_ok:
|
|||
}
|
||||
|
||||
static void ipcomp6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
|
||||
int type, int code, int offset, __be32 info)
|
||||
int type, int code, int offset, __be32 info)
|
||||
{
|
||||
__be32 spi;
|
||||
struct ipv6hdr *iph = (struct ipv6hdr*)skb->data;
|
||||
|
|
|
@ -644,7 +644,7 @@ int ip6_mc_msfget(struct sock *sk, struct group_filter *gsf,
|
|||
memset(&ss, 0, sizeof(ss));
|
||||
psin6->sin6_family = AF_INET6;
|
||||
psin6->sin6_addr = psl->sl_addr[i];
|
||||
if (copy_to_user(&optval->gf_slist[i], &ss, sizeof(ss)))
|
||||
if (copy_to_user(&optval->gf_slist[i], &ss, sizeof(ss)))
|
||||
return -EFAULT;
|
||||
}
|
||||
return 0;
|
||||
|
@ -1454,7 +1454,7 @@ static inline int mld_dev_queue_xmit2(struct sk_buff *skb)
|
|||
static inline int mld_dev_queue_xmit(struct sk_buff *skb)
|
||||
{
|
||||
return NF_HOOK(PF_INET6, NF_IP6_POST_ROUTING, skb, NULL, skb->dev,
|
||||
mld_dev_queue_xmit2);
|
||||
mld_dev_queue_xmit2);
|
||||
}
|
||||
|
||||
static void mld_sendpack(struct sk_buff *skb)
|
||||
|
@ -1754,8 +1754,8 @@ static void igmp6_send(struct in6_addr *addr, struct net_device *dev, int type)
|
|||
{
|
||||
struct sock *sk = igmp6_socket->sk;
|
||||
struct inet6_dev *idev;
|
||||
struct sk_buff *skb;
|
||||
struct icmp6hdr *hdr;
|
||||
struct sk_buff *skb;
|
||||
struct icmp6hdr *hdr;
|
||||
struct in6_addr *snd_addr;
|
||||
struct in6_addr *addrp;
|
||||
struct in6_addr addr_buf;
|
||||
|
|
|
@ -333,7 +333,7 @@ static struct xfrm_type mip6_destopt_type =
|
|||
.destructor = mip6_destopt_destroy,
|
||||
.input = mip6_destopt_input,
|
||||
.output = mip6_destopt_output,
|
||||
.reject = mip6_destopt_reject,
|
||||
.reject = mip6_destopt_reject,
|
||||
.hdr_offset = mip6_destopt_offset,
|
||||
.local_addr = mip6_xfrm_addr,
|
||||
};
|
||||
|
|
|
@ -427,25 +427,25 @@ static inline void ndisc_flow_init(struct flowi *fl, u8 type,
|
|||
|
||||
static void ndisc_send_na(struct net_device *dev, struct neighbour *neigh,
|
||||
struct in6_addr *daddr, struct in6_addr *solicited_addr,
|
||||
int router, int solicited, int override, int inc_opt)
|
||||
int router, int solicited, int override, int inc_opt)
|
||||
{
|
||||
struct in6_addr tmpaddr;
|
||||
struct inet6_ifaddr *ifp;
|
||||
struct inet6_dev *idev;
|
||||
struct flowi fl;
|
||||
struct dst_entry* dst;
|
||||
struct sock *sk = ndisc_socket->sk;
|
||||
struct sock *sk = ndisc_socket->sk;
|
||||
struct in6_addr *src_addr;
|
||||
struct nd_msg *msg;
|
||||
int len;
|
||||
struct sk_buff *skb;
|
||||
struct nd_msg *msg;
|
||||
int len;
|
||||
struct sk_buff *skb;
|
||||
int err;
|
||||
|
||||
len = sizeof(struct icmp6hdr) + sizeof(struct in6_addr);
|
||||
|
||||
/* for anycast or proxy, solicited_addr != src_addr */
|
||||
ifp = ipv6_get_ifaddr(solicited_addr, dev, 1);
|
||||
if (ifp) {
|
||||
if (ifp) {
|
||||
src_addr = solicited_addr;
|
||||
in6_ifa_put(ifp);
|
||||
} else {
|
||||
|
@ -491,16 +491,16 @@ static void ndisc_send_na(struct net_device *dev, struct neighbour *neigh,
|
|||
msg = (struct nd_msg *)skb_put(skb, len);
|
||||
skb->h.raw = (unsigned char*)msg;
|
||||
|
||||
msg->icmph.icmp6_type = NDISC_NEIGHBOUR_ADVERTISEMENT;
|
||||
msg->icmph.icmp6_code = 0;
|
||||
msg->icmph.icmp6_cksum = 0;
|
||||
msg->icmph.icmp6_type = NDISC_NEIGHBOUR_ADVERTISEMENT;
|
||||
msg->icmph.icmp6_code = 0;
|
||||
msg->icmph.icmp6_cksum = 0;
|
||||
|
||||
msg->icmph.icmp6_unused = 0;
|
||||
msg->icmph.icmp6_router = router;
|
||||
msg->icmph.icmp6_solicited = solicited;
|
||||
msg->icmph.icmp6_override = override;
|
||||
msg->icmph.icmp6_unused = 0;
|
||||
msg->icmph.icmp6_router = router;
|
||||
msg->icmph.icmp6_solicited = solicited;
|
||||
msg->icmph.icmp6_override = override;
|
||||
|
||||
/* Set the target address. */
|
||||
/* Set the target address. */
|
||||
ipv6_addr_copy(&msg->target, solicited_addr);
|
||||
|
||||
if (inc_opt)
|
||||
|
@ -533,11 +533,11 @@ void ndisc_send_ns(struct net_device *dev, struct neighbour *neigh,
|
|||
struct flowi fl;
|
||||
struct dst_entry* dst;
|
||||
struct inet6_dev *idev;
|
||||
struct sock *sk = ndisc_socket->sk;
|
||||
struct sk_buff *skb;
|
||||
struct nd_msg *msg;
|
||||
struct sock *sk = ndisc_socket->sk;
|
||||
struct sk_buff *skb;
|
||||
struct nd_msg *msg;
|
||||
struct in6_addr addr_buf;
|
||||
int len;
|
||||
int len;
|
||||
int err;
|
||||
int send_llinfo;
|
||||
|
||||
|
@ -619,10 +619,10 @@ void ndisc_send_rs(struct net_device *dev, struct in6_addr *saddr,
|
|||
struct dst_entry* dst;
|
||||
struct inet6_dev *idev;
|
||||
struct sock *sk = ndisc_socket->sk;
|
||||
struct sk_buff *skb;
|
||||
struct icmp6hdr *hdr;
|
||||
struct sk_buff *skb;
|
||||
struct icmp6hdr *hdr;
|
||||
__u8 * opt;
|
||||
int len;
|
||||
int len;
|
||||
int err;
|
||||
|
||||
ndisc_flow_init(&fl, NDISC_ROUTER_SOLICITATION, saddr, daddr,
|
||||
|
@ -640,7 +640,7 @@ void ndisc_send_rs(struct net_device *dev, struct in6_addr *saddr,
|
|||
if (dev->addr_len)
|
||||
len += ndisc_opt_addr_space(dev);
|
||||
|
||||
skb = sock_alloc_send_skb(sk,
|
||||
skb = sock_alloc_send_skb(sk,
|
||||
(MAX_HEADER + sizeof(struct ipv6hdr) +
|
||||
len + LL_RESERVED_SPACE(dev)),
|
||||
1, &err);
|
||||
|
@ -655,12 +655,12 @@ void ndisc_send_rs(struct net_device *dev, struct in6_addr *saddr,
|
|||
skb_reserve(skb, LL_RESERVED_SPACE(dev));
|
||||
ip6_nd_hdr(sk, skb, dev, saddr, daddr, IPPROTO_ICMPV6, len);
|
||||
|
||||
hdr = (struct icmp6hdr *)skb_put(skb, len);
|
||||
skb->h.raw = (unsigned char*)hdr;
|
||||
hdr->icmp6_type = NDISC_ROUTER_SOLICITATION;
|
||||
hdr->icmp6_code = 0;
|
||||
hdr->icmp6_cksum = 0;
|
||||
hdr->icmp6_unused = 0;
|
||||
hdr = (struct icmp6hdr *)skb_put(skb, len);
|
||||
skb->h.raw = (unsigned char*)hdr;
|
||||
hdr->icmp6_type = NDISC_ROUTER_SOLICITATION;
|
||||
hdr->icmp6_code = 0;
|
||||
hdr->icmp6_cksum = 0;
|
||||
hdr->icmp6_unused = 0;
|
||||
|
||||
opt = (u8*) (hdr + 1);
|
||||
|
||||
|
@ -782,7 +782,7 @@ static void ndisc_recv_ns(struct sk_buff *skb)
|
|||
}
|
||||
|
||||
/* RFC2461 7.1.1:
|
||||
* If the IP source address is the unspecified address,
|
||||
* If the IP source address is the unspecified address,
|
||||
* there MUST NOT be source link-layer address option
|
||||
* in the message.
|
||||
*/
|
||||
|
@ -1057,7 +1057,7 @@ out:
|
|||
|
||||
static void ndisc_router_discovery(struct sk_buff *skb)
|
||||
{
|
||||
struct ra_msg *ra_msg = (struct ra_msg *) skb->h.raw;
|
||||
struct ra_msg *ra_msg = (struct ra_msg *) skb->h.raw;
|
||||
struct neighbour *neigh = NULL;
|
||||
struct inet6_dev *in6_dev;
|
||||
struct rt6_info *rt = NULL;
|
||||
|
@ -1410,8 +1410,8 @@ void ndisc_send_redirect(struct sk_buff *skb, struct neighbour *neigh,
|
|||
ND_PRINTK2(KERN_WARNING
|
||||
"ICMPv6 Redirect: no link-local address on %s\n",
|
||||
dev->name);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (!ipv6_addr_equal(&skb->nh.ipv6h->daddr, target) &&
|
||||
!(ipv6_addr_type(target) & IPV6_ADDR_LINKLOCAL)) {
|
||||
|
@ -1717,7 +1717,7 @@ int __init ndisc_init(struct net_proto_family *ops)
|
|||
{
|
||||
struct ipv6_pinfo *np;
|
||||
struct sock *sk;
|
||||
int err;
|
||||
int err;
|
||||
|
||||
err = sock_create_kern(PF_INET6, SOCK_RAW, IPPROTO_ICMPV6, &ndisc_socket);
|
||||
if (err < 0) {
|
||||
|
@ -1736,9 +1736,9 @@ int __init ndisc_init(struct net_proto_family *ops)
|
|||
np->mc_loop = 0;
|
||||
sk->sk_prot->unhash(sk);
|
||||
|
||||
/*
|
||||
* Initialize the neighbour table
|
||||
*/
|
||||
/*
|
||||
* Initialize the neighbour table
|
||||
*/
|
||||
|
||||
neigh_table_init(&nd_tbl);
|
||||
|
||||
|
|
|
@ -91,7 +91,7 @@ __sum16 nf_ip6_checksum(struct sk_buff *skb, unsigned int hook,
|
|||
if (hook != NF_IP6_PRE_ROUTING && hook != NF_IP6_LOCAL_IN)
|
||||
break;
|
||||
if (!csum_ipv6_magic(&ip6h->saddr, &ip6h->daddr,
|
||||
skb->len - dataoff, protocol,
|
||||
skb->len - dataoff, protocol,
|
||||
csum_sub(skb->csum,
|
||||
skb_checksum(skb, 0,
|
||||
dataoff, 0)))) {
|
||||
|
@ -106,7 +106,7 @@ __sum16 nf_ip6_checksum(struct sk_buff *skb, unsigned int hook,
|
|||
protocol,
|
||||
csum_sub(0,
|
||||
skb_checksum(skb, 0,
|
||||
dataoff, 0))));
|
||||
dataoff, 0))));
|
||||
csum = __skb_checksum_complete(skb);
|
||||
}
|
||||
return csum;
|
||||
|
|
|
@ -260,7 +260,7 @@ ipq_build_packet_message(struct ipq_queue_entry *entry, int *errp)
|
|||
if (entry->skb->dev->hard_header_parse)
|
||||
pmsg->hw_addrlen =
|
||||
entry->skb->dev->hard_header_parse(entry->skb,
|
||||
pmsg->hw_addr);
|
||||
pmsg->hw_addr);
|
||||
}
|
||||
|
||||
if (data_len)
|
||||
|
@ -308,19 +308,19 @@ ipq_enqueue_packet(struct sk_buff *skb, struct nf_info *info,
|
|||
goto err_out_free_nskb;
|
||||
|
||||
if (queue_total >= queue_maxlen) {
|
||||
queue_dropped++;
|
||||
queue_dropped++;
|
||||
status = -ENOSPC;
|
||||
if (net_ratelimit())
|
||||
printk (KERN_WARNING "ip6_queue: fill at %d entries, "
|
||||
printk (KERN_WARNING "ip6_queue: fill at %d entries, "
|
||||
"dropping packet(s). Dropped: %d\n", queue_total,
|
||||
queue_dropped);
|
||||
goto err_out_free_nskb;
|
||||
}
|
||||
|
||||
/* netlink_unicast will either free the nskb or attach it to a socket */
|
||||
/* netlink_unicast will either free the nskb or attach it to a socket */
|
||||
status = netlink_unicast(ipqnl, nskb, peer_pid, MSG_DONTWAIT);
|
||||
if (status < 0) {
|
||||
queue_user_dropped++;
|
||||
queue_user_dropped++;
|
||||
goto err_out_unlock;
|
||||
}
|
||||
|
||||
|
@ -359,9 +359,9 @@ ipq_mangle_ipv6(ipq_verdict_msg_t *v, struct ipq_queue_entry *e)
|
|||
struct sk_buff *newskb;
|
||||
|
||||
newskb = skb_copy_expand(e->skb,
|
||||
skb_headroom(e->skb),
|
||||
diff,
|
||||
GFP_ATOMIC);
|
||||
skb_headroom(e->skb),
|
||||
diff,
|
||||
GFP_ATOMIC);
|
||||
if (newskb == NULL) {
|
||||
printk(KERN_WARNING "ip6_queue: OOM "
|
||||
"in mangle, dropping packet\n");
|
||||
|
@ -424,7 +424,7 @@ ipq_set_mode(unsigned char mode, unsigned int range)
|
|||
|
||||
static int
|
||||
ipq_receive_peer(struct ipq_peer_msg *pmsg,
|
||||
unsigned char type, unsigned int len)
|
||||
unsigned char type, unsigned int len)
|
||||
{
|
||||
int status = 0;
|
||||
|
||||
|
@ -434,7 +434,7 @@ ipq_receive_peer(struct ipq_peer_msg *pmsg,
|
|||
switch (type) {
|
||||
case IPQM_MODE:
|
||||
status = ipq_set_mode(pmsg->msg.mode.value,
|
||||
pmsg->msg.mode.range);
|
||||
pmsg->msg.mode.range);
|
||||
break;
|
||||
|
||||
case IPQM_VERDICT:
|
||||
|
@ -442,7 +442,7 @@ ipq_receive_peer(struct ipq_peer_msg *pmsg,
|
|||
status = -EINVAL;
|
||||
else
|
||||
status = ipq_set_verdict(&pmsg->msg.verdict,
|
||||
len - sizeof(*pmsg));
|
||||
len - sizeof(*pmsg));
|
||||
break;
|
||||
default:
|
||||
status = -EINVAL;
|
||||
|
@ -524,13 +524,13 @@ ipq_rcv_skb(struct sk_buff *skb)
|
|||
write_unlock_bh(&queue_lock);
|
||||
|
||||
status = ipq_receive_peer(NLMSG_DATA(nlh), type,
|
||||
nlmsglen - NLMSG_LENGTH(0));
|
||||
nlmsglen - NLMSG_LENGTH(0));
|
||||
if (status < 0)
|
||||
RCV_SKB_FAIL(status);
|
||||
|
||||
if (flags & NLM_F_ACK)
|
||||
netlink_ack(skb, nlh, 0);
|
||||
return;
|
||||
return;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -552,7 +552,7 @@ ipq_rcv_sk(struct sock *sk, int len)
|
|||
|
||||
static int
|
||||
ipq_rcv_dev_event(struct notifier_block *this,
|
||||
unsigned long event, void *ptr)
|
||||
unsigned long event, void *ptr)
|
||||
{
|
||||
struct net_device *dev = ptr;
|
||||
|
||||
|
@ -568,7 +568,7 @@ static struct notifier_block ipq_dev_notifier = {
|
|||
|
||||
static int
|
||||
ipq_rcv_nl_event(struct notifier_block *this,
|
||||
unsigned long event, void *ptr)
|
||||
unsigned long event, void *ptr)
|
||||
{
|
||||
struct netlink_notify *n = ptr;
|
||||
|
||||
|
@ -597,7 +597,7 @@ static ctl_table ipq_table[] = {
|
|||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec
|
||||
},
|
||||
{ .ctl_name = 0 }
|
||||
{ .ctl_name = 0 }
|
||||
};
|
||||
|
||||
static ctl_table ipq_dir_table[] = {
|
||||
|
@ -629,18 +629,18 @@ ipq_get_info(char *buffer, char **start, off_t offset, int length)
|
|||
read_lock_bh(&queue_lock);
|
||||
|
||||
len = sprintf(buffer,
|
||||
"Peer PID : %d\n"
|
||||
"Copy mode : %hu\n"
|
||||
"Copy range : %u\n"
|
||||
"Queue length : %u\n"
|
||||
"Queue max. length : %u\n"
|
||||
"Peer PID : %d\n"
|
||||
"Copy mode : %hu\n"
|
||||
"Copy range : %u\n"
|
||||
"Queue length : %u\n"
|
||||
"Queue max. length : %u\n"
|
||||
"Queue dropped : %u\n"
|
||||
"Netfilter dropped : %u\n",
|
||||
peer_pid,
|
||||
copy_mode,
|
||||
copy_range,
|
||||
queue_total,
|
||||
queue_maxlen,
|
||||
peer_pid,
|
||||
copy_mode,
|
||||
copy_range,
|
||||
queue_total,
|
||||
queue_maxlen,
|
||||
queue_dropped,
|
||||
queue_user_dropped);
|
||||
|
||||
|
@ -668,7 +668,7 @@ static int __init ip6_queue_init(void)
|
|||
|
||||
netlink_register_notifier(&ipq_nl_notifier);
|
||||
ipqnl = netlink_kernel_create(NETLINK_IP6_FW, 0, ipq_rcv_sk,
|
||||
THIS_MODULE);
|
||||
THIS_MODULE);
|
||||
if (ipqnl == NULL) {
|
||||
printk(KERN_ERR "ip6_queue: failed to create netlink socket\n");
|
||||
goto cleanup_netlink_notifier;
|
||||
|
|
|
@ -95,13 +95,13 @@ do { \
|
|||
int
|
||||
ip6t_ext_hdr(u8 nexthdr)
|
||||
{
|
||||
return ( (nexthdr == IPPROTO_HOPOPTS) ||
|
||||
(nexthdr == IPPROTO_ROUTING) ||
|
||||
(nexthdr == IPPROTO_FRAGMENT) ||
|
||||
(nexthdr == IPPROTO_ESP) ||
|
||||
(nexthdr == IPPROTO_AH) ||
|
||||
(nexthdr == IPPROTO_NONE) ||
|
||||
(nexthdr == IPPROTO_DSTOPTS) );
|
||||
return ( (nexthdr == IPPROTO_HOPOPTS) ||
|
||||
(nexthdr == IPPROTO_ROUTING) ||
|
||||
(nexthdr == IPPROTO_FRAGMENT) ||
|
||||
(nexthdr == IPPROTO_ESP) ||
|
||||
(nexthdr == IPPROTO_AH) ||
|
||||
(nexthdr == IPPROTO_NONE) ||
|
||||
(nexthdr == IPPROTO_DSTOPTS) );
|
||||
}
|
||||
|
||||
/* Returns whether matches rule or not. */
|
||||
|
@ -120,9 +120,9 @@ ip6_packet_match(const struct sk_buff *skb,
|
|||
#define FWINV(bool,invflg) ((bool) ^ !!(ip6info->invflags & invflg))
|
||||
|
||||
if (FWINV(ipv6_masked_addr_cmp(&ipv6->saddr, &ip6info->smsk,
|
||||
&ip6info->src), IP6T_INV_SRCIP)
|
||||
&ip6info->src), IP6T_INV_SRCIP)
|
||||
|| FWINV(ipv6_masked_addr_cmp(&ipv6->daddr, &ip6info->dmsk,
|
||||
&ip6info->dst), IP6T_INV_DSTIP)) {
|
||||
&ip6info->dst), IP6T_INV_DSTIP)) {
|
||||
dprintf("Source or dest mismatch.\n");
|
||||
/*
|
||||
dprintf("SRC: %u. Mask: %u. Target: %u.%s\n", ip->saddr,
|
||||
|
@ -337,7 +337,7 @@ ip6t_do_table(struct sk_buff **pskb,
|
|||
e = get_entry(table_base, v);
|
||||
} else {
|
||||
/* Targets which reenter must return
|
||||
abs. verdicts */
|
||||
abs. verdicts */
|
||||
#ifdef CONFIG_NETFILTER_DEBUG
|
||||
((struct ip6t_entry *)table_base)->comefrom
|
||||
= 0xeeeeeeec;
|
||||
|
@ -534,10 +534,10 @@ check_match(struct ip6t_entry_match *m,
|
|||
int ret;
|
||||
|
||||
match = try_then_request_module(xt_find_match(AF_INET6, m->u.user.name,
|
||||
m->u.user.revision),
|
||||
m->u.user.revision),
|
||||
"ip6t_%s", m->u.user.name);
|
||||
if (IS_ERR(match) || !match) {
|
||||
duprintf("check_match: `%s' not found\n", m->u.user.name);
|
||||
duprintf("check_match: `%s' not found\n", m->u.user.name);
|
||||
return match ? PTR_ERR(match) : -ENOENT;
|
||||
}
|
||||
m->u.kernel.match = match;
|
||||
|
@ -661,7 +661,7 @@ check_entry_size_and_hooks(struct ip6t_entry *e,
|
|||
}
|
||||
|
||||
/* FIXME: underflows must be unconditional, standard verdicts
|
||||
< 0 (not IP6T_RETURN). --RR */
|
||||
< 0 (not IP6T_RETURN). --RR */
|
||||
|
||||
/* Clear counters and comefrom */
|
||||
e->counters = ((struct xt_counters) { 0, 0 });
|
||||
|
|
|
@ -442,7 +442,7 @@ ip6t_log_target(struct sk_buff **pskb,
|
|||
li.u.log.logflags = loginfo->logflags;
|
||||
|
||||
ip6t_log_packet(PF_INET6, hooknum, *pskb, in, out, &li,
|
||||
loginfo->prefix);
|
||||
loginfo->prefix);
|
||||
return XT_CONTINUE;
|
||||
}
|
||||
|
||||
|
|
|
@ -189,23 +189,23 @@ static unsigned int reject6_target(struct sk_buff **pskb,
|
|||
/* WARNING: This code causes reentry within ip6tables.
|
||||
This means that the ip6tables jump stack is now crap. We
|
||||
must return an absolute verdict. --RR */
|
||||
switch (reject->with) {
|
||||
case IP6T_ICMP6_NO_ROUTE:
|
||||
send_unreach(*pskb, ICMPV6_NOROUTE, hooknum);
|
||||
break;
|
||||
case IP6T_ICMP6_ADM_PROHIBITED:
|
||||
send_unreach(*pskb, ICMPV6_ADM_PROHIBITED, hooknum);
|
||||
break;
|
||||
case IP6T_ICMP6_NOT_NEIGHBOUR:
|
||||
send_unreach(*pskb, ICMPV6_NOT_NEIGHBOUR, hooknum);
|
||||
break;
|
||||
case IP6T_ICMP6_ADDR_UNREACH:
|
||||
send_unreach(*pskb, ICMPV6_ADDR_UNREACH, hooknum);
|
||||
break;
|
||||
case IP6T_ICMP6_PORT_UNREACH:
|
||||
send_unreach(*pskb, ICMPV6_PORT_UNREACH, hooknum);
|
||||
break;
|
||||
case IP6T_ICMP6_ECHOREPLY:
|
||||
switch (reject->with) {
|
||||
case IP6T_ICMP6_NO_ROUTE:
|
||||
send_unreach(*pskb, ICMPV6_NOROUTE, hooknum);
|
||||
break;
|
||||
case IP6T_ICMP6_ADM_PROHIBITED:
|
||||
send_unreach(*pskb, ICMPV6_ADM_PROHIBITED, hooknum);
|
||||
break;
|
||||
case IP6T_ICMP6_NOT_NEIGHBOUR:
|
||||
send_unreach(*pskb, ICMPV6_NOT_NEIGHBOUR, hooknum);
|
||||
break;
|
||||
case IP6T_ICMP6_ADDR_UNREACH:
|
||||
send_unreach(*pskb, ICMPV6_ADDR_UNREACH, hooknum);
|
||||
break;
|
||||
case IP6T_ICMP6_PORT_UNREACH:
|
||||
send_unreach(*pskb, ICMPV6_PORT_UNREACH, hooknum);
|
||||
break;
|
||||
case IP6T_ICMP6_ECHOREPLY:
|
||||
/* Do nothing */
|
||||
break;
|
||||
case IP6T_TCP_RESET:
|
||||
|
@ -226,7 +226,7 @@ static int check(const char *tablename,
|
|||
void *targinfo,
|
||||
unsigned int hook_mask)
|
||||
{
|
||||
const struct ip6t_reject_info *rejinfo = targinfo;
|
||||
const struct ip6t_reject_info *rejinfo = targinfo;
|
||||
const struct ip6t_entry *e = entry;
|
||||
|
||||
if (rejinfo->with == IP6T_ICMP6_ECHOREPLY) {
|
||||
|
|
|
@ -78,13 +78,13 @@ match(const struct sk_buff *skb,
|
|||
|
||||
DEBUGP("IPv6 AH spi %02X ",
|
||||
(spi_match(ahinfo->spis[0], ahinfo->spis[1],
|
||||
ntohl(ah->spi),
|
||||
!!(ahinfo->invflags & IP6T_AH_INV_SPI))));
|
||||
ntohl(ah->spi),
|
||||
!!(ahinfo->invflags & IP6T_AH_INV_SPI))));
|
||||
DEBUGP("len %02X %04X %02X ",
|
||||
ahinfo->hdrlen, hdrlen,
|
||||
(!ahinfo->hdrlen ||
|
||||
(ahinfo->hdrlen == hdrlen) ^
|
||||
!!(ahinfo->invflags & IP6T_AH_INV_LEN)));
|
||||
(ahinfo->hdrlen == hdrlen) ^
|
||||
!!(ahinfo->invflags & IP6T_AH_INV_LEN)));
|
||||
DEBUGP("res %02X %04X %02X\n",
|
||||
ahinfo->hdrres, ah->reserved,
|
||||
!(ahinfo->hdrres && ah->reserved));
|
||||
|
@ -92,12 +92,12 @@ match(const struct sk_buff *skb,
|
|||
return (ah != NULL)
|
||||
&&
|
||||
(spi_match(ahinfo->spis[0], ahinfo->spis[1],
|
||||
ntohl(ah->spi),
|
||||
!!(ahinfo->invflags & IP6T_AH_INV_SPI)))
|
||||
ntohl(ah->spi),
|
||||
!!(ahinfo->invflags & IP6T_AH_INV_SPI)))
|
||||
&&
|
||||
(!ahinfo->hdrlen ||
|
||||
(ahinfo->hdrlen == hdrlen) ^
|
||||
!!(ahinfo->invflags & IP6T_AH_INV_LEN))
|
||||
(ahinfo->hdrlen == hdrlen) ^
|
||||
!!(ahinfo->invflags & IP6T_AH_INV_LEN))
|
||||
&&
|
||||
!(ahinfo->hdrres && ah->reserved);
|
||||
}
|
||||
|
@ -105,10 +105,10 @@ match(const struct sk_buff *skb,
|
|||
/* Called when user tries to insert an entry of this type. */
|
||||
static int
|
||||
checkentry(const char *tablename,
|
||||
const void *entry,
|
||||
const void *entry,
|
||||
const struct xt_match *match,
|
||||
void *matchinfo,
|
||||
unsigned int hook_mask)
|
||||
void *matchinfo,
|
||||
unsigned int hook_mask)
|
||||
{
|
||||
const struct ip6t_ah *ahinfo = matchinfo;
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ static struct
|
|||
0, NULL, { } },
|
||||
{
|
||||
/* PRE_ROUTING */
|
||||
{ { { { { { 0 } } }, { { { 0 } } }, { { { 0 } } }, { { { 0 } } }, "", "", { 0 }, { 0 }, 0, 0, 0 },
|
||||
{ { { { { { 0 } } }, { { { 0 } } }, { { { 0 } } }, { { { 0 } } }, "", "", { 0 }, { 0 }, 0, 0, 0 },
|
||||
0,
|
||||
sizeof(struct ip6t_entry),
|
||||
sizeof(struct ip6t_standard),
|
||||
|
@ -58,7 +58,7 @@ static struct
|
|||
{ { { { IP6T_ALIGN(sizeof(struct ip6t_standard_target)), "" } }, { } },
|
||||
-NF_ACCEPT - 1 } },
|
||||
/* LOCAL_IN */
|
||||
{ { { { { { 0 } } }, { { { 0 } } }, { { { 0 } } }, { { { 0 } } }, "", "", { 0 }, { 0 }, 0, 0, 0 },
|
||||
{ { { { { { 0 } } }, { { { 0 } } }, { { { 0 } } }, { { { 0 } } }, "", "", { 0 }, { 0 }, 0, 0, 0 },
|
||||
0,
|
||||
sizeof(struct ip6t_entry),
|
||||
sizeof(struct ip6t_standard),
|
||||
|
@ -66,7 +66,7 @@ static struct
|
|||
{ { { { IP6T_ALIGN(sizeof(struct ip6t_standard_target)), "" } }, { } },
|
||||
-NF_ACCEPT - 1 } },
|
||||
/* FORWARD */
|
||||
{ { { { { { 0 } } }, { { { 0 } } }, { { { 0 } } }, { { { 0 } } }, "", "", { 0 }, { 0 }, 0, 0, 0 },
|
||||
{ { { { { { 0 } } }, { { { 0 } } }, { { { 0 } } }, { { { 0 } } }, "", "", { 0 }, { 0 }, 0, 0, 0 },
|
||||
0,
|
||||
sizeof(struct ip6t_entry),
|
||||
sizeof(struct ip6t_standard),
|
||||
|
@ -74,7 +74,7 @@ static struct
|
|||
{ { { { IP6T_ALIGN(sizeof(struct ip6t_standard_target)), "" } }, { } },
|
||||
-NF_ACCEPT - 1 } },
|
||||
/* LOCAL_OUT */
|
||||
{ { { { { { 0 } } }, { { { 0 } } }, { { { 0 } } }, { { { 0 } } }, "", "", { 0 }, { 0 }, 0, 0, 0 },
|
||||
{ { { { { { 0 } } }, { { { 0 } } }, { { { 0 } } }, { { { 0 } } }, "", "", { 0 }, { 0 }, 0, 0, 0 },
|
||||
0,
|
||||
sizeof(struct ip6t_entry),
|
||||
sizeof(struct ip6t_standard),
|
||||
|
|
|
@ -349,7 +349,7 @@ static ctl_table nf_ct_ipv6_sysctl_table[] = {
|
|||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec,
|
||||
},
|
||||
{ .ctl_name = 0 }
|
||||
{ .ctl_name = 0 }
|
||||
};
|
||||
#endif
|
||||
|
||||
|
|
|
@ -104,9 +104,9 @@ static int icmpv6_packet(struct nf_conn *ct,
|
|||
unsigned int hooknum)
|
||||
{
|
||||
/* Try to delete connection immediately after all replies:
|
||||
won't actually vanish as we still have skb, and del_timer
|
||||
means this will only run once even if count hits zero twice
|
||||
(theoretically possible with SMP) */
|
||||
won't actually vanish as we still have skb, and del_timer
|
||||
means this will only run once even if count hits zero twice
|
||||
(theoretically possible with SMP) */
|
||||
if (CTINFO2DIR(ctinfo) == IP_CT_DIR_REPLY) {
|
||||
if (atomic_dec_and_test(&ct->proto.icmp.count)
|
||||
&& del_timer(&ct->timeout))
|
||||
|
|
|
@ -405,12 +405,12 @@ static int nf_ct_frag6_queue(struct nf_ct_frag6_queue *fq, struct sk_buff *skb,
|
|||
|
||||
if ((unsigned int)end > IPV6_MAXPLEN) {
|
||||
DEBUGP("offset is too large.\n");
|
||||
return -1;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (skb->ip_summed == CHECKSUM_COMPLETE)
|
||||
skb->csum = csum_sub(skb->csum,
|
||||
csum_partial(skb->nh.raw,
|
||||
if (skb->ip_summed == CHECKSUM_COMPLETE)
|
||||
skb->csum = csum_sub(skb->csum,
|
||||
csum_partial(skb->nh.raw,
|
||||
(u8*)(fhdr + 1) - skb->nh.raw,
|
||||
0));
|
||||
|
||||
|
@ -701,41 +701,41 @@ out_fail:
|
|||
static int
|
||||
find_prev_fhdr(struct sk_buff *skb, u8 *prevhdrp, int *prevhoff, int *fhoff)
|
||||
{
|
||||
u8 nexthdr = skb->nh.ipv6h->nexthdr;
|
||||
u8 nexthdr = skb->nh.ipv6h->nexthdr;
|
||||
u8 prev_nhoff = (u8 *)&skb->nh.ipv6h->nexthdr - skb->data;
|
||||
int start = (u8 *)(skb->nh.ipv6h+1) - skb->data;
|
||||
int len = skb->len - start;
|
||||
u8 prevhdr = NEXTHDR_IPV6;
|
||||
|
||||
while (nexthdr != NEXTHDR_FRAGMENT) {
|
||||
struct ipv6_opt_hdr hdr;
|
||||
int hdrlen;
|
||||
while (nexthdr != NEXTHDR_FRAGMENT) {
|
||||
struct ipv6_opt_hdr hdr;
|
||||
int hdrlen;
|
||||
|
||||
if (!ipv6_ext_hdr(nexthdr)) {
|
||||
return -1;
|
||||
}
|
||||
if (len < (int)sizeof(struct ipv6_opt_hdr)) {
|
||||
if (len < (int)sizeof(struct ipv6_opt_hdr)) {
|
||||
DEBUGP("too short\n");
|
||||
return -1;
|
||||
}
|
||||
if (nexthdr == NEXTHDR_NONE) {
|
||||
if (nexthdr == NEXTHDR_NONE) {
|
||||
DEBUGP("next header is none\n");
|
||||
return -1;
|
||||
}
|
||||
if (skb_copy_bits(skb, start, &hdr, sizeof(hdr)))
|
||||
BUG();
|
||||
if (nexthdr == NEXTHDR_AUTH)
|
||||
hdrlen = (hdr.hdrlen+2)<<2;
|
||||
else
|
||||
hdrlen = ipv6_optlen(&hdr);
|
||||
if (skb_copy_bits(skb, start, &hdr, sizeof(hdr)))
|
||||
BUG();
|
||||
if (nexthdr == NEXTHDR_AUTH)
|
||||
hdrlen = (hdr.hdrlen+2)<<2;
|
||||
else
|
||||
hdrlen = ipv6_optlen(&hdr);
|
||||
|
||||
prevhdr = nexthdr;
|
||||
prev_nhoff = start;
|
||||
|
||||
nexthdr = hdr.nexthdr;
|
||||
len -= hdrlen;
|
||||
start += hdrlen;
|
||||
}
|
||||
nexthdr = hdr.nexthdr;
|
||||
len -= hdrlen;
|
||||
start += hdrlen;
|
||||
}
|
||||
|
||||
if (len < 0)
|
||||
return -1;
|
||||
|
|
|
@ -50,7 +50,7 @@ static int sockstat6_seq_show(struct seq_file *seq, void *v)
|
|||
seq_printf(seq, "UDP6: inuse %d\n",
|
||||
fold_prot_inuse(&udpv6_prot));
|
||||
seq_printf(seq, "UDPLITE6: inuse %d\n",
|
||||
fold_prot_inuse(&udplitev6_prot));
|
||||
fold_prot_inuse(&udplitev6_prot));
|
||||
seq_printf(seq, "RAW6: inuse %d\n",
|
||||
fold_prot_inuse(&rawv6_prot));
|
||||
seq_printf(seq, "FRAG6: inuse %d memory %d\n",
|
||||
|
@ -89,7 +89,7 @@ static struct snmp_mib snmp6_icmp6_list[] = {
|
|||
/* icmpv6 mib according to RFC 2466
|
||||
|
||||
Exceptions: {In|Out}AdminProhibs are removed, because I see
|
||||
no good reasons to account them separately
|
||||
no good reasons to account them separately
|
||||
of another dest.unreachs.
|
||||
OutErrs is zero identically.
|
||||
OutEchos too.
|
||||
|
@ -146,14 +146,14 @@ static struct snmp_mib snmp6_udplite6_list[] = {
|
|||
static unsigned long
|
||||
fold_field(void *mib[], int offt)
|
||||
{
|
||||
unsigned long res = 0;
|
||||
int i;
|
||||
unsigned long res = 0;
|
||||
int i;
|
||||
|
||||
for_each_possible_cpu(i) {
|
||||
res += *(((unsigned long *)per_cpu_ptr(mib[0], i)) + offt);
|
||||
res += *(((unsigned long *)per_cpu_ptr(mib[1], i)) + offt);
|
||||
}
|
||||
return res;
|
||||
for_each_possible_cpu(i) {
|
||||
res += *(((unsigned long *)per_cpu_ptr(mib[0], i)) + offt);
|
||||
res += *(((unsigned long *)per_cpu_ptr(mib[1], i)) + offt);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
static inline void
|
||||
|
|
|
@ -71,12 +71,12 @@ static void raw_v6_hash(struct sock *sk)
|
|||
write_lock_bh(&raw_v6_lock);
|
||||
sk_add_node(sk, list);
|
||||
sock_prot_inc_use(sk->sk_prot);
|
||||
write_unlock_bh(&raw_v6_lock);
|
||||
write_unlock_bh(&raw_v6_lock);
|
||||
}
|
||||
|
||||
static void raw_v6_unhash(struct sock *sk)
|
||||
{
|
||||
write_lock_bh(&raw_v6_lock);
|
||||
write_lock_bh(&raw_v6_lock);
|
||||
if (sk_del_node_init(sk))
|
||||
sock_prot_dec_use(sk->sk_prot);
|
||||
write_unlock_bh(&raw_v6_lock);
|
||||
|
@ -353,17 +353,17 @@ int rawv6_rcv(struct sock *sk, struct sk_buff *skb)
|
|||
struct inet_sock *inet = inet_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 (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb)) {
|
||||
kfree_skb(skb);
|
||||
return NET_RX_DROP;
|
||||
}
|
||||
|
||||
if (!rp->checksum)
|
||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
|
||||
if (skb->ip_summed == CHECKSUM_COMPLETE) {
|
||||
skb_postpull_rcsum(skb, skb->nh.raw,
|
||||
skb->h.raw - skb->nh.raw);
|
||||
skb->h.raw - skb->nh.raw);
|
||||
if (!csum_ipv6_magic(&skb->nh.ipv6h->saddr,
|
||||
&skb->nh.ipv6h->daddr,
|
||||
skb->len, inet->num, skb->csum))
|
||||
|
@ -416,10 +416,10 @@ static int rawv6_recvmsg(struct kiocb *iocb, struct sock *sk,
|
|||
goto out;
|
||||
|
||||
copied = skb->len;
|
||||
if (copied > len) {
|
||||
copied = len;
|
||||
msg->msg_flags |= MSG_TRUNC;
|
||||
}
|
||||
if (copied > len) {
|
||||
copied = len;
|
||||
msg->msg_flags |= MSG_TRUNC;
|
||||
}
|
||||
|
||||
if (skb->ip_summed==CHECKSUM_UNNECESSARY) {
|
||||
err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
|
||||
|
@ -916,7 +916,7 @@ static int do_rawv6_setsockopt(struct sock *sk, int level, int optname,
|
|||
struct raw6_sock *rp = raw6_sk(sk);
|
||||
int val;
|
||||
|
||||
if (get_user(val, (int __user *)optval))
|
||||
if (get_user(val, (int __user *)optval))
|
||||
return -EFAULT;
|
||||
|
||||
switch (optname) {
|
||||
|
|
|
@ -436,13 +436,13 @@ static void ip6_frag_queue(struct frag_queue *fq, struct sk_buff *skb,
|
|||
if ((unsigned int)end > IPV6_MAXPLEN) {
|
||||
IP6_INC_STATS_BH(ip6_dst_idev(skb->dst),
|
||||
IPSTATS_MIB_INHDRERRORS);
|
||||
icmpv6_param_prob(skb,ICMPV6_HDR_FIELD, (u8*)&fhdr->frag_off - skb->nh.raw);
|
||||
return;
|
||||
icmpv6_param_prob(skb,ICMPV6_HDR_FIELD, (u8*)&fhdr->frag_off - skb->nh.raw);
|
||||
return;
|
||||
}
|
||||
|
||||
if (skb->ip_summed == CHECKSUM_COMPLETE)
|
||||
skb->csum = csum_sub(skb->csum,
|
||||
csum_partial(skb->nh.raw, (u8*)(fhdr+1)-skb->nh.raw, 0));
|
||||
if (skb->ip_summed == CHECKSUM_COMPLETE)
|
||||
skb->csum = csum_sub(skb->csum,
|
||||
csum_partial(skb->nh.raw, (u8*)(fhdr+1)-skb->nh.raw, 0));
|
||||
|
||||
/* Is this the final fragment? */
|
||||
if (!(fhdr->frag_off & htons(IP6_MF))) {
|
||||
|
|
|
@ -723,7 +723,7 @@ void ip6_route_input(struct sk_buff *skb)
|
|||
.flowlabel = (* (__be32 *) iph)&IPV6_FLOWINFO_MASK,
|
||||
},
|
||||
},
|
||||
.mark = skb->mark,
|
||||
.mark = skb->mark,
|
||||
.proto = iph->nexthdr,
|
||||
};
|
||||
|
||||
|
@ -958,7 +958,7 @@ int ndisc_dst_gc(int *more)
|
|||
int freed;
|
||||
|
||||
next = NULL;
|
||||
freed = 0;
|
||||
freed = 0;
|
||||
|
||||
spin_lock_bh(&ndisc_lock);
|
||||
pprev = &ndisc_dst_gc_list;
|
||||
|
@ -1454,7 +1454,7 @@ void rt6_redirect(struct in6_addr *dest, struct in6_addr *src,
|
|||
}
|
||||
|
||||
out:
|
||||
dst_release(&rt->u.dst);
|
||||
dst_release(&rt->u.dst);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1896,8 +1896,8 @@ static int rt6_mtu_change_route(struct rt6_info *rt, void *p_arg)
|
|||
*/
|
||||
if (rt->rt6i_dev == arg->dev &&
|
||||
!dst_metric_locked(&rt->u.dst, RTAX_MTU) &&
|
||||
(dst_mtu(&rt->u.dst) > arg->mtu ||
|
||||
(dst_mtu(&rt->u.dst) < arg->mtu &&
|
||||
(dst_mtu(&rt->u.dst) > arg->mtu ||
|
||||
(dst_mtu(&rt->u.dst) < arg->mtu &&
|
||||
dst_mtu(&rt->u.dst) == idev->cnf.mtu6)))
|
||||
rt->u.dst.metrics[RTAX_MTU-1] = arg->mtu;
|
||||
rt->u.dst.metrics[RTAX_ADVMSS-1] = ipv6_advmss(arg->mtu);
|
||||
|
@ -2083,13 +2083,13 @@ static int rt6_fill_node(struct sk_buff *skb, struct rt6_info *rt,
|
|||
|
||||
if (dst) {
|
||||
NLA_PUT(skb, RTA_DST, 16, dst);
|
||||
rtm->rtm_dst_len = 128;
|
||||
rtm->rtm_dst_len = 128;
|
||||
} else if (rtm->rtm_dst_len)
|
||||
NLA_PUT(skb, RTA_DST, 16, &rt->rt6i_dst.addr);
|
||||
#ifdef CONFIG_IPV6_SUBTREES
|
||||
if (src) {
|
||||
NLA_PUT(skb, RTA_SRC, 16, src);
|
||||
rtm->rtm_src_len = 128;
|
||||
rtm->rtm_src_len = 128;
|
||||
} else if (rtm->rtm_src_len)
|
||||
NLA_PUT(skb, RTA_SRC, 16, &rt->rt6i_src.addr);
|
||||
#endif
|
||||
|
@ -2371,91 +2371,91 @@ int ipv6_sysctl_rtcache_flush(ctl_table *ctl, int write, struct file * filp,
|
|||
}
|
||||
|
||||
ctl_table ipv6_route_table[] = {
|
||||
{
|
||||
{
|
||||
.ctl_name = NET_IPV6_ROUTE_FLUSH,
|
||||
.procname = "flush",
|
||||
.data = &flush_delay,
|
||||
.data = &flush_delay,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0200,
|
||||
.proc_handler = &ipv6_sysctl_rtcache_flush
|
||||
.proc_handler = &ipv6_sysctl_rtcache_flush
|
||||
},
|
||||
{
|
||||
.ctl_name = NET_IPV6_ROUTE_GC_THRESH,
|
||||
.procname = "gc_thresh",
|
||||
.data = &ip6_dst_ops.gc_thresh,
|
||||
.data = &ip6_dst_ops.gc_thresh,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec,
|
||||
.proc_handler = &proc_dointvec,
|
||||
},
|
||||
{
|
||||
.ctl_name = NET_IPV6_ROUTE_MAX_SIZE,
|
||||
.procname = "max_size",
|
||||
.data = &ip6_rt_max_size,
|
||||
.data = &ip6_rt_max_size,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec,
|
||||
.proc_handler = &proc_dointvec,
|
||||
},
|
||||
{
|
||||
.ctl_name = NET_IPV6_ROUTE_GC_MIN_INTERVAL,
|
||||
.procname = "gc_min_interval",
|
||||
.data = &ip6_rt_gc_min_interval,
|
||||
.data = &ip6_rt_gc_min_interval,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec_jiffies,
|
||||
.proc_handler = &proc_dointvec_jiffies,
|
||||
.strategy = &sysctl_jiffies,
|
||||
},
|
||||
{
|
||||
.ctl_name = NET_IPV6_ROUTE_GC_TIMEOUT,
|
||||
.procname = "gc_timeout",
|
||||
.data = &ip6_rt_gc_timeout,
|
||||
.data = &ip6_rt_gc_timeout,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec_jiffies,
|
||||
.proc_handler = &proc_dointvec_jiffies,
|
||||
.strategy = &sysctl_jiffies,
|
||||
},
|
||||
{
|
||||
.ctl_name = NET_IPV6_ROUTE_GC_INTERVAL,
|
||||
.procname = "gc_interval",
|
||||
.data = &ip6_rt_gc_interval,
|
||||
.data = &ip6_rt_gc_interval,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec_jiffies,
|
||||
.proc_handler = &proc_dointvec_jiffies,
|
||||
.strategy = &sysctl_jiffies,
|
||||
},
|
||||
{
|
||||
.ctl_name = NET_IPV6_ROUTE_GC_ELASTICITY,
|
||||
.procname = "gc_elasticity",
|
||||
.data = &ip6_rt_gc_elasticity,
|
||||
.data = &ip6_rt_gc_elasticity,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec_jiffies,
|
||||
.proc_handler = &proc_dointvec_jiffies,
|
||||
.strategy = &sysctl_jiffies,
|
||||
},
|
||||
{
|
||||
.ctl_name = NET_IPV6_ROUTE_MTU_EXPIRES,
|
||||
.procname = "mtu_expires",
|
||||
.data = &ip6_rt_mtu_expires,
|
||||
.data = &ip6_rt_mtu_expires,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec_jiffies,
|
||||
.proc_handler = &proc_dointvec_jiffies,
|
||||
.strategy = &sysctl_jiffies,
|
||||
},
|
||||
{
|
||||
.ctl_name = NET_IPV6_ROUTE_MIN_ADVMSS,
|
||||
.procname = "min_adv_mss",
|
||||
.data = &ip6_rt_min_advmss,
|
||||
.data = &ip6_rt_min_advmss,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec_jiffies,
|
||||
.proc_handler = &proc_dointvec_jiffies,
|
||||
.strategy = &sysctl_jiffies,
|
||||
},
|
||||
{
|
||||
.ctl_name = NET_IPV6_ROUTE_GC_MIN_INTERVAL_MS,
|
||||
.procname = "gc_min_interval_ms",
|
||||
.data = &ip6_rt_gc_min_interval,
|
||||
.data = &ip6_rt_gc_min_interval,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec_ms_jiffies,
|
||||
.proc_handler = &proc_dointvec_ms_jiffies,
|
||||
.strategy = &sysctl_ms_jiffies,
|
||||
},
|
||||
{ .ctl_name = 0 }
|
||||
|
|
|
@ -410,7 +410,7 @@ static inline __be32 try_6to4(struct in6_addr *v6dst)
|
|||
__be32 dst = 0;
|
||||
|
||||
if (v6dst->s6_addr16[0] == htons(0x2002)) {
|
||||
/* 6to4 v6 addr has 16 bits prefix, 32 v4addr, 16 SLA, ... */
|
||||
/* 6to4 v6 addr has 16 bits prefix, 32 v4addr, 16 SLA, ... */
|
||||
memcpy(&dst, &v6dst->s6_addr16[1], 4);
|
||||
}
|
||||
return dst;
|
||||
|
@ -537,7 +537,7 @@ static int ipip6_tunnel_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
struct sk_buff *new_skb = skb_realloc_headroom(skb, max_headroom);
|
||||
if (!new_skb) {
|
||||
ip_rt_put(rt);
|
||||
stats->tx_dropped++;
|
||||
stats->tx_dropped++;
|
||||
dev_kfree_skb(skb);
|
||||
tunnel->recursion--;
|
||||
return 0;
|
||||
|
|
|
@ -92,7 +92,7 @@ static ctl_table ipv6_net_table[] = {
|
|||
.mode = 0555,
|
||||
.child = ipv6_table
|
||||
},
|
||||
{ .ctl_name = 0 }
|
||||
{ .ctl_name = 0 }
|
||||
};
|
||||
|
||||
static ctl_table ipv6_root_table[] = {
|
||||
|
@ -102,7 +102,7 @@ static ctl_table ipv6_root_table[] = {
|
|||
.mode = 0555,
|
||||
.child = ipv6_net_table
|
||||
},
|
||||
{ .ctl_name = 0 }
|
||||
{ .ctl_name = 0 }
|
||||
};
|
||||
|
||||
void ipv6_sysctl_register(void)
|
||||
|
|
|
@ -125,7 +125,7 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
|
|||
int addr_len)
|
||||
{
|
||||
struct sockaddr_in6 *usin = (struct sockaddr_in6 *) uaddr;
|
||||
struct inet_sock *inet = inet_sk(sk);
|
||||
struct inet_sock *inet = inet_sk(sk);
|
||||
struct inet_connection_sock *icsk = inet_csk(sk);
|
||||
struct ipv6_pinfo *np = inet6_sk(sk);
|
||||
struct tcp_sock *tp = tcp_sk(sk);
|
||||
|
@ -157,10 +157,10 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
|
|||
}
|
||||
|
||||
/*
|
||||
* connect() to INADDR_ANY means loopback (BSD'ism).
|
||||
*/
|
||||
* connect() to INADDR_ANY means loopback (BSD'ism).
|
||||
*/
|
||||
|
||||
if(ipv6_addr_any(&usin->sin6_addr))
|
||||
if(ipv6_addr_any(&usin->sin6_addr))
|
||||
usin->sin6_addr.s6_addr[15] = 0x1;
|
||||
|
||||
addr_type = ipv6_addr_type(&usin->sin6_addr);
|
||||
|
@ -519,7 +519,7 @@ static int tcp_v6_send_synack(struct sock *sk, struct request_sock *req,
|
|||
}
|
||||
|
||||
done:
|
||||
if (opt && opt != np->opt)
|
||||
if (opt && opt != np->opt)
|
||||
sock_kfree_s(sk, opt, opt->tot_len);
|
||||
dst_release(dst);
|
||||
return err;
|
||||
|
@ -1009,7 +1009,7 @@ static void tcp_v6_send_reset(struct sock *sk, struct sk_buff *skb)
|
|||
buff = alloc_skb(MAX_HEADER + sizeof(struct ipv6hdr) + tot_len,
|
||||
GFP_ATOMIC);
|
||||
if (buff == NULL)
|
||||
return;
|
||||
return;
|
||||
|
||||
skb_reserve(buff, MAX_HEADER + sizeof(struct ipv6hdr) + tot_len);
|
||||
|
||||
|
@ -1023,7 +1023,7 @@ static void tcp_v6_send_reset(struct sock *sk, struct sk_buff *skb)
|
|||
t1->rst = 1;
|
||||
|
||||
if(th->ack) {
|
||||
t1->seq = th->ack_seq;
|
||||
t1->seq = th->ack_seq;
|
||||
} else {
|
||||
t1->ack = 1;
|
||||
t1->ack_seq = htonl(ntohl(th->seq) + th->syn + th->fin
|
||||
|
@ -1592,7 +1592,7 @@ static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
|
|||
looks not very well thought. For now we latch
|
||||
options, received in the last packet, enqueued
|
||||
by tcp. Feel free to propose better solution.
|
||||
--ANK (980728)
|
||||
--ANK (980728)
|
||||
*/
|
||||
if (np->rxopt.all)
|
||||
opt_skb = skb_clone(skb, GFP_ATOMIC);
|
||||
|
@ -1620,7 +1620,7 @@ static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
|
|||
* otherwise we just shortcircuit this and continue with
|
||||
* the new socket..
|
||||
*/
|
||||
if(nsk != sk) {
|
||||
if(nsk != sk) {
|
||||
if (tcp_child_process(sk, nsk, skb))
|
||||
goto reset;
|
||||
if (opt_skb)
|
||||
|
@ -1739,10 +1739,10 @@ process:
|
|||
ret = 0;
|
||||
if (!sock_owned_by_user(sk)) {
|
||||
#ifdef CONFIG_NET_DMA
|
||||
struct tcp_sock *tp = tcp_sk(sk);
|
||||
if (tp->ucopy.dma_chan)
|
||||
ret = tcp_v6_do_rcv(sk, skb);
|
||||
else
|
||||
struct tcp_sock *tp = tcp_sk(sk);
|
||||
if (tp->ucopy.dma_chan)
|
||||
ret = tcp_v6_do_rcv(sk, skb);
|
||||
else
|
||||
#endif
|
||||
{
|
||||
if (!tcp_prequeue(sk, skb))
|
||||
|
|
|
@ -67,7 +67,7 @@ static struct sock *__udp6_lib_lookup(struct in6_addr *saddr, __be16 sport,
|
|||
unsigned short hnum = ntohs(dport);
|
||||
int badness = -1;
|
||||
|
||||
read_lock(&udp_hash_lock);
|
||||
read_lock(&udp_hash_lock);
|
||||
sk_for_each(sk, node, &udptable[hnum & (UDP_HTABLE_SIZE - 1)]) {
|
||||
struct inet_sock *inet = inet_sk(sk);
|
||||
|
||||
|
@ -105,7 +105,7 @@ static struct sock *__udp6_lib_lookup(struct in6_addr *saddr, __be16 sport,
|
|||
}
|
||||
if (result)
|
||||
sock_hold(result);
|
||||
read_unlock(&udp_hash_lock);
|
||||
read_unlock(&udp_hash_lock);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -120,12 +120,12 @@ int udpv6_recvmsg(struct kiocb *iocb, struct sock *sk,
|
|||
{
|
||||
struct ipv6_pinfo *np = inet6_sk(sk);
|
||||
struct inet_sock *inet = inet_sk(sk);
|
||||
struct sk_buff *skb;
|
||||
struct sk_buff *skb;
|
||||
size_t copied;
|
||||
int err, copy_only, is_udplite = IS_UDPLITE(sk);
|
||||
|
||||
if (addr_len)
|
||||
*addr_len=sizeof(struct sockaddr_in6);
|
||||
if (addr_len)
|
||||
*addr_len=sizeof(struct sockaddr_in6);
|
||||
|
||||
if (flags & MSG_ERRQUEUE)
|
||||
return ipv6_recv_error(sk, msg, len);
|
||||
|
@ -135,11 +135,11 @@ try_again:
|
|||
if (!skb)
|
||||
goto out;
|
||||
|
||||
copied = skb->len - sizeof(struct udphdr);
|
||||
if (copied > len) {
|
||||
copied = len;
|
||||
msg->msg_flags |= MSG_TRUNC;
|
||||
}
|
||||
copied = skb->len - sizeof(struct udphdr);
|
||||
if (copied > len) {
|
||||
copied = len;
|
||||
msg->msg_flags |= MSG_TRUNC;
|
||||
}
|
||||
|
||||
/*
|
||||
* Decide whether to checksum and/or copy data.
|
||||
|
@ -191,7 +191,7 @@ try_again:
|
|||
} else {
|
||||
if (np->rxopt.all)
|
||||
datagram_recv_ctl(sk, msg, skb);
|
||||
}
|
||||
}
|
||||
|
||||
err = copied;
|
||||
if (flags & MSG_TRUNC)
|
||||
|
@ -339,7 +339,7 @@ static struct sock *udp_v6_mcast_next(struct sock *sk,
|
|||
* so we don't need to lock the hashes.
|
||||
*/
|
||||
static int __udp6_lib_mcast_deliver(struct sk_buff *skb, struct in6_addr *saddr,
|
||||
struct in6_addr *daddr, struct hlist_head udptable[])
|
||||
struct in6_addr *daddr, struct hlist_head udptable[])
|
||||
{
|
||||
struct sock *sk, *sk2;
|
||||
const struct udphdr *uh = skb->h.uh;
|
||||
|
@ -379,7 +379,7 @@ static inline int udp6_csum_init(struct sk_buff *skb, struct udphdr *uh)
|
|||
}
|
||||
if (skb->ip_summed == CHECKSUM_COMPLETE &&
|
||||
!csum_ipv6_magic(&skb->nh.ipv6h->saddr, &skb->nh.ipv6h->daddr,
|
||||
skb->len, IPPROTO_UDP, skb->csum ))
|
||||
skb->len, IPPROTO_UDP, skb->csum ))
|
||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
|
||||
if (skb->ip_summed != CHECKSUM_UNNECESSARY)
|
||||
|
@ -396,7 +396,7 @@ int __udp6_lib_rcv(struct sk_buff **pskb, struct hlist_head udptable[],
|
|||
{
|
||||
struct sk_buff *skb = *pskb;
|
||||
struct sock *sk;
|
||||
struct udphdr *uh;
|
||||
struct udphdr *uh;
|
||||
struct net_device *dev = skb->dev;
|
||||
struct in6_addr *saddr, *daddr;
|
||||
u32 ulen = 0;
|
||||
|
@ -498,7 +498,7 @@ static void udp_v6_flush_pending_frames(struct sock *sk)
|
|||
up->len = 0;
|
||||
up->pending = 0;
|
||||
ip6_flush_pending_frames(sk);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -11,9 +11,9 @@ extern void __udp6_lib_err(struct sk_buff *, struct inet6_skb_parm *,
|
|||
int , int , int , __be32 , struct hlist_head []);
|
||||
|
||||
extern int udpv6_getsockopt(struct sock *sk, int level, int optname,
|
||||
char __user *optval, int __user *optlen);
|
||||
char __user *optval, int __user *optlen);
|
||||
extern int udpv6_setsockopt(struct sock *sk, int level, int optname,
|
||||
char __user *optval, int optlen);
|
||||
char __user *optval, int optlen);
|
||||
#ifdef CONFIG_COMPAT
|
||||
extern int compat_udpv6_setsockopt(struct sock *sk, int level, int optname,
|
||||
char __user *optval, int optlen);
|
||||
|
@ -24,7 +24,7 @@ extern int udpv6_sendmsg(struct kiocb *iocb, struct sock *sk,
|
|||
struct msghdr *msg, size_t len);
|
||||
extern int udpv6_recvmsg(struct kiocb *iocb, struct sock *sk,
|
||||
struct msghdr *msg, size_t len,
|
||||
int noblock, int flags, int *addr_len);
|
||||
int noblock, int flags, int *addr_len);
|
||||
extern int udpv6_queue_rcv_skb(struct sock * sk, struct sk_buff *skb);
|
||||
extern int udpv6_destroy_sock(struct sock *sk);
|
||||
|
||||
|
|
|
@ -115,7 +115,7 @@ int xfrm6_rcv_spi(struct sk_buff *skb, __be32 spi)
|
|||
__skb_push(skb, skb->data - skb->nh.raw);
|
||||
|
||||
NF_HOOK(PF_INET6, NF_IP6_PRE_ROUTING, skb, skb->dev, NULL,
|
||||
ip6_rcv_finish);
|
||||
ip6_rcv_finish);
|
||||
return -1;
|
||||
#else
|
||||
return 1;
|
||||
|
@ -142,12 +142,12 @@ int xfrm6_rcv(struct sk_buff **pskb)
|
|||
int xfrm6_input_addr(struct sk_buff *skb, xfrm_address_t *daddr,
|
||||
xfrm_address_t *saddr, u8 proto)
|
||||
{
|
||||
struct xfrm_state *x = NULL;
|
||||
int wildcard = 0;
|
||||
struct xfrm_state *x = NULL;
|
||||
int wildcard = 0;
|
||||
struct in6_addr any;
|
||||
xfrm_address_t *xany;
|
||||
struct xfrm_state *xfrm_vec_one = NULL;
|
||||
int nh = 0;
|
||||
int nh = 0;
|
||||
int i = 0;
|
||||
|
||||
ipv6_addr_set(&any, 0, 0, 0, 0);
|
||||
|
@ -168,12 +168,12 @@ int xfrm6_input_addr(struct sk_buff *skb, xfrm_address_t *daddr,
|
|||
break;
|
||||
case 2:
|
||||
default:
|
||||
/* lookup state with wild-card addresses */
|
||||
/* lookup state with wild-card addresses */
|
||||
wildcard = 1; /* XXX */
|
||||
dst = xany;
|
||||
src = xany;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
x = xfrm_state_lookup_byaddr(dst, src, proto, AF_INET6);
|
||||
if (!x)
|
||||
|
@ -193,8 +193,8 @@ int xfrm6_input_addr(struct sk_buff *skb, xfrm_address_t *daddr,
|
|||
if (unlikely(x->km.state != XFRM_STATE_VALID)) {
|
||||
spin_unlock(&x->lock);
|
||||
xfrm_state_put(x);
|
||||
x = NULL;
|
||||
continue;
|
||||
x = NULL;
|
||||
continue;
|
||||
}
|
||||
if (xfrm_state_check_expire(x)) {
|
||||
spin_unlock(&x->lock);
|
||||
|
|
Loading…
Reference in a new issue