~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/linux/sock_diag.h

Version: ~ [ linux-5.15-rc5 ] ~ [ linux-5.14.11 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.72 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.152 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.210 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.250 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.286 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.288 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.18.140 ] ~ [ linux-3.16.85 ] ~ [ linux-3.14.79 ] ~ [ linux-3.12.74 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  2 #ifndef __SOCK_DIAG_H__
  3 #define __SOCK_DIAG_H__
  4 
  5 #include <linux/netlink.h>
  6 #include <linux/user_namespace.h>
  7 #include <net/net_namespace.h>
  8 #include <net/sock.h>
  9 #include <uapi/linux/sock_diag.h>
 10 
 11 struct sk_buff;
 12 struct nlmsghdr;
 13 struct sock;
 14 
 15 struct sock_diag_handler {
 16         __u8 family;
 17         int (*dump)(struct sk_buff *skb, struct nlmsghdr *nlh);
 18         int (*get_info)(struct sk_buff *skb, struct sock *sk);
 19         int (*destroy)(struct sk_buff *skb, struct nlmsghdr *nlh);
 20 };
 21 
 22 int sock_diag_register(const struct sock_diag_handler *h);
 23 void sock_diag_unregister(const struct sock_diag_handler *h);
 24 
 25 void sock_diag_register_inet_compat(int (*fn)(struct sk_buff *skb, struct nlmsghdr *nlh));
 26 void sock_diag_unregister_inet_compat(int (*fn)(struct sk_buff *skb, struct nlmsghdr *nlh));
 27 
 28 u64 sock_gen_cookie(struct sock *sk);
 29 int sock_diag_check_cookie(struct sock *sk, const __u32 *cookie);
 30 void sock_diag_save_cookie(struct sock *sk, __u32 *cookie);
 31 
 32 int sock_diag_put_meminfo(struct sock *sk, struct sk_buff *skb, int attr);
 33 int sock_diag_put_filterinfo(bool may_report_filterinfo, struct sock *sk,
 34                              struct sk_buff *skb, int attrtype);
 35 
 36 static inline
 37 enum sknetlink_groups sock_diag_destroy_group(const struct sock *sk)
 38 {
 39         switch (sk->sk_family) {
 40         case AF_INET:
 41                 if (sk->sk_type == SOCK_RAW)
 42                         return SKNLGRP_NONE;
 43 
 44                 switch (sk->sk_protocol) {
 45                 case IPPROTO_TCP:
 46                         return SKNLGRP_INET_TCP_DESTROY;
 47                 case IPPROTO_UDP:
 48                         return SKNLGRP_INET_UDP_DESTROY;
 49                 default:
 50                         return SKNLGRP_NONE;
 51                 }
 52         case AF_INET6:
 53                 if (sk->sk_type == SOCK_RAW)
 54                         return SKNLGRP_NONE;
 55 
 56                 switch (sk->sk_protocol) {
 57                 case IPPROTO_TCP:
 58                         return SKNLGRP_INET6_TCP_DESTROY;
 59                 case IPPROTO_UDP:
 60                         return SKNLGRP_INET6_UDP_DESTROY;
 61                 default:
 62                         return SKNLGRP_NONE;
 63                 }
 64         default:
 65                 return SKNLGRP_NONE;
 66         }
 67 }
 68 
 69 static inline
 70 bool sock_diag_has_destroy_listeners(const struct sock *sk)
 71 {
 72         const struct net *n = sock_net(sk);
 73         const enum sknetlink_groups group = sock_diag_destroy_group(sk);
 74 
 75         return group != SKNLGRP_NONE && n->diag_nlsk &&
 76                 netlink_has_listeners(n->diag_nlsk, group);
 77 }
 78 void sock_diag_broadcast_destroy(struct sock *sk);
 79 
 80 int sock_diag_destroy(struct sock *sk, int err);
 81 #endif
 82 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp