ping.h 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /*
  3. * INET An implementation of the TCP/IP protocol suite for the LINUX
  4. * operating system. INET is implemented using the BSD Socket
  5. * interface as the means of communication with the user level.
  6. *
  7. * Definitions for the "ping" module.
  8. */
  9. #ifndef _PING_H
  10. #define _PING_H
  11. #include <net/icmp.h>
  12. #include <net/netns/hash.h>
  13. /* PING_HTABLE_SIZE must be power of 2 */
  14. #define PING_HTABLE_SIZE 64
  15. #define PING_HTABLE_MASK (PING_HTABLE_SIZE-1)
  16. #define GID_T_MAX (((gid_t)~0U) - 1)
  17. /* Compatibility glue so we can support IPv6 when it's compiled as a module */
  18. struct pingv6_ops {
  19. int (*ipv6_recv_error)(struct sock *sk, struct msghdr *msg, int len,
  20. int *addr_len);
  21. void (*ip6_datagram_recv_common_ctl)(struct sock *sk,
  22. struct msghdr *msg,
  23. struct sk_buff *skb);
  24. void (*ip6_datagram_recv_specific_ctl)(struct sock *sk,
  25. struct msghdr *msg,
  26. struct sk_buff *skb);
  27. int (*icmpv6_err_convert)(u8 type, u8 code, int *err);
  28. void (*ipv6_icmp_error)(struct sock *sk, struct sk_buff *skb, int err,
  29. __be16 port, u32 info, u8 *payload);
  30. int (*ipv6_chk_addr)(struct net *net, const struct in6_addr *addr,
  31. const struct net_device *dev, int strict);
  32. };
  33. struct ping_iter_state {
  34. struct seq_net_private p;
  35. int bucket;
  36. sa_family_t family;
  37. };
  38. extern struct proto ping_prot;
  39. #if IS_ENABLED(CONFIG_IPV6)
  40. extern struct pingv6_ops pingv6_ops;
  41. #endif
  42. struct pingfakehdr {
  43. struct icmphdr icmph;
  44. struct msghdr *msg;
  45. sa_family_t family;
  46. __wsum wcheck;
  47. };
  48. int ping_get_port(struct sock *sk, unsigned short ident);
  49. void ping_unhash(struct sock *sk);
  50. int ping_init_sock(struct sock *sk);
  51. void ping_close(struct sock *sk, long timeout);
  52. int ping_bind(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len);
  53. void ping_err(struct sk_buff *skb, int offset, u32 info);
  54. int ping_getfrag(void *from, char *to, int offset, int fraglen, int odd,
  55. struct sk_buff *);
  56. int ping_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
  57. int flags, int *addr_len);
  58. int ping_common_sendmsg(int family, struct msghdr *msg, size_t len,
  59. void *user_icmph, size_t icmph_len);
  60. int ping_queue_rcv_skb(struct sock *sk, struct sk_buff *skb);
  61. enum skb_drop_reason ping_rcv(struct sk_buff *skb);
  62. #ifdef CONFIG_PROC_FS
  63. void *ping_seq_start(struct seq_file *seq, loff_t *pos, sa_family_t family);
  64. void *ping_seq_next(struct seq_file *seq, void *v, loff_t *pos);
  65. void ping_seq_stop(struct seq_file *seq, void *v);
  66. int __init ping_proc_init(void);
  67. void ping_proc_exit(void);
  68. #endif
  69. void __init ping_init(void);
  70. int __init pingv6_init(void);
  71. void pingv6_exit(void);
  72. #endif /* _PING_H */