acl  3.5.3.0
lib_icmp_type.h
浏览该文件的文档.
1 #ifndef __LIB_ICMP_TYPE_INCLUDE_H__
2 #define __LIB_ICMP_TYPE_INCLUDE_H__
3 
4 #define ICMP_TYPE_ECHOREPLY 0
5 #define ICMP_TYPE_ECHO 8
6 
7 #define ICMP_CODE_EXTRA 16
8 
9 typedef struct ICMP_STREAM ICMP_STREAM;
10 typedef struct ICMP_CHAT ICMP_CHAT;
11 typedef struct ICMP_STAT ICMP_STAT;
12 typedef struct ICMP_HOST ICMP_HOST;
13 typedef struct ICMP_PKT ICMP_PKT;
15 
16 /**< ICMP 通信过程中每个主机的 PING 响应状态信息汇总 */
17 struct ICMP_STAT {
18  double tmin; /**< 最短时间 */
19  double tmax; /**< 最长时间 */
20  double tsum; /**< 总时间 */
21  double tave; /**< 平均时间 */
22  size_t nsent; /**< 已经发送的包个数 */
23  size_t nreceived; /**< 已经收到的包个数 */
24  double loss; /**< 丢失的包个数 */
25 };
26 
27 #define ICMP_MIN_PACKET 32
28 #define ICMP_MAX_PACKET 1024
29 
30 /**< ICMP 所发送的每个 PING 包之后的主机状态应答 */
32  size_t reply_len; /**< 包回复的数据长度 */
33  char from_ip[64]; /**< 源地址 */
34 
35  double rtt; /**< 往返时间(毫秒)(Round Trip Time) */
36  unsigned short seq; /**< 序列号(seq no) */
37  unsigned char ttl; /**< 生存时间(time to live) */
38  unsigned int gid;
39  char *data;
40  size_t dlen;
41  char status;
42 #define ICMP_STATUS_INIT 0
43 #define ICMP_STATUS_OK 1
44 #define ICMP_STATUS_UNREACH (1<<1)
45 #define ICMP_STATUS_TIMEOUT (1<<2)
46 
48 };
49 
50 /**< 目的主机信息结构 */
51 struct ICMP_HOST {
52  ICMP_STAT icmp_stat; /**< ICMP 通信过程中的状态 */
53  char dest_ip[32]; /**< 目的主机IP地址 */
54  char domain[64]; /**< 目的主机IP所对应的域名 */
55  struct sockaddr_in dest; /**< 发送包时目的主机地址 */
56  struct sockaddr_in from; /**< 接收时源主机地址 */
57  int from_len; /**< 接收时存储在 from 中的地址长度 */
58  int delay; /**< 发送 PING 的间隔,单位为毫秒 */
59  int timeout; /**< 超时时间(毫秒) */
60  size_t dlen; /**< 每个发送包的大小(字节) */
61  size_t nsent; /**< 已经发送给该目的主机包的个数 */
62 
63  ICMP_PKT **pkts; /**< 所有包的数组 */
64  size_t npkt; /**< 设置的向该目的主机发送包的个数 */
65  size_t ipkt; /**< 记录下一个要发送的包的下标 */
66 
67  ACL_RING host_ring; /**< 链入 ICMP_CHAT->host_head 链中 */
68  ICMP_CHAT *chat; /**< 所属的通信对象 */
69  char enable_log; /**< 是否将响应包的信息记日志 */
70 
71  /**< 汇报发送包的响应包状态 */
72  void (*stat_respond)(ICMP_PKT_STATUS*, void*);
73 
74  /**< 该发送包的响应包超时 */
75  void (*stat_timeout)(ICMP_PKT_STATUS*, void*);
76 
77  /**< 该主机不可达 */
78  void (*stat_unreach)(ICMP_PKT_STATUS*, void*);
79 
80  /**< 当主机的包发完时的回调函数 */
81  void (*stat_finish)(ICMP_HOST*, void*);
82 
83  /**< 应用传递的私有参数地址 */
84  void *arg;
85 };
86 
87 #endif
unsigned int gid
Definition: lib_icmp_type.h:38
struct sockaddr_in dest
Definition: lib_icmp_type.h:55
size_t ipkt
Definition: lib_icmp_type.h:65
unsigned short seq
Definition: lib_icmp_type.h:36
void(* stat_unreach)(ICMP_PKT_STATUS *, void *)
Definition: lib_icmp_type.h:78
char enable_log
Definition: lib_icmp_type.h:69
struct ICMP_CHAT ICMP_CHAT
Definition: lib_icmp_type.h:10
char from_ip[64]
Definition: lib_icmp_type.h:33
void(* stat_finish)(ICMP_HOST *, void *)
Definition: lib_icmp_type.h:81
ICMP_PKT * pkt
Definition: lib_icmp_type.h:47
ICMP_CHAT * chat
Definition: lib_icmp_type.h:68
struct sockaddr_in from
Definition: lib_icmp_type.h:56
struct ICMP_PKT ICMP_PKT
Definition: lib_icmp_type.h:13
double loss
Definition: lib_icmp_type.h:24
double tmax
Definition: lib_icmp_type.h:19
size_t nsent
Definition: lib_icmp_type.h:61
char domain[64]
Definition: lib_icmp_type.h:54
size_t dlen
Definition: lib_icmp_type.h:60
struct ICMP_STREAM ICMP_STREAM
Definition: lib_icmp_type.h:9
size_t npkt
Definition: lib_icmp_type.h:64
void * arg
Definition: lib_icmp_type.h:84
void(* stat_timeout)(ICMP_PKT_STATUS *, void *)
Definition: lib_icmp_type.h:75
void(* stat_respond)(ICMP_PKT_STATUS *, void *)
Definition: lib_icmp_type.h:72
ACL_RING host_ring
Definition: lib_icmp_type.h:67
double tmin
Definition: lib_icmp_type.h:18
char dest_ip[32]
Definition: lib_icmp_type.h:53
ICMP_STAT icmp_stat
Definition: lib_icmp_type.h:52
size_t nreceived
Definition: lib_icmp_type.h:23
ICMP_PKT ** pkts
Definition: lib_icmp_type.h:63
double tave
Definition: lib_icmp_type.h:21
unsigned char ttl
Definition: lib_icmp_type.h:37
size_t nsent
Definition: lib_icmp_type.h:22
double tsum
Definition: lib_icmp_type.h:20