/*
        Copyright (C) 1993-2012 Hewlett-Packard Company
*/

 /* This file contains the test-specific definitions for netperf's BSD */
 /* sockets tests */

/* well boys and girls, seems that while AF_INET is "2" and AF_UNSPEC
   is "0" the world over, AF_INET6 is different values depending on
   the platform... grrr.  On HP-UX 11i it is "22" and on Linux 2.6 it
   is "10" sooooo... we have to define our own space for netperf to
   enable us to pass values around from machine to machine. raj
   2005-02-08 */
#define NF_UNSPEC 0
#define NF_INET   4
#define NF_INET6  6
/* since it isn't clear that AF_RDS will be the same value everywhere
   we will have an NF_RDS as well and will make it "lucky 7" raj
   20091014 */
#define NF_RDS    7

/* it would also seem that the socket type defines differ from
   platform to platform, which means we need to define our own values
   to pass between netperf and netserver so they can be translated to
   the local versions.  NST == Netperf Socket Type raj 2008-01-14 */
#define NST_UNKN     -1
#define NST_STREAM    1
#define NST_DGRAM     2
#define NST_DCCP      3
#define NST_SEQPACKET 4

#ifdef WANT_OMNI
#define OMNI_NO_DELAY        0x00000001
#define OMNI_USE_SENDFILE    0x00000002
#define OMNI_CONNECT_TEST    0x00000004
#define OMNI_MEASURE_CPU     0x00000008
#define OMNI_CHECKSUM_OFF    0x00000010
#define OMNI_ROUTING_ALLOWED 0x00000020
#define OMNI_WANT_IFNAME     0x00000040
#define OMNI_WANT_IFSLOT     0x00000080
#define OMNI_WANT_IFIDS      0x00000100
#define OMNI_WANT_DRVINFO    0x00000200
#define OMNI_CHECK_INTERVAL  0x00000400  /* deprecated 2015-04-20 */
#define OMNI_FASTOPEN        0x00000800
#define OMNI_MANAGE_FIREWALL 0x00001000
#define OMNI_USE_PKTINFO     0x00002000
#define OMNI_USE_CONNECTED   0x00004000
#define OMNI_WANT_DEFER_ACCEPT 0x00008000
/* room in the middle */
#define OMNI_WANT_KEEPALIVE  0x80000000

struct  omni_request_struct {
  int32_t    send_buf_size;         /* SO_SNDBUF */
  uint32_t   send_size;             /* bytes per send() call */
  uint32_t   send_alignment;        /* alignment of send buffer */
  uint32_t   send_offset;           /* offset from send alignment */
  uint32_t   send_width;            /* number of send buffers to use */
  int32_t    request_size;          /* size of a request */

  int32_t    recv_buf_size;         /* SO_RCVBUF */
  uint32_t   receive_size;          /* size of buffers in recv */
  uint32_t   recv_alignment;        /* alignment of recv buffer */
  uint32_t   recv_offset;           /* offset from recv alignment */
  uint32_t   recv_width;            /* number of recv buffers to use */
  int32_t    response_size;         /* size of a response */

  uint32_t   flags;                 /* to convey things that didn't
				       really need to burn an entire
				       int */

  float      cpu_rate;       /* do we know how fast the cpu is already? */

  int32_t    test_length;    /* how long is the test? */

  uint32_t   so_rcvavoid;    /* avoid copies on recv? */
  uint32_t   so_sndavoid;    /* avoid copies on send? */
  uint32_t   send_dirty_count; /* bytes to dirty before calling send */
  uint32_t   recv_dirty_count; /* bytes to dirty before calling recv */
  uint32_t   recv_clean_count; /* bytes to access before calling recv */

  uint32_t   data_port;     /* what port number should netserver use? */
  uint32_t   ipfamily;      /* address family of the data connection */
  uint32_t   socket_type;   /* dgram? stream? other? */
  uint32_t   protocol;      /* the protocol of the data connection */
  uint32_t   direction;     /* which way flows the data? */
  uint32_t   netperf_port;  /* when netserver needs netperf's data port */
  uint32_t   interval_burst;/* how many things to do each interval */
  uint32_t   interval_usecs;/* how long each interval should be */
  uint32_t   netperf_ip[4]; /* when netserver needs netperf's data IP */
  uint32_t   netserver_ip[4]; /* when netperf tells netserver his IP */
  int32_t    socket_prio; /* what netserver should use for socket prio */
  int32_t    socket_tos;  /* what netserver should use for socket tos */
  /* there are 38 "ints" above here, add another and you will need to
     adjust the define below */
#define OMNI_REQUEST_CONV_CUTOFF 38
  char       cong_control[16]; /* the requested congestion control alg */
  char       fill_file[32]; /* file from which netserver fills bufs */
  /* total sizeof must be <= MAXSPECDATA*sizeof(int) */
};

