blob: 58b2560298a4b1b42a1e0ae00450805e9c71cebf [file] [log] [blame]
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#ifdef WANT_OMNI
char nettest_omni_id[]="\
@(#)nettest_omni.c (c) Copyright 2008 Hewlett-Packard Co. Version 2.5.0pre";
#include <stdio.h>
#if HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
#if HAVE_SYS_STAT_H
# include <sys/stat.h>
#endif
#if STDC_HEADERS
# include <stdlib.h>
# include <stddef.h>
#else
# if HAVE_STDLIB_H
# include <stdlib.h>
# endif
#endif
#if HAVE_STRING_H
# if !STDC_HEADERS && HAVE_MEMORY_H
# include <memory.h>
# endif
# include <string.h>
#endif
#if HAVE_STRINGS_H
# include <strings.h>
#endif
#if HAVE_INTTYPES_H
# include <inttypes.h>
#else
# if HAVE_STDINT_H
# include <stdint.h>
# endif
#endif
#if HAVE_UNISTD_H
# include <unistd.h>
#endif
#include <fcntl.h>
#ifndef WIN32
#include <errno.h>
#include <signal.h>
#endif
#if TIME_WITH_SYS_TIME
# include <sys/time.h>
# include <time.h>
#else
# if HAVE_SYS_TIME_H
# include <sys/time.h>
# else
# include <time.h>
# endif
#endif
#include <ctype.h>
#ifdef NOSTDLIBH
#include <malloc.h>
#endif /* NOSTDLIBH */
#ifdef WANT_SCTP
#include <netinet/sctp.h>
#endif
#ifndef WIN32
#if !defined(__VMS)
#include <sys/ipc.h>
#endif /* !defined(__VMS) */
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <arpa/inet.h>
#include <netdb.h>
#else /* WIN32 */
#include <process.h>
#define netperf_socklen_t socklen_t
#include <winsock2.h>
/* while it is unlikely that anyone running Windows 2000 or NT 4 is
going to be trying to compile this, if they are they will want to
define DONT_IPV6 in the sources file */
#ifndef DONT_IPV6
#include <ws2tcpip.h>
#endif
#include <windows.h>
#define sleep(x) Sleep((x)*1000)
#define __func__ __FUNCTION__
#endif /* WIN32 */
/* We don't want to use bare constants in the shutdown() call. In the
extremely unlikely event that SHUT_WR isn't defined, we will define
it to the value we used to be passing to shutdown() anyway. raj
2007-02-08 */
#if !defined(SHUT_WR)
#define SHUT_WR 1
#endif
#if !defined(HAVE_GETADDRINFO) || !defined(HAVE_GETNAMEINFO)
# include "missing/getaddrinfo.h"
#endif
#include "netlib.h"
#include "netsh.h"
#include "nettest_bsd.h"
#if defined(WANT_HISTOGRAM) || defined(WANT_DEMO)
#include "hist.h"
#endif /* WANT_HISTOGRAM */
#ifdef WANT_HISTOGRAM
#ifdef HAVE_GETHRTIME
static hrtime_t time_one;
static hrtime_t time_two;
#elif HAVE_GET_HRT
#include "hrt.h"
static hrt_t time_one;
static hrt_t time_two;
#elif defined(WIN32)
static LARGE_INTEGER time_one;
static LARGE_INTEGER time_two;
#else
static struct timeval time_one;
static struct timeval time_two;
#endif /* HAVE_GETHRTIME */
static HIST time_hist;
#endif /* WANT_HISTOGRAM */
#ifdef WANT_DEMO
#ifdef HAVE_GETHRTIME
static hrtime_t demo_one;
static hrtime_t demo_two;
static hrtime_t *demo_one_ptr = &demo_one;
static hrtime_t *demo_two_ptr = &demo_two;
static hrtime_t *temp_demo_ptr = &demo_one;
#elif defined(WIN32)
static LARGE_INTEGER demo_one;
static LARGE_INTEGER demo_two;
static LARGE_INTEGER *demo_one_ptr = &demo_one;
static LARGE_INTEGER *demo_two_ptr = &demo_two;
static LARGE_INTEGER *temp_demo_ptr = &demo_one;
#else
static struct timeval demo_one;
static struct timeval demo_two;
static struct timeval *demo_one_ptr = &demo_one;
static struct timeval *demo_two_ptr = &demo_two;
static struct timeval *temp_demo_ptr = &demo_one;
#endif
/* for a _STREAM test, "a" should be lss_size and "b" should be
rsr_size. for a _MAERTS test, "a" should be lsr_size and "b" should
be rss_size. raj 2005-04-06 */
#define DEMO_STREAM_SETUP(a,b) \
if ((demo_mode) && (demo_units == 0)) { \
/* take our default value of demo_units to be the larger of \
twice the remote's SO_RCVBUF or twice our SO_SNDBUF */ \
if (a > b) { \
demo_units = 2*a; \
} \
else { \
demo_units = 2*b; \
} \
}
#define DEMO_INTERVAL(units) \
if (demo_mode) { \
double actual_interval; \
units_this_tick += units; \
if (units_this_tick >= demo_units) { \
/* time to possibly update demo_units and maybe output an \
interim result */ \
HIST_timestamp(demo_two_ptr); \
actual_interval = delta_micro(demo_one_ptr,demo_two_ptr); \
/* we always want to fine-tune demo_units here whether we \
emit an interim result or not. if we are short, this \
will lengthen demo_units. if we are long, this will \
shorten it */ \
demo_units = demo_units * (demo_interval / actual_interval); \
if (actual_interval >= demo_interval) { \
/* time to emit an interim result */ \
fprintf(where, \
"Interim result: %7.2f %s/s over %.2f seconds\n", \
calc_thruput_interval(units_this_tick, \
actual_interval/1000000.0), \
format_units(), \
actual_interval/1000000.0); \
units_this_tick = 0.0; \
/* now get a new starting timestamp. we could be clever \
and swap pointers - the math we do probably does not \
take all that long, but for now this will suffice */ \
temp_demo_ptr = demo_one_ptr; \
demo_one_ptr = demo_two_ptr; \
demo_two_ptr = temp_demo_ptr; \
} \
} \
}
#define DEMO_STREAM_INTERVAL(units) DEMO_INTERVAL(units)
#define DEMO_RR_SETUP(a) \
if ((demo_mode) && (demo_units == 0)) { \
/* take whatever we are given */ \
demo_units = a; \
}
#define DEMO_RR_INTERVAL(units) DEMO_INTERVAL(units)
#endif
#ifdef WANT_INTERVALS
int interval_count;
#ifndef WANT_SPIN
sigset_t signal_set;
#define INTERVALS_INIT() \
if (interval_burst) { \
/* zero means that we never pause, so we never should need the \
interval timer. we used to use it for demo mode, but we deal \
with that with a variant on watching the clock rather than \
waiting for a timer. raj 2006-02-06 */ \
start_itimer(interval_wate); \
} \
interval_count = interval_burst; \
/* get the signal set for the call to sigsuspend */ \
if (sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &signal_set) != 0) { \
fprintf(where, \
"%s: unable to get sigmask errno %d\n", \
__func__, \
errno); \
fflush(where); \
exit(1); \
}
#define INTERVALS_WAIT() \
/* in this case, the interval count is the count-down couter \
to decide to sleep for a little bit */ \
if ((interval_burst) && (--interval_count == 0)) { \
/* call sigsuspend and wait for the interval timer to get us \
out */ \
if (debug > 1) { \
fprintf(where,"about to suspend\n"); \
fflush(where); \
} \
if (sigsuspend(&signal_set) == EFAULT) { \
fprintf(where, \
"%s: fault with sigsuspend.\n", \
__func__); \
fflush(where); \
exit(1); \
} \
interval_count = interval_burst; \
}
#else
/* first out timestamp */
#ifdef HAVE_GETHRTIME
static hrtime_t intvl_one;
static hrtime_t intvl_two;
static hrtime_t *intvl_one_ptr = &intvl_one;
static hrtime_t *intvl_two_ptr = &intvl_two;
static hrtime_t *temp_intvl_ptr = &intvl_one;
#elif defined(WIN32)
static LARGE_INTEGER intvl_one;
static LARGE_INTEGER intvl_two;
static LARGE_INTEGER *intvl_one_ptr = &intvl_one;
static LARGE_INTEGER *intvl_two_ptr = &intvl_two;
static LARGE_INTEGER *temp_intvl_ptr = &intvl_one;
#else
static struct timeval intvl_one;
static struct timeval intvl_two;
static struct timeval *intvl_one_ptr = &intvl_one;
static struct timeval *intvl_two_ptr = &intvl_two;
static struct timeval *temp_intvl_ptr = &intvl_one;
#endif
#define INTERVALS_INIT() \
if (interval_burst) { \
HIST_timestamp(intvl_one_ptr); \
} \
interval_count = interval_burst; \
#define INTERVALS_WAIT() \
/* in this case, the interval count is the count-down couter \
to decide to sleep for a little bit */ \
if ((interval_burst) && (--interval_count == 0)) { \
/* call sigsuspend and wait for the interval timer to get us \
out */ \
if (debug > 1) { \
fprintf(where,"about to spin suspend\n"); \
fflush(where); \
} \
HIST_timestamp(intvl_two_ptr); \
while(delta_micro(intvl_one_ptr,intvl_two_ptr) < interval_usecs) { \
HIST_timestamp(intvl_two_ptr); \
} \
temp_intvl_ptr = intvl_one_ptr; \
intvl_one_ptr = intvl_two_ptr; \
intvl_two_ptr = temp_intvl_ptr; \
interval_count = interval_burst; \
}
#endif
#endif
#define NETPERF_WAITALL 0x1
#define NETPERF_XMIT 0x2
#define NETPERF_RECV 0x4
#define NETPERF_IS_RR(x) (((x & NETPERF_XMIT) && (x & NETPERF_RECV)) || \
(!((x & NETPERF_XMIT) || (x & NETPERF_RECV))))
#define NETPERF_RECV_ONLY(x) ((x & NETPERF_RECV) && !(x & NETPERF_XMIT))
#define NETPERF_XMIT_ONLY(x) ((x & NETPERF_XMIT) && !(x & NETPERF_RECV))
#define NETPERF_CC(x) (!(x & NETPERF_XMIT) && !(x & NETPERF_RECV))
extern void get_uuid_string(char *string, size_t size);
/* a boatload of globals while I settle things out */
char *csv_selection_file = NULL;
char *human_selection_file = NULL;
char *keyword_selection_file = NULL;
char test_uuid[38];
double result_confid_pct = -1.0;
double loc_cpu_confid_pct = -1.0;
double rem_cpu_confid_pct = -1.0;
double interval_pct = -1.0;
int protocol;
int direction;
int remote_send_size = -1;
int remote_recv_size = -1;
int remote_send_size_req = -1;
int remote_recv_size_req = -1;
int remote_use_sendfile;
#if 0
int remote_send_dirty_count;
int remote_recv_dirty_count;
int remote_recv_clean_count;
#endif
extern int loc_dirty_count;
extern int loc_clean_count;
extern int rem_dirty_count;
extern int rem_clean_count;
int remote_checksum_off;
int connection_test;
int need_to_connect;
int need_connection;
int bytes_to_send;
double bytes_per_send;
int failed_sends;
int bytes_to_recv;
double bytes_per_recv;
int null_message_ok = 0;
int csv = 0;
int keyword = 0;
uint64_t trans_completed = 0;
uint64_t units_remaining;
uint64_t bytes_sent = 0;
uint64_t bytes_received = 0;
uint64_t local_send_calls = 0;
uint64_t local_receive_calls = 0;
uint64_t remote_bytes_sent;
uint64_t remote_bytes_received;
uint64_t remote_send_calls;
uint64_t remote_receive_calls;
double bytes_xferd;
double remote_bytes_xferd;
double remote_bytes_per_recv;
double remote_bytes_per_send;
float elapsed_time;
float local_cpu_utilization;
float local_service_demand;
float remote_cpu_utilization;
float remote_service_demand;
double thruput;
double local_send_thruput;
double local_recv_thruput;
double remote_send_thruput;
double remote_recv_thruput;
/* kludges for omni output */
double elapsed_time_double;
double local_cpu_utilization_double;
double local_service_demand_double;
double remote_cpu_utilization_double;
double remote_service_demand_double;
double transaction_rate = 1.0;
double rtt_latency = -1.0;
int32_t transport_mss = -2;
char *local_interface_name=NULL;
char *remote_interface_name=NULL;
char local_driver_name[32]="";
char local_driver_version[32]="";
char local_driver_firmware[32]="";
char local_driver_bus[32]="";
char remote_driver_name[32]="";
char remote_driver_version[32]="";
char remote_driver_firmware[32]="";
char remote_driver_bus[32]="";
char *local_interface_slot=NULL;
char *remote_interface_slot=NULL;
int remote_interface_vendor;
int remote_interface_device;
int remote_interface_subvendor;
int remote_interface_subdevice;
int local_interface_vendor;
int local_interface_device;
int local_interface_subvendor;
int local_interface_subdevice;
char *local_system_model;
char *local_cpu_model;
int local_cpu_frequency;
char *remote_system_model;
char *remote_cpu_model;
int remote_cpu_frequency;
int local_security_type_id;
int local_security_enabled_num;
char *local_security_type;
char *local_security_enabled;
char *local_security_specific;
int remote_security_type_id;
int remote_security_enabled_num;
char *remote_security_enabled;
char *remote_security_type;
char *remote_security_specific;
int printing_initialized = 0;
char *sd_str;
char *thruput_format_str;
char *socket_type_str;
char *protocol_str;
char *direction_str;
extern int first_burst_size;
#if defined(HAVE_SENDFILE) && (defined(__linux) || defined(__sun))
#include <sys/sendfile.h>
#endif /* HAVE_SENDFILE && (__linux || __sun) */
static int confidence_iteration;
static int local_cpu_method;
static int remote_cpu_method;
/* these will control the width of port numbers we try to use in the */
/* TCP_CRR and/or TCP_TRR tests. raj 3/95 */
static int client_port_min = 5000;
static int client_port_max = 65535;
/* different options for the sockets */
int
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 */
extern int
loc_tcpcork,
rem_tcpcork,
local_connected,
remote_connected;
/* you should add to this in the order in which they should appear in
the default csv (everything) output */
enum netperf_output_name {
OUTPUT_NONE,
SOCKET_TYPE,
PROTOCOL,
DIRECTION,
ELAPSED_TIME,
THROUGHPUT,
THROUGHPUT_UNITS,
LSS_SIZE_REQ,
LSS_SIZE,
LSS_SIZE_END,
LSR_SIZE_REQ,
LSR_SIZE,
LSR_SIZE_END,
RSS_SIZE_REQ,
RSS_SIZE,
RSS_SIZE_END,
RSR_SIZE_REQ,
RSR_SIZE,
RSR_SIZE_END,
LOCAL_SEND_SIZE,
LOCAL_RECV_SIZE,
REMOTE_SEND_SIZE,
REMOTE_RECV_SIZE,
REQUEST_SIZE,
RESPONSE_SIZE,
LOCAL_CPU_UTIL,
LOCAL_CPU_METHOD,
LOCAL_SD,
REMOTE_CPU_UTIL,
REMOTE_CPU_METHOD,
REMOTE_SD,
SD_UNITS,
CONFIDENCE_LEVEL,
CONFIDENCE_INTERVAL,
CONFIDENCE_ITERATION,
THROUGHPUT_CONFID,
LOCAL_CPU_CONFID,
REMOTE_CPU_CONFID,
TRANSACTION_RATE,
RT_LATENCY,
BURST_SIZE,
TRANSPORT_MSS,
LOCAL_SEND_THROUGHPUT,
LOCAL_RECV_THROUGHPUT,
REMOTE_SEND_THROUGHPUT,
REMOTE_RECV_THROUGHPUT,
LOCAL_CPU_BIND,
LOCAL_CPU_COUNT,
LOCAL_CPU_PEAK_UTIL,
LOCAL_CPU_PEAK_ID,
LOCAL_CPU_MODEL,
LOCAL_CPU_FREQUENCY,
REMOTE_CPU_BIND,
REMOTE_CPU_COUNT,
REMOTE_CPU_PEAK_UTIL,
REMOTE_CPU_PEAK_ID,
REMOTE_CPU_MODEL,
REMOTE_CPU_FREQUENCY,
SOURCE_PORT,
SOURCE_ADDR,
SOURCE_FAMILY,
DEST_PORT,
DEST_ADDR,
DEST_FAMILY,
LOCAL_SEND_CALLS,
LOCAL_RECV_CALLS,
LOCAL_BYTES_PER_RECV,
LOCAL_BYTES_PER_SEND,
LOCAL_BYTES_SENT,
LOCAL_BYTES_RECVD,
LOCAL_BYTES_XFERD,
LOCAL_SEND_OFFSET,
LOCAL_RECV_OFFSET,
LOCAL_SEND_ALIGN,
LOCAL_RECV_ALIGN,
LOCAL_SEND_WIDTH,
LOCAL_RECV_WIDTH,
LOCAL_SEND_DIRTY_COUNT,
LOCAL_RECV_DIRTY_COUNT,
LOCAL_RECV_CLEAN_COUNT,
LOCAL_NODELAY,
LOCAL_CORK,
REMOTE_SEND_CALLS,
REMOTE_RECV_CALLS,
REMOTE_BYTES_PER_RECV,
REMOTE_BYTES_PER_SEND,
REMOTE_BYTES_SENT,
REMOTE_BYTES_RECVD,
REMOTE_BYTES_XFERD,
REMOTE_SEND_OFFSET,
REMOTE_RECV_OFFSET,
REMOTE_SEND_ALIGN,
REMOTE_RECV_ALIGN,
REMOTE_SEND_WIDTH,
REMOTE_RECV_WIDTH,
REMOTE_SEND_DIRTY_COUNT,
REMOTE_RECV_DIRTY_COUNT,
REMOTE_RECV_CLEAN_COUNT,
REMOTE_NODELAY,
REMOTE_CORK,
LOCAL_SYSNAME,
LOCAL_SYSTEM_MODEL,
LOCAL_RELEASE,
LOCAL_VERSION,
LOCAL_MACHINE,
REMOTE_SYSNAME,
REMOTE_SYSTEM_MODEL,
REMOTE_RELEASE,
REMOTE_VERSION,
REMOTE_MACHINE,
LOCAL_INTERFACE_NAME,
LOCAL_INTERFACE_VENDOR,
LOCAL_INTERFACE_DEVICE,
LOCAL_INTERFACE_SUBVENDOR,
LOCAL_INTERFACE_SUBDEVICE,
LOCAL_DRIVER_NAME,
LOCAL_DRIVER_VERSION,
LOCAL_DRIVER_FIRMWARE,
LOCAL_DRIVER_BUS,
LOCAL_INTERFACE_SLOT,
REMOTE_INTERFACE_NAME,
REMOTE_INTERFACE_VENDOR,
REMOTE_INTERFACE_DEVICE,
REMOTE_INTERFACE_SUBVENDOR,
REMOTE_INTERFACE_SUBDEVICE,
REMOTE_DRIVER_NAME,
REMOTE_DRIVER_VERSION,
REMOTE_DRIVER_FIRMWARE,
REMOTE_DRIVER_BUS,
REMOTE_INTERFACE_SLOT,
LOCAL_INTERVAL_USECS,
LOCAL_INTERVAL_BURST,
REMOTE_INTERVAL_USECS,
REMOTE_INTERVAL_BURST,
LOCAL_SECURITY_TYPE_ID,
LOCAL_SECURITY_TYPE,
LOCAL_SECURITY_ENABLED_NUM,
LOCAL_SECURITY_ENABLED,
LOCAL_SECURITY_SPECIFIC,
REMOTE_SECURITY_TYPE_ID,
REMOTE_SECURITY_TYPE,
REMOTE_SECURITY_ENABLED_NUM,
REMOTE_SECURITY_ENABLED,
REMOTE_SECURITY_SPECIFIC,
RESULT_BRAND,
UUID,
COMMAND_LINE,
OUTPUT_END,
NETPERF_OUTPUT_MAX
};
typedef struct netperf_output_elt {
enum netperf_output_name output_name; /* belt and suspenders */
int max_line_len; /* length of the longest of the "lines" */
int tot_line_len; /* total length of all lines, including spaces */
char *line[4];
char *brief; /* the brief name of the value */
char *format; /* format to apply to value */
void *display_value; /* where to find the value */
} netperf_output_elt_t;
netperf_output_elt_t netperf_output_source[NETPERF_OUTPUT_MAX];
/* the list of things we will emit for CSV output. I suppose we could
at some point try to make this a special case of output_human_list,
or at least use some of that space... but for now we won't worry
about it. that can come after things are actually working :) raj
2008-01-23 */
enum netperf_output_name output_csv_list[NETPERF_OUTPUT_MAX];
/* the list of things we will emit for "human" output. up to
NETPERF_MAX_BLOCKS of output (groups of lines) each out to
NETPERF_OUTPUT_MAX entries. that should more than cover it */
#define NETPERF_MAX_BLOCKS 4
enum netperf_output_name output_human_list[NETPERF_MAX_BLOCKS][NETPERF_OUTPUT_MAX];
char *direction_to_str(int direction) {
if (NETPERF_RECV_ONLY(direction)) return "Receive";
if (NETPERF_XMIT_ONLY(direction)) return "Send";
if (NETPERF_CC(direction)) return "Connection";
else return "Send|Recv";
}
static unsigned short
get_port_number(struct addrinfo *res)
{
switch(res->ai_family) {
case AF_INET: {
struct sockaddr_in *foo = (struct sockaddr_in *)res->ai_addr;
return(ntohs(foo->sin_port));
break;
}
#if defined(AF_INET6)
case AF_INET6: {
struct sockaddr_in6 *foo = (struct sockaddr_in6 *)res->ai_addr;
return(ntohs(foo->sin6_port));
break;
}
#endif
default:
fprintf(where,
"Unexpected Address Family %u\n",res->ai_family);
fflush(where);
exit(-1);
}
}
static void
extract_inet_address_and_port(struct addrinfo *res, void *addr, int len, int *port)
{
switch(res->ai_family) {
case AF_INET: {
struct sockaddr_in *foo = (struct sockaddr_in *)res->ai_addr;
*port = foo->sin_port;
memcpy(addr,&(foo->sin_addr),min(len,sizeof(foo->sin_addr)));
break;
}
#if defined(AF_INET6)
case AF_INET6: {
struct sockaddr_in6 *foo = (struct sockaddr_in6 *)res->ai_addr;
*port = foo->sin6_port;
memcpy(addr,&(foo->sin6_addr),min(len,sizeof(foo->sin6_addr)));
break;
}
#endif
default:
*port = 0xDEADBEEF;
strncpy(addr,"UNKN FAMILY",len);
}
}
void
pick_next_port_number(struct addrinfo *local_res, struct addrinfo *remote_res) {
static int myport_init = 0;
static unsigned short myport = 0;
if (0 == myport_init) {
/* pick a nice random spot between client_port_min and
client_port_max for our initial port number, but only for a
connection oriented test. otherwise, we will want to set myport
to a specific port provided by the user if they have so provided
a specific port :) raj 2008-01-08 */
srand(getpid());
if (client_port_max - client_port_min) {
myport = client_port_min +
(rand() % (client_port_max - client_port_min));
}
else {
myport = client_port_min;
}
/* there will be a ++ before the first call to bind, so subtract one */
myport--;
myport_init = 1;
}
newport:
/* pick a new port number */
myport++;
/* check to see if we are using the port number on which the
server is sitting _before_ we check against the boundaries lest
the server sits at the upper boundary. if this happens to be a
loopback test, trying to use the same portnumber would lead to
unsatisfying results and should be avoided. if this isn't a
loopback test, avoiding using the same port number doesn't
seriously affect anything anyway */
if (myport == get_port_number(remote_res)) myport++;
/* wrap the port number when we reach the upper bound. for
students of networking history, some ancient stacks (1980's and
early 1990's perhaps) mistakenly treated these port numbers as
signed 16 bit quantities. we make no effort here to support
such stacks. raj 2008-01-08 */
if (myport >= client_port_max) {
myport = client_port_min;
}
/* set up the data socket */
set_port_number(local_res, (unsigned short)myport);
}
char *
netperf_output_enum_to_str(enum netperf_output_name output_name)
{
switch (output_name) {
case OUTPUT_NONE:
return "OUTPUT_NONE";
case COMMAND_LINE:
return "COMMAND_LINE";
case UUID:
return "UUID";
case RESULT_BRAND:
return "RESULT_BRAND";
case SOCKET_TYPE:
return "SOCKET_TYPE";
case DIRECTION:
return "DIRECTION";
case PROTOCOL:
return "PROTOCOL";
case ELAPSED_TIME:
return "ELAPSED_TIME";
case SOURCE_PORT:
return "SOURCE_PORT";
case SOURCE_ADDR:
return "SOURCE_ADDR";
case SOURCE_FAMILY:
return "SOURCE_FAMILY";
case DEST_PORT:
return "DEST_PORT";
case DEST_ADDR:
return "DEST_ADDR";
case DEST_FAMILY:
return "DEST_FAMILY";
case THROUGHPUT:
return "THROUGHPUT";
case LOCAL_SEND_THROUGHPUT:
return "LOCAL_SEND_THROUGHPUT";
case LOCAL_RECV_THROUGHPUT:
return "LOCAL_RECV_THROUGHPUT";
case REMOTE_SEND_THROUGHPUT:
return "REMOTE_SEND_THROUGHPUT";
case REMOTE_RECV_THROUGHPUT:
return "REMOTE_RECV_THROUGHPUT";
case THROUGHPUT_UNITS:
return "THROUGHPUT_UNITS";
case CONFIDENCE_LEVEL:
return "CONFIDENCE_LEVEL";
case CONFIDENCE_INTERVAL:
return "CONFIDENCE_INTERVAL";
case CONFIDENCE_ITERATION:
return "CONFIDENCE_ITERATION";
case THROUGHPUT_CONFID:
return "THROUGHPUT_CONFID";
case LOCAL_CPU_CONFID:
return "LOCAL_CPU_CONFID";
case REMOTE_CPU_CONFID:
return "REMOTE_CPU_CONFID";
case RT_LATENCY:
return "RT_LATENCY";
case TRANSACTION_RATE:
return "TRANSACTION_RATE";
case BURST_SIZE:
return "BURST_SIZE";
case TRANSPORT_MSS:
return "TRANSPORT_MSS";
case REQUEST_SIZE:
return "REQUEST_SIZE";
case RESPONSE_SIZE:
return "RESPONSE_SIZE";
case LSS_SIZE_REQ:
return "LSS_SIZE_REQ";
case LSS_SIZE:
return "LSS_SIZE";
case LSS_SIZE_END:
return "LSS_SIZE_END";
case LSR_SIZE_REQ:
return "LSR_SIZE_REQ";
case LSR_SIZE:
return "LSR_SIZE";
case LSR_SIZE_END:
return "LSR_SIZE_END";
case LOCAL_SEND_SIZE:
return "LOCAL_SEND_SIZE";
case LOCAL_RECV_SIZE:
return "LOCAL_RECV_SIZE";
case LOCAL_SEND_CALLS:
return "LOCAL_SEND_CALLS";
case LOCAL_RECV_CALLS:
return "LOCAL_RECV_CALLS";
case LOCAL_BYTES_PER_RECV:
return "LOCAL_BYTES_PER_RECV";
case LOCAL_BYTES_PER_SEND:
return "LOCAL_BYTES_PER_SEND";
case LOCAL_BYTES_SENT:
return "LOCAL_BYTES_SENT";
case LOCAL_BYTES_RECVD:
return "LOCAL_BYTES_RECVD";
case LOCAL_BYTES_XFERD:
return "LOCAL_BYTES_XFERD";
case LOCAL_SEND_OFFSET:
return "LOCAL_SEND_OFFSET";
case LOCAL_RECV_OFFSET:
return "LOCAL_RECV_OFFSET";
case LOCAL_RECV_ALIGN:
return "LOCAL_RECV_ALIGN";
case LOCAL_SEND_ALIGN:
return "LOCAL_SEND_ALIGN";
case LOCAL_SEND_WIDTH:
return "LOCAL_SEND_WIDTH";
case LOCAL_RECV_WIDTH:
return "LOCAL_RECV_WIDTH";
case LOCAL_SEND_DIRTY_COUNT:
return "LOCAL_SEND_DIRTY_COUNT";
case LOCAL_RECV_DIRTY_COUNT:
return "LOCAL_RECV_DIRTY_COUNT";
case LOCAL_RECV_CLEAN_COUNT:
return "LOCAL_RECV_CLEAN_COUNT";
case LOCAL_CPU_UTIL:
return "LOCAL_CPU_UTIL";
case LOCAL_CPU_BIND:
return "LOCAL_CPU_BIND";
case LOCAL_SD:
return "LOCAL_SD";
case SD_UNITS:
return "SD_UNITS";
case LOCAL_CPU_METHOD:
return "LOCAL_CPU_METHOD";
case LOCAL_CPU_COUNT:
return "LOCAL_CPU_COUNT";
case LOCAL_CPU_PEAK_UTIL:
return "LOCAL_CPU_PEAK_UTIL";
case LOCAL_CPU_PEAK_ID:
return "LOCAL_CPU_PEAK_ID";
case LOCAL_NODELAY:
return "LOCAL_NODELAY";
case LOCAL_CORK:
return "LOCAL_CORK";
case RSS_SIZE_REQ:
return "RSS_SIZE_REQ";
case RSS_SIZE:
return "RSS_SIZE";
case RSS_SIZE_END:
return "RSS_SIZE_END";
case RSR_SIZE_REQ:
return "RSR_SIZE_REQ";
case RSR_SIZE:
return "RSR_SIZE";
case RSR_SIZE_END:
return "RSR_SIZE_END";
case REMOTE_SEND_SIZE:
return "REMOTE_SEND_SIZE";
case REMOTE_RECV_SIZE:
return "REMOTE_RECV_SIZE";
case REMOTE_SEND_CALLS:
return "REMOTE_SEND_CALLS";
case REMOTE_RECV_CALLS:
return "REMOTE_RECV_CALLS";
case REMOTE_BYTES_PER_RECV:
return "REMOTE_BYTES_PER_RECV";
case REMOTE_BYTES_PER_SEND:
return "REMOTE_BYTES_PER_SEND";
case REMOTE_BYTES_SENT:
return "REMOTE_BYTES_SENT";
case REMOTE_BYTES_RECVD:
return "REMOTE_BYTES_RECVD";
case REMOTE_BYTES_XFERD:
return "REMOTE_BYTES_XFERD";
case REMOTE_SEND_OFFSET:
return "REMOTE_SEND_OFFSET";
case REMOTE_RECV_OFFSET:
return "REMOTE_RECV_OFFSET";
case REMOTE_RECV_ALIGN:
return "REMOTE_RECV_ALIGN";
case REMOTE_SEND_ALIGN:
return "REMOTE_SEND_ALIGN";
case REMOTE_SEND_WIDTH:
return "REMOTE_SEND_WIDTH";
case REMOTE_RECV_WIDTH:
return "REMOTE_RECV_WIDTH";
case REMOTE_SEND_DIRTY_COUNT:
return "REMOTE_SEND_DIRTY_COUNT";
case REMOTE_RECV_DIRTY_COUNT:
return "REMOTE_RECV_DIRTY_COUNT";
case REMOTE_RECV_CLEAN_COUNT:
return "REMOTE_RECV_CLEAN_COUNT";
case REMOTE_CPU_UTIL:
return "REMOTE_CPU_UTIL";
case REMOTE_CPU_BIND:
return "REMOTE_CPU_BIND";
case REMOTE_SD:
return "REMOTE_SD";
case REMOTE_CPU_METHOD:
return "REMOTE_CPU_METHOD";
case REMOTE_CPU_COUNT:
return "REMOTE_CPU_COUNT";
case REMOTE_CPU_PEAK_UTIL:
return "REMOTE_CPU_PEAK_UTIL";
case REMOTE_CPU_PEAK_ID:
return "REMOTE_CPU_PEAK_ID";
case REMOTE_NODELAY:
return "REMOTE_NODELAY";
case REMOTE_CORK:
return "REMOTE_CORK";
case LOCAL_INTERFACE_SLOT:
return "LOCAL_INTERFACE_SLOT";
case REMOTE_INTERFACE_SLOT:
return "REMOTE_INTERFACE_SLOT";
case REMOTE_INTERFACE_SUBDEVICE:
return "REMOTE_INTERFACE_SUBDEVICE";
case REMOTE_INTERFACE_SUBVENDOR:
return "REMOTE_INTERFACE_SUBVENDOR";
case REMOTE_INTERFACE_DEVICE:
return "REMOTE_INTERFACE_DEVICE";
case REMOTE_INTERFACE_VENDOR:
return "REMOTE_INTERFACE_VENDOR";
case LOCAL_INTERFACE_SUBDEVICE:
return "LOCAL_INTERFACE_SUBDEVICE";
case LOCAL_INTERFACE_SUBVENDOR:
return "LOCAL_INTERFACE_SUBVENDOR";
case LOCAL_INTERFACE_DEVICE:
return "LOCAL_INTERFACE_DEVICE";
case LOCAL_INTERFACE_VENDOR:
return "LOCAL_INTERFACE_VENDOR";
case LOCAL_INTERFACE_NAME:
return "LOCAL_INTERFACE_NAME";
case REMOTE_INTERFACE_NAME:
return "REMOTE_INTERFACE_NAME";
case REMOTE_DRIVER_NAME:
return "REMOTE_DRIVER_NAME";
case REMOTE_DRIVER_VERSION:
return "REMOTE_DRIVER_VERSION";
case REMOTE_DRIVER_FIRMWARE:
return "REMOTE_DRIVER_FIRMWARE";
case REMOTE_DRIVER_BUS:
return "REMOTE_DRIVER_BUS";
case LOCAL_DRIVER_NAME:
return "LOCAL_DRIVER_NAME";
case LOCAL_DRIVER_VERSION:
return "LOCAL_DRIVER_VERSION";
case LOCAL_DRIVER_FIRMWARE:
return "LOCAL_DRIVER_FIRMWARE";
case LOCAL_INTERVAL_USECS:
return "LOCAL_INTERVAL_USECS";
case LOCAL_INTERVAL_BURST:
return "LOCAL_INTERVAL_BURST";
case REMOTE_INTERVAL_USECS:
return "REMOTE_INTERVAL_USECS";
case REMOTE_INTERVAL_BURST:
return "REMOTE_INTERVAL_BURST";
case LOCAL_SECURITY_TYPE_ID:
return "LOCAL_SECURITY_TYPE_ID";
case LOCAL_SECURITY_ENABLED_NUM:
return "LOCAL_SECURITY_ENABLED_NUM";
case LOCAL_SECURITY_TYPE:
return "LOCAL_SECURITY_TYPE";
case LOCAL_SECURITY_ENABLED:
return "LOCAL_SECURITY_ENABLED";
case LOCAL_SECURITY_SPECIFIC:
return "LOCAL_SECURITY_SPECIFIC";
case REMOTE_SECURITY_TYPE_ID:
return "REMOTE_SECURITY_TYPE_ID";
case REMOTE_SECURITY_ENABLED_NUM:
return "REMOTE_SECURITY_ENABLED_NUM";
case REMOTE_SECURITY_TYPE:
return "REMOTE_SECURITY_TYPE";
case REMOTE_SECURITY_ENABLED:
return "REMOTE_SECURITY_ENABLED";
case REMOTE_SECURITY_SPECIFIC:
return "REMOTE_SECURITY_SPECIFIC";
case LOCAL_DRIVER_BUS:
return "LOCAL_DRIVER_BUS";
case REMOTE_SYSNAME:
return "REMOTE_SYSNAME";
case REMOTE_MACHINE:
return "REMOTE_MACHINE";
case REMOTE_VERSION:
return "REMOTE_VERSION";
case REMOTE_RELEASE:
return "REMOTE_RELEASE";
case LOCAL_SYSNAME:
return "LOCAL_SYSNAME";
case LOCAL_MACHINE:
return "LOCAL_MACHINE";
case LOCAL_VERSION:
return "LOCAL_VERSION";
case LOCAL_RELEASE:
return "LOCAL_RELEASE";
case REMOTE_CPU_MODEL:
return "REMOTE_CPU_MODEL";
case REMOTE_CPU_FREQUENCY:
return "REMOTE_CPU_FREQUENCY";
case REMOTE_SYSTEM_MODEL:
return "REMOTE_SYSTEM_MODEL";
case LOCAL_CPU_MODEL:
return "LOCAL_CPU_MODEL";
case LOCAL_CPU_FREQUENCY:
return "LOCAL_CPU_FREQUENCY";
case LOCAL_SYSTEM_MODEL:
return "LOCAL_SYSTEM_MODEL";
case OUTPUT_END:
return "OUTPUT_END";
default:
return "!UNKNOWN OUTPUT SELECTOR!";
}
}
void
print_netperf_output_entry(FILE *where, enum netperf_output_name what)
{
}
void print_omni_init_list();
void
dump_netperf_output_list(FILE *where, int csv) {
int i;
print_omni_init_list();
for (i = OUTPUT_NONE; i < NETPERF_OUTPUT_MAX; i++){
if (OUTPUT_NONE != i) {
fprintf(where,"%c",(csv) ? ',' : '\n');
}
fprintf(where,
"%s",
netperf_output_enum_to_str(netperf_output_source[i].output_name));
}
fprintf(where,"\n");
fflush(where);
}
void
dump_netperf_output_source(FILE *where)
{
int i;
/* belts and suspenders everyone... */
for (i = OUTPUT_NONE; i < NETPERF_OUTPUT_MAX; i++) {
fprintf(where,
"Output Name: %s\n",
netperf_output_enum_to_str(netperf_output_source[i].output_name));
fprintf(where,
"\tmax_line_len %d tot_line_len %d display_value %p\n",
netperf_output_source[i].max_line_len,
netperf_output_source[i].tot_line_len,
netperf_output_source[i].display_value);
fprintf(where,
"\tline[0]: |%s|\n",
(netperf_output_source[i].line[0] == NULL) ? "" :
netperf_output_source[i].line[0]);
fprintf(where,
"\tline[1]: |%s|\n",
(netperf_output_source[i].line[1] == NULL) ? "" :
netperf_output_source[i].line[1]);
fprintf(where,
"\tline[2]: |%s|\n",
(netperf_output_source[i].line[2] == NULL) ? "" :
netperf_output_source[i].line[2]);
fprintf(where,
"\tline[3]: |%s|\n",
(netperf_output_source[i].line[3] == NULL) ? "" :
netperf_output_source[i].line[3]);
fprintf(where,
"\tbrief: |%s|\n",
(netperf_output_source[i].brief == NULL) ? "" :
netperf_output_source[i].brief);
fprintf(where,
"\tformat: |%s|\n",
(netperf_output_source[i].format == NULL) ? "" :
netperf_output_source[i].format);
}
fflush(where);
}
#define MY_MAX(a,b) ((a > b) ? a : b)
#define NETPERF_LINE_MAX(x) \
MY_MAX(MY_MAX(MY_MAX(strlen(netperf_output_source[x].line[0]),\
strlen(netperf_output_source[x].line[1])),\
strlen(netperf_output_source[x].line[2])),\
strlen(netperf_output_source[x].line[3]))
#define NETPERF_LINE_TOT(x) \
strlen(netperf_output_source[x].line[0]) +\
strlen(netperf_output_source[x].line[1]) +\
strlen(netperf_output_source[x].line[2]) +\
strlen(netperf_output_source[x].line[3]) + 4
enum netperf_output_name
match_string_to_output(char *candidate)
{
char *h1,*temp;
enum netperf_output_name name;
int k,len;
/* at some point we may need/want to worry about leading and
trailing spaces, but for now we will leave that onus on the
user. */
for (name = OUTPUT_NONE; name < NETPERF_OUTPUT_MAX; name++) {
/* try for a match based on the nmemonic/enum */
if (!strcasecmp(candidate,netperf_output_enum_to_str(name)))
return name;
/* try for a match on the actual header text */
temp = malloc(NETPERF_LINE_TOT(name));
h1 = temp;
if (h1 != NULL) {
for (k = 0; ((k < 4) &&
(NULL != netperf_output_source[name].line[k]) &&
(strcmp("",netperf_output_source[name].line[k]))); k++) {
len = sprintf(h1,
"%s",
netperf_output_source[name].line[k]);
*(h1 + len) = ' ';
/* now move to the next starting column. for csv we aren't worried
about alignment between the header and the value lines */
h1 += len + 1;
}
/* this time we want null termination please */
*(h1 - 1) = 0;
if (!strcasecmp(candidate,temp)) {
free(temp);
return name;
}
else
free(temp);
}
}
/* if we get here it means there was no match */
return OUTPUT_NONE;
}
void
parse_output_csv_selection_file(char *selection_file) {
FILE *selections;
char name[81]; /* best be more than enough */
int namepos;
int c;
int j;
enum netperf_output_name match;
int line,column;
selections = fopen(selection_file,"r");
if (!selections) {
perror("Could Not Open output selection file");
exit(-1);
}
/* should this really be necessary? */
rewind(selections);
line = 0;
column = 1;
namepos = 0;
name[0] = 0;
name[80] = 0;
j = 0;
/* let's allow the csv to turn the four lines of a human readable
output file to be used to create a single line csv output file by
not worrying about the line count. raj 2008--02-04 */
while ((c = fgetc(selections)) != EOF) {
if (namepos == 80) {
/* too long */
fprintf(where,
"Output selection starting column %d on line %d is too long\n",
line + 1,
column);
fflush(where);
exit(-1);
}
if (c == ',') {
/* time to check for a match, but only if we won't overflow the
current row of the array */
if (j == NETPERF_OUTPUT_MAX) {
fprintf(where,"Too many output selectors on line %d\n",line);
fflush(where);
exit(-1);
}
name[namepos] = 0;
output_csv_list[j++] = match_string_to_output(name);
namepos = 0;
}
else if (c == '\n') {
/* move to the next line after checking for a match */
name[namepos] = 0;
output_csv_list[j++] = match_string_to_output(name);
line++;
namepos = 0;
}
else if (isprint(c)) {
name[namepos++] = c;
}
column++;
}
/* ok, do we need/want to do anything here? at present we will
silently ignore the rest of the file if we exit the loop on line
count */
if ((c == EOF) && (namepos > 0)) {
name[namepos] = 0;
output_csv_list[j] = match_string_to_output(name);
}
}
void
parse_output_human_selection_file(char *selection_file) {
FILE *selections;
char name[81]; /* best be more than enough */
int namepos;
char c;
int j;
enum netperf_output_name match;
int line,column;
selections = fopen(selection_file,"r");
if (!selections) {
perror("Could Not Open output selection file");
exit(-1);
}
line = 0;
column = 1;
namepos = 0;
name[0] = 0;
name[80] = 0;
j = 0;
while (((c = fgetc(selections)) != EOF) && (line < 4)) {
if (namepos == 80) {
/* too long */
fprintf(where,
"Output selection starting column %d on line %d is too long\n",
line + 1,
column);
fflush(where);
exit(-1);
}
if (c == ',') {
/* time to check for a match, but only if we won't overflow the
current row of the array */
if (j == NETPERF_OUTPUT_MAX) {
fprintf(where,"Too many output selectors on line %d\n",line);
fflush(where);
exit(-1);
}
name[namepos] = 0;
output_human_list[line][j++] = match_string_to_output(name);
namepos = 0;
}
else if (c == '\n') {
/* move to the next line after checking for a match */
name[namepos] = 0;
output_human_list[line++][j++] = match_string_to_output(name);
namepos = 0;
j = 0;
}
else if (isprint(c)) {
name[namepos++] = c;
}
column++;
}
/* ok, do we need/want to do anything here? at present we will
silently ignore the rest of the file if we exit the loop on line
count */
if ((c == EOF) && (namepos > 0)) {
name[namepos] = 0;
output_human_list[line][j] = match_string_to_output(name);
}
}
void
set_output_csv_list_default() {
int i = 0;
enum netperf_output_name j;
/* this should cause us to catch everything unless someone botches
adding an output name to the enum. raj 2008-02-22 */
for (j = SOCKET_TYPE; j < OUTPUT_END; j++) {
output_csv_list[i++] = j;
}
}
void
set_output_human_list_default() {
int i, j; /* line, column */
enum netperf_output_name k;
/* Line One SOCKET_TYPE to RESPONSE_SIZE */
i = 0;
j = 0;
for (k = SOCKET_TYPE; k <= RESPONSE_SIZE; k++)
output_human_list[i][j++] = k;
/* Line Two LOCAL_CPU_UTIL to TRANSPORT_MSS */
i = 1;
j = 0;
for (k = LOCAL_CPU_UTIL; k <= TRANSPORT_MSS; k++)
output_human_list[i][j++] = k;
/* Line Three LOCAL_SEND_THROUGHPUT throught REMOTE_CORK */
i = 2;
j = 0;
for (k = LOCAL_SEND_THROUGHPUT; k <= REMOTE_CORK; k++)
output_human_list[i][j++] = k;
/* Line Four LOCAL_SYSNAME through COMMAND_LINE */
i = 3;
j = 0;
for (k = LOCAL_SYSNAME; k <= COMMAND_LINE; k++)
output_human_list[i][j++] = k;
}
void
print_omni_init_list() {
int i;
/* belts and suspenders everyone... */
for (i = OUTPUT_NONE; i < NETPERF_OUTPUT_MAX; i++) {
netperf_output_source[i].output_name = i;
netperf_output_source[i].max_line_len = 0;
netperf_output_source[i].tot_line_len = 0;
netperf_output_source[i].line[0] = "";
netperf_output_source[i].line[1] = "";
netperf_output_source[i].line[2] = "";
netperf_output_source[i].line[3] = "";
netperf_output_source[i].brief = "";
netperf_output_source[i].format = "";
netperf_output_source[i].display_value = NULL;
}
netperf_output_source[OUTPUT_NONE].output_name = OUTPUT_NONE;
netperf_output_source[OUTPUT_NONE].line[0] = " ";
netperf_output_source[OUTPUT_NONE].format = "%s";
netperf_output_source[OUTPUT_NONE].display_value = &" ";
netperf_output_source[OUTPUT_NONE].max_line_len =
NETPERF_LINE_MAX(OUTPUT_NONE);
netperf_output_source[OUTPUT_NONE].tot_line_len =
NETPERF_LINE_TOT(OUTPUT_NONE);
netperf_output_source[COMMAND_LINE].output_name = COMMAND_LINE;
netperf_output_source[COMMAND_LINE].line[0] = "Command";
netperf_output_source[COMMAND_LINE].line[1] = "Line";
netperf_output_source[COMMAND_LINE].format = "\"%s\"";
netperf_output_source[COMMAND_LINE].display_value = command_line;
netperf_output_source[COMMAND_LINE].max_line_len =
NETPERF_LINE_MAX(COMMAND_LINE);
netperf_output_source[COMMAND_LINE].tot_line_len =
NETPERF_LINE_TOT(COMMAND_LINE);
netperf_output_source[UUID].output_name = UUID;
netperf_output_source[UUID].line[0] = "Test";
netperf_output_source[UUID].line[1] = "UUID";
netperf_output_source[UUID].format = "%s";
netperf_output_source[UUID].display_value = test_uuid;
netperf_output_source[UUID].max_line_len =
NETPERF_LINE_MAX(UUID);
netperf_output_source[UUID].tot_line_len =
NETPERF_LINE_TOT(UUID);
netperf_output_source[RESULT_BRAND].output_name = RESULT_BRAND;
netperf_output_source[RESULT_BRAND].line[0] = "Result";
netperf_output_source[RESULT_BRAND].line[1] = "Tag";
netperf_output_source[RESULT_BRAND].format = "\"%s\"";
netperf_output_source[RESULT_BRAND].display_value = result_brand;
netperf_output_source[RESULT_BRAND].max_line_len =
NETPERF_LINE_MAX(RESULT_BRAND);
netperf_output_source[RESULT_BRAND].tot_line_len =
NETPERF_LINE_TOT(RESULT_BRAND);
netperf_output_source[SOCKET_TYPE].output_name = SOCKET_TYPE;
netperf_output_source[SOCKET_TYPE].line[0] = "Socket";
netperf_output_source[SOCKET_TYPE].line[1] = "Type";
netperf_output_source[SOCKET_TYPE].format = "%s";
netperf_output_source[SOCKET_TYPE].display_value = socket_type_str;
netperf_output_source[SOCKET_TYPE].max_line_len =
NETPERF_LINE_MAX(SOCKET_TYPE);
netperf_output_source[SOCKET_TYPE].tot_line_len =
NETPERF_LINE_TOT(SOCKET_TYPE);
netperf_output_source[DIRECTION].output_name = DIRECTION;
netperf_output_source[DIRECTION].line[0] = "Direction";
netperf_output_source[DIRECTION].line[1] = "";
netperf_output_source[DIRECTION].format = "%s";
netperf_output_source[DIRECTION].display_value = direction_str;
netperf_output_source[DIRECTION].max_line_len =
NETPERF_LINE_MAX(DIRECTION);
netperf_output_source[DIRECTION].tot_line_len =
NETPERF_LINE_TOT(DIRECTION);
netperf_output_source[PROTOCOL].output_name = PROTOCOL;
netperf_output_source[PROTOCOL].line[0] = "Protocol";
netperf_output_source[PROTOCOL].format = "%s";
netperf_output_source[PROTOCOL].display_value = protocol_str;
netperf_output_source[PROTOCOL].max_line_len =
NETPERF_LINE_MAX(PROTOCOL);
netperf_output_source[PROTOCOL].tot_line_len =
NETPERF_LINE_TOT(PROTOCOL);
netperf_output_source[ELAPSED_TIME].output_name = ELAPSED_TIME;
netperf_output_source[ELAPSED_TIME].line[0] = "Elapsed";
netperf_output_source[ELAPSED_TIME].line[1] = "Time";
netperf_output_source[ELAPSED_TIME].line[2] = "(sec)";
netperf_output_source[ELAPSED_TIME].format = "%.2f";
netperf_output_source[ELAPSED_TIME].display_value = &elapsed_time_double;
netperf_output_source[ELAPSED_TIME].max_line_len =
NETPERF_LINE_MAX(ELAPSED_TIME);
netperf_output_source[ELAPSED_TIME].tot_line_len =
NETPERF_LINE_TOT(ELAPSED_TIME);
netperf_output_source[SOURCE_PORT].output_name = SOURCE_PORT;
netperf_output_source[SOURCE_PORT].line[0] = "Source";
netperf_output_source[SOURCE_PORT].line[1] = "Port";
netperf_output_source[SOURCE_PORT].format = "%s";
netperf_output_source[SOURCE_PORT].display_value = local_data_port;
netperf_output_source[SOURCE_PORT].max_line_len =
NETPERF_LINE_MAX(SOURCE_PORT);
netperf_output_source[SOURCE_PORT].tot_line_len =
NETPERF_LINE_TOT(SOURCE_PORT);
netperf_output_source[SOURCE_ADDR].output_name = SOURCE_ADDR;
netperf_output_source[SOURCE_ADDR].line[0] = "Source";
netperf_output_source[SOURCE_ADDR].line[1] = "Address";
netperf_output_source[SOURCE_ADDR].format = "%s";
netperf_output_source[SOURCE_ADDR].display_value = local_data_address;
netperf_output_source[SOURCE_ADDR].max_line_len =
NETPERF_LINE_MAX(SOURCE_ADDR);
netperf_output_source[SOURCE_ADDR].tot_line_len =
NETPERF_LINE_TOT(SOURCE_ADDR);
netperf_output_source[SOURCE_FAMILY].output_name = SOURCE_FAMILY;
netperf_output_source[SOURCE_FAMILY].line[0] = "Source";
netperf_output_source[SOURCE_FAMILY].line[1] = "Family";
netperf_output_source[SOURCE_FAMILY].format = "%d";
netperf_output_source[SOURCE_FAMILY].display_value = &local_data_family;
netperf_output_source[SOURCE_FAMILY].max_line_len =
NETPERF_LINE_MAX(SOURCE_FAMILY);
netperf_output_source[SOURCE_FAMILY].tot_line_len =
NETPERF_LINE_TOT(SOURCE_FAMILY);
netperf_output_source[DEST_PORT].output_name = DEST_PORT;
netperf_output_source[DEST_PORT].line[0] = "Destination";
netperf_output_source[DEST_PORT].line[1] = "Port";
netperf_output_source[DEST_PORT].format = "%s";
netperf_output_source[DEST_PORT].display_value = remote_data_port;
netperf_output_source[DEST_PORT].max_line_len =
NETPERF_LINE_MAX(DEST_PORT);
netperf_output_source[DEST_PORT].tot_line_len =
NETPERF_LINE_TOT(DEST_PORT);
netperf_output_source[DEST_ADDR].output_name = DEST_ADDR;
netperf_output_source[DEST_ADDR].line[0] = "Destination";
netperf_output_source[DEST_ADDR].line[1] = "Address";
netperf_output_source[DEST_ADDR].format = "%s";
netperf_output_source[DEST_ADDR].display_value = remote_data_address;
netperf_output_source[DEST_ADDR].max_line_len =
NETPERF_LINE_MAX(DEST_ADDR);
netperf_output_source[DEST_ADDR].tot_line_len =
NETPERF_LINE_TOT(DEST_ADDR);
netperf_output_source[DEST_FAMILY].output_name = DEST_FAMILY;
netperf_output_source[DEST_FAMILY].line[0] = "Destination";
netperf_output_source[DEST_FAMILY].line[1] = "Family";
netperf_output_source[DEST_FAMILY].format = "%d";
netperf_output_source[DEST_FAMILY].display_value = &remote_data_family;
netperf_output_source[DEST_FAMILY].max_line_len =
NETPERF_LINE_MAX(DEST_FAMILY);
netperf_output_source[DEST_FAMILY].tot_line_len =
NETPERF_LINE_TOT(DEST_FAMILY);
netperf_output_source[THROUGHPUT].output_name = THROUGHPUT;
netperf_output_source[THROUGHPUT].line[0] = "Throughput";
netperf_output_source[THROUGHPUT].line[1] = "";
netperf_output_source[THROUGHPUT].format = "%.2f";
netperf_output_source[THROUGHPUT].display_value = &thruput;
netperf_output_source[THROUGHPUT].max_line_len =
NETPERF_LINE_MAX(THROUGHPUT);
netperf_output_source[THROUGHPUT].tot_line_len =
NETPERF_LINE_TOT(THROUGHPUT);
netperf_output_source[LOCAL_SEND_THROUGHPUT].output_name = LOCAL_SEND_THROUGHPUT;
netperf_output_source[LOCAL_SEND_THROUGHPUT].line[0] = "Local";
netperf_output_source[LOCAL_SEND_THROUGHPUT].line[1] = "Send";
netperf_output_source[LOCAL_SEND_THROUGHPUT].line[2] = "Throughput";
netperf_output_source[LOCAL_SEND_THROUGHPUT].format = "%.2f";
netperf_output_source[LOCAL_SEND_THROUGHPUT].display_value = &local_send_thruput;
netperf_output_source[LOCAL_SEND_THROUGHPUT].max_line_len =
NETPERF_LINE_MAX(LOCAL_SEND_THROUGHPUT);
netperf_output_source[LOCAL_SEND_THROUGHPUT].tot_line_len =
NETPERF_LINE_TOT(LOCAL_SEND_THROUGHPUT);
netperf_output_source[LOCAL_RECV_THROUGHPUT].output_name = LOCAL_RECV_THROUGHPUT;
netperf_output_source[LOCAL_RECV_THROUGHPUT].line[0] = "Local";
netperf_output_source[LOCAL_RECV_THROUGHPUT].line[1] = "Recv";
netperf_output_source[LOCAL_RECV_THROUGHPUT].line[2] = "Throughput";
netperf_output_source[LOCAL_RECV_THROUGHPUT].format = "%.2f";
netperf_output_source[LOCAL_RECV_THROUGHPUT].display_value = &local_recv_thruput;
netperf_output_source[LOCAL_RECV_THROUGHPUT].max_line_len =
NETPERF_LINE_MAX(LOCAL_RECV_THROUGHPUT);
netperf_output_source[LOCAL_RECV_THROUGHPUT].tot_line_len =
NETPERF_LINE_TOT(LOCAL_RECV_THROUGHPUT);
netperf_output_source[REMOTE_SEND_THROUGHPUT].output_name = REMOTE_SEND_THROUGHPUT;
netperf_output_source[REMOTE_SEND_THROUGHPUT].line[0] = "Remote";
netperf_output_source[REMOTE_SEND_THROUGHPUT].line[1] = "Send";
netperf_output_source[REMOTE_SEND_THROUGHPUT].line[2] = "Throughput";
netperf_output_source[REMOTE_SEND_THROUGHPUT].format = "%.2f";
netperf_output_source[REMOTE_SEND_THROUGHPUT].display_value = &remote_send_thruput;
netperf_output_source[REMOTE_SEND_THROUGHPUT].max_line_len =
NETPERF_LINE_MAX(REMOTE_SEND_THROUGHPUT);
netperf_output_source[REMOTE_SEND_THROUGHPUT].tot_line_len =
NETPERF_LINE_TOT(REMOTE_SEND_THROUGHPUT);
netperf_output_source[REMOTE_RECV_THROUGHPUT].output_name = REMOTE_RECV_THROUGHPUT;
netperf_output_source[REMOTE_RECV_THROUGHPUT].line[0] = "Remote";
netperf_output_source[REMOTE_RECV_THROUGHPUT].line[1] = "Recv";
netperf_output_source[REMOTE_RECV_THROUGHPUT].line[2] = "Throughput";
netperf_output_source[REMOTE_RECV_THROUGHPUT].format = "%.2f";
netperf_output_source[REMOTE_RECV_THROUGHPUT].display_value = &remote_recv_thruput;
netperf_output_source[REMOTE_RECV_THROUGHPUT].max_line_len =
NETPERF_LINE_MAX(REMOTE_RECV_THROUGHPUT);
netperf_output_source[REMOTE_RECV_THROUGHPUT].tot_line_len =
NETPERF_LINE_TOT(REMOTE_RECV_THROUGHPUT);
netperf_output_source[THROUGHPUT_UNITS].output_name = THROUGHPUT_UNITS;
netperf_output_source[THROUGHPUT_UNITS].line[0] = "Throughput";
netperf_output_source[THROUGHPUT_UNITS].line[1] = "Units";
netperf_output_source[THROUGHPUT_UNITS].format = "%s/s";
netperf_output_source[THROUGHPUT_UNITS].display_value = thruput_format_str;
netperf_output_source[THROUGHPUT_UNITS].max_line_len =
NETPERF_LINE_MAX(THROUGHPUT_UNITS);
netperf_output_source[THROUGHPUT_UNITS].tot_line_len =
NETPERF_LINE_TOT(THROUGHPUT_UNITS);
netperf_output_source[CONFIDENCE_LEVEL].output_name = CONFIDENCE_LEVEL;
netperf_output_source[CONFIDENCE_LEVEL].line[0] = "Confidence";
netperf_output_source[CONFIDENCE_LEVEL].line[1] = "Level";
netperf_output_source[CONFIDENCE_LEVEL].line[2] = "Percent";
netperf_output_source[CONFIDENCE_LEVEL].format = "%d";
netperf_output_source[CONFIDENCE_LEVEL].display_value = &confidence_level;
netperf_output_source[CONFIDENCE_LEVEL].max_line_len =
NETPERF_LINE_MAX(CONFIDENCE_LEVEL);
netperf_output_source[CONFIDENCE_LEVEL].tot_line_len =
NETPERF_LINE_TOT(CONFIDENCE_LEVEL);
netperf_output_source[CONFIDENCE_INTERVAL].output_name = CONFIDENCE_INTERVAL;
netperf_output_source[CONFIDENCE_INTERVAL].line[0] = "Confidence";
netperf_output_source[CONFIDENCE_INTERVAL].line[1] = "Width";
netperf_output_source[CONFIDENCE_INTERVAL].line[2] = "Target";
netperf_output_source[CONFIDENCE_INTERVAL].format = "%f";
netperf_output_source[CONFIDENCE_INTERVAL].display_value = &interval_pct;
netperf_output_source[CONFIDENCE_INTERVAL].max_line_len =
NETPERF_LINE_MAX(CONFIDENCE_INTERVAL);
netperf_output_source[CONFIDENCE_INTERVAL].tot_line_len =
NETPERF_LINE_TOT(CONFIDENCE_INTERVAL);
netperf_output_source[CONFIDENCE_ITERATION].output_name = CONFIDENCE_ITERATION;
netperf_output_source[CONFIDENCE_ITERATION].line[0] = "Confidence";
netperf_output_source[CONFIDENCE_ITERATION].line[1] = "Iterations";
netperf_output_source[CONFIDENCE_ITERATION].line[2] = "Run";
netperf_output_source[CONFIDENCE_ITERATION].format = "%d";
netperf_output_source[CONFIDENCE_ITERATION].display_value = &confidence_iteration;
netperf_output_source[CONFIDENCE_ITERATION].max_line_len =
NETPERF_LINE_MAX(CONFIDENCE_ITERATION);
netperf_output_source[CONFIDENCE_ITERATION].tot_line_len =
NETPERF_LINE_TOT(CONFIDENCE_ITERATION);
netperf_output_source[THROUGHPUT_CONFID].output_name = THROUGHPUT_CONFID;
netperf_output_source[THROUGHPUT_CONFID].line[0] = "Throughput";
netperf_output_source[THROUGHPUT_CONFID].line[1] = "Confidence";
netperf_output_source[THROUGHPUT_CONFID].line[2] = "Width (%)";
netperf_output_source[THROUGHPUT_CONFID].format = "%.3f";
netperf_output_source[THROUGHPUT_CONFID].display_value = &result_confid_pct;
netperf_output_source[THROUGHPUT_CONFID].max_line_len =
NETPERF_LINE_MAX(THROUGHPUT_CONFID);
netperf_output_source[THROUGHPUT_CONFID].tot_line_len =
NETPERF_LINE_TOT(THROUGHPUT_CONFID);
netperf_output_source[LOCAL_CPU_CONFID].output_name = LOCAL_CPU_CONFID;
netperf_output_source[LOCAL_CPU_CONFID].line[0] = "Local";
netperf_output_source[LOCAL_CPU_CONFID].line[1] = "CPU";
netperf_output_source[LOCAL_CPU_CONFID].line[2] = "Confidence";
netperf_output_source[LOCAL_CPU_CONFID].line[3] = "Width (%)";
netperf_output_source[LOCAL_CPU_CONFID].format = "%.3f";
netperf_output_source[LOCAL_CPU_CONFID].display_value = &loc_cpu_confid_pct;
netperf_output_source[LOCAL_CPU_CONFID].max_line_len =
NETPERF_LINE_MAX(LOCAL_CPU_CONFID);
netperf_output_source[LOCAL_CPU_CONFID].tot_line_len =
NETPERF_LINE_TOT(LOCAL_CPU_CONFID);
netperf_output_source[REMOTE_CPU_CONFID].output_name = REMOTE_CPU_CONFID;
netperf_output_source[REMOTE_CPU_CONFID].line[0] = "Remote";
netperf_output_source[REMOTE_CPU_CONFID].line[1] = "CPU";
netperf_output_source[REMOTE_CPU_CONFID].line[2] = "Confidence";
netperf_output_source[REMOTE_CPU_CONFID].line[3] = "Width (%)";
netperf_output_source[REMOTE_CPU_CONFID].format = "%.3f";
netperf_output_source[REMOTE_CPU_CONFID].display_value = &rem_cpu_confid_pct;
netperf_output_source[REMOTE_CPU_CONFID].max_line_len =
NETPERF_LINE_MAX(REMOTE_CPU_CONFID);
netperf_output_source[REMOTE_CPU_CONFID].tot_line_len =
NETPERF_LINE_TOT(REMOTE_CPU_CONFID);
netperf_output_source[RT_LATENCY].output_name = RT_LATENCY;
netperf_output_source[RT_LATENCY].line[0] = "Round";
netperf_output_source[RT_LATENCY].line[1] = "Trip";
netperf_output_source[RT_LATENCY].line[2] = "Latency";
netperf_output_source[RT_LATENCY].line[3] = "usec/tran";
netperf_output_source[RT_LATENCY].format = "%.3f";
netperf_output_source[RT_LATENCY].display_value = &rtt_latency;
netperf_output_source[RT_LATENCY].max_line_len =
NETPERF_LINE_MAX(RT_LATENCY);
netperf_output_source[RT_LATENCY].tot_line_len =
NETPERF_LINE_TOT(RT_LATENCY);
netperf_output_source[TRANSACTION_RATE].output_name = TRANSACTION_RATE;
netperf_output_source[TRANSACTION_RATE].line[0] = "Transaction";
netperf_output_source[TRANSACTION_RATE].line[1] = "Rate";
netperf_output_source[TRANSACTION_RATE].line[2] = "Tran/s";
netperf_output_source[TRANSACTION_RATE].format = "%.3f";
netperf_output_source[TRANSACTION_RATE].display_value = &transaction_rate;
netperf_output_source[TRANSACTION_RATE].max_line_len =
NETPERF_LINE_MAX(TRANSACTION_RATE);
netperf_output_source[TRANSACTION_RATE].tot_line_len =
NETPERF_LINE_TOT(TRANSACTION_RATE);
netperf_output_source[TRANSPORT_MSS].output_name = TRANSPORT_MSS;
netperf_output_source[TRANSPORT_MSS].line[0] = "Transport";
netperf_output_source[TRANSPORT_MSS].line[1] = "MSS";
netperf_output_source[TRANSPORT_MSS].line[2] = "bytes";
netperf_output_source[TRANSPORT_MSS].format = "%d";
netperf_output_source[TRANSPORT_MSS].display_value = &transport_mss;
netperf_output_source[TRANSPORT_MSS].max_line_len =
NETPERF_LINE_MAX(TRANSPORT_MSS);
netperf_output_source[TRANSPORT_MSS].tot_line_len =
NETPERF_LINE_TOT(TRANSPORT_MSS);
netperf_output_source[REQUEST_SIZE].output_name = REQUEST_SIZE;
netperf_output_source[REQUEST_SIZE].line[0] = "Request";
netperf_output_source[REQUEST_SIZE].line[1] = "Size";
netperf_output_source[REQUEST_SIZE].line[2] = "Bytes";
netperf_output_source[REQUEST_SIZE].format = "%d";
netperf_output_source[REQUEST_SIZE].display_value = &req_size;
netperf_output_source[REQUEST_SIZE].max_line_len =
NETPERF_LINE_MAX(REQUEST_SIZE);
netperf_output_source[REQUEST_SIZE].tot_line_len =
NETPERF_LINE_TOT(REQUEST_SIZE);
netperf_output_source[RESPONSE_SIZE].output_name = RESPONSE_SIZE;
netperf_output_source[RESPONSE_SIZE].line[0] = "Response";
netperf_output_source[RESPONSE_SIZE].line[1] = "Size";
netperf_output_source[RESPONSE_SIZE].line[2] = "Bytes";
netperf_output_source[RESPONSE_SIZE].format = "%d";
netperf_output_source[RESPONSE_SIZE].display_value = &rsp_size;
netperf_output_source[RESPONSE_SIZE].max_line_len =
NETPERF_LINE_MAX(RESPONSE_SIZE);
netperf_output_source[RESPONSE_SIZE].tot_line_len =
NETPERF_LINE_TOT(RESPONSE_SIZE);
netperf_output_source[BURST_SIZE].output_name = BURST_SIZE;
netperf_output_source[BURST_SIZE].line[0] = "Initial";
netperf_output_source[BURST_SIZE].line[1] = "Burst";
netperf_output_source[BURST_SIZE].line[2] = "Requests";
netperf_output_source[BURST_SIZE].format = "%d";
netperf_output_source[BURST_SIZE].display_value = &first_burst_size;
netperf_output_source[BURST_SIZE].max_line_len =
NETPERF_LINE_MAX(BURST_SIZE);
netperf_output_source[BURST_SIZE].tot_line_len =
NETPERF_LINE_TOT(BURST_SIZE);
netperf_output_source[LSS_SIZE_REQ].output_name = LSS_SIZE_REQ;
netperf_output_source[LSS_SIZE_REQ].line[0] = "Local";
netperf_output_source[LSS_SIZE_REQ].line[1] = "Send Socket";
netperf_output_source[LSS_SIZE_REQ].line[2] = "Size";
netperf_output_source[LSS_SIZE_REQ].line[3] = "Requested";
netperf_output_source[LSS_SIZE_REQ].format = "%d";
netperf_output_source[LSS_SIZE_REQ].display_value = &lss_size_req;
netperf_output_source[LSS_SIZE_REQ].max_line_len =
NETPERF_LINE_MAX(LSS_SIZE_REQ);
netperf_output_source[LSS_SIZE_REQ].tot_line_len =
NETPERF_LINE_TOT(LSS_SIZE_REQ);
netperf_output_source[LSS_SIZE].output_name = LSS_SIZE;
netperf_output_source[LSS_SIZE].line[0] = "Local";
netperf_output_source[LSS_SIZE].line[1] = "Send Socket";
netperf_output_source[LSS_SIZE].line[2] = "Size";
netperf_output_source[LSS_SIZE].line[3] = "Initial";
netperf_output_source[LSS_SIZE].format = "%d";
netperf_output_source[LSS_SIZE].display_value = &lss_size;
netperf_output_source[LSS_SIZE].max_line_len =
NETPERF_LINE_MAX(LSS_SIZE);
netperf_output_source[LSS_SIZE].tot_line_len =
NETPERF_LINE_TOT(LSS_SIZE);
netperf_output_source[LSS_SIZE_END].output_name = LSS_SIZE_END;
netperf_output_source[LSS_SIZE_END].line[0] = "Local";
netperf_output_source[LSS_SIZE_END].line[1] = "Send Socket";
netperf_output_source[LSS_SIZE_END].line[2] = "Size";
netperf_output_source[LSS_SIZE_END].line[3] = "Final";
netperf_output_source[LSS_SIZE_END].format = "%d";
netperf_output_source[LSS_SIZE_END].display_value = &lss_size_end;
netperf_output_source[LSS_SIZE_END].max_line_len =
NETPERF_LINE_MAX(LSS_SIZE_END);
netperf_output_source[LSS_SIZE_END].tot_line_len =
NETPERF_LINE_TOT(LSS_SIZE_END);
netperf_output_source[LSR_SIZE_REQ].output_name = LSR_SIZE_REQ;
netperf_output_source[LSR_SIZE_REQ].line[0] = "Local";
netperf_output_source[LSR_SIZE_REQ].line[1] = "Recv Socket";
netperf_output_source[LSR_SIZE_REQ].line[2] = "Size";
netperf_output_source[LSR_SIZE_REQ].line[3] = "Requested";
netperf_output_source[LSR_SIZE_REQ].format = "%d";
netperf_output_source[LSR_SIZE_REQ].display_value = &lsr_size_req;
netperf_output_source[LSR_SIZE_REQ].max_line_len =
NETPERF_LINE_MAX(LSR_SIZE_REQ);
netperf_output_source[LSR_SIZE_REQ].tot_line_len =
NETPERF_LINE_TOT(LSR_SIZE_REQ);
netperf_output_source[LSR_SIZE].output_name = LSR_SIZE;
netperf_output_source[LSR_SIZE].line[0] = "Local";
netperf_output_source[LSR_SIZE].line[1] = "Recv Socket";
netperf_output_source[LSR_SIZE].line[2] = "Size";
netperf_output_source[LSR_SIZE].line[3] = "Initial";
netperf_output_source[LSR_SIZE].format = "%d";
netperf_output_source[LSR_SIZE].display_value = &lsr_size;
netperf_output_source[LSR_SIZE].max_line_len =
NETPERF_LINE_MAX(LSR_SIZE);
netperf_output_source[LSR_SIZE].tot_line_len =
NETPERF_LINE_TOT(LSR_SIZE);
netperf_output_source[LSR_SIZE_END].output_name = LSR_SIZE_END;
netperf_output_source[LSR_SIZE_END].line[0] = "Local";
netperf_output_source[LSR_SIZE_END].line[1] = "Recv Socket";
netperf_output_source[LSR_SIZE_END].line[2] = "Size";
netperf_output_source[LSR_SIZE_END].line[3] = "Final";
netperf_output_source[LSR_SIZE_END].format = "%d";
netperf_output_source[LSR_SIZE_END].display_value = &lsr_size_end;
netperf_output_source[LSR_SIZE_END].max_line_len =
NETPERF_LINE_MAX(LSR_SIZE_END);
netperf_output_source[LSR_SIZE_END].tot_line_len =
NETPERF_LINE_TOT(LSR_SIZE_END);
netperf_output_source[LOCAL_SEND_SIZE].output_name = LOCAL_SEND_SIZE;
netperf_output_source[LOCAL_SEND_SIZE].line[0] = "Local";
netperf_output_source[LOCAL_SEND_SIZE].line[1] = "Send";
netperf_output_source[LOCAL_SEND_SIZE].line[2] = "Size";
netperf_output_source[LOCAL_SEND_SIZE].line[3] = "";
netperf_output_source[LOCAL_SEND_SIZE].format = "%d";
netperf_output_source[LOCAL_SEND_SIZE].display_value = &send_size;
netperf_output_source[LOCAL_SEND_SIZE].max_line_len =
NETPERF_LINE_MAX(LOCAL_SEND_SIZE);
netperf_output_source[LOCAL_SEND_SIZE].tot_line_len =
NETPERF_LINE_TOT(LOCAL_SEND_SIZE);
netperf_output_source[LOCAL_RECV_SIZE].output_name = LOCAL_RECV_SIZE;
netperf_output_source[LOCAL_RECV_SIZE].line[0] = "Local";
netperf_output_source[LOCAL_RECV_SIZE].line[1] = "Recv";
netperf_output_source[LOCAL_RECV_SIZE].line[2] = "Size";
netperf_output_source[LOCAL_RECV_SIZE].line[3] = "";
netperf_output_source[LOCAL_RECV_SIZE].format = "%d";
netperf_output_source[LOCAL_RECV_SIZE].display_value = &recv_size;
netperf_output_source[LOCAL_RECV_SIZE].max_line_len =
NETPERF_LINE_MAX(LOCAL_RECV_SIZE);
netperf_output_source[LOCAL_RECV_SIZE].tot_line_len =
NETPERF_LINE_TOT(LOCAL_RECV_SIZE);
netperf_output_source[LOCAL_SEND_CALLS].output_name = LOCAL_SEND_CALLS;
netperf_output_source[LOCAL_SEND_CALLS].line[0] = "Local";
netperf_output_source[LOCAL_SEND_CALLS].line[1] = "Send";
netperf_output_source[LOCAL_SEND_CALLS].line[2] = "Calls";
netperf_output_source[LOCAL_SEND_CALLS].line[3] = "";
netperf_output_source[LOCAL_SEND_CALLS].format = "%d";
netperf_output_source[LOCAL_SEND_CALLS].display_value = &local_send_calls;
netperf_output_source[LOCAL_SEND_CALLS].max_line_len =
NETPERF_LINE_MAX(LOCAL_SEND_CALLS);
netperf_output_source[LOCAL_SEND_CALLS].tot_line_len =
NETPERF_LINE_TOT(LOCAL_SEND_CALLS);
netperf_output_source[LOCAL_RECV_CALLS].output_name = LOCAL_RECV_CALLS;
netperf_output_source[LOCAL_RECV_CALLS].line[0] = "Local";
netperf_output_source[LOCAL_RECV_CALLS].line[1] = "Recv";
netperf_output_source[LOCAL_RECV_CALLS].line[2] = "Calls";
netperf_output_source[LOCAL_RECV_CALLS].line[3] = "";
netperf_output_source[LOCAL_RECV_CALLS].format = "%d";
netperf_output_source[LOCAL_RECV_CALLS].display_value = &local_receive_calls;
netperf_output_source[LOCAL_RECV_CALLS].max_line_len =
NETPERF_LINE_MAX(LOCAL_RECV_CALLS);
netperf_output_source[LOCAL_RECV_CALLS].tot_line_len =
NETPERF_LINE_TOT(LOCAL_RECV_CALLS);
netperf_output_source[LOCAL_BYTES_PER_RECV].output_name = LOCAL_BYTES_PER_RECV;
netperf_output_source[LOCAL_BYTES_PER_RECV].line[0] = "Local";
netperf_output_source[LOCAL_BYTES_PER_RECV].line[1] = "Bytes";
netperf_output_source[LOCAL_BYTES_PER_RECV].line[2] = "Per";
netperf_output_source[LOCAL_BYTES_PER_RECV].line[3] = "Recv";
netperf_output_source[LOCAL_BYTES_PER_RECV].format = "%.2f";
netperf_output_source[LOCAL_BYTES_PER_RECV].display_value = &bytes_per_recv;
netperf_output_source[LOCAL_BYTES_PER_RECV].max_line_len =
NETPERF_LINE_MAX(LOCAL_BYTES_PER_RECV);
netperf_output_source[LOCAL_BYTES_PER_RECV].tot_line_len =
NETPERF_LINE_TOT(LOCAL_BYTES_PER_RECV);
netperf_output_source[LOCAL_BYTES_PER_SEND].output_name = LOCAL_BYTES_PER_SEND;
netperf_output_source[LOCAL_BYTES_PER_SEND].line[0] = "Local";
netperf_output_source[LOCAL_BYTES_PER_SEND].line[1] = "Bytes";
netperf_output_source[LOCAL_BYTES_PER_SEND].line[2] = "Per";
netperf_output_source[LOCAL_BYTES_PER_SEND].line[3] = "Send";
netperf_output_source[LOCAL_BYTES_PER_SEND].format = "%.2f";
netperf_output_source[LOCAL_BYTES_PER_SEND].display_value = &bytes_per_send;
netperf_output_source[LOCAL_BYTES_PER_SEND].max_line_len =
NETPERF_LINE_MAX(LOCAL_BYTES_PER_SEND);
netperf_output_source[LOCAL_BYTES_PER_SEND].tot_line_len =
NETPERF_LINE_TOT(LOCAL_BYTES_PER_SEND);
netperf_output_source[LOCAL_BYTES_RECVD].output_name = LOCAL_BYTES_RECVD;
netperf_output_source[LOCAL_BYTES_RECVD].line[0] = "Local";
netperf_output_source[LOCAL_BYTES_RECVD].line[1] = "Bytes";
netperf_output_source[LOCAL_BYTES_RECVD].line[2] = "Received";
netperf_output_source[LOCAL_BYTES_RECVD].line[3] = "";
netperf_output_source[LOCAL_BYTES_RECVD].format = "%lld";
netperf_output_source[LOCAL_BYTES_RECVD].display_value = &bytes_received;
netperf_output_source[LOCAL_BYTES_RECVD].max_line_len =
NETPERF_LINE_MAX(LOCAL_BYTES_RECVD);
netperf_output_source[LOCAL_BYTES_RECVD].tot_line_len =
NETPERF_LINE_TOT(LOCAL_BYTES_RECVD);
netperf_output_source[LOCAL_BYTES_SENT].output_name = LOCAL_BYTES_SENT;
netperf_output_source[LOCAL_BYTES_SENT].line[0] = "Local";
netperf_output_source[LOCAL_BYTES_SENT].line[1] = "Bytes";
netperf_output_source[LOCAL_BYTES_SENT].line[2] = "Sent";
netperf_output_source[LOCAL_BYTES_SENT].line[3] = "";
netperf_output_source[LOCAL_BYTES_SENT].format = "%lld";
netperf_output_source[LOCAL_BYTES_SENT].display_value = &bytes_sent;
netperf_output_source[LOCAL_BYTES_SENT].max_line_len =
NETPERF_LINE_MAX(LOCAL_BYTES_SENT);
netperf_output_source[LOCAL_BYTES_SENT].tot_line_len =
NETPERF_LINE_TOT(LOCAL_BYTES_SENT);
netperf_output_source[LOCAL_BYTES_XFERD].output_name = LOCAL_BYTES_XFERD;
netperf_output_source[LOCAL_BYTES_XFERD].line[0] = "Local";
netperf_output_source[LOCAL_BYTES_XFERD].line[1] = "Bytes";
netperf_output_source[LOCAL_BYTES_XFERD].line[2] = "Xferred";
netperf_output_source[LOCAL_BYTES_XFERD].line[3] = "";
netperf_output_source[LOCAL_BYTES_XFERD].format = "%.0f";
netperf_output_source[LOCAL_BYTES_XFERD].display_value = &bytes_xferd;
netperf_output_source[LOCAL_BYTES_XFERD].max_line_len =
NETPERF_LINE_MAX(LOCAL_BYTES_XFERD);
netperf_output_source[LOCAL_BYTES_XFERD].tot_line_len =
NETPERF_LINE_TOT(LOCAL_BYTES_XFERD);
netperf_output_source[LOCAL_SEND_WIDTH].output_name = LOCAL_SEND_WIDTH;
netperf_output_source[LOCAL_SEND_WIDTH].line[0] = "Local";
netperf_output_source[LOCAL_SEND_WIDTH].line[1] = "Send";
netperf_output_source[LOCAL_SEND_WIDTH].line[2] = "Width";
netperf_output_source[LOCAL_SEND_WIDTH].format = "%d";
netperf_output_source[LOCAL_SEND_WIDTH].display_value = &send_width;
netperf_output_source[LOCAL_SEND_WIDTH].max_line_len =
NETPERF_LINE_MAX(LOCAL_SEND_WIDTH);
netperf_output_source[LOCAL_SEND_WIDTH].tot_line_len =
NETPERF_LINE_TOT(LOCAL_SEND_WIDTH);
netperf_output_source[LOCAL_RECV_WIDTH].output_name = LOCAL_RECV_WIDTH;
netperf_output_source[LOCAL_RECV_WIDTH].line[0] = "Local";
netperf_output_source[LOCAL_RECV_WIDTH].line[1] = "Recv";
netperf_output_source[LOCAL_RECV_WIDTH].line[2] = "Width";
netperf_output_source[LOCAL_RECV_WIDTH].format = "%d";
netperf_output_source[LOCAL_RECV_WIDTH].display_value = &recv_width;
netperf_output_source[LOCAL_RECV_WIDTH].max_line_len =
NETPERF_LINE_MAX(LOCAL_RECV_WIDTH);
netperf_output_source[LOCAL_RECV_WIDTH].tot_line_len =
NETPERF_LINE_TOT(LOCAL_RECV_WIDTH);
netperf_output_source[LOCAL_SEND_OFFSET].output_name = LOCAL_SEND_OFFSET;
netperf_output_source[LOCAL_SEND_OFFSET].line[0] = "Local";
netperf_output_source[LOCAL_SEND_OFFSET].line[1] = "Send";
netperf_output_source[LOCAL_SEND_OFFSET].line[2] = "Offset";
netperf_output_source[LOCAL_SEND_OFFSET].format = "%d";
netperf_output_source[LOCAL_SEND_OFFSET].display_value = &local_send_offset;
netperf_output_source[LOCAL_SEND_OFFSET].max_line_len =
NETPERF_LINE_MAX(LOCAL_SEND_OFFSET);
netperf_output_source[LOCAL_SEND_OFFSET].tot_line_len =
NETPERF_LINE_TOT(LOCAL_SEND_OFFSET);
netperf_output_source[LOCAL_RECV_OFFSET].output_name = LOCAL_RECV_OFFSET;
netperf_output_source[LOCAL_RECV_OFFSET].line[0] = "Local";
netperf_output_source[LOCAL_RECV_OFFSET].line[1] = "Recv";
netperf_output_source[LOCAL_RECV_OFFSET].line[2] = "Offset";
netperf_output_source[LOCAL_RECV_OFFSET].format = "%d";
netperf_output_source[LOCAL_RECV_OFFSET].display_value = &local_recv_offset;
netperf_output_source[LOCAL_RECV_OFFSET].max_line_len =
NETPERF_LINE_MAX(LOCAL_RECV_OFFSET);
netperf_output_source[LOCAL_RECV_OFFSET].tot_line_len =
NETPERF_LINE_TOT(LOCAL_RECV_OFFSET);
netperf_output_source[LOCAL_RECV_ALIGN].output_name = LOCAL_RECV_ALIGN;
netperf_output_source[LOCAL_RECV_ALIGN].line[0] = "Local";
netperf_output_source[LOCAL_RECV_ALIGN].line[1] = "Recv";
netperf_output_source[LOCAL_RECV_ALIGN].line[2] = "Alignment";
netperf_output_source[LOCAL_RECV_ALIGN].format = "%d";
netperf_output_source[LOCAL_RECV_ALIGN].display_value = &local_recv_align;
netperf_output_source[LOCAL_RECV_ALIGN].max_line_len =
NETPERF_LINE_MAX(LOCAL_RECV_ALIGN);
netperf_output_source[LOCAL_RECV_ALIGN].tot_line_len =
NETPERF_LINE_TOT(LOCAL_RECV_ALIGN);
netperf_output_source[LOCAL_SEND_ALIGN].output_name = LOCAL_SEND_ALIGN;
netperf_output_source[LOCAL_SEND_ALIGN].line[0] = "Local";
netperf_output_source[LOCAL_SEND_ALIGN].line[1] = "Send";
netperf_output_source[LOCAL_SEND_ALIGN].line[2] = "Alignment";
netperf_output_source[LOCAL_SEND_ALIGN].format = "%d";
netperf_output_source[LOCAL_SEND_ALIGN].display_value = &local_send_align;
netperf_output_source[LOCAL_SEND_ALIGN].max_line_len =
NETPERF_LINE_MAX(LOCAL_SEND_ALIGN);
netperf_output_source[LOCAL_SEND_ALIGN].tot_line_len =
NETPERF_LINE_TOT(LOCAL_SEND_ALIGN);
netperf_output_source[LOCAL_SEND_DIRTY_COUNT].output_name = LOCAL_SEND_DIRTY_COUNT;
netperf_output_source[LOCAL_SEND_DIRTY_COUNT].line[0] = "Local";
netperf_output_source[LOCAL_SEND_DIRTY_COUNT].line[1] = "Send";
netperf_output_source[LOCAL_SEND_DIRTY_COUNT].line[2] = "Dirty";
netperf_output_source[LOCAL_SEND_DIRTY_COUNT].line[3] = "Count";
netperf_output_source[LOCAL_SEND_DIRTY_COUNT].format = "%d";
netperf_output_source[LOCAL_SEND_DIRTY_COUNT].display_value = &loc_dirty_count;
netperf_output_source[LOCAL_SEND_DIRTY_COUNT].max_line_len =
NETPERF_LINE_MAX(LOCAL_SEND_DIRTY_COUNT);
netperf_output_source[LOCAL_SEND_DIRTY_COUNT].tot_line_len =
NETPERF_LINE_TOT(LOCAL_SEND_DIRTY_COUNT);
netperf_output_source[LOCAL_RECV_DIRTY_COUNT].output_name = LOCAL_RECV_DIRTY_COUNT;
netperf_output_source[LOCAL_RECV_DIRTY_COUNT].line[0] = "Local";
netperf_output_source[LOCAL_RECV_DIRTY_COUNT].line[1] = "Recv";
netperf_output_source[LOCAL_RECV_DIRTY_COUNT].line[2] = "Dirty";
netperf_output_source[LOCAL_RECV_DIRTY_COUNT].line[3] = "Count";
netperf_output_source[LOCAL_RECV_DIRTY_COUNT].format = "%d";
netperf_output_source[LOCAL_RECV_DIRTY_COUNT].display_value = &loc_dirty_count;
netperf_output_source[LOCAL_RECV_DIRTY_COUNT].max_line_len =
NETPERF_LINE_MAX(LOCAL_RECV_DIRTY_COUNT);
netperf_output_source[LOCAL_RECV_DIRTY_COUNT].tot_line_len =
NETPERF_LINE_TOT(LOCAL_RECV_DIRTY_COUNT);
netperf_output_source[LOCAL_RECV_CLEAN_COUNT].output_name = LOCAL_RECV_CLEAN_COUNT;
netperf_output_source[LOCAL_RECV_CLEAN_COUNT].line[0] = "Local";
netperf_output_source[LOCAL_RECV_CLEAN_COUNT].line[1] = "Recv";
netperf_output_source[LOCAL_RECV_CLEAN_COUNT].line[2] = "Clean";
netperf_output_source[LOCAL_RECV_CLEAN_COUNT].line[3] = "Count";
netperf_output_source[LOCAL_RECV_CLEAN_COUNT].format = "%d";
netperf_output_source[LOCAL_RECV_CLEAN_COUNT].display_value = &loc_clean_count;
netperf_output_source[LOCAL_RECV_CLEAN_COUNT].max_line_len =
NETPERF_LINE_MAX(LOCAL_RECV_CLEAN_COUNT);
netperf_output_source[LOCAL_RECV_CLEAN_COUNT].tot_line_len =
NETPERF_LINE_TOT(LOCAL_RECV_CLEAN_COUNT);
netperf_output_source[LOCAL_CPU_UTIL].output_name = LOCAL_CPU_UTIL;
netperf_output_source[LOCAL_CPU_UTIL].line[0] = "Local";
netperf_output_source[LOCAL_CPU_UTIL].line[1] = "CPU";
netperf_output_source[LOCAL_CPU_UTIL].line[2] = "Util";
netperf_output_source[LOCAL_CPU_UTIL].line[3] = "%";
netperf_output_source[LOCAL_CPU_UTIL].format = "%.2f";
netperf_output_source[LOCAL_CPU_UTIL].display_value = &local_cpu_utilization_double;
netperf_output_source[LOCAL_CPU_UTIL].max_line_len =
NETPERF_LINE_MAX(LOCAL_CPU_UTIL);
netperf_output_source[LOCAL_CPU_UTIL].tot_line_len =
NETPERF_LINE_TOT(LOCAL_CPU_UTIL);
netperf_output_source[LOCAL_CPU_PEAK_UTIL].output_name = LOCAL_CPU_PEAK_UTIL;
netperf_output_source[LOCAL_CPU_PEAK_UTIL].line[0] = "Local";
netperf_output_source[LOCAL_CPU_PEAK_UTIL].line[1] = "Peak";
netperf_output_source[LOCAL_CPU_PEAK_UTIL].line[2] = "Per CPU";
netperf_output_source[LOCAL_CPU_PEAK_UTIL].line[3] = "Util %";
netperf_output_source[LOCAL_CPU_PEAK_UTIL].format = "%.2f";
netperf_output_source[LOCAL_CPU_PEAK_UTIL].display_value = &lib_local_peak_cpu_util;
netperf_output_source[LOCAL_CPU_PEAK_UTIL].max_line_len =
NETPERF_LINE_MAX(LOCAL_CPU_PEAK_UTIL);
netperf_output_source[LOCAL_CPU_PEAK_UTIL].tot_line_len =
NETPERF_LINE_TOT(LOCAL_CPU_PEAK_UTIL);
netperf_output_source[LOCAL_CPU_PEAK_ID].output_name = LOCAL_CPU_PEAK_ID;
netperf_output_source[LOCAL_CPU_PEAK_ID].line[0] = "Local";
netperf_output_source[LOCAL_CPU_PEAK_ID].line[1] = "Peak";
netperf_output_source[LOCAL_CPU_PEAK_ID].line[2] = "Per CPU";
netperf_output_source[LOCAL_CPU_PEAK_ID].line[3] = "ID";
netperf_output_source[LOCAL_CPU_PEAK_ID].format = "%d";
netperf_output_source[LOCAL_CPU_PEAK_ID].display_value = &lib_local_peak_cpu_id;
netperf_output_source[LOCAL_CPU_PEAK_ID].max_line_len =
NETPERF_LINE_MAX(LOCAL_CPU_PEAK_ID);
netperf_output_source[LOCAL_CPU_PEAK_ID].tot_line_len =
NETPERF_LINE_TOT(LOCAL_CPU_PEAK_ID);
netperf_output_source[LOCAL_CPU_BIND].output_name = LOCAL_CPU_BIND;
netperf_output_source[LOCAL_CPU_BIND].line[0] = "Local";
netperf_output_source[LOCAL_CPU_BIND].line[1] = "CPU";
netperf_output_source[LOCAL_CPU_BIND].line[2] = "Bind";
netperf_output_source[LOCAL_CPU_BIND].line[3] = "";
netperf_output_source[LOCAL_CPU_BIND].format = "%d";
netperf_output_source[LOCAL_CPU_BIND].display_value = &local_proc_affinity;
netperf_output_source[LOCAL_CPU_BIND].max_line_len =
NETPERF_LINE_MAX(LOCAL_CPU_BIND);
netperf_output_source[LOCAL_CPU_BIND].tot_line_len =
NETPERF_LINE_TOT(LOCAL_CPU_BIND);
netperf_output_source[LOCAL_SD].output_name = LOCAL_SD;
netperf_output_source[LOCAL_SD].line[0] = "Local";
netperf_output_source[LOCAL_SD].line[1] = "Service";
netperf_output_source[LOCAL_SD].line[2] = "Demand";
netperf_output_source[LOCAL_SD].line[3] = "";
netperf_output_source[LOCAL_SD].format = "%.3f";
netperf_output_source[LOCAL_SD].display_value = &local_service_demand_double;
netperf_output_source[LOCAL_SD].max_line_len =
NETPERF_LINE_MAX(LOCAL_SD);
netperf_output_source[LOCAL_SD].tot_line_len =
NETPERF_LINE_TOT(LOCAL_SD);
netperf_output_source[SD_UNITS].output_name = SD_UNITS;
netperf_output_source[SD_UNITS].line[0] = "Service";
netperf_output_source[SD_UNITS].line[1] = "Demand";
netperf_output_source[SD_UNITS].line[2] = "Units";
netperf_output_source[SD_UNITS].format = "%s";
netperf_output_source[SD_UNITS].display_value = sd_str;
netperf_output_source[SD_UNITS].max_line_len =
NETPERF_LINE_MAX(SD_UNITS);
netperf_output_source[SD_UNITS].tot_line_len =
NETPERF_LINE_TOT(SD_UNITS);
netperf_output_source[LOCAL_CPU_METHOD].output_name = LOCAL_CPU_METHOD;
netperf_output_source[LOCAL_CPU_METHOD].line[0] = "Local";
netperf_output_source[LOCAL_CPU_METHOD].line[1] = "CPU";
netperf_output_source[LOCAL_CPU_METHOD].line[2] = "Util";
netperf_output_source[LOCAL_CPU_METHOD].line[3] = "Method";
netperf_output_source[LOCAL_CPU_METHOD].format = "%c";
netperf_output_source[LOCAL_CPU_METHOD].display_value = &local_cpu_method;
netperf_output_source[LOCAL_CPU_METHOD].max_line_len =
NETPERF_LINE_MAX(LOCAL_CPU_METHOD);
netperf_output_source[LOCAL_CPU_METHOD].tot_line_len =
NETPERF_LINE_TOT(LOCAL_CPU_METHOD);
netperf_output_source[LOCAL_CPU_COUNT].output_name = LOCAL_CPU_COUNT;
netperf_output_source[LOCAL_CPU_COUNT].line[0] = "Local";
netperf_output_source[LOCAL_CPU_COUNT].line[1] = "CPU";
netperf_output_source[LOCAL_CPU_COUNT].line[2] = "Count";
netperf_output_source[LOCAL_CPU_COUNT].format = "%d";
netperf_output_source[LOCAL_CPU_COUNT].display_value = &lib_num_loc_cpus;
netperf_output_source[LOCAL_CPU_COUNT].max_line_len =
NETPERF_LINE_MAX(LOCAL_CPU_COUNT);
netperf_output_source[LOCAL_CPU_COUNT].tot_line_len =
NETPERF_LINE_TOT(LOCAL_CPU_COUNT);
netperf_output_source[LOCAL_NODELAY].output_name = LOCAL_NODELAY;
netperf_output_source[LOCAL_NODELAY].line[0] = "Local";
netperf_output_source[LOCAL_NODELAY].line[1] = "NODELAY";
netperf_output_source[LOCAL_NODELAY].line[2] = "";
netperf_output_source[LOCAL_NODELAY].line[3] = "";
netperf_output_source[LOCAL_NODELAY].format = "%d";
netperf_output_source[LOCAL_NODELAY].display_value = &loc_nodelay;
netperf_output_source[LOCAL_NODELAY].max_line_len =
NETPERF_LINE_MAX(LOCAL_NODELAY);
netperf_output_source[LOCAL_NODELAY].tot_line_len =
NETPERF_LINE_TOT(LOCAL_NODELAY);
netperf_output_source[LOCAL_CORK].output_name = LOCAL_CORK;
netperf_output_source[LOCAL_CORK].line[0] = "Local";
netperf_output_source[LOCAL_CORK].line[1] = "Cork";
netperf_output_source[LOCAL_CORK].line[2] = "";
netperf_output_source[LOCAL_CORK].line[3] = "";
netperf_output_source[LOCAL_CORK].format = "%d";
netperf_output_source[LOCAL_CORK].display_value = &loc_tcpcork;
netperf_output_source[LOCAL_CORK].max_line_len =
NETPERF_LINE_MAX(LOCAL_CORK);
netperf_output_source[LOCAL_CORK].tot_line_len =
NETPERF_LINE_TOT(LOCAL_CORK);
netperf_output_source[RSS_SIZE_REQ].output_name = RSS_SIZE_REQ;
netperf_output_source[RSS_SIZE_REQ].line[0] = "Remote";
netperf_output_source[RSS_SIZE_REQ].line[1] = "Send Socket";
netperf_output_source[RSS_SIZE_REQ].line[2] = "Size";
netperf_output_source[RSS_SIZE_REQ].line[3] = "Requested";
netperf_output_source[RSS_SIZE_REQ].format = "%d";
netperf_output_source[RSS_SIZE_REQ].display_value = &rss_size_req;
netperf_output_source[RSS_SIZE_REQ].max_line_len =
NETPERF_LINE_MAX(RSS_SIZE_REQ);
netperf_output_source[RSS_SIZE_REQ].tot_line_len =
NETPERF_LINE_TOT(RSS_SIZE_REQ);
netperf_output_source[RSS_SIZE].output_name = RSS_SIZE;
netperf_output_source[RSS_SIZE].line[0] = "Remote";
netperf_output_source[RSS_SIZE].line[1] = "Send Socket";
netperf_output_source[RSS_SIZE].line[2] = "Size";
netperf_output_source[RSS_SIZE].line[3] = "Initial";
netperf_output_source[RSS_SIZE].format = "%d";
netperf_output_source[RSS_SIZE].display_value = &rss_size;
netperf_output_source[RSS_SIZE].max_line_len =
NETPERF_LINE_MAX(RSS_SIZE);
netperf_output_source[RSS_SIZE].tot_line_len =
NETPERF_LINE_TOT(RSS_SIZE);
netperf_output_source[RSS_SIZE_END].output_name = RSS_SIZE_END;
netperf_output_source[RSS_SIZE_END].line[0] = "Remote";
netperf_output_source[RSS_SIZE_END].line[1] = "Send Socket";
netperf_output_source[RSS_SIZE_END].line[2] = "Size";
netperf_output_source[RSS_SIZE_END].line[3] = "Final";
netperf_output_source[RSS_SIZE_END].format = "%d";
netperf_output_source[RSS_SIZE_END].display_value = &rss_size_end;
netperf_output_source[RSS_SIZE_END].max_line_len =
NETPERF_LINE_MAX(RSS_SIZE_END);
netperf_output_source[RSS_SIZE_END].tot_line_len =
NETPERF_LINE_TOT(RSS_SIZE_END);
netperf_output_source[RSR_SIZE_REQ].output_name = RSR_SIZE_REQ;
netperf_output_source[RSR_SIZE_REQ].line[0] = "Remote";
netperf_output_source[RSR_SIZE_REQ].line[1] = "Recv Socket";
netperf_output_source[RSR_SIZE_REQ].line[2] = "Size";
netperf_output_source[RSR_SIZE_REQ].line[3] = "Requested";
netperf_output_source[RSR_SIZE_REQ].format = "%d";
netperf_output_source[RSR_SIZE_REQ].display_value = &rsr_size_req;
netperf_output_source[RSR_SIZE_REQ].max_line_len =
NETPERF_LINE_MAX(RSR_SIZE_REQ);
netperf_output_source[RSR_SIZE_REQ].tot_line_len =
NETPERF_LINE_TOT(RSR_SIZE_REQ);
netperf_output_source[RSR_SIZE].output_name = RSR_SIZE;
netperf_output_source[RSR_SIZE].line[0] = "Remote";
netperf_output_source[RSR_SIZE].line[1] = "Recv Socket";
netperf_output_source[RSR_SIZE].line[2] = "Size";
netperf_output_source[RSR_SIZE].line[3] = "Initial";
netperf_output_source[RSR_SIZE].format = "%d";
netperf_output_source[RSR_SIZE].display_value = &rsr_size;
netperf_output_source[RSR_SIZE].max_line_len =
NETPERF_LINE_MAX(RSR_SIZE);
netperf_output_source[RSR_SIZE].tot_line_len =
NETPERF_LINE_TOT(RSR_SIZE);
netperf_output_source[RSR_SIZE_END].output_name = RSR_SIZE_END;
netperf_output_source[RSR_SIZE_END].line[0] = "Remote";
netperf_output_source[RSR_SIZE_END].line[1] = "Recv Socket";
netperf_output_source[RSR_SIZE_END].line[2] = "Size";
netperf_output_source[RSR_SIZE_END].line[3] = "Final";
netperf_output_source[RSR_SIZE_END].format = "%d";
netperf_output_source[RSR_SIZE_END].display_value = &rsr_size_end;
netperf_output_source[RSR_SIZE_END].max_line_len =
NETPERF_LINE_MAX(RSR_SIZE_END);
netperf_output_source[RSR_SIZE_END].tot_line_len =
NETPERF_LINE_TOT(RSR_SIZE_END);
netperf_output_source[REMOTE_SEND_SIZE].output_name = REMOTE_SEND_SIZE;
netperf_output_source[REMOTE_SEND_SIZE].line[0] = "Remote";
netperf_output_source[REMOTE_SEND_SIZE].line[1] = "Send";
netperf_output_source[REMOTE_SEND_SIZE].line[2] = "Size";
netperf_output_source[REMOTE_SEND_SIZE].line[3] = "";
netperf_output_source[REMOTE_SEND_SIZE].format = "%d";
netperf_output_source[REMOTE_SEND_SIZE].display_value = &remote_send_size;
netperf_output_source[REMOTE_SEND_SIZE].max_line_len =
NETPERF_LINE_MAX(REMOTE_SEND_SIZE);
netperf_output_source[REMOTE_SEND_SIZE].tot_line_len =
NETPERF_LINE_TOT(REMOTE_SEND_SIZE);
netperf_output_source[REMOTE_RECV_SIZE].output_name = REMOTE_RECV_SIZE;
netperf_output_source[REMOTE_RECV_SIZE].line[0] = "Remote";
netperf_output_source[REMOTE_RECV_SIZE].line[1] = "Recv";
netperf_output_source[REMOTE_RECV_SIZE].line[2] = "Size";
netperf_output_source[REMOTE_RECV_SIZE].line[3] = "";
netperf_output_source[REMOTE_RECV_SIZE].format = "%d";
netperf_output_source[REMOTE_RECV_SIZE].display_value = &remote_recv_size;
netperf_output_source[REMOTE_RECV_SIZE].max_line_len =
NETPERF_LINE_MAX(REMOTE_RECV_SIZE);
netperf_output_source[REMOTE_RECV_SIZE].tot_line_len =
NETPERF_LINE_TOT(REMOTE_RECV_SIZE);
netperf_output_source[REMOTE_SEND_CALLS].output_name = REMOTE_SEND_CALLS;
netperf_output_source[REMOTE_SEND_CALLS].line[0] = "Remote";
netperf_output_source[REMOTE_SEND_CALLS].line[1] = "Send";
netperf_output_source[REMOTE_SEND_CALLS].line[2] = "Calls";
netperf_output_source[REMOTE_SEND_CALLS].line[3] = "";
netperf_output_source[REMOTE_SEND_CALLS].format = "%lld";
netperf_output_source[REMOTE_SEND_CALLS].display_value = &remote_send_calls;
netperf_output_source[REMOTE_SEND_CALLS].max_line_len =
NETPERF_LINE_MAX(REMOTE_SEND_CALLS);
netperf_output_source[REMOTE_SEND_CALLS].tot_line_len =
NETPERF_LINE_TOT(REMOTE_SEND_CALLS);
netperf_output_source[REMOTE_RECV_CALLS].output_name = REMOTE_RECV_CALLS;
netperf_output_source[REMOTE_RECV_CALLS].line[0] = "Remote";
netperf_output_source[REMOTE_RECV_CALLS].line[1] = "Recv";
netperf_output_source[REMOTE_RECV_CALLS].line[2] = "Calls";
netperf_output_source[REMOTE_RECV_CALLS].line[3] = "";
netperf_output_source[REMOTE_RECV_CALLS].format = "%lld";
netperf_output_source[REMOTE_RECV_CALLS].display_value = &remote_receive_calls;
netperf_output_source[REMOTE_RECV_CALLS].max_line_len =
NETPERF_LINE_MAX(REMOTE_RECV_CALLS);
netperf_output_source[REMOTE_RECV_CALLS].tot_line_len =
NETPERF_LINE_TOT(REMOTE_RECV_CALLS);
netperf_output_source[REMOTE_BYTES_PER_RECV].output_name = REMOTE_BYTES_PER_RECV;
netperf_output_source[REMOTE_BYTES_PER_RECV].line[0] = "Remote";
netperf_output_source[REMOTE_BYTES_PER_RECV].line[1] = "Bytes";
netperf_output_source[REMOTE_BYTES_PER_RECV].line[2] = "Per";
netperf_output_source[REMOTE_BYTES_PER_RECV].line[3] = "Recv";
netperf_output_source[REMOTE_BYTES_PER_RECV].format = "%.2f";
netperf_output_source[REMOTE_BYTES_PER_RECV].display_value = &remote_bytes_per_recv;
netperf_output_source[REMOTE_BYTES_PER_RECV].max_line_len =
NETPERF_LINE_MAX(REMOTE_BYTES_PER_RECV);
netperf_output_source[REMOTE_BYTES_PER_RECV].tot_line_len =
NETPERF_LINE_TOT(REMOTE_BYTES_PER_RECV);
netperf_output_source[REMOTE_BYTES_PER_SEND].output_name = REMOTE_BYTES_PER_SEND;
netperf_output_source[REMOTE_BYTES_PER_SEND].line[0] = "Remote";
netperf_output_source[REMOTE_BYTES_PER_SEND].line[1] = "Bytes";
netperf_output_source[REMOTE_BYTES_PER_SEND].line[2] = "Per";
netperf_output_source[REMOTE_BYTES_PER_SEND].line[3] = "Send";
netperf_output_source[REMOTE_BYTES_PER_SEND].format = "%.2f";
netperf_output_source[REMOTE_BYTES_PER_SEND].display_value = &remote_bytes_per_send;
netperf_output_source[REMOTE_BYTES_PER_SEND].max_line_len =
NETPERF_LINE_MAX(REMOTE_BYTES_PER_SEND);
netperf_output_source[REMOTE_BYTES_PER_SEND].tot_line_len =
NETPERF_LINE_TOT(REMOTE_BYTES_PER_SEND);
netperf_output_source[REMOTE_BYTES_RECVD].output_name = REMOTE_BYTES_RECVD;
netperf_output_source[REMOTE_BYTES_RECVD].line[0] = "Remote";
netperf_output_source[REMOTE_BYTES_RECVD].line[1] = "Bytes";
netperf_output_source[REMOTE_BYTES_RECVD].line[2] = "Received";
netperf_output_source[REMOTE_BYTES_RECVD].line[3] = "";
netperf_output_source[REMOTE_BYTES_RECVD].format = "%lld";
netperf_output_source[REMOTE_BYTES_RECVD].display_value = &remote_bytes_received;
netperf_output_source[REMOTE_BYTES_RECVD].max_line_len =
NETPERF_LINE_MAX(REMOTE_BYTES_RECVD);
netperf_output_source[REMOTE_BYTES_RECVD].tot_line_len =
NETPERF_LINE_TOT(REMOTE_BYTES_RECVD);
netperf_output_source[REMOTE_BYTES_SENT].output_name = REMOTE_BYTES_SENT;
netperf_output_source[REMOTE_BYTES_SENT].line[0] = "Remote";
netperf_output_source[REMOTE_BYTES_SENT].line[1] = "Bytes";
netperf_output_source[REMOTE_BYTES_SENT].line[2] = "Sent";
netperf_output_source[REMOTE_BYTES_SENT].line[3] = "";
netperf_output_source[REMOTE_BYTES_SENT].format = "%lld";
netperf_output_source[REMOTE_BYTES_SENT].display_value = &remote_bytes_sent;
netperf_output_source[REMOTE_BYTES_SENT].max_line_len =
NETPERF_LINE_MAX(REMOTE_BYTES_SENT);
netperf_output_source[REMOTE_BYTES_SENT].tot_line_len =
NETPERF_LINE_TOT(REMOTE_BYTES_SENT);
netperf_output_source[REMOTE_BYTES_XFERD].output_name = REMOTE_BYTES_XFERD;
netperf_output_source[REMOTE_BYTES_XFERD].line[0] = "Remote";
netperf_output_source[REMOTE_BYTES_XFERD].line[1] = "Bytes";
netperf_output_source[REMOTE_BYTES_XFERD].line[2] = "Xferred";
netperf_output_source[REMOTE_BYTES_XFERD].line[3] = "";
netperf_output_source[REMOTE_BYTES_XFERD].format = "%.0f";
netperf_output_source[REMOTE_BYTES_XFERD].display_value = &remote_bytes_xferd;
netperf_output_source[REMOTE_BYTES_XFERD].max_line_len =
NETPERF_LINE_MAX(REMOTE_BYTES_XFERD);
netperf_output_source[REMOTE_BYTES_XFERD].tot_line_len =
NETPERF_LINE_TOT(REMOTE_BYTES_XFERD);
netperf_output_source[REMOTE_SEND_WIDTH].output_name = REMOTE_SEND_WIDTH;
netperf_output_source[REMOTE_SEND_WIDTH].line[0] = "Remote";
netperf_output_source[REMOTE_SEND_WIDTH].line[1] = "Send";
netperf_output_source[REMOTE_SEND_WIDTH].line[2] = "Width";
netperf_output_source[REMOTE_SEND_WIDTH].format = "%d";
netperf_output_source[REMOTE_SEND_WIDTH].display_value = &remote_send_width;
netperf_output_source[REMOTE_SEND_WIDTH].max_line_len =
NETPERF_LINE_MAX(REMOTE_SEND_WIDTH);
netperf_output_source[REMOTE_SEND_WIDTH].tot_line_len =
NETPERF_LINE_TOT(REMOTE_SEND_WIDTH);
netperf_output_source[REMOTE_RECV_WIDTH].output_name = REMOTE_RECV_WIDTH;
netperf_output_source[REMOTE_RECV_WIDTH].line[0] = "Remote";
netperf_output_source[REMOTE_RECV_WIDTH].line[1] = "Recv";
netperf_output_source[REMOTE_RECV_WIDTH].line[2] = "Width";
netperf_output_source[REMOTE_RECV_WIDTH].format = "%d";
netperf_output_source[REMOTE_RECV_WIDTH].display_value = &remote_recv_width;
netperf_output_source[REMOTE_RECV_WIDTH].max_line_len =
NETPERF_LINE_MAX(REMOTE_RECV_WIDTH);
netperf_output_source[REMOTE_RECV_WIDTH].tot_line_len =
NETPERF_LINE_TOT(REMOTE_RECV_WIDTH);
netperf_output_source[REMOTE_SEND_OFFSET].output_name = REMOTE_SEND_OFFSET;
netperf_output_source[REMOTE_SEND_OFFSET].line[0] = "Remote";
netperf_output_source[REMOTE_SEND_OFFSET].line[1] = "Send";
netperf_output_source[REMOTE_SEND_OFFSET].line[2] = "Offset";
netperf_output_source[REMOTE_SEND_OFFSET].format = "%d";
netperf_output_source[REMOTE_SEND_OFFSET].display_value = &remote_send_offset;
netperf_output_source[REMOTE_SEND_OFFSET].max_line_len =
NETPERF_LINE_MAX(REMOTE_SEND_OFFSET);
netperf_output_source[REMOTE_SEND_OFFSET].tot_line_len =
NETPERF_LINE_TOT(REMOTE_SEND_OFFSET);
netperf_output_source[REMOTE_RECV_OFFSET].output_name = REMOTE_RECV_OFFSET;
netperf_output_source[REMOTE_RECV_OFFSET].line[0] = "Remote";
netperf_output_source[REMOTE_RECV_OFFSET].line[1] = "Recv";
netperf_output_source[REMOTE_RECV_OFFSET].line[2] = "Offset";
netperf_output_source[REMOTE_RECV_OFFSET].format = "%d";
netperf_output_source[REMOTE_RECV_OFFSET].display_value = &remote_recv_offset;
netperf_output_source[REMOTE_RECV_OFFSET].max_line_len =
NETPERF_LINE_MAX(REMOTE_RECV_OFFSET);
netperf_output_source[REMOTE_RECV_OFFSET].tot_line_len =
NETPERF_LINE_TOT(REMOTE_RECV_OFFSET);
netperf_output_source[REMOTE_RECV_ALIGN].output_name = REMOTE_RECV_ALIGN;
netperf_output_source[REMOTE_RECV_ALIGN].line[0] = "Remote";
netperf_output_source[REMOTE_RECV_ALIGN].line[1] = "Recv";
netperf_output_source[REMOTE_RECV_ALIGN].line[2] = "Alignment";
netperf_output_source[REMOTE_RECV_ALIGN].format = "%d";
netperf_output_source[REMOTE_RECV_ALIGN].display_value = &remote_recv_align;
netperf_output_source[REMOTE_RECV_ALIGN].max_line_len =
NETPERF_LINE_MAX(REMOTE_RECV_ALIGN);
netperf_output_source[REMOTE_RECV_ALIGN].tot_line_len =
NETPERF_LINE_TOT(REMOTE_RECV_ALIGN);
netperf_output_source[REMOTE_SEND_ALIGN].output_name = REMOTE_SEND_ALIGN;
netperf_output_source[REMOTE_SEND_ALIGN].line[0] = "Remote";
netperf_output_source[REMOTE_SEND_ALIGN].line[1] = "Send";
netperf_output_source[REMOTE_SEND_ALIGN].line[2] = "Alignment";
netperf_output_source[REMOTE_SEND_ALIGN].format = "%d";
netperf_output_source[REMOTE_SEND_ALIGN].display_value = &remote_send_align;
netperf_output_source[REMOTE_SEND_ALIGN].max_line_len =
NETPERF_LINE_MAX(REMOTE_SEND_ALIGN);
netperf_output_source[REMOTE_SEND_ALIGN].tot_line_len =
NETPERF_LINE_TOT(REMOTE_SEND_ALIGN);
netperf_output_source[REMOTE_SEND_DIRTY_COUNT].output_name = REMOTE_SEND_DIRTY_COUNT;
netperf_output_source[REMOTE_SEND_DIRTY_COUNT].line[0] = "Remote";
netperf_output_source[REMOTE_SEND_DIRTY_COUNT].line[1] = "Send";
netperf_output_source[REMOTE_SEND_DIRTY_COUNT].line[2] = "Dirty";
netperf_output_source[REMOTE_SEND_DIRTY_COUNT].line[3] = "Count";
netperf_output_source[REMOTE_SEND_DIRTY_COUNT].format = "%d";
netperf_output_source[REMOTE_SEND_DIRTY_COUNT].display_value = &rem_dirty_count;
netperf_output_source[REMOTE_SEND_DIRTY_COUNT].max_line_len =
NETPERF_LINE_MAX(REMOTE_SEND_DIRTY_COUNT);
netperf_output_source[REMOTE_SEND_DIRTY_COUNT].tot_line_len =
NETPERF_LINE_TOT(REMOTE_SEND_DIRTY_COUNT);
netperf_output_source[REMOTE_RECV_DIRTY_COUNT].output_name = REMOTE_RECV_DIRTY_COUNT;
netperf_output_source[REMOTE_RECV_DIRTY_COUNT].line[0] = "Remote";
netperf_output_source[REMOTE_RECV_DIRTY_COUNT].line[1] = "Recv";
netperf_output_source[REMOTE_RECV_DIRTY_COUNT].line[2] = "Dirty";
netperf_output_source[REMOTE_RECV_DIRTY_COUNT].line[3] = "Count";
netperf_output_source[REMOTE_RECV_DIRTY_COUNT].format = "%d";
netperf_output_source[REMOTE_RECV_DIRTY_COUNT].display_value = &rem_dirty_count;
netperf_output_source[REMOTE_RECV_DIRTY_COUNT].max_line_len =
NETPERF_LINE_MAX(REMOTE_RECV_DIRTY_COUNT);
netperf_output_source[REMOTE_RECV_DIRTY_COUNT].tot_line_len =
NETPERF_LINE_TOT(REMOTE_RECV_DIRTY_COUNT);
netperf_output_source[REMOTE_RECV_CLEAN_COUNT].output_name = REMOTE_RECV_CLEAN_COUNT;
netperf_output_source[REMOTE_RECV_CLEAN_COUNT].line[0] = "Remote";
netperf_output_source[REMOTE_RECV_CLEAN_COUNT].line[1] = "Recv";
netperf_output_source[REMOTE_RECV_CLEAN_COUNT].line[2] = "Clean";
netperf_output_source[REMOTE_RECV_CLEAN_COUNT].line[3] = "Count";
netperf_output_source[REMOTE_RECV_CLEAN_COUNT].format = "%d";
netperf_output_source[REMOTE_RECV_CLEAN_COUNT].display_value = &rem_clean_count;
netperf_output_source[REMOTE_RECV_CLEAN_COUNT].max_line_len =
NETPERF_LINE_MAX(REMOTE_RECV_CLEAN_COUNT);
netperf_output_source[REMOTE_RECV_CLEAN_COUNT].tot_line_len =
NETPERF_LINE_TOT(REMOTE_RECV_CLEAN_COUNT);
netperf_output_source[REMOTE_CPU_UTIL].output_name = REMOTE_CPU_UTIL;
netperf_output_source[REMOTE_CPU_UTIL].line[0] = "Remote";
netperf_output_source[REMOTE_CPU_UTIL].line[1] = "CPU";
netperf_output_source[REMOTE_CPU_UTIL].line[2] = "Util";
netperf_output_source[REMOTE_CPU_UTIL].line[3] = "%";
netperf_output_source[REMOTE_CPU_UTIL].format = "%.2f";
netperf_output_source[REMOTE_CPU_UTIL].display_value = &remote_cpu_utilization_double;
netperf_output_source[REMOTE_CPU_UTIL].max_line_len =
NETPERF_LINE_MAX(REMOTE_CPU_UTIL);
netperf_output_source[REMOTE_CPU_UTIL].tot_line_len =
NETPERF_LINE_TOT(REMOTE_CPU_UTIL);
netperf_output_source[REMOTE_CPU_PEAK_UTIL].output_name = REMOTE_CPU_PEAK_UTIL;
netperf_output_source[REMOTE_CPU_PEAK_UTIL].line[0] = "Remote";
netperf_output_source[REMOTE_CPU_PEAK_UTIL].line[1] = "Peak";
netperf_output_source[REMOTE_CPU_PEAK_UTIL].line[2] = "Per CPU";
netperf_output_source[REMOTE_CPU_PEAK_UTIL].line[3] = "Util %";
netperf_output_source[REMOTE_CPU_PEAK_UTIL].format = "%.2f";
netperf_output_source[REMOTE_CPU_PEAK_UTIL].display_value = &lib_remote_peak_cpu_util;
netperf_output_source[REMOTE_CPU_PEAK_UTIL].max_line_len =
NETPERF_LINE_MAX(REMOTE_CPU_PEAK_UTIL);
netperf_output_source[REMOTE_CPU_PEAK_UTIL].tot_line_len =
NETPERF_LINE_TOT(REMOTE_CPU_PEAK_UTIL);
netperf_output_source[REMOTE_CPU_PEAK_ID].output_name = REMOTE_CPU_PEAK_ID;
netperf_output_source[REMOTE_CPU_PEAK_ID].line[0] = "Remote";
netperf_output_source[REMOTE_CPU_PEAK_ID].line[1] = "Peak";
netperf_output_source[REMOTE_CPU_PEAK_ID].line[2] = "Per CPU";
netperf_output_source[REMOTE_CPU_PEAK_ID].line[3] = "ID";
netperf_output_source[REMOTE_CPU_PEAK_ID].format = "%d";
netperf_output_source[REMOTE_CPU_PEAK_ID].display_value = &lib_remote_peak_cpu_id;
netperf_output_source[REMOTE_CPU_PEAK_ID].max_line_len =
NETPERF_LINE_MAX(REMOTE_CPU_PEAK_ID);
netperf_output_source[REMOTE_CPU_PEAK_ID].tot_line_len =
NETPERF_LINE_TOT(REMOTE_CPU_PEAK_ID);
netperf_output_source[REMOTE_CPU_BIND].output_name = REMOTE_CPU_BIND;
netperf_output_source[REMOTE_CPU_BIND].line[0] = "Remote";
netperf_output_source[REMOTE_CPU_BIND].line[1] = "CPU";
netperf_output_source[REMOTE_CPU_BIND].line[2] = "Bind";
netperf_output_source[REMOTE_CPU_BIND].line[3] = "";
netperf_output_source[REMOTE_CPU_BIND].format = "%d";
netperf_output_source[REMOTE_CPU_BIND].display_value = &remote_proc_affinity;
netperf_output_source[REMOTE_CPU_BIND].max_line_len =
NETPERF_LINE_MAX(REMOTE_CPU_BIND);
netperf_output_source[REMOTE_CPU_BIND].tot_line_len =
NETPERF_LINE_TOT(REMOTE_CPU_BIND);
netperf_output_source[REMOTE_SD].output_name = REMOTE_SD;
netperf_output_source[REMOTE_SD].line[0] = "Remote";
netperf_output_source[REMOTE_SD].line[1] = "Service";
netperf_output_source[REMOTE_SD].line[2] = "Demand";
netperf_output_source[REMOTE_SD].line[3] = "";
netperf_output_source[REMOTE_SD].format = "%.3f";
netperf_output_source[REMOTE_SD].display_value = &remote_service_demand_double;
netperf_output_source[REMOTE_SD].max_line_len =
NETPERF_LINE_MAX(REMOTE_SD);
netperf_output_source[REMOTE_SD].tot_line_len =
NETPERF_LINE_TOT(REMOTE_SD);
netperf_output_source[REMOTE_CPU_METHOD].output_name = REMOTE_CPU_METHOD;
netperf_output_source[REMOTE_CPU_METHOD].line[0] = "Remote";
netperf_output_source[REMOTE_CPU_METHOD].line[1] = "CPU";
netperf_output_source[REMOTE_CPU_METHOD].line[2] = "Util";
netperf_output_source[REMOTE_CPU_METHOD].line[3] = "Method";
netperf_output_source[REMOTE_CPU_METHOD].format = "%c";
netperf_output_source[REMOTE_CPU_METHOD].display_value = &remote_cpu_method;
netperf_output_source[REMOTE_CPU_METHOD].max_line_len =
NETPERF_LINE_MAX(REMOTE_CPU_METHOD);
netperf_output_source[REMOTE_CPU_METHOD].tot_line_len =
NETPERF_LINE_TOT(REMOTE_CPU_METHOD);
netperf_output_source[REMOTE_CPU_COUNT].output_name = REMOTE_CPU_COUNT;
netperf_output_source[REMOTE_CPU_COUNT].line[0] = "Remote";
netperf_output_source[REMOTE_CPU_COUNT].line[1] = "CPU";
netperf_output_source[REMOTE_CPU_COUNT].line[2] = "Count";
netperf_output_source[REMOTE_CPU_COUNT].format = "%d";
netperf_output_source[REMOTE_CPU_COUNT].display_value = &lib_num_rem_cpus;
netperf_output_source[REMOTE_CPU_COUNT].max_line_len =
NETPERF_LINE_MAX(REMOTE_CPU_COUNT);
netperf_output_source[REMOTE_CPU_COUNT].tot_line_len =
NETPERF_LINE_TOT(REMOTE_CPU_COUNT);
netperf_output_source[REMOTE_NODELAY].output_name = REMOTE_NODELAY;
netperf_output_source[REMOTE_NODELAY].line[0] = "Remote";
netperf_output_source[REMOTE_NODELAY].line[1] = "NODELAY";
netperf_output_source[REMOTE_NODELAY].line[2] = "";
netperf_output_source[REMOTE_NODELAY].line[3] = "";
netperf_output_source[REMOTE_NODELAY].format = "%d";
netperf_output_source[REMOTE_NODELAY].display_value = &rem_nodelay;
netperf_output_source[REMOTE_NODELAY].max_line_len =
NETPERF_LINE_MAX(REMOTE_NODELAY);
netperf_output_source[REMOTE_NODELAY].tot_line_len =
NETPERF_LINE_TOT(REMOTE_NODELAY);
netperf_output_source[REMOTE_CORK].output_name = REMOTE_CORK;
netperf_output_source[REMOTE_CORK].line[0] = "Remote";
netperf_output_source[REMOTE_CORK].line[1] = "Cork";
netperf_output_source[REMOTE_CORK].line[2] = "";
netperf_output_source[REMOTE_CORK].line[3] = "";
netperf_output_source[REMOTE_CORK].format = "%d";
netperf_output_source[REMOTE_CORK].display_value = &rem_tcpcork;
netperf_output_source[REMOTE_CORK].max_line_len =
NETPERF_LINE_MAX(REMOTE_CORK);
netperf_output_source[REMOTE_CORK].tot_line_len =
NETPERF_LINE_TOT(REMOTE_CORK);
netperf_output_source[LOCAL_DRIVER_NAME].output_name = LOCAL_DRIVER_NAME;
netperf_output_source[LOCAL_DRIVER_NAME].line[0] = "Local";
netperf_output_source[LOCAL_DRIVER_NAME].line[1] = "Driver";
netperf_output_source[LOCAL_DRIVER_NAME].line[2] = "Name";
netperf_output_source[LOCAL_DRIVER_NAME].line[3] = "";
netperf_output_source[LOCAL_DRIVER_NAME].format = "%s";
netperf_output_source[LOCAL_DRIVER_NAME].display_value = local_driver_name;
netperf_output_source[LOCAL_DRIVER_NAME].max_line_len =
NETPERF_LINE_MAX(LOCAL_DRIVER_NAME);
netperf_output_source[LOCAL_DRIVER_NAME].tot_line_len =
NETPERF_LINE_TOT(LOCAL_DRIVER_NAME);
netperf_output_source[LOCAL_DRIVER_VERSION].output_name = LOCAL_DRIVER_VERSION;
netperf_output_source[LOCAL_DRIVER_VERSION].line[0] = "Local";
netperf_output_source[LOCAL_DRIVER_VERSION].line[1] = "Driver";
netperf_output_source[LOCAL_DRIVER_VERSION].line[2] = "Version";
netperf_output_source[LOCAL_DRIVER_VERSION].line[3] = "";
netperf_output_source[LOCAL_DRIVER_VERSION].format = "%s";
netperf_output_source[LOCAL_DRIVER_VERSION].display_value = local_driver_version;
netperf_output_source[LOCAL_DRIVER_VERSION].max_line_len =
NETPERF_LINE_MAX(LOCAL_DRIVER_VERSION);
netperf_output_source[LOCAL_DRIVER_VERSION].tot_line_len =
NETPERF_LINE_TOT(LOCAL_DRIVER_VERSION);
netperf_output_source[LOCAL_DRIVER_FIRMWARE].output_name = LOCAL_DRIVER_FIRMWARE;
netperf_output_source[LOCAL_DRIVER_FIRMWARE].line[0] = "Local";
netperf_output_source[LOCAL_DRIVER_FIRMWARE].line[1] = "Driver";
netperf_output_source[LOCAL_DRIVER_FIRMWARE].line[2] = "Firmware";
netperf_output_source[LOCAL_DRIVER_FIRMWARE].line[3] = "";
netperf_output_source[LOCAL_DRIVER_FIRMWARE].format = "%s";
netperf_output_source[LOCAL_DRIVER_FIRMWARE].display_value = local_driver_firmware;
netperf_output_source[LOCAL_DRIVER_FIRMWARE].max_line_len =
NETPERF_LINE_MAX(LOCAL_DRIVER_FIRMWARE);
netperf_output_source[LOCAL_DRIVER_FIRMWARE].tot_line_len =
NETPERF_LINE_TOT(LOCAL_DRIVER_FIRMWARE);
netperf_output_source[LOCAL_DRIVER_BUS].output_name = LOCAL_DRIVER_BUS;
netperf_output_source[LOCAL_DRIVER_BUS].line[0] = "Local";
netperf_output_source[LOCAL_DRIVER_BUS].line[1] = "Driver";
netperf_output_source[LOCAL_DRIVER_BUS].line[2] = "Bus";
netperf_output_source[LOCAL_DRIVER_BUS].line[3] = "";
netperf_output_source[LOCAL_DRIVER_BUS].format = "%s";
netperf_output_source[LOCAL_DRIVER_BUS].display_value = local_driver_bus;
netperf_output_source[LOCAL_DRIVER_BUS].max_line_len =
NETPERF_LINE_MAX(LOCAL_DRIVER_BUS);
netperf_output_source[LOCAL_DRIVER_BUS].tot_line_len =
NETPERF_LINE_TOT(LOCAL_DRIVER_BUS);
netperf_output_source[REMOTE_DRIVER_NAME].output_name = REMOTE_DRIVER_NAME;
netperf_output_source[REMOTE_DRIVER_NAME].line[0] = "Remote";
netperf_output_source[REMOTE_DRIVER_NAME].line[1] = "Driver";
netperf_output_source[REMOTE_DRIVER_NAME].line[2] = "Name";
netperf_output_source[REMOTE_DRIVER_NAME].line[3] = "";
netperf_output_source[REMOTE_DRIVER_NAME].format = "%s";
netperf_output_source[REMOTE_DRIVER_NAME].display_value = remote_driver_name;
netperf_output_source[REMOTE_DRIVER_NAME].max_line_len =
NETPERF_LINE_MAX(REMOTE_DRIVER_NAME);
netperf_output_source[REMOTE_DRIVER_NAME].tot_line_len =
NETPERF_LINE_TOT(REMOTE_DRIVER_NAME);
netperf_output_source[REMOTE_DRIVER_VERSION].output_name = REMOTE_DRIVER_VERSION;
netperf_output_source[REMOTE_DRIVER_VERSION].line[0] = "Remote";
netperf_output_source[REMOTE_DRIVER_VERSION].line[1] = "Driver";
netperf_output_source[REMOTE_DRIVER_VERSION].line[2] = "Version";
netperf_output_source[REMOTE_DRIVER_VERSION].line[3] = "";
netperf_output_source[REMOTE_DRIVER_VERSION].format = "%s";
netperf_output_source[REMOTE_DRIVER_VERSION].display_value = remote_driver_version;
netperf_output_source[REMOTE_DRIVER_VERSION].max_line_len =
NETPERF_LINE_MAX(REMOTE_DRIVER_VERSION);
netperf_output_source[REMOTE_DRIVER_VERSION].tot_line_len =
NETPERF_LINE_TOT(REMOTE_DRIVER_VERSION);
netperf_output_source[REMOTE_DRIVER_FIRMWARE].output_name = REMOTE_DRIVER_FIRMWARE;
netperf_output_source[REMOTE_DRIVER_FIRMWARE].line[0] = "Remote";
netperf_output_source[REMOTE_DRIVER_FIRMWARE].line[1] = "Driver";
netperf_output_source[REMOTE_DRIVER_FIRMWARE].line[2] = "Firmware";
netperf_output_source[REMOTE_DRIVER_FIRMWARE].line[3] = "";
netperf_output_source[REMOTE_DRIVER_FIRMWARE].format = "%s";
netperf_output_source[REMOTE_DRIVER_FIRMWARE].display_value = remote_driver_firmware;
netperf_output_source[REMOTE_DRIVER_FIRMWARE].max_line_len =
NETPERF_LINE_MAX(REMOTE_DRIVER_FIRMWARE);
netperf_output_source[REMOTE_DRIVER_FIRMWARE].tot_line_len =
NETPERF_LINE_TOT(REMOTE_DRIVER_FIRMWARE);
netperf_output_source[REMOTE_DRIVER_BUS].output_name = REMOTE_DRIVER_BUS;
netperf_output_source[REMOTE_DRIVER_BUS].line[0] = "Remote";
netperf_output_source[REMOTE_DRIVER_BUS].line[1] = "Driver";
netperf_output_source[REMOTE_DRIVER_BUS].line[2] = "Bus";
netperf_output_source[REMOTE_DRIVER_BUS].line[3] = "";
netperf_output_source[REMOTE_DRIVER_BUS].format = "%s";
netperf_output_source[REMOTE_DRIVER_BUS].display_value = remote_driver_bus;
netperf_output_source[REMOTE_DRIVER_BUS].max_line_len =
NETPERF_LINE_MAX(REMOTE_DRIVER_BUS);
netperf_output_source[REMOTE_DRIVER_BUS].tot_line_len =
NETPERF_LINE_TOT(REMOTE_DRIVER_BUS);
netperf_output_source[LOCAL_INTERFACE_SUBDEVICE].output_name = LOCAL_INTERFACE_SUBDEVICE;
netperf_output_source[LOCAL_INTERFACE_SUBDEVICE].line[0] = "Local";
netperf_output_source[LOCAL_INTERFACE_SUBDEVICE].line[1] = "Interface";
netperf_output_source[LOCAL_INTERFACE_SUBDEVICE].line[2] = "Subdevice";
netperf_output_source[LOCAL_INTERFACE_SUBDEVICE].line[3] = "";
netperf_output_source[LOCAL_INTERFACE_SUBDEVICE].format = "0x%.4x";
netperf_output_source[LOCAL_INTERFACE_SUBDEVICE].display_value = &local_interface_subdevice;
netperf_output_source[LOCAL_INTERFACE_SUBDEVICE].max_line_len =
NETPERF_LINE_MAX(LOCAL_INTERFACE_SUBDEVICE);
netperf_output_source[LOCAL_INTERFACE_SUBDEVICE].tot_line_len =
NETPERF_LINE_TOT(LOCAL_INTERFACE_SUBDEVICE);
netperf_output_source[LOCAL_INTERFACE_DEVICE].output_name = LOCAL_INTERFACE_DEVICE;
netperf_output_source[LOCAL_INTERFACE_DEVICE].line[0] = "Local";
netperf_output_source[LOCAL_INTERFACE_DEVICE].line[1] = "Interface";
netperf_output_source[LOCAL_INTERFACE_DEVICE].line[2] = "Device";
netperf_output_source[LOCAL_INTERFACE_DEVICE].line[3] = "";
netperf_output_source[LOCAL_INTERFACE_DEVICE].format = "0x%.4x";
netperf_output_source[LOCAL_INTERFACE_DEVICE].display_value = &local_interface_device;
netperf_output_source[LOCAL_INTERFACE_DEVICE].max_line_len =
NETPERF_LINE_MAX(LOCAL_INTERFACE_DEVICE);
netperf_output_source[LOCAL_INTERFACE_DEVICE].tot_line_len =
NETPERF_LINE_TOT(LOCAL_INTERFACE_DEVICE);
netperf_output_source[LOCAL_INTERFACE_SUBVENDOR].output_name = LOCAL_INTERFACE_SUBVENDOR;
netperf_output_source[LOCAL_INTERFACE_SUBVENDOR].line[0] = "Local";
netperf_output_source[LOCAL_INTERFACE_SUBVENDOR].line[1] = "Interface";
netperf_output_source[LOCAL_INTERFACE_SUBVENDOR].line[2] = "Subvendor";
netperf_output_source[LOCAL_INTERFACE_SUBVENDOR].line[3] = "";
netperf_output_source[LOCAL_INTERFACE_SUBVENDOR].format = "0x%.4x";
netperf_output_source[LOCAL_INTERFACE_SUBVENDOR].display_value = &local_interface_subvendor;
netperf_output_source[LOCAL_INTERFACE_SUBVENDOR].max_line_len =
NETPERF_LINE_MAX(LOCAL_INTERFACE_SUBVENDOR);
netperf_output_source[LOCAL_INTERFACE_SUBVENDOR].tot_line_len =
NETPERF_LINE_TOT(LOCAL_INTERFACE_SUBVENDOR);
netperf_output_source[LOCAL_INTERFACE_VENDOR].output_name = LOCAL_INTERFACE_VENDOR;
netperf_output_source[LOCAL_INTERFACE_VENDOR].line[0] = "Local";
netperf_output_source[LOCAL_INTERFACE_VENDOR].line[1] = "Interface";
netperf_output_source[LOCAL_INTERFACE_VENDOR].line[2] = "Vendor";
netperf_output_source[LOCAL_INTERFACE_VENDOR].line[3] = "";
netperf_output_source[LOCAL_INTERFACE_VENDOR].format = "0x%.4x";
netperf_output_source[LOCAL_INTERFACE_VENDOR].display_value = &local_interface_vendor;
netperf_output_source[LOCAL_INTERFACE_VENDOR].max_line_len =
NETPERF_LINE_MAX(LOCAL_INTERFACE_VENDOR);
netperf_output_source[LOCAL_INTERFACE_VENDOR].tot_line_len =
NETPERF_LINE_TOT(LOCAL_INTERFACE_VENDOR);
netperf_output_source[REMOTE_INTERFACE_SUBDEVICE].output_name = REMOTE_INTERFACE_SUBDEVICE;
netperf_output_source[REMOTE_INTERFACE_SUBDEVICE].line[0] = "Remote";
netperf_output_source[REMOTE_INTERFACE_SUBDEVICE].line[1] = "Interface";
netperf_output_source[REMOTE_INTERFACE_SUBDEVICE].line[2] = "Subdevice";
netperf_output_source[REMOTE_INTERFACE_SUBDEVICE].line[3] = "";
netperf_output_source[REMOTE_INTERFACE_SUBDEVICE].format = "0x%.4x";
netperf_output_source[REMOTE_INTERFACE_SUBDEVICE].display_value = &remote_interface_subdevice;
netperf_output_source[REMOTE_INTERFACE_SUBDEVICE].max_line_len =
NETPERF_LINE_MAX(REMOTE_INTERFACE_SUBDEVICE);
netperf_output_source[REMOTE_INTERFACE_SUBDEVICE].tot_line_len =
NETPERF_LINE_TOT(REMOTE_INTERFACE_SUBDEVICE);
netperf_output_source[REMOTE_INTERFACE_DEVICE].output_name = REMOTE_INTERFACE_DEVICE;
netperf_output_source[REMOTE_INTERFACE_DEVICE].line[0] = "Remote";
netperf_output_source[REMOTE_INTERFACE_DEVICE].line[1] = "Interface";
netperf_output_source[REMOTE_INTERFACE_DEVICE].line[2] = "Device";
netperf_output_source[REMOTE_INTERFACE_DEVICE].line[3] = "";
netperf_output_source[REMOTE_INTERFACE_DEVICE].format = "0x%.4x";
netperf_output_source[REMOTE_INTERFACE_DEVICE].display_value = &remote_interface_device;
netperf_output_source[REMOTE_INTERFACE_DEVICE].max_line_len =
NETPERF_LINE_MAX(REMOTE_INTERFACE_DEVICE);
netperf_output_source[REMOTE_INTERFACE_DEVICE].tot_line_len =
NETPERF_LINE_TOT(REMOTE_INTERFACE_DEVICE);
netperf_output_source[REMOTE_INTERFACE_SUBVENDOR].output_name = REMOTE_INTERFACE_SUBVENDOR;
netperf_output_source[REMOTE_INTERFACE_SUBVENDOR].line[0] = "Remote";
netperf_output_source[REMOTE_INTERFACE_SUBVENDOR].line[1] = "Interface";
netperf_output_source[REMOTE_INTERFACE_SUBVENDOR].line[2] = "Subvendor";
netperf_output_source[REMOTE_INTERFACE_SUBVENDOR].line[3] = "";
netperf_output_source[REMOTE_INTERFACE_SUBVENDOR].format = "0x%.4x";
netperf_output_source[REMOTE_INTERFACE_SUBVENDOR].display_value = &remote_interface_subvendor;
netperf_output_source[REMOTE_INTERFACE_SUBVENDOR].max_line_len =
NETPERF_LINE_MAX(REMOTE_INTERFACE_SUBVENDOR);
netperf_output_source[REMOTE_INTERFACE_SUBVENDOR].tot_line_len =
NETPERF_LINE_TOT(REMOTE_INTERFACE_SUBVENDOR);
netperf_output_source[REMOTE_INTERFACE_VENDOR].output_name = REMOTE_INTERFACE_VENDOR;
netperf_output_source[REMOTE_INTERFACE_VENDOR].line[0] = "Remote";
netperf_output_source[REMOTE_INTERFACE_VENDOR].line[1] = "Interface";
netperf_output_source[REMOTE_INTERFACE_VENDOR].line[2] = "Vendor";
netperf_output_source[REMOTE_INTERFACE_VENDOR].line[3] = "";
netperf_output_source[REMOTE_INTERFACE_VENDOR].format = "0x%.4x";
netperf_output_source[REMOTE_INTERFACE_VENDOR].display_value = &remote_interface_vendor;
netperf_output_source[REMOTE_INTERFACE_VENDOR].max_line_len =
NETPERF_LINE_MAX(REMOTE_INTERFACE_VENDOR);
netperf_output_source[REMOTE_INTERFACE_VENDOR].tot_line_len =
NETPERF_LINE_TOT(REMOTE_INTERFACE_VENDOR);
netperf_output_source[LOCAL_INTERFACE_NAME].output_name = LOCAL_INTERFACE_NAME;
netperf_output_source[LOCAL_INTERFACE_NAME].line[0] = "Local";
netperf_output_source[LOCAL_INTERFACE_NAME].line[