Annotation of embedaddon/mtr/packet/probe_cygwin.h, revision 1.1.1.1
1.1 misho 1: /*
2: mtr -- a network diagnostic tool
3: Copyright (C) 2016 Matt Kimball
4:
5: This program is free software; you can redistribute it and/or modify
6: it under the terms of the GNU General Public License version 2 as
7: published by the Free Software Foundation.
8:
9: This program is distributed in the hope that it will be useful,
10: but WITHOUT ANY WARRANTY; without even the implied warranty of
11: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12: GNU General Public License for more details.
13:
14: You should have received a copy of the GNU General Public License
15: along with this program; if not, write to the Free Software
16: Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17: */
18:
19: #ifndef PROBE_CYGWIN_H
20: #define PROBE_CYGWIN_H
21:
22: #include <arpa/inet.h>
23: #include <windows.h>
24: #include <iphlpapi.h>
25: #include <icmpapi.h>
26:
27: /*
28: This should be in the Windows headers, but is missing from
29: Cygwin's Windows headers.
30: */
31: typedef struct icmpv6_echo_reply_lh {
32: /*
33: Although Windows uses an IPV6_ADDRESS_EX here, we are using uint8_t
34: fields to avoid structure padding differences between gcc and
35: Visual C++. (gcc wants to align the flow info to a 4 byte boundary,
36: and Windows uses it unaligned.)
37: */
38: uint8_t PortBits[2];
39: uint8_t FlowInfoBits[4];
40: uint8_t AddressBits[16];
41: uint8_t ScopeIdBits[4];
42:
43: ULONG Status;
44: unsigned int RoundTripTime;
45: } ICMPV6_ECHO_REPLY,
46: *PICMPV6_ECHO_REPLY;
47:
48: /*
49: Windows requires an echo reply structure for each in-flight
50: ICMP probe.
51: */
52: struct probe_platform_t {
53: /*
54: We need a backpointer to the net_state because of the way
55: IcmpSendEcho2 passes our context.
56: */
57: struct net_state_t *net_state;
58:
59: /* IP version (4 or 6) used for the probe */
60: int ip_version;
61:
62: union {
63: ICMP_ECHO_REPLY32 *reply4;
64: ICMPV6_ECHO_REPLY *reply6;
65: };
66: };
67:
68: /* A Windows HANDLE for the ICMP session */
69: struct net_state_platform_t {
70: HANDLE icmp4;
71: HANDLE icmp6;
72: };
73:
74: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>