struct  omni_response_struct {
  int32_t    recv_buf_size;
  uint32_t   receive_size;
  int32_t    recv_width;

  int32_t    send_buf_size;
  uint32_t   send_size;
  int32_t    send_width;

  uint32_t   flags;

  float      cpu_rate;

  uint32_t   test_length;

  uint32_t   so_rcvavoid;
  uint32_t   so_sndavoid;

  uint32_t   data_port;     /* connect to this port number */

  uint32_t   interval_burst;/* how many things to do each interval */
  uint32_t   interval_usecs;/* how long each interval should be */
  /* these are here because they can be checked before actual data
     connections are made, and the omni_results_struct is already
     full */
  uint32_t   cpu_frequency;  /* this should be megahertz */
  uint32_t   security_info;
  int32_t    socket_prio;
  int32_t    socket_tos;
  /* there are 18 ints above here, add another and you need to adjust
     the define below */
#define OMNI_RESPONSE_CONV_CUTOFF 18
  char       system_model[33];
  char       cpu_model[80];  /* seems like an awful lot doesn't
				it. some clever person at Intel
				decided to give Montecito processors a
				name that long - and still didn't
				include the 9NNN model number! */
  char       security_string[16];
  /* total sizeof must be <= MAXSPECDATA*sizeof(int) */
};

struct omni_results_struct {
  uint32_t   bytes_received_hi;  /* why? because we cannot easily send */
  uint32_t   bytes_received_lo;  /* uint64_t or doubles between endianess */
  uint32_t   recv_calls;
  int32_t    recv_buf_size; /* SO_RCVBUF at end of test */

  uint32_t   bytes_sent_hi;
  uint32_t   bytes_sent_lo;
  uint32_t   send_calls;
  int32_t    send_buf_size; /* SO_SNDBUF at end of test */
  uint32_t   failed_sends;
  uint32_t   trans_received;

  float      elapsed_time;  /* length of test in seconds */

  float      cpu_util;
  float      cpu_percent_user;
  float      cpu_percent_system;
  float      cpu_percent_iowait;
  float      cpu_percent_irq;
  float      cpu_percent_swintr;
  float      serv_dem;
  uint32_t   cpu_method;    /* how was CPU util measured? */
  uint32_t   num_cpus;      /* number of CPUs in remote */

  int32_t    peak_cpu_id;   /* ID of the most utilized CPU */
  float      peak_cpu_util; /* its individual utilization */
  int32_t    vendor;
  int32_t    device;        /* pci device id of the probable egress
			       interface */
  int32_t    subvendor;
  int32_t    subdevice;
  int32_t    transport_retrans;
  /* there are 27 ints above here, add another and you need to adjust
     the define below */
  #define OMNI_RESULTS_CONV_CUTOFF 27
  char       ifname[16];    /* the probable egress interface */
  char       driver[32];    /* size based on linux/ethtool.h */
  char       version[32];
  char       firmware[32];
  char       bus[32];
  char       ifslot[16];    /* slot id of the probable egress interface */
  char       cong_control[16]; /* what the congestion control alg was */
  /* total sizeof must be <= MAXSPECDATA*sizeof(int) */
};

#endif /* WANT_OMNI */

struct	tcp_stream_request_struct {
  int	send_buf_size;
  int	recv_buf_size;	/* how big does the client want it - the */
			/* receive socket buffer that is */
  int	receive_size;   /* how many bytes do we want to receive at one */
			/* time? */
  int	recv_alignment; /* what is the alignment of the receive */
			/* buffer? */
  int	recv_offset;    /* and at what offset from that alignment? */
  int	no_delay;       /* do we disable the nagle algorithm for send */
			/* coalescing? */
  int	measure_cpu;	/* does the client want server cpu utilization */
			/* measured? */
  float	cpu_rate;	/* do we know how fast the cpu is already? */
  int	test_length;	/* how long is the test?		*/
  int	so_rcvavoid;    /* do we want the remote to avoid copies on */
			/* receives? */
  int	so_sndavoid;    /* do we want the remote to avoid send copies? */
  int   dirty_count;    /* how many integers in the receive buffer */
			/* should be made dirty before calling recv? */
  int   clean_count;    /* how many integers should be read from the */
			/* recv buffer before calling recv? */
  int   port;           /* the port to which the recv side should bind
			   to allow netperf to run through those evil
			   firewall things */
  int   ipfamily;       /* the address family of ipaddress */
};

