Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 290227
b: refs/heads/master
c: ef64a54
h: refs/heads/master
i:
  290225: a023643
  290223: d6d2614
v: v3
  • Loading branch information
Pavel Emelyanov authored and David S. Miller committed Feb 21, 2012
1 parent 582e3d3 commit ec0cd8f
Show file tree
Hide file tree
Showing 21 changed files with 57 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: da5ef6e51b327b41180b5d1000c06e8d3595a936
refs/heads/master: ef64a54f6e558155b4f149bb10666b9e914b6c54
1 change: 1 addition & 0 deletions trunk/arch/alpha/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@

#define SO_WIFI_STATUS 41
#define SCM_WIFI_STATUS SO_WIFI_STATUS
#define SO_PEEK_OFF 42

/* O_NONBLOCK clashes with the bits used for socket types. Therefore we
* have to define SOCK_NONBLOCK to a different value here.
Expand Down
1 change: 1 addition & 0 deletions trunk/arch/arm/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,5 +64,6 @@

#define SO_WIFI_STATUS 41
#define SCM_WIFI_STATUS SO_WIFI_STATUS
#define SO_PEEK_OFF 42

#endif /* _ASM_SOCKET_H */
1 change: 1 addition & 0 deletions trunk/arch/avr32/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,5 +64,6 @@

#define SO_WIFI_STATUS 41
#define SCM_WIFI_STATUS SO_WIFI_STATUS
#define SO_PEEK_OFF 42

#endif /* __ASM_AVR32_SOCKET_H */
1 change: 1 addition & 0 deletions trunk/arch/cris/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@

#define SO_WIFI_STATUS 41
#define SCM_WIFI_STATUS SO_WIFI_STATUS
#define SO_PEEK_OFF 42

#endif /* _ASM_SOCKET_H */

Expand Down
1 change: 1 addition & 0 deletions trunk/arch/frv/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@

#define SO_WIFI_STATUS 41
#define SCM_WIFI_STATUS SO_WIFI_STATUS
#define SO_PEEK_OFF 42

#endif /* _ASM_SOCKET_H */

1 change: 1 addition & 0 deletions trunk/arch/h8300/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,5 +64,6 @@

#define SO_WIFI_STATUS 41
#define SCM_WIFI_STATUS SO_WIFI_STATUS
#define SO_PEEK_OFF 42

#endif /* _ASM_SOCKET_H */
1 change: 1 addition & 0 deletions trunk/arch/ia64/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,5 +73,6 @@

#define SO_WIFI_STATUS 41
#define SCM_WIFI_STATUS SO_WIFI_STATUS
#define SO_PEEK_OFF 42

#endif /* _ASM_IA64_SOCKET_H */
1 change: 1 addition & 0 deletions trunk/arch/m32r/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,5 +64,6 @@

#define SO_WIFI_STATUS 41
#define SCM_WIFI_STATUS SO_WIFI_STATUS
#define SO_PEEK_OFF 42

#endif /* _ASM_M32R_SOCKET_H */
1 change: 1 addition & 0 deletions trunk/arch/m68k/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,5 +64,6 @@

#define SO_WIFI_STATUS 41
#define SCM_WIFI_STATUS SO_WIFI_STATUS
#define SO_PEEK_OFF 42

#endif /* _ASM_SOCKET_H */
1 change: 1 addition & 0 deletions trunk/arch/mips/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ To add: #define SO_REUSEPORT 0x0200 /* Allow local address and port reuse. */

#define SO_WIFI_STATUS 41
#define SCM_WIFI_STATUS SO_WIFI_STATUS
#define SO_PEEK_OFF 42

#ifdef __KERNEL__

Expand Down
1 change: 1 addition & 0 deletions trunk/arch/mn10300/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,5 +64,6 @@

#define SO_WIFI_STATUS 41
#define SCM_WIFI_STATUS SO_WIFI_STATUS
#define SO_PEEK_OFF 42

#endif /* _ASM_SOCKET_H */
1 change: 1 addition & 0 deletions trunk/arch/parisc/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@

#define SO_WIFI_STATUS 0x4022
#define SCM_WIFI_STATUS SO_WIFI_STATUS
#define SO_PEEK_OFF 0x4023

