diff options
Diffstat (limited to 'net/core/sock.c')
-rw-r--r-- | net/core/sock.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/net/core/sock.c b/net/core/sock.c index 93c8b20c91e4..71e3e5f1eaa0 100644 --- a/net/core/sock.c +++ b/net/core/sock.c | |||
@@ -653,6 +653,25 @@ static inline void sock_valbool_flag(struct sock *sk, int bit, int valbool) | |||
653 | sock_reset_flag(sk, bit); | 653 | sock_reset_flag(sk, bit); |
654 | } | 654 | } |
655 | 655 | ||
656 | bool sk_mc_loop(struct sock *sk) | ||
657 | { | ||
658 | if (dev_recursion_level()) | ||
659 | return false; | ||
660 | if (!sk) | ||
661 | return true; | ||
662 | switch (sk->sk_family) { | ||
663 | case AF_INET: | ||
664 | return inet_sk(sk)->mc_loop; | ||
665 | #if IS_ENABLED(CONFIG_IPV6) | ||
666 | case AF_INET6: | ||
667 | return inet6_sk(sk)->mc_loop; | ||
668 | #endif | ||
669 | } | ||
670 | WARN_ON(1); | ||
671 | return true; | ||
672 | } | ||
673 | EXPORT_SYMBOL(sk_mc_loop); | ||
674 | |||
656 | /* | 675 | /* |
657 | * This is meant for all protocols to use and covers goings on | 676 | * This is meant for all protocols to use and covers goings on |
658 | * at the socket level. Everything here is generic. | 677 | * at the socket level. Everything here is generic. |
@@ -1655,6 +1674,10 @@ void sock_rfree(struct sk_buff *skb) | |||
1655 | } | 1674 | } |
1656 | EXPORT_SYMBOL(sock_rfree); | 1675 | EXPORT_SYMBOL(sock_rfree); |
1657 | 1676 | ||
1677 | /* | ||
1678 | * Buffer destructor for skbs that are not used directly in read or write | ||
1679 | * path, e.g. for error handler skbs. Automatically called from kfree_skb. | ||
1680 | */ | ||
1658 | void sock_efree(struct sk_buff *skb) | 1681 | void sock_efree(struct sk_buff *skb) |
1659 | { | 1682 | { |
1660 | sock_put(skb->sk); | 1683 | sock_put(skb->sk); |