struct	tcp_stream_response_struct {
  int	recv_buf_size;	/* how big does the client want it	*/
  int	receive_size;
  int	no_delay;
  int	measure_cpu;	/* does the client want server cpu	*/
  int	test_length;	/* how long is the test?		*/
  int	send_buf_size;
  int	data_port_number;	/* connect to me here	*/
  float	cpu_rate;		/* could we measure	*/
  int	so_rcvavoid;	/* could the remote avoid receive copies? */
  int	so_sndavoid;	/* could the remote avoid send copies? */
};

struct tcp_stream_results_struct {
  double         bytes_received;
  unsigned int	 recv_calls;
  float	         elapsed_time;	/* how long the test ran */
  float	         cpu_util;	/* -1 if not measured */
  float	         serv_dem;	/* -1 if not measured */
  int            cpu_method;    /* how was cpu util measured? */
  int            num_cpus;      /* how many CPUs had the remote? */
  int            recv_buf_size; /* how large was it at the end? */
  int            send_buf_size; /* how large was it at the end? */
};

struct	tcp_maerts_request_struct {
  int	send_buf_size;
  int	recv_buf_size;	/* how big does the client want it - the */
			/* receive socket buffer that is */
  int	send_size;      /* how many bytes do we want netserver to send
			   at one time? */
  int	send_alignment; /* what is the alignment of the send */
			/* buffer? */
  int	send_offset;    /* and at what offset from that alignment? */
  int	no_delay;       /* do we disable the nagle algorithm for send */
			/* coalescing? */
  int	measure_cpu;	/* does the client want server cpu utilization */
			/* measured? */
  float	cpu_rate;	/* do we know how fast the cpu is already? */
  int	test_length;	/* how long is the test?		*/
  int	so_rcvavoid;    /* do we want the remote to avoid copies on */
			/* receives? */
  int	so_sndavoid;    /* do we want the remote to avoid send copies? */
  int   dirty_count;    /* how many integers in the send buffer */
			/* should be made dirty before calling recv? */
  int   clean_count;    /* how many integers should be read from the */
			/* recv buffer before calling recv? */
  int   port;           /* the port to which the recv side should bind
			   to allow netperf to run through those evil
			   firewall things */
  int   ipfamily;
};

struct	tcp_maerts_response_struct {
  int	recv_buf_size;	/* how big does the client want it	*/
  int	send_size;
  int	no_delay;
  int	measure_cpu;	/* does the client want server cpu	*/
  int	test_length;	/* how long is the test?		*/
  int	send_buf_size;
  int	data_port_number;	/* connect to me here	*/
  float	cpu_rate;		/* could we measure	*/
  int	so_rcvavoid;	/* could the remote avoid receive copies? */
  int	so_sndavoid;	/* could the remote avoid send copies? */
};

struct tcp_maerts_results_struct {
  double         bytes_sent;
  unsigned int	 send_calls;
  float	         elapsed_time;	/* how long the test ran */
  float	         cpu_util;	/* -1 if not measured */
  float	         serv_dem;	/* -1 if not measured */
  int            cpu_method;    /* how was cpu util measured? */
  int            num_cpus;      /* how many CPUs had the remote? */
};

struct	tcp_rr_request_struct {
  int	recv_buf_size;	/* how big does the client want it	*/
  int	send_buf_size;
  int	recv_alignment;
  int	recv_offset;
  int	send_alignment;
  int	send_offset;
  int	request_size;
  int	response_size;
  int	no_delay;
  int	measure_cpu;	/* does the client want server cpu	*/
  float	cpu_rate;	/* do we know how fast the cpu is?	*/
  int	test_length;	/* how long is the test?		*/
  int	so_rcvavoid;    /* do we want the remote to avoid receive */
			/* copies? */
  int	so_sndavoid;    /* do we want the remote to avoid send copies? */
  int   port;           /* the port to which the recv side should bind
			   to allow netperf to run through those evil
			   firewall things */
  int   ipfamily;
};

struct	tcp_rr_response_struct {
  int	recv_buf_size;	/* how big does the client want it	*/
  int	no_delay;
  int	measure_cpu;	/* does the client want server cpu	*/
  int	test_length;	/* how long is the test?		*/
  int	send_buf_size;
  int	data_port_number;	/* connect to me here	*/
  float	cpu_rate;		/* could we measure	*/
  int	so_rcvavoid;	/* could the remote avoid receive copies? */
  int	so_sndavoid;	/* could the remote avoid send copies? */
};

