Subversion Repositories HelenOS

Rev

Rev 4710 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * Copyright (c) 2009 Lukas Mejdrech
  3.  * 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.  *
  9.  * - Redistributions of source code must retain the above copyright
  10.  *   notice, this list of conditions and the following disclaimer.
  11.  * - 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.  * - The name of the author may not be used to endorse or promote products
  15.  *   derived from this software without specific prior written permission.
  16.  *
  17.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  18.  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  19.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  20.  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  21.  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  22.  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  23.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  24.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  25.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  26.  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27.  */
  28.  
  29. /** @addtogroup ip
  30.  *  @{
  31.  */
  32.  
  33. /** @file
  34.  *  IP codes and definitions.
  35.  */
  36.  
  37. #ifndef __NET_IP_CODES_H__
  38. #define __NET_IP_CODES_H__
  39.  
  40. #include <sys/types.h>
  41.  
  42. /** IP time to live counter type definition.
  43.  */
  44. typedef uint8_t ip_ttl_t;
  45.  
  46. /** IP type of service type definition.
  47.  */
  48. typedef uint8_t ip_tos_t;
  49.  
  50. /** IP transport protocol type definition.
  51.  */
  52. typedef uint8_t ip_protocol_t;
  53.  
  54. /** Default IPVERSION.
  55.  */
  56. #define IPVERSION   4
  57.  
  58. /** Maximum time to live counter.
  59.  */
  60. #define MAXTTL      255
  61.  
  62. /** Default time to live counter.
  63.  */
  64. #define IPDEFTTL    64
  65.  
  66. /** @name IP type of service definitions
  67.  */
  68. /*@{*/
  69.  
  70. /** IP TOS mask.
  71.  */
  72. #define IPTOS_TOS_MASK              0x1E
  73.  
  74. /** Precedence shift.
  75.  */
  76. #define IPTOS_PRECEDENCE_SHIFT      5
  77.  
  78. /** Delay shift.
  79.  */
  80. #define IPTOS_DELAY_SHIFT           4
  81.  
  82. /** Throughput shift.
  83.  */
  84. #define IPTOS_THROUGHPUT_SHIFT      3
  85.  
  86. /** Reliability shift.
  87.  */
  88. #define IPTOS_RELIABILITY_SHIFT     2
  89.  
  90. /** Cost shift.
  91.  */
  92. #define IPTOS_COST_SHIFT            1
  93.  
  94. /** Normal delay.
  95.  */
  96. #define IPTOS_NORMALDELAY           ( 0x0 << IPTOS_DELAY_SHIFT )
  97.  
  98. /** Low delay.
  99.  */
  100. #define IPTOS_LOWDELAY              ( 0x1 << IPTOS_DELAY_SHIFT )
  101.  
  102. /** Normal throughput.
  103.  */
  104. #define IPTOS_NORMALTHROUGHPUT      ( 0x0 << IPTOS_THROUGHPUT_SHIFT )
  105.  
  106. /** Throughput.
  107.  */
  108. #define IPTOS_THROUGHPUT            ( 0x1 << IPTOS_THROUGHPUT_SHIFT )
  109.  
  110. /** Normal reliability.
  111.  */
  112. #define IPTOS_NORMALRELIABILITY     ( 0x0 << IPTOS_RELIABILITY_SHIFT )
  113.  
  114. /** Reliability.
  115.  */
  116. #define IPTOS_RELIABILITY           ( 0x1 << IPTOS_RELIABILITY_SHIFT )
  117.  
  118. /** Normal cost.
  119.  */
  120. #define IPTOS_NORMALCOST            ( 0x0 << IPTOS_COST_SHIFT )
  121.  
  122. /** Minimum cost.
  123.  */
  124. #define IPTOS_MICNCOST              ( 0x1 << IPTOS_COST_SHIFT )
  125.  
  126. /*@}*/
  127.  
  128. /** @name IP TOS precedence definitions
  129.  */
  130. /*@{*/
  131.  
  132.  
  133. /** Precedence mask.
  134.  */
  135. #define IPTOS_PREC_MASK             0xE0
  136.  
  137. /** Routine precedence.
  138.  */
  139. #define IPTOS_PREC_ROUTINE          ( 0x0 << IPTOS_PRECEDENCE_SHIFT )
  140.  
  141. /** Priority precedence.
  142.  */
  143. #define IPTOS_PREC_PRIORITY         ( 0x1 << IPTOS_PRECEDENCE_SHIFT )
  144.  
  145. /** Immediate precedence.
  146.  */
  147. #define IPTOS_PREC_IMMEDIATE        ( 0x2 << IPTOS_PRECEDENCE_SHIFT )
  148.  
  149. /** Flash precedence.
  150.  */
  151. #define IPTOS_PREC_FLASH            ( 0x3 << IPTOS_PRECEDENCE_SHIFT )
  152.  
  153. /** Flash override precedence.
  154.  */
  155. #define IPTOS_PREC_FLASHOVERRIDE    ( 0x4 << IPTOS_PRECEDENCE_SHIFT )
  156.  
  157. /** Critical precedence.
  158.  */
  159. #define IPTOS_PREC_CRITIC_ECP       ( 0x5 << IPTOS_PRECEDENCE_SHIFT )
  160.  
  161. /** Inter-network control precedence.
  162.  */
  163. #define IPTOS_PREC_INTERNETCONTROL  ( 0x6 << IPTOS_PRECEDENCE_SHIFT )
  164.  
  165. /** Network control precedence.
  166.  */
  167. #define IPTOS_PREC_NETCONTROL       ( 0x7 << IPTOS_PRECEDENCE_SHIFT )
  168.  
  169. /*@}*/
  170.  
  171. /** @name IP options definitions
  172.  */
  173. /*@{*/
  174.  
  175. /** Copy shift.
  176.  */
  177. #define IPOPT_COPY_SHIFT            7
  178.  
  179. /** Class shift.
  180.  */
  181. #define IPOPT_CLASS_SHIFT           5
  182.  
  183. /** Number shift.
  184.  */
  185. #define IPOPT_NUMBER_SHIFT          0
  186.  
  187. /** Class mask.
  188.  */
  189. #define IPOPT_CLASS_MASK            0x60
  190.  
  191. /** Number mask.
  192.  */
  193. #define IPOPT_NUMBER_MASK           0x1F
  194.  
  195. /** Copy flag.
  196.  */
  197. #define IPOPT_COPY                  ( 1 << IPOPT_COPY_SHIFT )
  198.  
  199. /** Returns IP option type.
  200.  *  @param[in] copy The value indication whether the IP option should be copied.
  201.  *  @param[in] class The IP option class.
  202.  *  @param[in] number The IP option number.
  203.  */
  204. #define IPOPT_TYPE( copy, class, number )   ((( copy ) & IPOPT_COPY ) | (( class ) & IPOPT_CLASS_MASK ) | (( number << IPOPT_NUMBER_SHIFT ) & IPOPT_NUMBER_MASK ))
  205.  
  206. /** Returns a value indicating whether the IP option should be copied.
  207.  *  @param[in] o The IP option.
  208.  */
  209. #define IPOPT_COPIED( o )           (( o ) & IPOPT_COPY )
  210.  
  211. /** Returns an IP option class.
  212.  *  @param[in] o The IP option.
  213.  */
  214. #define IPOPT_CLASS( o )            (( o ) & IPOPT_CLASS_MASK )
  215.  
  216. /** Returns an IP option number.
  217.  *  @param[in] o The IP option.
  218.  */
  219. #define IPOPT_NUMBER( o )           (( o ) & IPOPT_NUMBER_MASK )
  220.  
  221. /*@}*/
  222.  
  223. /** @name IP option class definitions
  224.  */
  225. /*@{*/
  226.  
  227. /** Control class.
  228.  */
  229. #define IPOPT_CONTROL               ( 0 << IPOPT_CLASS_SHIFT )
  230.  
  231. /** Reserved class 1.
  232.  */
  233. #define IPOPT_RESERVED1             ( 1 << IPOPT_CLASS_SHIFT )
  234.  
  235. /** Measurement class.
  236.  */
  237. #define IPOPT_MEASUREMENT           ( 2 << IPOPT_CLASS_SHIFT )
  238.  
  239. /** Reserved class 2.
  240.  */
  241. #define IPOPT_RESERVED2             ( 3 << IPOPT_CLASS_SHIFT )
  242.  
  243. /*@}*/
  244.  
  245. /** @name IP option type definitions
  246.  */
  247. /*@{*/
  248.  
  249. /** End of list.
  250.  */
  251. //#define IPOPT_END_OF_LIST         0x0
  252. #define IPOPT_END                   IPOPT_TYPE( 0, IPOPT_CONTROL, 0 )
  253.  
  254. /** No operation.
  255.  */
  256. //#define IPOPT_NO_OPERATION        0x1
  257. #define IPOPT_NOOP                  IPOPT_TYPE( 0, IPOPT_CONTROL, 1 )
  258.  
  259. /** Security.
  260.  */
  261. //#define IPOPT_SECURITY            0x82
  262. #define IPOPT_SEC                   IPOPT_TYPE( IPOPT_COPY, IPOPT_CONTROL, 2 )
  263.  
  264. /** Loose source.
  265.  */
  266. //#define IPOPT_LOOSE_SOURCE        0x83
  267. #define IPOPT_LSRR                  IPOPT_TYPE( IPOPT_COPY, IPOPT_CONTROL, 3 )
  268.  
  269. /** Strict route.
  270.  */
  271. //#define IPOPT_STRICT_SOURCE       0x89
  272. #define IPOPT_SSRR                  IPOPT_TYPE( IPOPT_COPY, IPOPT_CONTROL, 9 )
  273.  
  274. /** Record route.
  275.  */
  276. //#define IPOPT_RECORD_ROUTE        0x07
  277. #define IPOPT_RR                    IPOPT_TYPE( IPOPT_COPY, IPOPT_CONTROL, 7 )
  278.  
  279. /** Stream identifier.
  280.  */
  281. //#define IPOPT_STREAM_IDENTIFIER   0x88
  282. #define IPOPT_SID                   IPOPT_TYPE( IPOPT_COPY, IPOPT_CONTROL, 8 )
  283.  
  284. /** Stream identifier length.
  285.  */
  286. #define IPOPT_SID_LENGTH            4
  287.  
  288. /** Internet timestamp.
  289.  */
  290. //#define IPOPT_INTERNET_TIMESTAMP  0x44
  291. #define IPOPT_TIMESTAMP             IPOPT_TYPE( IPOPT_COPY, IPOPT_MEASUREMENT, 4 )
  292.  
  293. /** Commercial IP security option.
  294.  */
  295. #define IPOPT_CIPSO                 IPOPT_TYPE( IPOPT_COPY, IPOPT_CONTROL, 5 )
  296.  
  297. /** No operation variant.
  298.  */
  299. #define IPOPT_NOP IPOPT_NOOP
  300.  
  301. /** End of list variant.
  302.  */
  303. #define IPOPT_EOL IPOPT_END
  304.  
  305. /** Timestamp variant.
  306.  */
  307. #define IPOPT_TS  IPOPT_TIMESTAMP
  308.  
  309. /*@}*/
  310.  
  311. /** @name IP security option definitions
  312.  */
  313. /*@{*/
  314.  
  315. /** Security length.
  316.  */
  317. #define IPOPT_SEC_LENGTH            11
  318.  
  319. /** Unclasified.
  320.  */
  321. #define IPOPT_SEC_UNCLASIFIED       0x0
  322.  
  323. /** Confidential.
  324.  */
  325. #define IPOPT_SEC_CONFIDENTIAL      0xF035
  326.  
  327. /** EFTO.
  328.  */
  329. #define IPOPT_SEC_EFTO              0x789A
  330.  
  331. /** MMMM.
  332.  */
  333. #define IPOPT_SEC_MMMM              0xBC4D
  334.  
  335. /** PROG.
  336.  */
  337. #define IPOPT_SEC_PROG              0x5E26
  338.  
  339. /** Restricted.
  340.  */
  341. #define IPOPT_SEC_RESTRICTED        0xAF13
  342.  
  343. /** Secret.
  344.  */
  345. #define IPOPT_SEC_SECRET            0xD788
  346.  
  347. /** Top secret.
  348.  */
  349. #define IPOPT_SEC_TOP_SECRET        0x6BC5
  350.  
  351. /*@}*/
  352.  
  353. /** @name IP timestamp option definitions
  354.  */
  355. /*@{*/
  356.  
  357. /** Tiemstamp only.
  358.  */
  359. #define IPOPT_TS_TSONLY     0
  360.  
  361. /** Timestamps and addresses.
  362.  */
  363. #define IPOPT_TS_TSANDADDR  1
  364.  
  365. /** Specified modules only.
  366.  */
  367. #define IPOPT_TS_PRESPEC    3
  368.  
  369. /*@}*/
  370.  
  371. #endif
  372.  
  373. /** @}
  374.  */
  375.