icmp.h
上传用户:hepax88
上传日期:2007-01-03
资源大小:1101k
文件大小:4k
源码类别:

TCP/IP协议栈

开发平台:

Visual C++

  1. #ifndef _ICMP_H
  2. #define _ICMP_H
  3. #ifndef _GLOBAL_H
  4. #include "global.h"
  5. #endif
  6. #ifndef _MBUF_H
  7. #include "mbuf.h"
  8. #endif
  9. #ifndef _IFACE_H
  10. #include "iface.h"
  11. #endif
  12. #ifndef _INTERNET_H
  13. #include "internet.h"
  14. #endif
  15. #ifndef _IP_H
  16. #include "ip.h"
  17. #endif
  18. /* SNMP MIB variables, used for statistics and control. See RFC 1066 */
  19. extern struct mib_entry Icmp_mib[];
  20. #define icmpInMsgs Icmp_mib[1].value.integer
  21. #define icmpInErrors Icmp_mib[2].value.integer
  22. #define icmpInDestUnreachs Icmp_mib[3].value.integer
  23. #define icmpInTimeExcds Icmp_mib[4].value.integer
  24. #define icmpInParmProbs Icmp_mib[5].value.integer
  25. #define icmpInSrcQuenchs Icmp_mib[6].value.integer
  26. #define icmpInRedirects Icmp_mib[7].value.integer
  27. #define icmpInEchos Icmp_mib[8].value.integer
  28. #define icmpInEchoReps Icmp_mib[9].value.integer
  29. #define icmpInTimestamps Icmp_mib[10].value.integer
  30. #define icmpInTimestampReps Icmp_mib[11].value.integer
  31. #define icmpInAddrMasks Icmp_mib[12].value.integer
  32. #define icmpInAddrMaskReps Icmp_mib[13].value.integer
  33. #define icmpOutMsgs Icmp_mib[14].value.integer
  34. #define icmpOutErrors Icmp_mib[15].value.integer
  35. #define icmpOutDestUnreachs Icmp_mib[16].value.integer
  36. #define icmpOutTimeExcds Icmp_mib[17].value.integer
  37. #define icmpOutParmProbs Icmp_mib[18].value.integer
  38. #define icmpOutSrcQuenchs Icmp_mib[19].value.integer
  39. #define icmpOutRedirects Icmp_mib[20].value.integer
  40. #define icmpOutEchos Icmp_mib[21].value.integer
  41. #define icmpOutEchoReps Icmp_mib[22].value.integer
  42. #define icmpOutTimestamps Icmp_mib[23].value.integer
  43. #define icmpOutTimestampReps Icmp_mib[24].value.integer
  44. #define icmpOutAddrMasks Icmp_mib[25].value.integer
  45. #define icmpOutAddrMaskReps Icmp_mib[26].value.integer
  46. #define NUMICMPMIB 26
  47. /* Internet Control Message Protocol */
  48. /* Message types */
  49. #define ICMP_ECHO_REPLY 0 /* Echo Reply */
  50. #define ICMP_DEST_UNREACH 3 /* Destination Unreachable */
  51. #define ICMP_QUENCH 4 /* Source Quench */
  52. #define ICMP_REDIRECT 5 /* Redirect */
  53. #define ICMP_ECHO 8 /* Echo Request */
  54. #define ICMP_TIME_EXCEED 11 /* Time-to-live Exceeded */
  55. #define ICMP_PARAM_PROB 12 /* Parameter Problem */
  56. #define ICMP_TIMESTAMP 13 /* Timestamp */
  57. #define ICMP_TIME_REPLY 14 /* Timestamp Reply */
  58. #define ICMP_INFO_RQST 15 /* Information Request */
  59. #define ICMP_INFO_REPLY 16 /* Information Reply */
  60. #define ICMP_ADDR_MASK 17 /* Address mask request */
  61. #define ICMP_ADDR_MASK_REPLY 18 /* Address mask reply */
  62. #define ICMP_IPSP 19 /* Problem with secured packet */
  63. #define ICMP_TYPES 20
  64. /* Internal format of an ICMP header (checksum is missing) */
  65. struct icmp {
  66. uint8 type;
  67. uint8 code;
  68.   union icmp_args {
  69. uint16 mtu;
  70. int32 unused;
  71. uint8 pointer;
  72. int32 address;
  73. struct {
  74. uint16 id;
  75. uint16 seq;
  76. } echo;
  77. } args;
  78. };
  79. #define ICMPLEN 8 /* Length of ICMP header on the net */
  80. /* Destination Unreachable codes */
  81. #define ICMP_NET_UNREACH 0 /* Net unreachable */
  82. #define ICMP_HOST_UNREACH 1 /* Host unreachable */
  83. #define ICMP_PROT_UNREACH 2 /* Protocol unreachable */
  84. #define ICMP_PORT_UNREACH 3 /* Port unreachable */
  85. #define ICMP_FRAG_NEEDED 4 /* Fragmentation needed and DF set */
  86. #define ICMP_ROUTE_FAIL 5 /* Source route failed */
  87. #define ICMP_ADMIN_PROHIB       13      /* Administrativly prohibbited */
  88. #define NUNREACH 14
  89. /* Time Exceeded codes */
  90. #define ICMP_TTL_EXCEED 0 /* Time-to-live exceeded */
  91. #define ICMP_FRAG_EXCEED 1 /* Fragment reassembly time exceeded */
  92. #define NEXCEED 2
  93. /* Redirect message codes */
  94. #define ICMP_REDR_NET 0 /* Redirect for the network */
  95. #define ICMP_REDR_HOST 1 /* Redirect for the host */
  96. #define ICMP_REDR_TOS 2 /* Redirect for Type of Service, or-ed with prev */
  97. #define NREDIRECT 3
  98. /* Bad security packet codes */
  99. #define ICMP_IPSP_SPI_UNKNOWN 0
  100. #define ICMP_IPSP_AUTH_FAIL 1
  101. #define ICMP_IPSP_DECRYPT_FAIL 2
  102. #define NIPSP 3
  103. extern int Icmp_trace;
  104. extern int Icmp_echo;
  105. /* ICMP messages, decoded */
  106. extern char *Icmptypes[],*Unreach[],*Exceed[],*Redirect[],*Said_icmp[];
  107. struct icmplink {
  108. uint8 proto;
  109. void (*funct)(int32,int32,int32,uint8,uint8,struct mbuf **);
  110. };
  111. extern struct icmplink Icmplink[];
  112. /* In icmp.c: */
  113. void icmp_input(struct iface *iface,struct ip *ip,struct mbuf **bp,
  114. int rxbroadcast,int32 said);
  115. int icmp_output(struct ip *ip,struct mbuf *data,uint8 type,uint8 code,
  116. union icmp_args *args);
  117. /* In icmphdr.c: */
  118. void htonicmp(struct icmp *icmp,struct mbuf **data);
  119. int ntohicmp(struct icmp *icmp,struct mbuf **bpp);
  120. #endif /* _ICMP_H */