struct tcp_rr_results_struct {
  unsigned int  bytes_received;	/* ignored initially */
  unsigned int	recv_calls;	/* ignored initially */
  unsigned int	trans_received;	/* not ignored  */
  float	        elapsed_time;	/* how long the test ran */
  float	        cpu_util;	/* -1 if not measured */
  float	        serv_dem;	/* -1 if not measured */
  int           cpu_method;    /* how was cpu util measured? */
  int           num_cpus;      /* how many CPUs had the remote? */
};

struct	tcp_conn_rr_request_struct {
  int	recv_buf_size;	/* how big does the client want it	*/
  int	send_buf_size;
  int	recv_alignment;
  int	recv_offset;
  int	send_alignment;
  int	send_offset;
  int	request_size;
  int	response_size;
  int	no_delay;
  int	measure_cpu;	/* does the client want server cpu	*/
  float	cpu_rate;	/* do we know how fast the cpu is?	*/
  int	test_length;	/* how long is the test?		*/
  int	so_rcvavoid;    /* do we want the remote to avoid receive */
			/* copies? */
  int	so_sndavoid;    /* do we want the remote to avoid send copies? */
  int   port;           /* the port to which the recv side should bind
			   to allow netperf to run through those evil
			   firewall things */
  int   ipfamily;
};


struct	tcp_conn_rr_response_struct {
  int	recv_buf_size;	/* how big does the client want it	*/
  int	no_delay;
  int	measure_cpu;	/* does the client want server cpu	*/
  int	test_length;	/* how long is the test?		*/
  int	send_buf_size;
  int	data_port_number;	/* connect to me here	*/
  float	cpu_rate;		/* could we measure	*/
  int	so_rcvavoid;	/* could the remote avoid receive copies? */
  int	so_sndavoid;	/* could the remote avoid send copies? */
};

struct tcp_conn_rr_results_struct {
  unsigned int	bytes_received;	/* ignored initially */
  unsigned int	recv_calls;	/* ignored initially */
  unsigned int	trans_received;	/* not ignored  */
  float	        elapsed_time;	/* how long the test ran */
  float	        cpu_util;	/* -1 if not measured */
  float	        serv_dem;	/* -1 if not measured */
  int           cpu_method;    /* how was cpu util measured? */
  int           num_cpus;      /* how many CPUs had the remote? */
};

struct	tcp_tran_rr_request_struct {
  int	recv_buf_size;	/* how big does the client want it	*/
  int	send_buf_size;
  int	recv_alignment;
  int	recv_offset;
  int	send_alignment;
  int	send_offset;
  int	request_size;
  int	response_size;
  int	no_delay;
  int	measure_cpu;	/* does the client want server cpu	*/
  float	cpu_rate;	/* do we know how fast the cpu is?	*/
  int	test_length;	/* how long is the test?		*/
  int	so_rcvavoid;    /* do we want the remote to avoid receive */
			/* copies? */
  int	so_sndavoid;    /* do we want the remote to avoid send copies? */
  int   port;           /* the port to which the recv side should bind
			   to allow netperf to run through those evil
			   firewall things */
  int   ipfamily;
};


struct	tcp_tran_rr_response_struct {
  int	recv_buf_size;	/* how big does the client want it	*/
  int	no_delay;
  int	measure_cpu;	/* does the client want server cpu	*/
  int	test_length;	/* how long is the test?		*/
  int	send_buf_size;
  int	data_port_number;	/* connect to me here	*/
  float	cpu_rate;		/* could we measure	*/
  int	so_rcvavoid;	/* could the remote avoid receive copies? */
  int	so_sndavoid;	/* could the remote avoid send copies? */
};

struct tcp_tran_rr_results_struct {
  unsigned int	bytes_received;	/* ignored initially */
  unsigned int	recv_calls;	/* ignored initially */
  unsigned int	trans_received;	/* not ignored  */
  float	        elapsed_time;	/* how long the test ran */
  float	        cpu_util;	/* -1 if not measured */
  float	        serv_dem;	/* -1 if not measured */
  int           cpu_method;    /* how was cpu util measured? */
  int           num_cpus;      /* how many CPUs had the remote? */

};

