#include <asm/uaccess.h>
-DEFINE_SNMP_STAT(struct ipv6_mib, ipv6_statistics);
+DEFINE_SNMP_STAT(struct ipstats_mib, ipv6_statistics);
static struct packet_type ipv6_packet_type = {
.type = __constant_htons(ETH_P_IPV6),
};
struct ip6_ra_chain *ip6_ra_chain;
-rwlock_t ip6_ra_lock = RW_LOCK_UNLOCKED;
+DEFINE_RWLOCK(ip6_ra_lock);
int ip6_ra_control(struct sock *sk, int sel, void (*destructor)(struct sock *))
{
struct group_source_req *pgsr);
extern int ip6_mc_msfilter(struct sock *sk, struct group_filter *gsf);
extern int ip6_mc_msfget(struct sock *sk, struct group_filter *gsf,
- struct group_filter *optval, int *optlen);
+ struct group_filter __user *optval, int __user *optlen);
-int ipv6_setsockopt(struct sock *sk, int level, int optname, char *optval,
- int optlen)
+int ipv6_setsockopt(struct sock *sk, int level, int optname,
+ char __user *optval, int optlen)
{
struct ipv6_pinfo *np = inet6_sk(sk);
int val, valbool;
if (optval == NULL)
val=0;
- else if (get_user(val, (int *) optval))
+ else if (get_user(val, (int __user *) optval))
return -EFAULT;
valbool = (val!=0);
ipv6_sock_mc_close(sk);
if (sk->sk_protocol == IPPROTO_TCP) {
- struct tcp_opt *tp = tcp_sk(sk);
+ struct tcp_sock *tp = tcp_sk(sk);
local_bh_disable();
sock_prot_dec_use(sk->sk_prot);
retv = 0;
if (sk->sk_type == SOCK_STREAM) {
if (opt) {
- struct tcp_opt *tp = tcp_sk(sk);
+ struct tcp_sock *tp = tcp_sk(sk);
if (!((1 << sk->sk_state) &
(TCPF_LISTEN | TCPF_CLOSE))
&& inet_sk(sk)->daddr != LOOPBACK4_IPV6) {
return -EINVAL;
}
-int ipv6_getsockopt(struct sock *sk, int level, int optname, char *optval,
- int *optlen)
+int ipv6_getsockopt(struct sock *sk, int level, int optname,
+ char __user *optval, int __user *optlen)
{
struct ipv6_pinfo *np = inet6_sk(sk);
int len;
return -EFAULT;
lock_sock(sk);
err = ip6_mc_msfget(sk, &gsf,
- (struct group_filter *)optval, optlen);
+ (struct group_filter __user *)optval, optlen);
release_sock(sk);
return err;
}