ip_var.h
上传用户:tjescc
上传日期:2021-02-23
资源大小:419k
文件大小:7k
源码类别:

Telnet服务器

开发平台:

Unix_Linux

  1. /*
  2.  * Copyright (c) 1982, 1986, 1993
  3.  * The Regents of the University of California.  All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  * This product includes software developed by the University of
  16.  * California, Berkeley and its contributors.
  17.  * 4. Neither the name of the University nor the names of its contributors
  18.  *    may be used to endorse or promote products derived from this software
  19.  *    without specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31.  * SUCH DAMAGE.
  32.  *
  33.  * @(#)ip_var.h 8.2 (Berkeley) 1/9/95
  34.  */
  35. #include <endian.h>
  36. /*
  37.  * Overlay for ip header used by other protocols (tcp, udp).
  38.  */
  39. struct ipovly {
  40. caddr_t ih_next, ih_prev; /* for protocol sequence q's */
  41. u_char ih_x1; /* (unused) */
  42. u_char ih_pr; /* protocol */
  43. short ih_len; /* protocol length */
  44. struct in_addr ih_src; /* source internet address */
  45. struct in_addr ih_dst; /* destination internet address */
  46. };
  47. /*
  48.  * Ip reassembly queue structure.  Each fragment
  49.  * being reassembled is attached to one of these structures.
  50.  * They are timed out after ipq_ttl drops to 0, and may also
  51.  * be reclaimed if memory becomes tight.
  52.  */
  53. struct ipq {
  54. struct ipq *next,*prev; /* to other reass headers */
  55. u_char ipq_ttl; /* time for reass q to live */
  56. u_char ipq_p; /* protocol of this fragment */
  57. u_short ipq_id; /* sequence id for reassembly */
  58. struct ipasfrag *ipq_next,*ipq_prev;
  59. /* to ip headers of fragments */
  60. struct in_addr ipq_src,ipq_dst;
  61. };
  62. /*
  63.  * Ip header, when holding a fragment.
  64.  *
  65.  * Note: ipf_next must be at same offset as ipq_next above
  66.  */
  67. struct ipasfrag {
  68. #if BYTE_ORDER == LITTLE_ENDIAN 
  69. u_char ip_hl:4,
  70. ip_v:4;
  71. #endif
  72. #if BYTE_ORDER == BIG_ENDIAN 
  73. u_char ip_v:4,
  74. ip_hl:4;
  75. #endif
  76. u_char ipf_mff; /* XXX overlays ip_tos: use low bit
  77.  * to avoid destroying tos;
  78.  * copied from (ip_off&IP_MF) */
  79. short ip_len;
  80. u_short ip_id;
  81. short ip_off;
  82. u_char ip_ttl;
  83. u_char ip_p;
  84. u_short ip_sum;
  85. struct ipasfrag *ipf_next; /* next fragment */
  86. struct ipasfrag *ipf_prev; /* previous fragment */
  87. };
  88. /*
  89.  * Structure stored in mbuf in inpcb.ip_options
  90.  * and passed to ip_output when ip options are in use.
  91.  * The actual length of the options (including ipopt_dst)
  92.  * is in m_len.
  93.  */
  94. #define MAX_IPOPTLEN 40
  95. struct ipoption {
  96. struct in_addr ipopt_dst; /* first-hop dst if source routed */
  97. char ipopt_list[MAX_IPOPTLEN]; /* options proper */
  98. };
  99. struct ipstat {
  100. n_long ips_total; /* total packets received */
  101. n_long ips_badsum; /* checksum bad */
  102. n_long ips_tooshort; /* packet too short */
  103. n_long ips_toosmall; /* not enough data */
  104. n_long ips_badhlen; /* ip header length < data size */
  105. n_long ips_badlen; /* ip length < ip header length */
  106. n_long ips_fragments; /* fragments received */
  107. n_long ips_fragdropped; /* frags dropped (dups, out of space) */
  108. n_long ips_fragtimeout; /* fragments timed out */
  109. n_long ips_forward; /* packets forwarded */
  110. n_long ips_cantforward; /* packets rcvd for unreachable dest */
  111. n_long ips_redirectsent; /* packets forwarded on same net */
  112. n_long ips_noproto; /* unknown or unsupported protocol */
  113. n_long ips_delivered; /* datagrams delivered to upper level*/
  114. n_long ips_localout; /* total ip packets generated here */
  115. n_long ips_odropped; /* lost packets due to nobufs, etc. */
  116. n_long ips_reassembled; /* total packets reassembled ok */
  117. n_long ips_fragmented; /* datagrams sucessfully fragmented */
  118. n_long ips_ofragments; /* output fragments created */
  119. n_long ips_cantfrag; /* don't fragment flag was set, etc. */
  120. n_long ips_badoptions; /* error in option processing */
  121. n_long ips_noroute; /* packets discarded due to no route */
  122. n_long ips_badvers; /* ip version != 4 */
  123. n_long ips_rawout; /* total raw ip packets generated */
  124. };
  125. #ifdef KERNEL
  126. /* flags passed to ip_output as last parameter */
  127. #define IP_FORWARDING 0x1 /* most of ip header exists */
  128. #define IP_RAWOUTPUT 0x2 /* raw ip header exists */
  129. #define IP_ROUTETOIF SO_DONTROUTE /* bypass routing tables */
  130. #define IP_ALLOWBROADCAST SO_BROADCAST /* can send broadcast packets */
  131. struct ipstat ipstat;
  132. struct ipq ipq; /* ip reass. queue */
  133. u_short ip_id; /* ip packet ctr, for ids */
  134. int ip_defttl; /* default IP ttl */
  135. int  in_control __P((struct socket *, n_long, caddr_t, struct ifnet *));
  136. int  ip_ctloutput __P((int, struct socket *, int, int, struct mbuf **));
  137. void  ip_deq __P((struct ipasfrag *));
  138. int  ip_dooptions __P((struct mbuf *));
  139. void  ip_drain __P((void));
  140. void  ip_enq __P((struct ipasfrag *, struct ipasfrag *));
  141. void  ip_forward __P((struct mbuf *, int));
  142. void  ip_freef __P((struct ipq *));
  143. void  ip_freemoptions __P((struct ip_moptions *));
  144. int  ip_getmoptions __P((int, struct ip_moptions *, struct mbuf **));
  145. void  ip_init __P((void));
  146. int  ip_mforward __P((struct mbuf *, struct ifnet *));
  147. int  ip_optcopy __P((struct ip *, struct ip *));
  148. int  ip_output __P((struct mbuf *,
  149.     struct mbuf *, struct route *, int, struct ip_moptions *));
  150. int  ip_pcbopts __P((struct mbuf **, struct mbuf *));
  151. struct ip *
  152.  ip_reass __P((struct ipasfrag *, struct ipq *));
  153. struct in_ifaddr *
  154.  ip_rtaddr __P((struct in_addr));
  155. int  ip_setmoptions __P((int, struct ip_moptions **, struct mbuf *));
  156. void  ip_slowtimo __P((void));
  157. struct mbuf *
  158.  ip_srcroute __P((void));
  159. void  ip_stripoptions __P((struct mbuf *, struct mbuf *));
  160. int  ip_sysctl __P((int *, n_long, void *, size_t *, void *, size_t));
  161. void  ipintr __P((void));
  162. int  rip_ctloutput __P((int, struct socket *, int, int, struct mbuf **));
  163. void  rip_init __P((void));
  164. void  rip_input __P((struct mbuf *));
  165. int  rip_output __P((struct mbuf *, struct socket *, n_long));
  166. int  rip_usrreq __P((struct socket *,
  167.     int, struct mbuf *, struct mbuf *, struct mbuf *));
  168. #endif