struct	udp_stream_request_struct {
  int	recv_buf_size;
  int	message_size;
  int   recv_connected;
  int	recv_alignment;
  int	recv_offset;
  int	checksum_off;
  int	measure_cpu;
  float	cpu_rate;
  int	test_length;
  int	so_rcvavoid;    /* do we want the remote to avoid receive */
			/* copies? */
  int	so_sndavoid;    /* do we want the remote to avoid send copies? */
  int   port;           /* the port to which the recv side should bind
			   to allow netperf to run through those evil
			   firewall things */
  int   ipfamily;

};

struct	udp_stream_response_struct {
  int	recv_buf_size;
  int	send_buf_size;
  int	measure_cpu;
  int	test_length;
  int	data_port_number;
  float	cpu_rate;
  int	so_rcvavoid;	/* could the remote avoid receive copies? */
  int	so_sndavoid;	/* could the remote avoid send copies? */
};

struct	udp_stream_results_struct {
  unsigned int	messages_recvd;
  unsigned int	bytes_received;
  float	        elapsed_time;
  float	        cpu_util;
  int           cpu_method;    /* how was cpu util measured? */
  int           num_cpus;      /* how many CPUs had the remote? */
};


struct	udp_rr_request_struct {
  int	recv_buf_size;	/* how big does the client want it	*/
  int	send_buf_size;
  int	recv_alignment;
  int	recv_offset;
  int	send_alignment;
  int	send_offset;
  int	request_size;
  int	response_size;
  int	no_delay;
  int	measure_cpu;	/* does the client want server cpu	*/
  float	cpu_rate;	/* do we know how fast the cpu is?	*/
  int	test_length;	/* how long is the test?		*/
  int	so_rcvavoid;    /* do we want the remote to avoid receive */
			/* copies? */
  int	so_sndavoid;    /* do we want the remote to avoid send copies? */
  int   port;           /* the port to which the recv side should bind
			   to allow netperf to run through those evil
			   firewall things */
  int   ipfamily;
};

struct	udp_rr_response_struct {
  int	recv_buf_size;	/* how big does the client want it	*/
  int	no_delay;
  int	measure_cpu;	/* does the client want server cpu	*/
  int	test_length;	/* how long is the test?		*/
  int	send_buf_size;
  int	data_port_number;	/* connect to me here	*/
  float	cpu_rate;		/* could we measure	*/
  int	so_rcvavoid;	/* could the remote avoid receive copies? */
  int	so_sndavoid;	/* could the remote avoid send copies? */
};

struct udp_rr_results_struct {
  unsigned int	bytes_received;	/* ignored initially */
  unsigned int	recv_calls;	/* ignored initially */
  unsigned int	trans_received;	/* not ignored  */
  float	        elapsed_time;	/* how long the test ran */
  float	        cpu_util;	/* -1 if not measured */
  float	        serv_dem;	/* -1 if not measured */
  int           cpu_method;    /* how was cpu util measured? */
  int           num_cpus;      /* how many CPUs had the remote? */
};

struct	tcp_cc_request_struct {
  int	recv_buf_size;	/* how big does the client want it	*/
  int	send_buf_size;
  int	recv_alignment;
  int	recv_offset;
  int	send_alignment;
  int	send_offset;
  int	request_size;
  int	response_size;
  int	no_delay;
  int	measure_cpu;	/* does the client want server cpu	*/
  float	cpu_rate;	/* do we know how fast the cpu is?	*/
  int	test_length;	/* how long is the test?		*/
  int	so_rcvavoid;    /* do we want the remote to avoid receive */
			/* copies? */
  int	so_sndavoid;    /* do we want the remote to avoid send copies? */
  int   port;           /* the port to which the recv side should bind
			   to allow netperf to run through those evil
			   firewall things */
  int   ipfamily;
};


struct	tcp_cc_response_struct {
  int	recv_buf_size;	/* how big does the client want it	*/
  int	no_delay;
  int	measure_cpu;	/* does the client want server cpu	*/
  int	test_length;	/* how long is the test?		*/
  int	send_buf_size;
  int	data_port_number;	/* connect to me here	*/
  float	cpu_rate;		/* could we measure	*/
  int	so_rcvavoid;	/* could the remote avoid receive copies? */
  int	so_sndavoid;	/* could the remote avoid send copies? */
};

struct tcp_cc_results_struct {
  unsigned int	bytes_received;	/* ignored initially */
  unsigned int	recv_calls;	/* ignored initially */
  unsigned int	trans_received;	/* not ignored  */
  float	        elapsed_time;	/* how long the test ran */
  float	        cpu_util;	/* -1 if not measured */
  float	        serv_dem;	/* -1 if not measured */
  int           cpu_method;     /* how was cpu util measured? */
  int           num_cpus;       /* how many CPUs had the remote? */
};

