acl  3.5.3.0
lib_icmp.h
浏览该文件的文档.
1 #ifndef __LIB_ICMP_INCLUDE_H__
2 #define __LIB_ICMP_INCLUDE_H__
3 
4 /* #include "lib_acl.h" */
5 #include "lib_icmp_type.h"
6 
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
10 
11 #ifdef ICMP_LIB
12 # ifndef ICMP_API
13 # define ICMP_API
14 # endif
15 #elif defined(ICMP_DLL) // || defined(_WINDLL)
16 # if defined(ICMP_EXPORTS) || defined(protocol_EXPORTS)
17 # ifndef ICMP_API
18 # define ICMP_API __declspec(dllexport)
19 # endif
20 # elif !defined(ICMP_API)
21 # define ICMP_API __declspec(dllimport)
22 # endif
23 #elif !defined(ICMP_API)
24 # define ICMP_API
25 #endif
26 
27 /* in icmp_chat.c */
28 /**
29  * 创建ICMP会话对象
30  * @param aio {ACL_AIO*} 如果该项不为空,则内部在通信过程中采用非阻塞模式,
31  * 否则采用阻塞模式
32  * @param check_tid {int} 是否在校验响应包时检查数据中的线程号字段
33  * @return {ICMP_CHAT*} ICMP会话对象句柄
34  */
35 ICMP_API ICMP_CHAT *icmp_chat_create(ACL_AIO *aio, int check_tid);
36 
37 /**
38  * 释放ICMP会话对象
39  * @param chat {ICMP_CHAT*} ICMP会话对象句柄
40  */
42 
43 /**
44  * 开始与某个目的主机进行会话
45  * @param host {ICMP_HOST*} 调用 icmp_host_new 返回的对象
46  */
47 ICMP_API void icmp_chat(ICMP_HOST* host);
48 
49 /**
50  * 当前的ICMP会话对象中被探测的主机个数
51  * @param chat {ICMP_CHAT*} 会话对象句柄
52  * @return {int} 被探测主机个数
53  */
55 
56 /**
57  * 当前的ICMP会话对象中已经完成的探测的主机个数
58  * @param chat {ICMP_CHAT*} 会话对象句柄
59  * @return {int} 已完成的被探测主机个数
60  */
62 
63 /**
64  * 判断当前的ICMP会话对象中所有探测任务是否已经完成
65  * @param chat {ICMP_CHAT*} 会话对象句柄
66  * @return {int} != 0: 表示完成; 0: 表示未完成
67  */
69 
70 /**
71  * 取得当前ICMP会话对象中的当前会话序列号值
72  * @param chat {ICMP_CHAT*} 会话对象句柄
73  * @return {unsigned short} 会话序列号值
74  */
75 ICMP_API unsigned short icmp_chat_seqno(ICMP_CHAT *chat);
76 
77 /* in icmp_stat.c */
78 /**
79  * 输出当前ICMP的会话状态
80  * @param chat {ICMP_CHAT*} 会话对象句柄
81  */
82 ICMP_API void icmp_stat(ICMP_CHAT *chat);
83 
84 /**
85  * 计算某个主机的ICMP会话状态
86  * @param host {ICMP_HOST*} 被探测主机对象
87  * @param show_flag {int} 是否输出结果至日志文件
88  */
89 ICMP_API void icmp_stat_host(ICMP_HOST *host, int show_flag);
90 
91 /* in icmp_host.c */
92 /**
93  * 创建一个新的被探测的主机对象
94  * @param chat {ICMP_CHAT*} 会话对象句柄
95  * @param domain {const char*} 域名标识字符串,可以为空
96  * @param ip {const char*} 主机IP地址,不能为空
97  * @param npkt {size_t} 对该主机发送的数据包个数
98  * @param dlen {size_t} 每个探测数据包的长度
99  * @param delay {int} 发送探测数据包的时间间隔(毫秒)
100  * @param timeout {int} 被探测主机的响应包超时时间(毫秒)
101  * @return {ICMP_HOST*} 被探测主机对象, 如果为空则表示出错
102  */
103 ICMP_API ICMP_HOST* icmp_host_new(ICMP_CHAT *chat, const char *domain,
104  const char *ip, size_t npkt, size_t dlen, int delay, int timeout);
105 
106 /**
107  * 释放一个被探测主机对象
108  * @param host {ICMP_HOST*} 被探测主机对象
109  */
110 ICMP_API void icmp_host_free(ICMP_HOST *host);
111 
112 /**
113  * 设置探测结果的回调函数
114  * @param host {ICMP_HOST*} 被探测主机对象
115  * @param arg {void*} 回调函数的参数之一
116  * @param stat_respond {void (*)(ICMP_PKT_STATUS*)} 正常响应时的回调函数
117  * @param stat_timeout {void (*)(ICMP_PKT_STATUS*)} 超时响应时的回调函数
118  * @param stat_unreach {void (*)(ICMP_PKT_STATUS*}} 主机不可达时的回调函数
119  * @param stat_finish {void (*)(ICMP_HOST*)} 针对该主机的探测任务时的回调函数
120  */
121 ICMP_API void icmp_host_set(ICMP_HOST *host, void *arg,
122  void (*stat_respond)(ICMP_PKT_STATUS*, void*),
123  void (*stat_timeout)(ICMP_PKT_STATUS*, void*),
124  void (*stat_unreach)(ICMP_PKT_STATUS*, void*),
125  void (*stat_finish)(ICMP_HOST*, void*));
126 
127 /* in icmp_ping.c */
128 /**
129  * ping 一台主机(内部默认每个探测包长度为64个字节)
130  * @param chat {ICMP_CHAT*} 会话对象句柄
131  * @param domain {const char*} 域名标识字符串,可以为空
132  * @param ip {const char*} 主机IP地址,不能为空
133  * @param npkt {size_t} 对该主机发送的数据包个数
134  * @param delay {int} 发送探测数据包的时间间隔(毫秒)
135  * @param timeout {int} 被探测主机的响应包超时时间(毫秒)
136  */
137 ICMP_API void icmp_ping_one(ICMP_CHAT *chat, const char *domain,
138  const char *ip, size_t npkt, int delay, int timeout);
139 
140 /*--------------------------------------------------------------------------*/
141 
142 /**
143  * low level interface for operating ICMP.
144  */
145 
149 ICMP_API void icmp_stream_from(ICMP_STREAM *is, struct sockaddr_in *addr);
150 ICMP_API void icmp_stream_dest(ICMP_STREAM *is, struct sockaddr_in *addr);
151 ICMP_API void icmp_stream_set_dest(ICMP_STREAM *is, struct sockaddr_in addr);
152 
153 ICMP_API ICMP_HOST *icmp_host_alloc(ICMP_CHAT *chat, const char *domain,
154  const char *ip);
155 ICMP_API void icmp_host_init(ICMP_HOST *host, unsigned char type,
156  unsigned char code, size_t npkt, size_t dlen,
157  int delay, int timeout);
158 
160 ICMP_API void icmp_pkt_free(ICMP_PKT *ipkt);
161 ICMP_API void icmp_pkt_pack(ICMP_PKT *pkt, unsigned char type,
162  unsigned char code, unsigned short id,
163  const void *payload, size_t payload_len);
164 ICMP_API void icmp_pkt_build(ICMP_PKT *pkt, unsigned short seq);
165 ICMP_API void icmp_pkt_save_status(ICMP_PKT* to, const ICMP_PKT* from);
166 ICMP_API int icmp_pkt_unpack(struct sockaddr_in from, const char *buf,
167  int bytes, ICMP_PKT *pkt);
168 ICMP_API ICMP_PKT* icmp_pkt_check(const ICMP_HOST *host, const ICMP_PKT *pkt);
169 
170 ICMP_API unsigned char icmp_pkt_type(const ICMP_PKT *pkt);
171 ICMP_API unsigned char icmp_pkt_code(const ICMP_PKT *pkt);
172 ICMP_API unsigned short icmp_pkt_cksum(const ICMP_PKT *pkt);
173 ICMP_API unsigned short icmp_pkt_id(const ICMP_PKT *pkt);
174 ICMP_API unsigned short icmp_pkt_seq(const ICMP_PKT *pkt);
175 ICMP_API unsigned int icmp_pkt_gid(const ICMP_PKT *pkt);
176 ICMP_API const ICMP_PKT *icmp_pkt_peer(const ICMP_PKT *pkt);
178 ICMP_API size_t icmp_pkt_len(const ICMP_PKT *pkt);
179 ICMP_API size_t icmp_pkt_wlen(const ICMP_PKT *pkt);
180 ICMP_API size_t icmp_pkt_payload(const ICMP_PKT *pkt, char *buf, size_t size);
181 
183  const void *data, size_t len);
184 ICMP_API void icmp_pkt_set_type(ICMP_PKT *pkt, unsigned char type);
185 ICMP_API void icmp_pkt_set_code(ICMP_PKT *pkt, unsigned char code);
186 ICMP_API void icmp_pkt_set_cksum(ICMP_PKT *pkt, unsigned short cksum);
187 ICMP_API void icmp_pkt_set_id(ICMP_PKT *pkt, unsigned short id);
188 ICMP_API void icmp_pkt_set_seq(ICMP_PKT *pkt, unsigned short seq);
189 ICMP_API void icmp_pkt_set_data(ICMP_PKT *pkt, void *data, size_t size);
190 
191 #ifdef __cplusplus
192 }
193 #endif
194 
195 #endif
ICMP_API ICMP_HOST * icmp_host_alloc(ICMP_CHAT *chat, const char *domain, const char *ip)
ICMP_API void icmp_stat_host(ICMP_HOST *host, int show_flag)
#define ICMP_API
Definition: lib_icmp.h:24
ICMP_API int icmp_chat_finish(ICMP_CHAT *chat)
ICMP_API unsigned short icmp_pkt_id(const ICMP_PKT *pkt)
ICMP_API void icmp_stream_from(ICMP_STREAM *is, struct sockaddr_in *addr)
ICMP_API void icmp_chat(ICMP_HOST *host)
ICMP_API ICMP_PKT * icmp_pkt_check(const ICMP_HOST *host, const ICMP_PKT *pkt)
ICMP_API void icmp_stat(ICMP_CHAT *chat)
ICMP_API void icmp_pkt_pack(ICMP_PKT *pkt, unsigned char type, unsigned char code, unsigned short id, const void *payload, size_t payload_len)
struct ICMP_CHAT ICMP_CHAT
Definition: lib_icmp_type.h:10
ICMP_API const ICMP_PKT_STATUS * icmp_pkt_status(const ICMP_PKT *pkt)
ICMP_API unsigned char icmp_pkt_code(const ICMP_PKT *pkt)
ICMP_API void icmp_stream_set_dest(ICMP_STREAM *is, struct sockaddr_in addr)
ICMP_API void icmp_stream_close(ICMP_STREAM *is)
ICMP_API ICMP_HOST * icmp_host_new(ICMP_CHAT *chat, const char *domain, const char *ip, size_t npkt, size_t dlen, int delay, int timeout)
ICMP_API void icmp_host_free(ICMP_HOST *host)
ICMP_API unsigned short icmp_pkt_cksum(const ICMP_PKT *pkt)
ICMP_API void icmp_pkt_build(ICMP_PKT *pkt, unsigned short seq)
ICMP_API unsigned short icmp_pkt_seq(const ICMP_PKT *pkt)
ICMP_API size_t icmp_pkt_wlen(const ICMP_PKT *pkt)
struct ICMP_PKT ICMP_PKT
Definition: lib_icmp_type.h:13
ICMP_API const ICMP_PKT * icmp_pkt_peer(const ICMP_PKT *pkt)
ICMP_API ACL_VSTREAM * icmp_vstream(ICMP_STREAM *is)
ICMP_API int icmp_pkt_unpack(struct sockaddr_in from, const char *buf, int bytes, ICMP_PKT *pkt)
ICMP_API void icmp_pkt_save_status(ICMP_PKT *to, const ICMP_PKT *from)
ICMP_API void icmp_host_set(ICMP_HOST *host, void *arg, void(*stat_respond)(ICMP_PKT_STATUS *, void *), void(*stat_timeout)(ICMP_PKT_STATUS *, void *), void(*stat_unreach)(ICMP_PKT_STATUS *, void *), void(*stat_finish)(ICMP_HOST *, void *))
ICMP_API unsigned short icmp_chat_seqno(ICMP_CHAT *chat)
ICMP_API int icmp_chat_size(ICMP_CHAT *chat)
struct ACL_AIO ACL_AIO
Definition: acl_aio.h:31
ICMP_API void icmp_pkt_set_code(ICMP_PKT *pkt, unsigned char code)
ICMP_API void icmp_pkt_set_type(ICMP_PKT *pkt, unsigned char type)
ICMP_API void icmp_pkt_set_seq(ICMP_PKT *pkt, unsigned short seq)
struct ICMP_STREAM ICMP_STREAM
Definition: lib_icmp_type.h:9
ICMP_API ICMP_CHAT * icmp_chat_create(ACL_AIO *aio, int check_tid)
ICMP_API void icmp_stream_dest(ICMP_STREAM *is, struct sockaddr_in *addr)
ICMP_API int icmp_chat_count(ICMP_CHAT *chat)
ICMP_API size_t icmp_pkt_len(const ICMP_PKT *pkt)
ICMP_API size_t icmp_pkt_set_extra(ICMP_PKT *pkt, const void *data, size_t len)
ICMP_API void icmp_host_init(ICMP_HOST *host, unsigned char type, unsigned char code, size_t npkt, size_t dlen, int delay, int timeout)
ICMP_API void icmp_pkt_set_data(ICMP_PKT *pkt, void *data, size_t size)
ICMP_API void icmp_pkt_set_cksum(ICMP_PKT *pkt, unsigned short cksum)
ICMP_API void icmp_pkt_set_id(ICMP_PKT *pkt, unsigned short id)
ICMP_API void icmp_chat_free(ICMP_CHAT *chat)
ICMP_API unsigned char icmp_pkt_type(const ICMP_PKT *pkt)
ICMP_API void icmp_ping_one(ICMP_CHAT *chat, const char *domain, const char *ip, size_t npkt, int delay, int timeout)
ICMP_API ICMP_PKT * icmp_pkt_alloc(void)
ICMP_API void icmp_pkt_free(ICMP_PKT *ipkt)
ICMP_API size_t icmp_pkt_payload(const ICMP_PKT *pkt, char *buf, size_t size)
ICMP_API unsigned int icmp_pkt_gid(const ICMP_PKT *pkt)
ICMP_API ICMP_STREAM * icmp_stream_open(ACL_AIO *aio)