PageRenderTime 46ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/external/source/meterpreter/source/extensions/sniffer/dnet/ip.h

https://bitbucket.org/technopunk2099/metasploit-framework
C++ Header | 432 lines | 345 code | 35 blank | 52 comment | 15 complexity | 1147d166dbbff48a950f8b15e8809255 MD5 | raw file
Possible License(s): BSD-3-Clause, Apache-2.0, LGPL-2.1, GPL-2.0, MIT
  1. /*
  2. * ip.h
  3. *
  4. * Internet Protocol (RFC 791).
  5. *
  6. * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
  7. *
  8. * $Id: ip.h,v 1.25 2005/02/16 22:02:45 dugsong Exp $
  9. */
  10. #ifndef DNET_IP_H
  11. #define DNET_IP_H
  12. #define IP_ADDR_LEN 4 /* IP address length */
  13. #define IP_ADDR_BITS 32 /* IP address bits */
  14. #define IP_HDR_LEN 20 /* base IP header length */
  15. #define IP_OPT_LEN 2 /* base IP option length */
  16. #define IP_OPT_LEN_MAX 40
  17. #define IP_HDR_LEN_MAX (IP_HDR_LEN + IP_OPT_LEN_MAX)
  18. #define IP_LEN_MAX 65535
  19. #define IP_LEN_MIN IP_HDR_LEN
  20. typedef uint32_t ip_addr_t;
  21. #ifndef __GNUC__
  22. # define __attribute__(x)
  23. # pragma pack(1)
  24. #endif
  25. /*
  26. * IP header, without options
  27. */
  28. struct ip_hdr {
  29. #if DNET_BYTESEX == DNET_BIG_ENDIAN
  30. uint8_t ip_v:4, /* version */
  31. ip_hl:4; /* header length (incl any options) */
  32. #elif DNET_BYTESEX == DNET_LIL_ENDIAN
  33. uint8_t ip_hl:4,
  34. ip_v:4;
  35. #else
  36. # error "need to include <dnet.h>"
  37. #endif
  38. uint8_t ip_tos; /* type of service */
  39. uint16_t ip_len; /* total length (incl header) */
  40. uint16_t ip_id; /* identification */
  41. uint16_t ip_off; /* fragment offset and flags */
  42. uint8_t ip_ttl; /* time to live */
  43. uint8_t ip_p; /* protocol */
  44. uint16_t ip_sum; /* checksum */
  45. ip_addr_t ip_src; /* source address */
  46. ip_addr_t ip_dst; /* destination address */
  47. };
  48. /*
  49. * Type of service (ip_tos), RFC 1349 ("obsoleted by RFC 2474")
  50. */
  51. #define IP_TOS_DEFAULT 0x00 /* default */
  52. #define IP_TOS_LOWDELAY 0x10 /* low delay */
  53. #define IP_TOS_THROUGHPUT 0x08 /* high throughput */
  54. #define IP_TOS_RELIABILITY 0x04 /* high reliability */
  55. #define IP_TOS_LOWCOST 0x02 /* low monetary cost - XXX */
  56. #define IP_TOS_ECT 0x02 /* ECN-capable transport */
  57. #define IP_TOS_CE 0x01 /* congestion experienced */
  58. /*
  59. * IP precedence (high 3 bits of ip_tos), hopefully unused
  60. */
  61. #define IP_TOS_PREC_ROUTINE 0x00
  62. #define IP_TOS_PREC_PRIORITY 0x20
  63. #define IP_TOS_PREC_IMMEDIATE 0x40
  64. #define IP_TOS_PREC_FLASH 0x60
  65. #define IP_TOS_PREC_FLASHOVERRIDE 0x80
  66. #define IP_TOS_PREC_CRITIC_ECP 0xa0
  67. #define IP_TOS_PREC_INTERNETCONTROL 0xc0
  68. #define IP_TOS_PREC_NETCONTROL 0xe0
  69. /*
  70. * Fragmentation flags (ip_off)
  71. */
  72. #define IP_RF 0x8000 /* reserved */
  73. #define IP_DF 0x4000 /* don't fragment */
  74. #define IP_MF 0x2000 /* more fragments (not last frag) */
  75. #define IP_OFFMASK 0x1fff /* mask for fragment offset */
  76. /*
  77. * Time-to-live (ip_ttl), seconds
  78. */
  79. #define IP_TTL_DEFAULT 64 /* default ttl, RFC 1122, RFC 1340 */
  80. #define IP_TTL_MAX 255 /* maximum ttl */
  81. /*
  82. * Protocol (ip_p) - http://www.iana.org/assignments/protocol-numbers
  83. */
  84. #define IP_PROTO_IP 0 /* dummy for IP */
  85. #define IP_PROTO_HOPOPTS IP_PROTO_IP /* IPv6 hop-by-hop options */
  86. #define IP_PROTO_ICMP 1 /* ICMP */
  87. #define IP_PROTO_IGMP 2 /* IGMP */
  88. #define IP_PROTO_GGP 3 /* gateway-gateway protocol */
  89. #define IP_PROTO_IPIP 4 /* IP in IP */
  90. #define IP_PROTO_ST 5 /* ST datagram mode */
  91. #define IP_PROTO_TCP 6 /* TCP */
  92. #define IP_PROTO_CBT 7 /* CBT */
  93. #define IP_PROTO_EGP 8 /* exterior gateway protocol */
  94. #define IP_PROTO_IGP 9 /* interior gateway protocol */
  95. #define IP_PROTO_BBNRCC 10 /* BBN RCC monitoring */
  96. #define IP_PROTO_NVP 11 /* Network Voice Protocol */
  97. #define IP_PROTO_PUP 12 /* PARC universal packet */
  98. #define IP_PROTO_ARGUS 13 /* ARGUS */
  99. #define IP_PROTO_EMCON 14 /* EMCON */
  100. #define IP_PROTO_XNET 15 /* Cross Net Debugger */
  101. #define IP_PROTO_CHAOS 16 /* Chaos */
  102. #define IP_PROTO_UDP 17 /* UDP */
  103. #define IP_PROTO_MUX 18 /* multiplexing */
  104. #define IP_PROTO_DCNMEAS 19 /* DCN measurement */
  105. #define IP_PROTO_HMP 20 /* Host Monitoring Protocol */
  106. #define IP_PROTO_PRM 21 /* Packet Radio Measurement */
  107. #define IP_PROTO_IDP 22 /* Xerox NS IDP */
  108. #define IP_PROTO_TRUNK1 23 /* Trunk-1 */
  109. #define IP_PROTO_TRUNK2 24 /* Trunk-2 */
  110. #define IP_PROTO_LEAF1 25 /* Leaf-1 */
  111. #define IP_PROTO_LEAF2 26 /* Leaf-2 */
  112. #define IP_PROTO_RDP 27 /* "Reliable Datagram" proto */
  113. #define IP_PROTO_IRTP 28 /* Inet Reliable Transaction */
  114. #define IP_PROTO_TP 29 /* ISO TP class 4 */
  115. #define IP_PROTO_NETBLT 30 /* Bulk Data Transfer */
  116. #define IP_PROTO_MFPNSP 31 /* MFE Network Services */
  117. #define IP_PROTO_MERITINP 32 /* Merit Internodal Protocol */
  118. #define IP_PROTO_SEP 33 /* Sequential Exchange proto */
  119. #define IP_PROTO_3PC 34 /* Third Party Connect proto */
  120. #define IP_PROTO_IDPR 35 /* Interdomain Policy Route */
  121. #define IP_PROTO_XTP 36 /* Xpress Transfer Protocol */
  122. #define IP_PROTO_DDP 37 /* Datagram Delivery Proto */
  123. #define IP_PROTO_CMTP 38 /* IDPR Ctrl Message Trans */
  124. #define IP_PROTO_TPPP 39 /* TP++ Transport Protocol */
  125. #define IP_PROTO_IL 40 /* IL Transport Protocol */
  126. #define IP_PROTO_IPV6 41 /* IPv6 */
  127. #define IP_PROTO_SDRP 42 /* Source Demand Routing */
  128. #define IP_PROTO_ROUTING 43 /* IPv6 routing header */
  129. #define IP_PROTO_FRAGMENT 44 /* IPv6 fragmentation header */
  130. #define IP_PROTO_RSVP 46 /* Reservation protocol */
  131. #define IP_PROTO_GRE 47 /* General Routing Encap */
  132. #define IP_PROTO_MHRP 48 /* Mobile Host Routing */
  133. #define IP_PROTO_ENA 49 /* ENA */
  134. #define IP_PROTO_ESP 50 /* Encap Security Payload */
  135. #define IP_PROTO_AH 51 /* Authentication Header */
  136. #define IP_PROTO_INLSP 52 /* Integated Net Layer Sec */
  137. #define IP_PROTO_SWIPE 53 /* SWIPE */
  138. #define IP_PROTO_NARP 54 /* NBMA Address Resolution */
  139. #define IP_PROTO_MOBILE 55 /* Mobile IP, RFC 2004 */
  140. #define IP_PROTO_TLSP 56 /* Transport Layer Security */
  141. #define IP_PROTO_SKIP 57 /* SKIP */
  142. #define IP_PROTO_ICMPV6 58 /* ICMP for IPv6 */
  143. #define IP_PROTO_NONE 59 /* IPv6 no next header */
  144. #define IP_PROTO_DSTOPTS 60 /* IPv6 destination options */
  145. #define IP_PROTO_ANYHOST 61 /* any host internal proto */
  146. #define IP_PROTO_CFTP 62 /* CFTP */
  147. #define IP_PROTO_ANYNET 63 /* any local network */
  148. #define IP_PROTO_EXPAK 64 /* SATNET and Backroom EXPAK */
  149. #define IP_PROTO_KRYPTOLAN 65 /* Kryptolan */
  150. #define IP_PROTO_RVD 66 /* MIT Remote Virtual Disk */
  151. #define IP_PROTO_IPPC 67 /* Inet Pluribus Packet Core */
  152. #define IP_PROTO_DISTFS 68 /* any distributed fs */
  153. #define IP_PROTO_SATMON 69 /* SATNET Monitoring */
  154. #define IP_PROTO_VISA 70 /* VISA Protocol */
  155. #define IP_PROTO_IPCV 71 /* Inet Packet Core Utility */
  156. #define IP_PROTO_CPNX 72 /* Comp Proto Net Executive */
  157. #define IP_PROTO_CPHB 73 /* Comp Protocol Heart Beat */
  158. #define IP_PROTO_WSN 74 /* Wang Span Network */
  159. #define IP_PROTO_PVP 75 /* Packet Video Protocol */
  160. #define IP_PROTO_BRSATMON 76 /* Backroom SATNET Monitor */
  161. #define IP_PROTO_SUNND 77 /* SUN ND Protocol */
  162. #define IP_PROTO_WBMON 78 /* WIDEBAND Monitoring */
  163. #define IP_PROTO_WBEXPAK 79 /* WIDEBAND EXPAK */
  164. #define IP_PROTO_EON 80 /* ISO CNLP */
  165. #define IP_PROTO_VMTP 81 /* Versatile Msg Transport*/
  166. #define IP_PROTO_SVMTP 82 /* Secure VMTP */
  167. #define IP_PROTO_VINES 83 /* VINES */
  168. #define IP_PROTO_TTP 84 /* TTP */
  169. #define IP_PROTO_NSFIGP 85 /* NSFNET-IGP */
  170. #define IP_PROTO_DGP 86 /* Dissimilar Gateway Proto */
  171. #define IP_PROTO_TCF 87 /* TCF */
  172. #define IP_PROTO_EIGRP 88 /* EIGRP */
  173. #define IP_PROTO_OSPF 89 /* Open Shortest Path First */
  174. #define IP_PROTO_SPRITERPC 90 /* Sprite RPC Protocol */
  175. #define IP_PROTO_LARP 91 /* Locus Address Resolution */
  176. #define IP_PROTO_MTP 92 /* Multicast Transport Proto */
  177. #define IP_PROTO_AX25 93 /* AX.25 Frames */
  178. #define IP_PROTO_IPIPENCAP 94 /* yet-another IP encap */
  179. #define IP_PROTO_MICP 95 /* Mobile Internet Ctrl */
  180. #define IP_PROTO_SCCSP 96 /* Semaphore Comm Sec Proto */
  181. #define IP_PROTO_ETHERIP 97 /* Ethernet in IPv4 */
  182. #define IP_PROTO_ENCAP 98 /* encapsulation header */
  183. #define IP_PROTO_ANYENC 99 /* private encryption scheme */
  184. #define IP_PROTO_GMTP 100 /* GMTP */
  185. #define IP_PROTO_IFMP 101 /* Ipsilon Flow Mgmt Proto */
  186. #define IP_PROTO_PNNI 102 /* PNNI over IP */
  187. #define IP_PROTO_PIM 103 /* Protocol Indep Multicast */
  188. #define IP_PROTO_ARIS 104 /* ARIS */
  189. #define IP_PROTO_SCPS 105 /* SCPS */
  190. #define IP_PROTO_QNX 106 /* QNX */
  191. #define IP_PROTO_AN 107 /* Active Networks */
  192. #define IP_PROTO_IPCOMP 108 /* IP Payload Compression */
  193. #define IP_PROTO_SNP 109 /* Sitara Networks Protocol */
  194. #define IP_PROTO_COMPAQPEER 110 /* Compaq Peer Protocol */
  195. #define IP_PROTO_IPXIP 111 /* IPX in IP */
  196. #define IP_PROTO_VRRP 112 /* Virtual Router Redundancy */
  197. #define IP_PROTO_PGM 113 /* PGM Reliable Transport */
  198. #define IP_PROTO_ANY0HOP 114 /* 0-hop protocol */
  199. #define IP_PROTO_L2TP 115 /* Layer 2 Tunneling Proto */
  200. #define IP_PROTO_DDX 116 /* D-II Data Exchange (DDX) */
  201. #define IP_PROTO_IATP 117 /* Interactive Agent Xfer */
  202. #define IP_PROTO_STP 118 /* Schedule Transfer Proto */
  203. #define IP_PROTO_SRP 119 /* SpectraLink Radio Proto */
  204. #define IP_PROTO_UTI 120 /* UTI */
  205. #define IP_PROTO_SMP 121 /* Simple Message Protocol */
  206. #define IP_PROTO_SM 122 /* SM */
  207. #define IP_PROTO_PTP 123 /* Performance Transparency */
  208. #define IP_PROTO_ISIS 124 /* ISIS over IPv4 */
  209. #define IP_PROTO_FIRE 125 /* FIRE */
  210. #define IP_PROTO_CRTP 126 /* Combat Radio Transport */
  211. #define IP_PROTO_CRUDP 127 /* Combat Radio UDP */
  212. #define IP_PROTO_SSCOPMCE 128 /* SSCOPMCE */
  213. #define IP_PROTO_IPLT 129 /* IPLT */
  214. #define IP_PROTO_SPS 130 /* Secure Packet Shield */
  215. #define IP_PROTO_PIPE 131 /* Private IP Encap in IP */
  216. #define IP_PROTO_SCTP 132 /* Stream Ctrl Transmission */
  217. #define IP_PROTO_FC 133 /* Fibre Channel */
  218. #define IP_PROTO_RSVPIGN 134 /* RSVP-E2E-IGNORE */
  219. #define IP_PROTO_RAW 255 /* Raw IP packets */
  220. #define IP_PROTO_RESERVED IP_PROTO_RAW /* Reserved */
  221. #define IP_PROTO_MAX 255
  222. /*
  223. * Option types (opt_type) - http://www.iana.org/assignments/ip-parameters
  224. */
  225. #define IP_OPT_CONTROL 0x00 /* control */
  226. #define IP_OPT_DEBMEAS 0x40 /* debugging & measurement */
  227. #define IP_OPT_COPY 0x80 /* copy into all fragments */
  228. #define IP_OPT_RESERVED1 0x20
  229. #define IP_OPT_RESERVED2 0x60
  230. #define IP_OPT_EOL 0 /* end of option list */
  231. #define IP_OPT_NOP 1 /* no operation */
  232. #define IP_OPT_SEC (2|IP_OPT_COPY) /* DoD basic security */
  233. #define IP_OPT_LSRR (3|IP_OPT_COPY) /* loose source route */
  234. #define IP_OPT_TS (4|IP_OPT_DEBMEAS) /* timestamp */
  235. #define IP_OPT_ESEC (5|IP_OPT_COPY) /* DoD extended security */
  236. #define IP_OPT_CIPSO (6|IP_OPT_COPY) /* commercial security */
  237. #define IP_OPT_RR 7 /* record route */
  238. #define IP_OPT_SATID (8|IP_OPT_COPY) /* stream ID (obsolete) */
  239. #define IP_OPT_SSRR (9|IP_OPT_COPY) /* strict source route */
  240. #define IP_OPT_ZSU 10 /* experimental measurement */
  241. #define IP_OPT_MTUP 11 /* MTU probe */
  242. #define IP_OPT_MTUR 12 /* MTU reply */
  243. #define IP_OPT_FINN (13|IP_OPT_COPY|IP_OPT_DEBMEAS) /* exp flow control */
  244. #define IP_OPT_VISA (14|IP_OPT_COPY) /* exp access control */
  245. #define IP_OPT_ENCODE 15 /* ??? */
  246. #define IP_OPT_IMITD (16|IP_OPT_COPY) /* IMI traffic descriptor */
  247. #define IP_OPT_EIP (17|IP_OPT_COPY) /* extended IP, RFC 1385 */
  248. #define IP_OPT_TR (18|IP_OPT_DEBMEAS) /* traceroute */
  249. #define IP_OPT_ADDEXT (19|IP_OPT_COPY) /* IPv7 ext addr, RFC 1475 */
  250. #define IP_OPT_RTRALT (20|IP_OPT_COPY) /* router alert, RFC 2113 */
  251. #define IP_OPT_SDB (21|IP_OPT_COPY) /* directed bcast, RFC 1770 */
  252. #define IP_OPT_NSAPA (22|IP_OPT_COPY) /* NSAP addresses */
  253. #define IP_OPT_DPS (23|IP_OPT_COPY) /* dynamic packet state */
  254. #define IP_OPT_UMP (24|IP_OPT_COPY) /* upstream multicast */
  255. #define IP_OPT_MAX 25
  256. #define IP_OPT_COPIED(o) ((o) & 0x80)
  257. #define IP_OPT_CLASS(o) ((o) & 0x60)
  258. #define IP_OPT_NUMBER(o) ((o) & 0x1f)
  259. #define IP_OPT_TYPEONLY(o) ((o) == IP_OPT_EOL || (o) == IP_OPT_NOP)
  260. /*
  261. * Security option data - RFC 791, 3.1
  262. */
  263. struct ip_opt_data_sec {
  264. uint16_t s; /* security */
  265. uint16_t c; /* compartments */
  266. uint16_t h; /* handling restrictions */
  267. uint8_t tcc[3]; /* transmission control code */
  268. } __attribute__((__packed__));
  269. #define IP_OPT_SEC_UNCLASS 0x0000 /* unclassified */
  270. #define IP_OPT_SEC_CONFID 0xf135 /* confidential */
  271. #define IP_OPT_SEC_EFTO 0x789a /* EFTO */
  272. #define IP_OPT_SEC_MMMM 0xbc4d /* MMMM */
  273. #define IP_OPT_SEC_PROG 0x5e26 /* PROG */
  274. #define IP_OPT_SEC_RESTR 0xaf13 /* restricted */
  275. #define IP_OPT_SEC_SECRET 0xd788 /* secret */
  276. #define IP_OPT_SEC_TOPSECRET 0x6bc5 /* top secret */
  277. /*
  278. * {Loose Source, Record, Strict Source} Route option data - RFC 791, 3.1
  279. */
  280. struct ip_opt_data_rr {
  281. uint8_t ptr; /* from start of option, >= 4 */
  282. uint32_t iplist __flexarr; /* list of IP addresses */
  283. } __attribute__((__packed__));
  284. /*
  285. * Timestamp option data - RFC 791, 3.1
  286. */
  287. struct ip_opt_data_ts {
  288. uint8_t ptr; /* from start of option, >= 5 */
  289. #if DNET_BYTESEX == DNET_BIG_ENDIAN
  290. uint8_t oflw:4, /* number of IPs skipped */
  291. flg:4; /* address[ / timestamp] flag */
  292. #elif DNET_BYTESEX == DNET_LIL_ENDIAN
  293. uint8_t flg:4,
  294. oflw:4;
  295. #endif
  296. uint32_t ipts __flexarr; /* IP address [/ timestamp] pairs */
  297. } __attribute__((__packed__));
  298. #define IP_OPT_TS_TSONLY 0 /* timestamps only */
  299. #define IP_OPT_TS_TSADDR 1 /* IP address / timestamp pairs */
  300. #define IP_OPT_TS_PRESPEC 3 /* IP address / zero timestamp pairs */
  301. /*
  302. * Traceroute option data - RFC 1393, 2.2
  303. */
  304. struct ip_opt_data_tr {
  305. uint16_t id; /* ID number */
  306. uint16_t ohc; /* outbound hop count */
  307. uint16_t rhc; /* return hop count */
  308. uint32_t origip; /* originator IP address */
  309. } __attribute__((__packed__));
  310. /*
  311. * IP option (following IP header)
  312. */
  313. struct ip_opt {
  314. uint8_t opt_type; /* option type */
  315. uint8_t opt_len; /* option length >= IP_OPT_LEN */
  316. union ip_opt_data {
  317. struct ip_opt_data_sec sec; /* IP_OPT_SEC */
  318. struct ip_opt_data_rr rr; /* IP_OPT_{L,S}RR */
  319. struct ip_opt_data_ts ts; /* IP_OPT_TS */
  320. uint16_t satid; /* IP_OPT_SATID */
  321. uint16_t mtu; /* IP_OPT_MTU{P,R} */
  322. struct ip_opt_data_tr tr; /* IP_OPT_TR */
  323. uint32_t addext[2]; /* IP_OPT_ADDEXT */
  324. uint16_t rtralt; /* IP_OPT_RTRALT */
  325. uint32_t sdb[9]; /* IP_OPT_SDB */
  326. uint8_t data8[IP_OPT_LEN_MAX - IP_OPT_LEN];
  327. } opt_data;
  328. } __attribute__((__packed__));
  329. #ifndef __GNUC__
  330. # pragma pack()
  331. #endif
  332. /*
  333. * Classful addressing
  334. */
  335. #define IP_CLASSA(i) (((uint32_t)(i) & htonl(0x80000000)) == \
  336. htonl(0x00000000))
  337. #define IP_CLASSA_NET (htonl(0xff000000))
  338. #define IP_CLASSA_NSHIFT 24
  339. #define IP_CLASSA_HOST (htonl(0x00ffffff))
  340. #define IP_CLASSA_MAX 128
  341. #define IP_CLASSB(i) (((uint32_t)(i) & htonl(0xc0000000)) == \
  342. htonl(0x80000000))
  343. #define IP_CLASSB_NET (htonl(0xffff0000))
  344. #define IP_CLASSB_NSHIFT 16
  345. #define IP_CLASSB_HOST (htonl(0x0000ffff))
  346. #define IP_CLASSB_MAX 65536
  347. #define IP_CLASSC(i) (((uint32_t)(i) & htonl(0xe0000000)) == \
  348. htonl(0xc0000000))
  349. #define IP_CLASSC_NET (htonl(0xffffff00))
  350. #define IP_CLASSC_NSHIFT 8
  351. #define IP_CLASSC_HOST (htonl(0x000000ff))
  352. #define IP_CLASSD(i) (((uint32_t)(i) & htonl(0xf0000000)) == \
  353. htonl(0xe0000000))
  354. /* These ones aren't really net and host fields, but routing needn't know. */
  355. #define IP_CLASSD_NET (htonl(0xf0000000))
  356. #define IP_CLASSD_NSHIFT 28
  357. #define IP_CLASSD_HOST (htonl(0x0fffffff))
  358. #define IP_MULTICAST(i) IP_CLASSD(i)
  359. #define IP_EXPERIMENTAL(i) (((uint32_t)(i) & htonl(0xf0000000)) == \
  360. htonl(0xf0000000))
  361. #define IP_BADCLASS(i) (((uint32_t)(i) & htonl(0xf0000000)) == \
  362. htonl(0xf0000000))
  363. #define IP_LOCAL_GROUP(i) (((uint32_t)(i) & htonl(0xffffff00)) == \
  364. htonl(0xe0000000))
  365. /*
  366. * Reserved addresses
  367. */
  368. #define IP_ADDR_ANY (htonl(0x00000000)) /* 0.0.0.0 */
  369. #define IP_ADDR_BROADCAST (htonl(0xffffffff)) /* 255.255.255.255 */
  370. #define IP_ADDR_LOOPBACK (htonl(0x7f000001)) /* 127.0.0.1 */
  371. #define IP_ADDR_MCAST_ALL (htonl(0xe0000001)) /* 224.0.0.1 */
  372. #define IP_ADDR_MCAST_LOCAL (htonl(0xe00000ff)) /* 224.0.0.255 */
  373. #define ip_pack_hdr(hdr, tos, len, id, off, ttl, p, src, dst) do { \
  374. struct ip_hdr *ip_pack_p = (struct ip_hdr *)(hdr); \
  375. ip_pack_p->ip_v = 4; ip_pack_p->ip_hl = 5; \
  376. ip_pack_p->ip_tos = tos; ip_pack_p->ip_len = htons(len); \
  377. ip_pack_p->ip_id = htons(id); ip_pack_p->ip_off = htons(off); \
  378. ip_pack_p->ip_ttl = ttl; ip_pack_p->ip_p = p; \
  379. ip_pack_p->ip_src = src; ip_pack_p->ip_dst = dst; \
  380. } while (0)
  381. typedef struct ip_handle ip_t;
  382. __BEGIN_DECLS
  383. ip_t *ip_open(void);
  384. ssize_t ip_send(ip_t *i, const void *buf, size_t len);
  385. ip_t *ip_close(ip_t *i);
  386. char *ip_ntop(const ip_addr_t *ip, char *dst, size_t len);
  387. int ip_pton(const char *src, ip_addr_t *dst);
  388. char *ip_ntoa(const ip_addr_t *ip);
  389. #define ip_aton ip_pton
  390. ssize_t ip_add_option(void *buf, size_t len,
  391. int proto, const void *optbuf, size_t optlen);
  392. void ip_checksum(void *buf, size_t len);
  393. int ip_cksum_add(const void *buf, size_t len, int cksum);
  394. #define ip_cksum_carry(x) \
  395. (x = (x >> 16) + (x & 0xffff), (~(x + (x >> 16)) & 0xffff))
  396. __END_DECLS
  397. #endif /* DNET_IP_H */