ipFilterLib.c
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:4k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* ipFilterLib.c - IP filter hooks library */
  2. /* Copyright 1984 - 2000 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. modification history
  6. --------------------
  7. 01d,10may02,kbw  making man page edits
  8. 01c,07may02,kbw  man page edits
  9. 01b,25oct00,ham  doc: cleanup for vxWorks AE 1.0.
  10. 01a,17apr97,vin  written
  11. */
  12. /*
  13. DESCRIPTION
  14. This library provides utilities that give direct access to IP packets.
  15. You can examine or process incoming raw IP packets using the hooks you  
  16. installed by calling ipFilterHookAdd().  Using a filter hook, you can 
  17. build IP traffic monitoring and testing tools.  
  18. However, you should not use an IP filter hook as a standard means to 
  19. provide network access to an application.  The filter hook lets you 
  20. see, process, and even consume packets before their intended recipients 
  21. have seen the packets.  For most network applications, this is too much 
  22. responsibility. Thus, most network applications should access the network 
  23. access through the higher-level socket interface provided by sockLib.  
  24. The ipFilterLibInit() routine links the IP filtering facility into the 
  25. VxWorks system.  This is performed automatically if INCLUDE_IP_FILTER 
  26. is defined.
  27. VXWORKS AE PROTECTION DOMAINS
  28. Under VxWorks AE, you can call ipFilterHookAdd() from within the kernel 
  29. protection domain only, and the function referenced in the <ipFilterHook> 
  30. parameter must reside in the kernel protection domain.  This restriction 
  31. does not apply to non-AE versions of VxWorks.  
  32. */
  33. /* includes */
  34. #include "vxWorks.h"
  35. /* externs */
  36. IMPORT FUNCPTR  _ipFilterHook;  /* IP filter hook defined in netLib.c */
  37. /******************************************************************************
  38. *
  39. * ipFilterLibInit - initialize IP filter facility
  40. *
  41. * This routine links the IP filter facility into the VxWorks system.
  42. * These routines are included automatically if INCLUDE_IP_FILTER
  43. * is defined.
  44. *
  45. * RETURNS: N/A
  46. */
  47. void ipFilterLibInit (void)
  48.     {
  49.     }
  50. /*******************************************************************************
  51. *
  52. * ipFilterHookAdd - add a routine to receive all internet protocol packets
  53. *
  54. * This routine adds a hook routine that will be called for every IP
  55. * packet that is received.
  56. *
  57. * The filter hook routine should be of the form:
  58. * .CS
  59. * BOOL ipFilterHook
  60. *     (
  61. *     struct ifnet *pIf,        /@ interface that received the packet @/
  62. *     struct mbuf  **pPtrMbuf,  /@ pointer to pointer to an mbuf chain @/
  63. *     struct ip    **pPtrIpHdr, /@ pointer to pointer to IP header @/ 
  64. *     int          ipHdrLen,    /@ IP packet header length @/
  65. *     )
  66. * .CE
  67. * The hook routine should return TRUE if it has handled the input packet. A 
  68. * returned value of TRUE effectively consumes the packet from the viewpoint 
  69. * of IP, which will never see the packet. As a result, when the filter hook 
  70. * returns TRUE, it must handle the freeing of any resources associated with 
  71. * the packet.  For example, the filter hook routine would be responsible for 
  72. * freeing the packet's 'mbuf' chain by calling 'm_freem(*pPtrMbuf)'. 
  73. * The filter hook routine should return FALSE if it has not handled the 
  74. * packet.  In response to a FALSE, the network stack submits the packet 
  75. * for normal IP processing.
  76. *
  77. * Within the packet's IP header (the filter hook can obtain a pointer to the 
  78. * IP header by dereferencing 'pPtrIpHdr'), you will find that the values in 
  79. * the 'ip_len' field, the 'ip_id' field, and 'ip_offset' field have been 
  80. * converted to the host byte order before the packet was handed to the 
  81. * filter hook.
  82. *
  83. * VXWORKS AE PROTECTION DOMAINS
  84. * Under VxWorks AE, you can call ipFilterHookAdd() from within the kernel 
  85. * protection domain only, and the function referenced in the <ipFilterHook> 
  86. * parameter must reside in the kernel protection domain.  This restriction 
  87. * does not apply to non-AE versions of VxWorks.  
  88. *
  89. * RETURNS: OK, always.
  90. */
  91. STATUS ipFilterHookAdd
  92.     (
  93.     FUNCPTR ipFilterHook    /* routine to receive raw IP packets */
  94.     )
  95.     {
  96.     _ipFilterHook = ipFilterHook; 
  97.     return (OK);
  98.     }
  99. /*******************************************************************************
  100. *
  101. * ipFilterHookDelete - delete a IP filter hook routine
  102. *
  103. * This routine deletes an IP filter hook.
  104. *
  105. * RETURNS: N/A
  106. */
  107. void ipFilterHookDelete (void)
  108.     {
  109.     _ipFilterHook = NULL;
  110.     }