#include <asm/uaccess.h>
#include <asm/ioctls.h>
+#include <net/ip.h>
#include <net/sock.h>
#include <net/snmp.h>
#include <net/ndisc.h>
#include <net/protocol.h>
#include <net/ip6_route.h>
+#include <net/ip6_checksum.h>
#include <net/addrconf.h>
#include <net/transp_v6.h>
#include <net/udp.h>
if (np->rxopt.all)
datagram_recv_ctl(sk, msg, skb);
+
err = copied;
+ if (flags & MSG_TRUNC)
+ err = skb->len;
out_free:
skb_free_datagram(sk, skb);
if (err)
goto error_fault;
- IP6_INC_STATS(OutRequests);
+ IP6_INC_STATS(IPSTATS_MIB_OUTREQUESTS);
err = NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, rt->u.dst.dev,
dst_output);
if (err > 0)
err = -EFAULT;
kfree_skb(skb);
error:
- IP6_INC_STATS(OutDiscards);
+ IP6_INC_STATS(IPSTATS_MIB_OUTDISCARDS);
return err;
}
static int rawv6_sendmsg(struct kiocb *iocb, struct sock *sk,
if (inet_sk(sk)->num == IPPROTO_RAW)
ip6_ra_control(sk, -1, NULL);
- inet_sock_release(sk);
+ sk_common_release(sk);
}
static int rawv6_init_sk(struct sock *sk)
struct proto rawv6_prot = {
.name = "RAW",
.close = rawv6_close,
- .connect = udpv6_connect,
+ .connect = ip6_datagram_connect,
.disconnect = udp_disconnect,
.ioctl = rawv6_ioctl,
.init = rawv6_init_sk,