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

VxWorks

开发平台:

C/C++

  1. /* dhcpsLib.h - DHCP server include file for user interface */
  2. /* Copyright 1984 - 2001 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01b,10oct01,rae  merge from truestack (virtual stack support)
  7. 01a,25jun01,ppp  fixed the problem involving the dhcp server and client to be
  8.                  built together (SPR #64194)
  9. 01f,14jul00,spm  upgraded to RFC 2131 and removed direct link-level access
  10. 01e,04dec97,spm  added code review modifications
  11. 01d,06oct97,spm  moved default parameters from usrNetwork.c; added prototypes
  12.                  for user-callable routines
  13. 01c,06aug97,spm  added definitions for C++ compilation
  14. 01b,18apr97,spm  added dhcpsInit() prototype to eliminate compiler warnings
  15. 01a,07apr97,spm  created.
  16. */
  17. #ifndef __INCdhcpsLibh
  18. #define __INCdhcpsLibh
  19. #ifdef __cplusplus
  20. extern "C" {
  21. #endif
  22. #define S_dhcpsLib_NOT_INITIALIZED           (M_dhcpsLib | 1)
  23. #include "ioLib.h"
  24. #define PROTO_ICMP 1                   /* Normally found in /etc/protocols */
  25. #if CPU_FAMILY==I960
  26. #pragma align 1                 /* tell gcc960 not to optimize alignments */
  27. #endif  /* CPU_FAMILY==I960 */
  28. typedef struct leaseDesc
  29.     {
  30.     /* 
  31.      * This structure defines the components of an address pool entry. 
  32.      * The DHCP server issues leases for individual IP addresses from
  33.      * the address pool.
  34.      */
  35.     char *pName;  /* base name of pool entry */
  36.     char *pStartIp;  /* first IP address in range */
  37.     char *pEndIp;  /* last IP address in range */
  38.     char *pParams;  /* other lease parameters */
  39.     } DHCPS_LEASE_DESC;
  40. typedef struct entryDesc
  41.     {
  42.     /*
  43.      * This structure defines the components of a single lease entry
  44.      * from the address pool which will be offered to DHCP clients.
  45.      */
  46.     char *pName;  /* unique name of lease entry */
  47.     char *pAddress;  /* single IP address within range */
  48.     char *pParams;  /* associated lease parameters */
  49.     } DHCPS_ENTRY_DESC;
  50. #include "ioLib.h"
  51. typedef struct ifDesc
  52.     {
  53.     char ifName[MAX_FILENAME_LENGTH]; /* name of interface to use */
  54.     } DHCPS_IF_DESC;
  55. typedef struct relayDesc
  56.     {
  57.     /*
  58.      * This structure contains information for a relay agent used to 
  59.      * communicate with DHCP clients or servers on other networks.
  60.      */
  61.     char *pAddress;  /* IP address of relay agent */
  62.     char *pMask;  /* Subnet mask of supported network */
  63.     } DHCPS_RELAY_DESC;
  64. #include "dhcprLib.h"                /* Relay agent capability. */
  65. #if CPU_FAMILY==I960
  66. #pragma align 0                 /* turn off alignment requirement */
  67. #endif  /* CPU_FAMILY==I960 */
  68. IMPORT DHCPS_LEASE_DESC *      pDhcpsLeasePool;
  69. IMPORT DHCPS_RELAY_DESC *      pDhcpsRelaySourceTbl;
  70. typedef struct dhpcsConfigDesc
  71.     {
  72.     int dhcpMaxHops; /* max hops */
  73.     int dhcpSPort; /* server port */
  74.     int dhcpCPort; /* client port */
  75.     int dhcpMaxMsgSize; /* max msg size */
  76.     long dhcpsDfltLease; /* Default for default lease length */
  77.     long dhcpsMaxLease; /* Default maximum lease length */
  78.     FUNCPTR pDhcpsLeaseFunc; /* ptr to lease function */
  79.     FUNCPTR pDhcpsAddrFunc; /* ptr to address function */
  80.     DHCPS_IF_DESC *pDhcpsIfTbl; /* ptr to device table */
  81.     int numDev; /* # of devices in table */
  82.     DHCPS_LEASE_DESC *pDhcpsLeaseTbl; /* lease tbl */
  83.     int dhcpsLeaseTblSize; /* size of lease table */
  84.     DHCP_TARGET_DESC *pDhcpsTargetTbl; /* target table */
  85.     int dhcpTargetTblSize; /* size of target table */
  86.     DHCPS_RELAY_DESC *pDhcpsRelayTbl; /* relay table */
  87.     int dhcpsRelayTblSize; /* size of relay table */
  88.     } DHCPS_CFG_PARAMS;
  89. /* User-callable routines */
  90. IMPORT STATUS dhcpsInit (DHCPS_CFG_PARAMS *);
  91. IMPORT STATUS dhcpsLeaseEntryAdd (char *, char *, char *, char *);
  92. IMPORT STATUS dhcpsLeaseHookAdd (FUNCPTR);
  93. IMPORT STATUS dhcpsAddressHookAdd (FUNCPTR);
  94. IMPORT STATUS dhcpsVsInit ();
  95. /* Critical section semaphore. */
  96. IMPORT SEM_ID dhcpsMutexSem;
  97. /* Operations on database cache. */
  98. #define DHCPS_STORAGE_START 0
  99. #define DHCPS_STORAGE_STOP 1
  100. #define DHCPS_STORAGE_WRITE 2
  101. #define DHCPS_STORAGE_READ 3
  102. #define DHCPS_STORAGE_CLEAR 4
  103. /*
  104.  * The following string contains host requirements defaults needed for
  105.  * RFC compliance - DO NOT REMOVE OR MODIFY!!
  106.  */
  107.  
  108. #define DHCPS_DEFAULT_ENTRY "ipfd=false:nlsr=false:mdgs=576:ditl=64:ifmt=576:asnl=false:brda=255.255.255.255:mskd=false:msks=false:rtrd=true:rtsl=255.255.255.255:trlr=false:arpt=60:encp=false:dttl=64:kain=7200:kagb=false"
  109. #define MAX_DHCPFILTERS 23 /* Number of filters as defined below */
  110. #define DHCPS_FILTER_DEFINE { 
  111. BPF_STMT(BPF_LD+BPF_TYPE,0),                /* Save lltype in accumulator */ 
  112. BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, ETHERTYPE_IP, 0, 20),  /* IP packet? */ 
  113. /* 
  114.  * The remaining statements use the (new) BPF_HLEN alias to avoid any 
  115.  * link-layer dependencies. The expected length values are assigned to the 
  116.  * correct values during startup. The expected destination port is also 
  117.  * altered to match the actual value chosen. 
  118.  */ 
  119. BPF_STMT(BPF_LD+BPF_H+BPF_ABS+BPF_HLEN, 6),     /* A <- IP FRAGMENT field */ 
  120. BPF_JUMP(BPF_JMP+BPF_JSET+BPF_K, 0x1fff, 18, 0),          /* OFFSET == 0 ? */ 
  121. BPF_STMT(BPF_LDX+BPF_HLEN, 0),           /* X <- frame data offset */ 
  122. BPF_STMT(BPF_LD+BPF_H+BPF_IND, 2),       /* A <- IP_LEN field */ 
  123. BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, 0, 0, 15),      /* IP/UDP headers + DHCP? */ 
  124. BPF_STMT(BPF_LD+BPF_B+BPF_IND, 9),      /* A <- IP_PROTO field */ 
  125. BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, IPPROTO_UDP, 0, 13),     /* UDP ? */ 
  126. BPF_STMT(BPF_LD+BPF_HLEN, 0),           /* A <- frame data offset */ 
  127. BPF_STMT(BPF_LDX+BPF_B+BPF_MSH+BPF_HLEN, 0), /* X <- IPHDR LEN field */ 
  128. BPF_STMT(BPF_ALU+BPF_ADD+BPF_X, 0),     /* A <- start of UDP datagram */ 
  129. BPF_STMT(BPF_MISC+BPF_TAX, 0),          /* X <- start of UDP datagram */ 
  130. BPF_STMT(BPF_LD+BPF_H+BPF_IND, 2),      /* A <- UDP DSTPORT */ 
  131. BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 67, 0, 7), /* check DSTPORT */ 
  132. BPF_STMT(BPF_LD+BPF_H+BPF_IND, 4),      /* A <- UDP LENGTH */ 
  133. BPF_JUMP(BPF_JMP+BPF_JGE+BPF_K, 0, 0, 5), /* UDP header + DHCP? */ 
  134. BPF_STMT(BPF_LD+BPF_B+BPF_IND, 11),      /* A <- DHCP hops field */ 
  135. BPF_JUMP(BPF_JMP+BPF_JGT+BPF_K, -1, 3, 0),   /* -1 replaced with max hops */ 
  136. BPF_STMT(BPF_LD+BPF_W+BPF_IND, 244),    /* A <- DHCP options */ 
  137. BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x63825363, 0, 1), 
  138. BPF_STMT(BPF_RET+BPF_K+BPF_HLEN, DFLTDHCPLEN + UDPHL + IPHL), 
  139. BPF_STMT(BPF_RET+BPF_K, 0)          /* unrecognized message: ignore frame */ }
  140. #ifdef __cplusplus
  141. }
  142. #endif
  143. #endif