in.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:11k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* in.h - internet header file */
  2. /*
  3.  * Copyright (c) 1982, 1986, 1990, 1993
  4.  * The Regents of the University of California.  All rights reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  * 1. Redistributions of source code must retain the above copyright
  10.  *    notice, this list of conditions and the following disclaimer.
  11.  * 2. Redistributions in binary form must reproduce the above copyright
  12.  *    notice, this list of conditions and the following disclaimer in the
  13.  *    documentation and/or other materials provided with the distribution.
  14.  * 3. All advertising materials mentioning features or use of this software
  15.  *    must display the following acknowledgement:
  16.  * This product includes software developed by the University of
  17.  * California, Berkeley and its contributors.
  18.  * 4. Neither the name of the University nor the names of its contributors
  19.  *    may be used to endorse or promote products derived from this software
  20.  *    without specific prior written permission.
  21.  *
  22.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  23.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  24.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  25.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  26.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  27.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  28.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  29.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  30.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  31.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  32.  * SUCH DAMAGE.
  33.  *
  34.  * @(#)in.h 8.3 (Berkeley) 1/3/94
  35.  */
  36. /*
  37. modification history
  38. --------------------
  39. 01g,31aug00,rae  add INADDR_ALLRTRS_GROUP
  40. 01f,29oct99,spm  renamed ip_opts field to comply with C++ standard (SPR #27782)
  41. 01e,07jul97,rjc  modifications to sockaddr_rt structure 
  42. 01d,30jun97,rjc  modifications for reverting back to old rtentry struct.
  43. 01c,06feb97,rjc  modified TOS_{GET, SET} macros.
  44. 01b,30dec96,rjc  added IPPROTO_OSPF and tos routing changes.
  45. 01a,03mar96,vin  created from BSD4.4 stuff,integrated with 01n of in.h
  46. */
  47. #ifndef __INCinh
  48. #define __INCinh
  49. #ifdef __cplusplus
  50. extern "C" {
  51. #endif
  52. #include "vxWorks.h"
  53. #include "sys/types.h"
  54. #include "net/if.h"
  55. #include "net/mbuf.h"
  56. #if ((CPU_FAMILY==I960) && (defined __GNUC__))
  57. #pragma align 1                 /* tell gcc960 not to optimize alignments */
  58. #endif /* CPU_FAMILY==I960 */
  59. /*
  60.  * Constants and structures defined by the internet system,
  61.  * Per RFC 790, September 1981, and numerous additions.
  62.  */
  63. /*
  64.  * Protocols
  65.  */
  66. #define IPPROTO_IP 0 /* dummy for IP */
  67. #define IPPROTO_ICMP 1 /* control message protocol */
  68. #define IPPROTO_IGMP 2 /* group mgmt protocol */
  69. #define IPPROTO_GGP 3 /* gateway^2 (deprecated) */
  70. #define IPPROTO_TCP 6 /* tcp */
  71. #define IPPROTO_EGP 8 /* exterior gateway protocol */
  72. #define IPPROTO_PUP 12 /* pup */
  73. #define IPPROTO_UDP 17 /* user datagram protocol */
  74. #define IPPROTO_IDP 22 /* xns idp */
  75. #define IPPROTO_TP 29  /* tp-4 w/ class negotiation */
  76. #define IPPROTO_EON 80 /* ISO cnlp */
  77. #define IPPROTO_OSPF 89 /* OSPF version 2  */
  78. #define IPPROTO_ENCAP 98 /* encapsulation header */
  79. #define IPPROTO_RAW 255 /* raw IP packet */
  80. #define IPPROTO_MAX 256
  81. /*
  82.  * Local port number conventions:
  83.  * Ports < IPPORT_RESERVED are reserved for
  84.  * privileged processes (e.g. root).
  85.  * Ports > IPPORT_USERRESERVED are reserved
  86.  * for servers, not necessarily privileged.
  87.  */
  88. #define IPPORT_RESERVED 1024
  89. #define IPPORT_USERRESERVED 5000
  90. /*
  91.  * Internet address (a structure for historical reasons)
  92.  */
  93. struct in_addr {
  94. u_long s_addr;
  95. };
  96. /*
  97.  * Definitions of bits in internet address integers.
  98.  * On subnets, the decomposition of addresses to host and net parts
  99.  * is done according to subnet mask, not the masks here.
  100.  */
  101. #define IN_CLASSA(i) (((long)(i) & 0x80000000) == 0)
  102. #define IN_CLASSA_NET 0xff000000
  103. #define IN_CLASSA_NSHIFT 24
  104. #define IN_CLASSA_HOST 0x00ffffff
  105. #define IN_CLASSA_MAX 128
  106. #define IN_CLASSB(i) (((long)(i) & 0xc0000000) == 0x80000000)
  107. #define IN_CLASSB_NET 0xffff0000
  108. #define IN_CLASSB_NSHIFT 16
  109. #define IN_CLASSB_HOST 0x0000ffff
  110. #define IN_CLASSB_MAX 65536
  111. #define IN_CLASSC(i) (((long)(i) & 0xe0000000) == 0xc0000000)
  112. #define IN_CLASSC_NET 0xffffff00
  113. #define IN_CLASSC_NSHIFT 8
  114. #define IN_CLASSC_HOST 0x000000ff
  115. #define IN_CLASSD(i) (((long)(i) & 0xf0000000) == 0xe0000000)
  116. #define IN_CLASSD_NET 0xf0000000 /* These ones aren't really */
  117. #define IN_CLASSD_NSHIFT 28 /* net and host fields, but */
  118. #define IN_CLASSD_HOST 0x0fffffff /* routing needn't know.    */
  119. #define IN_MULTICAST(i) IN_CLASSD(i)
  120. #define IN_EXPERIMENTAL(i) (((long)(i) & 0xf0000000) == 0xf0000000)
  121. #define IN_BADCLASS(i) (((long)(i) & 0xf0000000) == 0xf0000000)
  122. #define INADDR_ANY (u_long)0x00000000
  123. #define INADDR_LOOPBACK (u_long)0x7f000001
  124. #define INADDR_BROADCAST (u_long)0xffffffff /* must be masked */
  125. #define INADDR_NONE 0xffffffff /* -1 return */
  126. #define INADDR_UNSPEC_GROUP (u_long)0xe0000000 /* 224.0.0.0 */
  127. #define INADDR_ALLHOSTS_GROUP (u_long)0xe0000001 /* 224.0.0.1 */
  128. #define INADDR_ALLRTRS_GROUP    (u_long)0xe0000002 /* 224.0.0.2 */
  129. #define INADDR_MAX_LOCAL_GROUP (u_long)0xe00000ff /* 224.0.0.255 */
  130. #define IN_LOOPBACKNET 127 /* official! */
  131. /*
  132.  * Socket address, internet style.
  133.  */
  134. struct sockaddr_in {
  135. u_char sin_len;
  136. u_char sin_family;
  137. u_short sin_port;
  138. struct in_addr sin_addr;
  139. char sin_zero[8];
  140. };
  141. /* 
  142.  * macros for getting and setting tos values in sockaddr_in 
  143.  * structures. A new sockaddr structure is defined for this
  144.  * purpose as shown below.
  145.  */
  146. struct sockaddr_rt {
  147. u_char srt_len;
  148. u_char srt_family;
  149.         u_char  srt_proto;
  150.         u_char  srt_tos;          
  151. struct in_addr srt_addr;
  152. char sin_zero[8];
  153.         };
  154. #define TOS_GET(pSockaddr) (((struct sockaddr_rt *)(pSockaddr))->srt_tos)
  155. #define TOS_SET(pSockaddr, tosVal) (((struct sockaddr_rt *)(pSockaddr))->   
  156.     srt_tos = tosVal)
  157. #define RT_PROTO_GET(pSockaddr) (((struct sockaddr_rt *)(pSockaddr))->srt_proto)
  158. #define RT_PROTO_SET(pSockaddr, proto) (((struct sockaddr_rt *)(pSockaddr))->  
  159.     srt_proto = proto)
  160. /*
  161.  * Structure used to describe IP options.
  162.  * Used to store options internally, to pass them to a process,
  163.  * or to restore options retrieved earlier.
  164.  * The ip_dst is used for the first-hop gateway when using a source route
  165.  * (this gets put into the header proper).
  166.  */
  167. struct ip_opts {
  168. struct in_addr ip_dst; /* first hop, 0 w/o src rt */
  169. char opts[40]; /* actually variable in size */
  170. };
  171. /*
  172.  * Options for use with [gs]etsockopt at the IP level.
  173.  * First word of comment is data type; bool is stored in int.
  174.  */
  175. #define IP_OPTIONS 1    /* buf/ip_opts; set/get IP options */
  176. #define IP_HDRINCL 2    /* int; header is included with data */
  177. #define IP_TOS 3    /* int; IP type of service and preced. */
  178. #define IP_TTL 4    /* int; IP time to live */
  179. #define IP_RECVOPTS 5    /* bool; receive all IP opts w/dgram */
  180. #define IP_RECVRETOPTS 6    /* bool; receive IP opts for response */
  181. #define IP_RECVDSTADDR 7    /* bool; receive IP dst addr w/dgram */
  182. #define IP_RETOPTS 8    /* ip_opts; set/get IP options */
  183. #define IP_MULTICAST_IF 9    /* u_char; set/get IP multicast i/f  */
  184. #define IP_MULTICAST_TTL 10   /* u_char; set/get IP multicast ttl */
  185. #define IP_MULTICAST_LOOP 11   /* u_char; set/get IP multicast loopback */
  186. #define IP_ADD_MEMBERSHIP 12   /* ip_mreq; add an IP group membership */
  187. #define IP_DROP_MEMBERSHIP 13   /* ip_mreq; drop an IP group membership */
  188. /*
  189.  * Defaults and limits for options
  190.  */
  191. #define IP_DEFAULT_MULTICAST_TTL  1 /* normally limit m'casts to 1 hop  */
  192. #define IP_DEFAULT_MULTICAST_LOOP 1 /* normally hear sends if a member  */
  193. #define IP_MAX_MEMBERSHIPS 20 /* per socket; must fit in one mbuf */
  194. /*
  195.  * Argument structure for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP.
  196.  */
  197. struct ip_mreq {
  198. struct in_addr imr_multiaddr; /* IP multicast address of group */
  199. struct in_addr imr_interface; /* local IP address of interface */
  200. };
  201. #if ((CPU_FAMILY==I960) && (defined __GNUC__))
  202. #pragma align 0                 /* turn off alignment requirement */
  203. #endif /* CPU_FAMILY==I960 */
  204. /*
  205.  * Definitions for inet sysctl operations.
  206.  *
  207.  * Third level is protocol number.
  208.  * Fourth level is desired variable within that protocol.
  209.  */
  210. #define IPPROTO_MAXID (IPPROTO_IDP + 1) /* don't list to IPPROTO_MAX */
  211. #define CTL_IPPROTO_NAMES { 
  212. { "ip", CTLTYPE_NODE }, 
  213. { "icmp", CTLTYPE_NODE }, 
  214. { "igmp", CTLTYPE_NODE }, 
  215. { "ggp", CTLTYPE_NODE }, 
  216. { 0, 0 }, 
  217. { 0, 0 }, 
  218. { "tcp", CTLTYPE_NODE }, 
  219. { 0, 0 }, 
  220. { "egp", CTLTYPE_NODE }, 
  221. { 0, 0 }, 
  222. { 0, 0 }, 
  223. { 0, 0 }, 
  224. { "pup", CTLTYPE_NODE }, 
  225. { 0, 0 }, 
  226. { 0, 0 }, 
  227. { 0, 0 }, 
  228. { 0, 0 }, 
  229. { "udp", CTLTYPE_NODE }, 
  230. { 0, 0 }, 
  231. { 0, 0 }, 
  232. { 0, 0 }, 
  233. { 0, 0 }, 
  234. { "idp", CTLTYPE_NODE }, 
  235. }
  236. /*
  237.  * Names for IP sysctl objects
  238.  */
  239. #define IPCTL_FORWARDING 1 /* act as router */
  240. #define IPCTL_SENDREDIRECTS 2 /* may send redirects when forwarding */
  241. #define IPCTL_DEFTTL 3 /* default TTL */
  242. #ifdef notyet
  243. #define IPCTL_DEFMTU 4 /* default MTU */
  244. #endif
  245. #define IPCTL_MAXID 5
  246. #define IPCTL_NAMES { 
  247. { 0, 0 }, 
  248. { "forwarding", CTLTYPE_INT }, 
  249. { "redirect", CTLTYPE_INT }, 
  250. { "ttl", CTLTYPE_INT }, 
  251. { "mtu", CTLTYPE_INT }, 
  252. }
  253. /*
  254.  * Macros for number representation conversion.
  255.  */
  256. #if _BYTE_ORDER==_BIG_ENDIAN
  257. #define ntohl(x) (x)
  258. #define ntohs(x) (x)
  259. #define htonl(x) (x)
  260. #define htons(x) (x)
  261. #define NTOHL(x) (x) = ntohl((u_long)(x))
  262. #define NTOHS(x) (x) = ntohs((u_short)(x))
  263. #define HTONL(x) (x) = htonl((u_long)(x))
  264. #define HTONS(x) (x) = htons((u_short)(x))
  265. #endif /* _BYTE_ORDER==_BIG_ENDIAN */
  266. #if _BYTE_ORDER==_LITTLE_ENDIAN
  267. #if FALSE
  268. UINT16 ntohs ();
  269. UINT16 htons ();
  270. UINT32 ntohl ();
  271. UINT32 htonl ();
  272. #endif /* FALSE */
  273. #define ntohl(x) ((((x) & 0x000000ff) << 24) | 
  274.  (((x) & 0x0000ff00) <<  8) | 
  275.  (((x) & 0x00ff0000) >>  8) | 
  276.  (((x) & 0xff000000) >> 24))
  277. #define htonl(x) ((((x) & 0x000000ff) << 24) | 
  278.  (((x) & 0x0000ff00) <<  8) | 
  279.  (((x) & 0x00ff0000) >>  8) | 
  280.  (((x) & 0xff000000) >> 24))
  281. #define ntohs(x) ((((x) & 0x00ff) << 8) | 
  282.  (((x) & 0xff00) >> 8))
  283. #define htons(x) ((((x) & 0x00ff) << 8) | 
  284.  (((x) & 0xff00) >> 8))
  285. #define NTOHL(x) (x) = ntohl((u_long)(x))
  286. #define NTOHS(x) (x) = ntohs((u_short)(x))
  287. #define HTONL(x) (x) = htonl((u_long)(x))
  288. #define HTONS(x) (x) = htons((u_short)(x))
  289. #endif /* _BYTE_ORDER==_LITTLE_ENDIAN */
  290. extern struct domain inetdomain;
  291. extern  BOOL inet_netmatch(struct sockaddr_in *sin1, struct sockaddr_in *sin2);
  292. extern  void in_makeaddr_b(u_long net, u_long host, struct in_addr * pAddr);
  293. extern  u_long in_lnaof();
  294. extern void in_ifaddr_remove();
  295. extern int in_broadcast (struct in_addr, struct ifnet *);
  296. extern int in_canforward (struct in_addr);
  297. extern int in_cksum (struct mbuf *, int);
  298. extern int in_localaddr (struct in_addr);
  299. extern u_long in_netof (struct in_addr);
  300. extern void in_socktrim (struct sockaddr_in *);
  301. extern  struct in_ifaddr *in_iaonnetof(u_long net);
  302. #ifdef __cplusplus
  303. }
  304. #endif
  305. #endif /* __INCinh */