小由说iperf3源码(3)_主要数据结构

文章目录

  • 主要数据结构关系图
  • 数据结构详解
    • struct iperf_test

主要数据结构关系图

小由说iperf3源码(3)_主要数据结构_第1张图片

数据结构详解

struct iperf_test

struct iperf_test {
	char role; //角色(客户端和服务端),客户端通过-c命令行参数指定、服务端通过-s命令行参数指定
	int sender; //数据发送方,未设置reverse客户端为发送方,设置reverse后服务端为发送方
    int sender_has_retransmits; //发送方是否
    struct protocol *protocol; //当前使用的协议:udp,tcp, sctp
    signed char state; //客户端和服务端测试状态标识
    char     *server_hostname;  //客户端指定服务端ip地址,通过-c命令行参数指定
    char     *tmp_template; //mkstemp函数指定文件名称,文件名称格式后面最后6个字符为XXXXXX
    char     *bind_address; //客户端专用参数,通过-B命令行参数指定,绑定ip地址,bind函数指定地址
    TAILQ_HEAD(xbind_addrhead, xbind_entry) xbind_addrs; /* all -X opts */
    int       bind_port;  //客户端专用参数,通过--cport命令行参数指定,绑定端口号,bind函数指定端口
    int       server_port; //服务端端口号,通过-p命令行参数指定,客户端通过-p指定服务端端口号,服务端通过-p绑定端口号
    int       omit;   /* duration of omit period (-O flag) */
    int       duration; //测试总时长,单位为秒
    char     *diskfile_name;            /* -F option */
    int       affinity, server_affinity;    /* -A option */
#if defined(HAVE_CPUSET_SETAFFINITY)
    cpuset_t cpumask;
#endif /* HAVE_CPUSET_SETAFFINITY */
    char     *title; //每一行测试结果,添加一个title,通过-T命令行参数指定
    char     *congestion;//客户端专用参数,通过-C命令行参数指定,设置TCP拥塞控制算法
    char     *pidfile;              /* -P option */
    char     *logfile;              /* --logfile option */
    FILE     *outfile;

    int       ctrl_sck; //控制套接字,用于客户端和服务端交换控制信息
    int       listener; //监听套接字,服务端创建,用于生成控制套接字
    int       prot_listener; //业务监听套接字

    int       daemon; //服务端专用参数,通过-D命令行参数指定,程序是否后台执行
    int       one_off; //服务端专用参数,通过-1命令行参数指定,设置服务端是否测试一次退出                      
    int       no_delay; //客户端专用参数,通过-N命令行参数指定,TCP和SCTP开启和关闭TCP_NODELAY选项,用来控制是否开启Nagle算法
    int       reverse; //客户端专用参数,通过-R命令行参数指定,设置客户端为数据发送方或者数据接收方                     
    int       verbose; //查看iperf3版本信息
    int       json_output; //以JSON格式输出信息
    int       zerocopy;//客户端专用参数,通过-Z命令行参数指定,零拷贝,通过sendfile函数发送数据
    int       debug; //通过-d命令行参数指定,打开调试模式,输出调试信息
    int       get_server_output;        /* --get-server-output */
    int       udp_counters_64bit;       /* --use-64-bit-udp-counters */
    int       no_fq_socket_pacing;    /* --no-fq-socket-pacing */
    int       multisend;

    char     *json_output_string; /* rendered JSON output if json_output is set */
    /* Select related parameters */
    int       max_fd;
    fd_set    read_set;                         /* set of read sockets */
    fd_set    write_set;                        /* set of write sockets */

    /* Interval related members */
    int       omitting;
    double    stats_interval;
    double    reporter_interval;
    void      (*stats_callback) (struct iperf_test *);
    void      (*reporter_callback) (struct iperf_test *);
    Timer     *omit_timer;
    Timer     *timer;
    int        done;
    Timer     *stats_timer;
    Timer     *reporter_timer;

    double cpu_util[3];                            /* cpu utilization of the test - total, user, system */
    double remote_cpu_util[3];                     /* cpu utilization for the remote host/client - total, user, system */

    int       num_streams;                      /* total streams in the test (-P) */

    iperf_size_t bytes_sent;
    iperf_size_t blocks_sent;
    char      cookie[COOKIE_SIZE];
//    struct iperf_stream *streams;               /* pointer to list of struct stream */
    SLIST_HEAD(slisthead, iperf_stream) streams;
    struct iperf_settings *settings;

    SLIST_HEAD(plisthead, protocol) protocols;

    /* callback functions */
    void      (*on_new_stream)(struct iperf_stream *);
    void      (*on_test_start)(struct iperf_test *);
    void      (*on_connect)(struct iperf_test *);
    void      (*on_test_finish)(struct iperf_test *);

    /* cJSON handles for use when in -J mode */\
    cJSON *json_top;
    cJSON *json_start;
    cJSON *json_connected;
    cJSON *json_intervals;
    cJSON *json_end;
    /* Server output (use on client side only) */
    char *server_output_text;
    cJSON *json_server_output;
    /* Server output (use on server side only) */
    TAILQ_HEAD(iperf_textlisthead, iperf_textline) server_output_list;
}

你可能感兴趣的:(iperf源码分析,Linux,网络技术,网络通信,linux)