cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

ping.h (2973B)


      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
     12#include <net/icmp.h>
     13#include <net/netns/hash.h>
     14
     15/* PING_HTABLE_SIZE must be power of 2 */
     16#define PING_HTABLE_SIZE 	64
     17#define PING_HTABLE_MASK 	(PING_HTABLE_SIZE-1)
     18
     19#define ping_portaddr_for_each_entry(__sk, node, list) \
     20	hlist_nulls_for_each_entry(__sk, node, list, sk_nulls_node)
     21
     22/*
     23 * gid_t is either uint or ushort.  We want to pass it to
     24 * proc_dointvec_minmax(), so it must not be larger than MAX_INT
     25 */
     26#define GID_T_MAX (((gid_t)~0U) >> 1)
     27
     28/* Compatibility glue so we can support IPv6 when it's compiled as a module */
     29struct pingv6_ops {
     30	int (*ipv6_recv_error)(struct sock *sk, struct msghdr *msg, int len,
     31			       int *addr_len);
     32	void (*ip6_datagram_recv_common_ctl)(struct sock *sk,
     33					     struct msghdr *msg,
     34					     struct sk_buff *skb);
     35	void (*ip6_datagram_recv_specific_ctl)(struct sock *sk,
     36					       struct msghdr *msg,
     37					       struct sk_buff *skb);
     38	int (*icmpv6_err_convert)(u8 type, u8 code, int *err);
     39	void (*ipv6_icmp_error)(struct sock *sk, struct sk_buff *skb, int err,
     40				__be16 port, u32 info, u8 *payload);
     41	int (*ipv6_chk_addr)(struct net *net, const struct in6_addr *addr,
     42			     const struct net_device *dev, int strict);
     43};
     44
     45struct ping_iter_state {
     46	struct seq_net_private  p;
     47	int			bucket;
     48	sa_family_t		family;
     49};
     50
     51extern struct proto ping_prot;
     52#if IS_ENABLED(CONFIG_IPV6)
     53extern struct pingv6_ops pingv6_ops;
     54#endif
     55
     56struct pingfakehdr {
     57	struct icmphdr icmph;
     58	struct msghdr *msg;
     59	sa_family_t family;
     60	__wsum wcheck;
     61};
     62
     63int  ping_get_port(struct sock *sk, unsigned short ident);
     64int ping_hash(struct sock *sk);
     65void ping_unhash(struct sock *sk);
     66
     67int  ping_init_sock(struct sock *sk);
     68void ping_close(struct sock *sk, long timeout);
     69int  ping_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len);
     70void ping_err(struct sk_buff *skb, int offset, u32 info);
     71int  ping_getfrag(void *from, char *to, int offset, int fraglen, int odd,
     72		  struct sk_buff *);
     73
     74int  ping_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
     75		  int flags, int *addr_len);
     76int  ping_common_sendmsg(int family, struct msghdr *msg, size_t len,
     77			 void *user_icmph, size_t icmph_len);
     78int  ping_queue_rcv_skb(struct sock *sk, struct sk_buff *skb);
     79enum skb_drop_reason ping_rcv(struct sk_buff *skb);
     80
     81#ifdef CONFIG_PROC_FS
     82void *ping_seq_start(struct seq_file *seq, loff_t *pos, sa_family_t family);
     83void *ping_seq_next(struct seq_file *seq, void *v, loff_t *pos);
     84void ping_seq_stop(struct seq_file *seq, void *v);
     85
     86int __init ping_proc_init(void);
     87void ping_proc_exit(void);
     88#endif
     89
     90void __init ping_init(void);
     91int  __init pingv6_init(void);
     92void pingv6_exit(void);
     93
     94#endif /* _PING_H */