/* O_NONBLOCK clashes with the bits used for socket types. Therefore we
* have to define SOCK_NONBLOCK to a different value here.
Expand Down
1 change: 1 addition & 0 deletions trunk/arch/powerpc/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,5 +71,6 @@

#define SO_WIFI_STATUS 41
#define SCM_WIFI_STATUS SO_WIFI_STATUS
#define SO_PEEK_OFF 42

#endif /* _ASM_POWERPC_SOCKET_H */
1 change: 1 addition & 0 deletions trunk/arch/s390/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,5 +72,6 @@

#define SO_WIFI_STATUS 41
#define SCM_WIFI_STATUS SO_WIFI_STATUS
#define SO_PEEK_OFF 42

#endif /* _ASM_SOCKET_H */
1 change: 1 addition & 0 deletions trunk/arch/sparc/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@

#define SO_WIFI_STATUS 0x0025
#define SCM_WIFI_STATUS SO_WIFI_STATUS
#define SO_PEEK_OFF 0x0026

/* Security levels - as per NRL IPv6 - don't actually do anything */
#define SO_SECURITY_AUTHENTICATION 0x5001
Expand Down
1 change: 1 addition & 0 deletions trunk/arch/xtensa/include/asm/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,5 +75,6 @@

#define SO_WIFI_STATUS 41
#define SCM_WIFI_STATUS SO_WIFI_STATUS
#define SO_PEEK_OFF 42

#endif /* _XTENSA_SOCKET_H */
1 change: 1 addition & 0 deletions trunk/include/asm-generic/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,4 +67,5 @@

#define SO_WIFI_STATUS 41
#define SCM_WIFI_STATUS SO_WIFI_STATUS
#define SO_PEEK_OFF 42
#endif /* __ASM_GENERIC_SOCKET_H */
1 change: 1 addition & 0 deletions trunk/include/linux/net.h
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,7 @@ struct proto_ops {
int offset, size_t size, int flags);
ssize_t (*splice_read)(struct socket *sock, loff_t *ppos,
struct pipe_inode_info *pipe, size_t len, unsigned int flags);
void (*set_peek_off)(struct sock *sk, int val);
};

#define DECLARE_SOCKADDR(type, dst, src) \
Expand Down
25 changes: 25 additions & 0 deletions trunk/include/net/sock.h
Original file line number Diff line number Diff line change
Expand Up @@ -357,6 +357,7 @@ struct sock {
struct page *sk_sndmsg_page;
struct sk_buff *sk_send_head;
__u32 sk_sndmsg_off;
__s32 sk_peek_off;
int sk_write_pending;
#ifdef CONFIG_SECURITY
void *sk_security;
Expand All @@ -373,6 +374,30 @@ struct sock {
void (*sk_destruct)(struct sock *sk);
};

static inline int sk_peek_offset(struct sock *sk, int flags)
{
if ((flags & MSG_PEEK) && (sk->sk_peek_off >= 0))
return sk->sk_peek_off;
else
return 0;
}

static inline void sk_peek_offset_bwd(struct sock *sk, int val)
{
if (sk->sk_peek_off >= 0) {
if (sk->sk_peek_off >= val)
sk->sk_peek_off -= val;
else
sk->sk_peek_off = 0;
}
}

static inline void sk_peek_offset_fwd(struct sock *sk, int val)
{
if (sk->sk_peek_off >= 0)
sk->sk_peek_off += val;
}

/*
* Hashed lists helper routines
*/
Expand Down
13 changes: 13 additions & 0 deletions trunk/net/core/sock.c
Original file line number Diff line number Diff line change
Expand Up @@ -793,6 +793,12 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
sock_valbool_flag(sk, SOCK_WIFI_STATUS, valbool);
break;

case SO_PEEK_OFF:
if (sock->ops->set_peek_off)
sock->ops->set_peek_off(sk, val);
else
ret = -EOPNOTSUPP;
break;
default:
ret = -ENOPROTOOPT;
break;
Expand Down Expand Up @@ -1018,6 +1024,12 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
v.val = !!sock_flag(sk, SOCK_WIFI_STATUS);
break;

case SO_PEEK_OFF:
if (!sock->ops->set_peek_off)
return -EOPNOTSUPP;

v.val = sk->sk_peek_off;
break;
default:
return -ENOPROTOOPT;
}
Expand Down Expand Up @@ -2092,6 +2104,7 @@ void sock_init_data(struct socket *sock, struct sock *sk)

sk->sk_sndmsg_page = NULL;
sk->sk_sndmsg_off = 0;
sk->sk_peek_off = -1;

sk->sk_peer_pid = NULL;
sk->sk_peer_cred = NULL;
Expand Down

0 comments on commit ec0cd8f

Please sign in to comment.