-/*\r
- * COPYRIGHT: See COPYING in the top level directory\r
- * PROJECT: ReactOS traceroute utility\r
- * FILE: apps/utils/net/tracert/tracert.h\r
- * PURPOSE: trace a packets route through a network\r
- * PROGRAMMERS: Ged Murphy (gedmurphy@gmail.com)\r
- * REVISIONS:\r
- * GM 03/05/05 Created\r
- */\r
-\r
-#define ECHO_REPLY 0\r
-#define DEST_UNREACHABLE 3\r
-#define ECHO_REQUEST 8\r
-#define TTL_EXCEEDED 11\r
-\r
-#define ICMP_MIN_SIZE 8\r
-#define ICMP_MAX_SIZE 65535\r
-#define PACKET_SIZE 32\r
-/* we need this for packets which have the 'dont fragment' \r
- * bit set, as they can get quite large otherwise \r
- * (I've seen some reach 182 bytes */\r
-#define MAX_REC_SIZE 200 \r
-\r
-/* pack the structures */\r
-#pragma pack(1) \r
-\r
-/* IPv4 Header, 20 bytes */\r
-typedef struct IPv4Header {\r
- BYTE h_len:4;\r
- BYTE version:4;\r
- BYTE tos;\r
- USHORT length;\r
- USHORT id;\r
- USHORT flag_frag;\r
- BYTE ttl;\r
- BYTE proto;\r
- USHORT checksum;\r
- ULONG source;\r
- ULONG dest;\r
-} IPv4_HEADER, *PIPv4_HEADER;\r
-\r
-/* ICMP Header, 8 bytes */\r
-typedef struct ICMPHeader {\r
- BYTE type;\r
- BYTE code;\r
- USHORT checksum;\r
- USHORT id; // not used in time exceeded\r
- USHORT seq; // not used in time exceeded\r
-} ICMP_HEADER, *PICMP_HEADER;\r
-\r
-/* ICMP Echo Reply Header, 12 bytes */\r
-typedef struct EchoReplyHeader {\r
- struct ICMPHeader icmpheader;\r
- struct timeval timestamp; \r
-} ECHO_REPLY_HEADER, *PECHO_REPLY_HEADER;\r
-\r
-/* ICMP Echo Reply Header, 12 bytes */\r
-typedef struct TTLExceedHeader {\r
- struct ICMPHeader icmpheader;\r
- struct IPv4Header ipheader;\r
- struct ICMPHeader OrigIcmpHeader;\r
-} TTL_EXCEED_HEADER, *PTTL_EXCEED_HEADER;\r
-\r
-/* return to normal */\r
-#pragma pack()\r
-\r
-\r
-/* function definitions */\r
-//BOOL ParseCmdline(int argc, char* argv[]);\r
-INT Driver(void);\r
-INT Setup(INT ttl);\r
-VOID SetupTimingMethod(void);\r
-VOID ResolveHostname(void);\r
-VOID PreparePacket(INT packetSize, INT seqNum);\r
-INT SendPacket(INT datasize);\r
-INT ReceivePacket(INT datasize);\r
-INT DecodeResponse(INT packetSize, INT seqNum);\r
-LONG GetTime(void);\r
-WORD CheckSum(PUSHORT data, UINT size);\r
-VOID Usage(void);\r
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS traceroute utility
+ * FILE: apps/utils/net/tracert/tracert.h
+ * PURPOSE: trace a packets route through a network
+ * PROGRAMMERS: Ged Murphy (gedmurphy@gmail.com)
+ * REVISIONS:
+ * GM 03/05/05 Created
+ */
+
+#define ECHO_REPLY 0
+#define DEST_UNREACHABLE 3
+#define ECHO_REQUEST 8
+#define TTL_EXCEEDED 11
+
+#define ICMP_MIN_SIZE 8
+#define ICMP_MAX_SIZE 65535
+#define PACKET_SIZE 32
+/* we need this for packets which have the 'dont fragment'
+ * bit set, as they can get quite large otherwise
+ * (I've seen some reach 182 bytes */
+#define MAX_REC_SIZE 200
+
+/* pack the structures */
+#include <pshpack1.h>
+
+/* IPv4 Header, 20 bytes */
+typedef struct IPv4Header
+{
+ BYTE h_len:4;
+ BYTE version:4;
+ BYTE tos;
+ USHORT length;
+ USHORT id;
+ USHORT flag_frag;
+ BYTE ttl;
+ BYTE proto;
+ USHORT checksum;
+ ULONG source;
+ ULONG dest;
+} IPv4_HEADER, *PIPv4_HEADER;
+
+/* ICMP Header, 8 bytes */
+typedef struct ICMPHeader
+{
+ BYTE type;
+ BYTE code;
+ USHORT checksum;
+ USHORT id; // not used in time exceeded
+ USHORT seq; // not used in time exceeded
+} ICMP_HEADER, *PICMP_HEADER;
+
+/* ICMP Echo Reply Header, 12 bytes */
+typedef struct EchoReplyHeader
+{
+ struct ICMPHeader icmpheader;
+ struct timeval timestamp;
+} ECHO_REPLY_HEADER, *PECHO_REPLY_HEADER;
+
+/* ICMP Echo Reply Header, 12 bytes */
+typedef struct TTLExceedHeader
+{
+ struct ICMPHeader icmpheader;
+ struct IPv4Header ipheader;
+ struct ICMPHeader OrigIcmpHeader;
+} TTL_EXCEED_HEADER, *PTTL_EXCEED_HEADER;
+
+/* return to normal */
+#include <poppack.h>
+
+/* function definitions */
+static BOOL ParseCmdline(int argc, char* argv[]);
+static INT Driver(void);
+static INT Setup(INT ttl);
+static VOID SetupTimingMethod(void);
+static VOID ResolveHostname(void);
+static VOID PreparePacket(INT packetSize, USHORT seqNum);
+static INT SendPacket(INT datasize);
+static INT ReceivePacket(INT datasize);
+static INT DecodeResponse(INT packetSize, USHORT seqNum);
+static LONGLONG GetTime(void);
+static WORD CheckSum(PUSHORT data, UINT size);
+static VOID Usage(void);