Added new better tracert replacement by Ged Murphy
[reactos.git] / reactos / apps / utils / net / tracert / tracert.h
diff --git a/reactos/apps/utils/net/tracert/tracert.h b/reactos/apps/utils/net/tracert/tracert.h
new file mode 100644 (file)
index 0000000..1fc27e9
--- /dev/null
@@ -0,0 +1,80 @@
+/*\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