Then we can enable/disable socket debugging without modifying user code. That is more convenient for debugging.
Signed-off-by: Yafang Shao <laoar.s...@gmail.com> --- include/net/sock.h | 8 ++++++++ net/core/filter.c | 3 +++ net/core/sock.c | 8 -------- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/include/net/sock.h b/include/net/sock.h index 2b229f7..8decee9 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -1935,6 +1935,14 @@ static inline void sock_confirm_neigh(struct sk_buff *skb, struct neighbour *n) } } +static inline void sock_valbool_flag(struct sock *sk, int bit, int valbool) +{ + if (valbool) + sock_set_flag(sk, bit); + else + sock_reset_flag(sk, bit); +} + bool sk_mc_loop(struct sock *sk); static inline bool sk_can_gso(const struct sock *sk) diff --git a/net/core/filter.c b/net/core/filter.c index 3a49f68..ce5da57 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -4111,6 +4111,9 @@ static unsigned long bpf_xdp_copy(void *dst_buff, const void *src_buff, /* Only some socketops are supported */ switch (optname) { + case SO_DEBUG: + sock_valbool_flag(sk, SOCK_DBG, val); + break; case SO_RCVBUF: sk->sk_userlocks |= SOCK_RCVBUF_LOCK; sk->sk_rcvbuf = max_t(int, val * 2, SOCK_MIN_RCVBUF); diff --git a/net/core/sock.c b/net/core/sock.c index 900e8a9..5ef6daa 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -638,14 +638,6 @@ static int sock_getbindtodevice(struct sock *sk, char __user *optval, return ret; } -static inline void sock_valbool_flag(struct sock *sk, int bit, int valbool) -{ - if (valbool) - sock_set_flag(sk, bit); - else - sock_reset_flag(sk, bit); -} - bool sk_mc_loop(struct sock *sk) { if (dev_recursion_level()) -- 1.8.3.1