extern int
  socket_type,      /* initially used by the "omni" tests */
  rss_size_req,     /* requested remote socket send buffer size */
  rsr_size_req,     /* requested remote socket recv buffer size */
  rss_size,         /* remote socket send buffer size */
  rsr_size,         /* remote socket recv buffer size */
  rsr_size_end,
  rss_size_end,
  lss_size_req,     /* requested local socket send buffer size */
  lsr_size_req,     /* requested local socket recv buffer size */
  lss_size,         /* local  socket send buffer size */
  lsr_size,         /* local  socket recv buffer size */
  lss_size_end,
  lsr_size_end,
  req_size,         /* request size */
  rsp_size,         /* response size */
  send_size,        /* how big are individual sends */
  recv_size,        /* how big are individual receives */
  loc_nodelay,      /* don't/do use NODELAY locally */
  rem_nodelay,      /* don't/do use NODELAY remotely */
  loc_sndavoid,     /* avoid send copies locally */
  loc_rcvavoid,     /* avoid recv copies locally */
  rem_sndavoid,     /* avoid send copies remotely */
  rem_rcvavoid,     /* avoid recv_copies remotely */
  routing_allowed,  /* do we set/clear SO_DONTROUTE on data sock */
  multicast_ttl,    /* what should the TTL be on mcast dgrams */
  want_keepalive,   /* do we bother setting SO_KEEPALIVE? */
  transport_mss_req;

#ifdef WANT_OMNI
extern void scan_omni_args(int argc, char *argv[]);
#endif
extern void scan_sockets_args(int argc, char *argv[]);
extern struct addrinfo *complete_addrinfo(char *controlhost,
				   char *data_address,
				   char *port,
				   int family,
				   int type,
				   int protocol,
				   int flags);
extern void complete_addrinfos(struct addrinfo **remote,
			       struct addrinfo **local,
			       char remote_host[],
			       int type,
			       int protocol,
			       int flags);
extern int af_to_nf(int af);
extern int nf_to_af(int nf);
extern int nst_to_hst(int nst);
extern int hst_to_nst(int hst);
extern char *hst_to_str(int hst);
extern char *protocol_to_str(int protocol);
extern void print_top_test_header(char test_name[],
				  struct addrinfo *source,
				  struct addrinfo *destination);
extern void set_port_number(struct addrinfo *res,
			    unsigned short port);
extern void set_hostname_and_port(char *hostname,
				  char *portstr,
				  int family,
				  int port);
extern void set_sockaddr_family_addr_port(struct sockaddr_storage *sockaddr,
					  int family,
					  void *addr,
					  int port);
extern int  get_sockaddr_family_addr_port(struct sockaddr_storage *sockaddr,
					  int family,
					  void *addr,
					  int *port);
extern void send_tcp_mss(char remote_host[]);
extern void send_tcp_stream(char remote_host[]);
extern void send_tcp_maerts(char remote_host[]);
extern void send_tcp_rr(char remote_host[]);
extern void send_tcp_conn_rr(char remote_host[]);
extern void send_tcp_cc(char remote_host[]);
extern void send_udp_stream(char remote_host[]);
extern void send_udp_rr(char remote_host[]);

extern void send_omni(char remote_host[]);
extern void print_uuid(char remote_host[]);
extern void recv_omni();

extern void recv_tcp_stream();
extern void recv_tcp_maerts();
extern void recv_tcp_rr();
extern void recv_tcp_conn_rr();
extern void recv_tcp_cc();
extern void recv_udp_stream();
extern void recv_udp_rr();

extern void loc_cpu_rate();
extern void rem_cpu_rate();

#ifdef HAVE_ICSC_EXS
extern void send_exs_tcp_stream(char remotehost[]);
#endif /* HAVE_ICSC_EXS */

#ifdef HAVE_SENDFILE
extern void sendfile_tcp_stream(char remotehost[]);
#endif /* HAVE_SENDFILE */

#if !defined(HAVE_STRUCT_SOCKADDR_STORAGE) && !defined(sockaddr_storage)
#define sockaddr_storage sockaddr_in
#endif

#ifdef DO_NBRR
extern void send_tcp_nbrr(char remote_host[]);

extern void recv_tcp_nbrr();
#endif

extern SOCKET create_data_socket(struct addrinfo *res);
