summaryrefslogtreecommitdiff
path: root/include/net
diff options
context:
space:
mode:
authorsamanthakumar <samanthakumar@google.com>2016-04-05 16:41:16 (GMT)
committerDavid S. Miller <davem@davemloft.net>2016-04-05 20:29:37 (GMT)
commit627d2d6b550094d88f9e518e15967e7bf906ebbf (patch)
tree4a4d64af861781920b2b4ef6d0e7b4423b787292 /include/net
parente6afc8ace6dd5cef5e812f26c72579da8806f5ac (diff)
downloadlinux-627d2d6b550094d88f9e518e15967e7bf906ebbf.tar.xz
udp: enable MSG_PEEK at non-zero offset
Enable peeking at UDP datagrams at the offset specified with socket option SOL_SOCKET/SO_PEEK_OFF. Peek at any datagram in the queue, up to the end of the given datagram. Implement the SO_PEEK_OFF semantics introduced in commit ef64a54f6e55 ("sock: Introduce the SO_PEEK_OFF sock option"). Increase the offset on peek, decrease it on regular reads. When peeking, always checksum the packet immediately, to avoid recomputation on subsequent peeks and final read. The socket lock is not held for the duration of udp_recvmsg, so peek and read operations can run concurrently. Only the last store to sk_peek_off is preserved. Signed-off-by: Sam Kumar <samanthakumar@google.com> Signed-off-by: Willem de Bruijn <willemb@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net')
-rw-r--r--include/net/sock.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/include/net/sock.h b/include/net/sock.h
index b759989..1decb7a 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -457,6 +457,8 @@ struct sock {
#define SK_CAN_REUSE 1
#define SK_FORCE_REUSE 2
+int sk_set_peek_off(struct sock *sk, int val);
+
static inline int sk_peek_offset(struct sock *sk, int flags)
{
if (unlikely(flags & MSG_PEEK)) {