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

VxWorks

开发平台:

C/C++

  1. /* dhcps.h - DHCP server primary include file */
  2. /* Copyright 1984 - 1997 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. ____________________
  6. 01b,06aug97,spm  added definitions for C++ compilation
  7. 01a,07apr97,spm  created by modifying WIDE project DHCP implementation
  8. */
  9. /*
  10.  * WIDE Project DHCP Implementation
  11.  * Copyright (c) 1995 Akihiro Tominaga
  12.  * Copyright (c) 1995 WIDE Project
  13.  * All rights reserved.
  14.  *
  15.  * Permission to use, copy, modify and distribute this software and its
  16.  * documentation is hereby granted, provided only with the following
  17.  * conditions are satisfied:
  18.  *
  19.  * 1. Both the copyright notice and this permission notice appear in
  20.  *    all copies of the software, derivative works or modified versions,
  21.  *    and any portions thereof, and that both notices appear in
  22.  *    supporting documentation.
  23.  * 2. All advertising materials mentioning features or use of this software
  24.  *    must display the following acknowledgement:
  25.  *      This product includes software developed by WIDE Project and
  26.  *      its contributors.
  27.  * 3. Neither the name of WIDE Project nor the names of its contributors
  28.  *    may be used to endorse or promote products derived from this software
  29.  *    without specific prior written permission.
  30.  *
  31.  * THIS SOFTWARE IS PROVIDED BY THE DEVELOPER ``AS IS'' AND WIDE
  32.  * PROJECT DISCLAIMS ANY LIABILITY OF ANY KIND FOR ANY DAMAGES
  33.  * WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. ALSO, THERE
  34.  * IS NO WARRANTY IMPLIED OR OTHERWISE, NOR IS SUPPORT PROVIDED.
  35.  *
  36.  * Feedback of the results generated from any improvements or
  37.  * extensions made to this software would be much appreciated.
  38.  * Any such feedback should be sent to:
  39.  * 
  40.  *  Akihiro Tominaga
  41.  *  WIDE Project
  42.  *  Keio University, Endo 5322, Kanagawa, Japan
  43.  *  (E-mail: dhcp-dist@wide.ad.jp)
  44.  *
  45.  * WIDE project has the rights to redistribute these changes.
  46.  */
  47. #ifndef __INCdhcpsh
  48. #define __INCdhcpsh
  49. #ifdef __cplusplus
  50. extern "C" {
  51. #endif
  52. #define GC_INTERVAL    600      /* interval between garbage collections */
  53. /*
  54.  *  function prototype definition
  55.  */
  56. static void garbage_collect (void);
  57. static void get_cid (struct dhcp *, int, struct client_id *);
  58. static void clean_sbuf (void);
  59. static void construct_msg (u_char, struct dhcp_resource *,
  60.                            u_long, struct if_info *);
  61. static void turnoff_bind (struct dhcp_binding *);
  62. static int nvttostr (char *, char *, int);
  63. static int get_maxoptlen (struct dhcp *, int);
  64. static int get_subnet (struct dhcp *, int, struct in_addr *, struct if_info *);
  65. static int available_res (struct dhcp_resource *, struct client_id *, time_t);
  66. static int choose_lease (int, time_t, struct dhcp_resource *);
  67. static int update_db (int, struct client_id *, struct dhcp_resource *, 
  68.                       u_long, time_t);
  69. static int cidcmp (struct client_id *, struct client_id *);
  70. static int icmp_check (int, struct in_addr *);
  71. static int insert_it (char *);
  72. static int free_bind (struct hash_member *);
  73. static int free_fake (struct hash_member *);
  74. static int send_dhcp (struct if_info *, int);
  75. static int insert_opt (struct dhcp_resource *, u_long, int, char *, char);
  76. #define PASSIVE 0
  77. #define ACTIVE  1
  78. static u_long get_reqlease (struct dhcp *, int);
  79. static struct dhcp_resource *select_wciaddr (struct client_id *, time_t, int *);
  80. static struct dhcp_resource *select_wcid (int, struct client_id *, time_t);
  81. static struct dhcp_resource *select_wreqip (int, struct client_id *, time_t);
  82. static struct dhcp_resource *select_newone (int, struct client_id *, time_t, 
  83.                                             u_long);
  84. static struct dhcp_resource *choose_res (struct client_id *, time_t, u_long);
  85. extern struct hash_member  *reslist;
  86. extern struct hash_member  *bindlist;
  87. extern struct hash_tbl     cidhashtable;
  88. extern struct hash_tbl     iphashtable;
  89. extern struct hash_tbl     relayhashtable;
  90. extern struct hash_tbl     paramhashtable;
  91. extern int bindcidcmp();
  92. extern int paramcidcmp();
  93. extern int resipcmp();
  94. extern int relayipcmp();
  95. extern int open_if();
  96. static int      discover();
  97. static int      request();
  98. static int      decline();
  99. static int      release();
  100. #ifndef NOBOOTP
  101. static void construct_bootp();
  102. static int available_forbootp();
  103. static int send_bootp();
  104. static struct dhcp_resource *choose_forbootp();
  105. static int      bootp();
  106. #endif /* NOBOOTP */
  107. static int (*process_msg[])() = {
  108. #ifdef NOBOOTP
  109.   NULL,
  110. #else
  111.   bootp,
  112. #endif
  113.   discover,
  114.   NULL,
  115.   request,
  116.   decline,
  117.   NULL,
  118.   NULL,
  119.   release
  120. };
  121. static int  ins_ip (struct dhcp_resource *, u_long, int, char *, char);
  122. static int  ins_ips (struct dhcp_resource *, u_long, int, char *, char);
  123. static int  ins_ippairs (struct dhcp_resource *, u_long, int, char *, char);
  124. static int  ins_long (struct dhcp_resource *, u_long, int, char *, char);
  125. static int  ins_short (struct dhcp_resource *, u_long, int, char *, char);
  126. static int  ins_octet (struct dhcp_resource *, u_long, int, char *, char);
  127. static int  ins_str (struct dhcp_resource *, u_long, int, char *, char);
  128. static int  ins_mtpt (struct dhcp_resource *, u_long, int, char *, char);
  129. static int  ins_dht (struct dhcp_resource *, u_long, int, char *, char); 
  130. static int (*ins_opt []) (struct dhcp_resource *, u_long, int, char *, char) = 
  131.     {
  132.   NULL,         /* PAD == 0 */
  133.   ins_ip,       /* SUBNET_MASK */
  134.   ins_long,     /* TIME_OFFSET */
  135.   ins_ips,      /* ROUTER */
  136.   ins_ips,      /* TIME_SERVER */
  137.   ins_ips,      /* NAME_SERVER */
  138.   ins_ips,      /* DNS_SERVER */
  139.   ins_ips,      /* LOG_SERVER */
  140.   ins_ips,      /* COOKIE_SERVER */
  141.   ins_ips,      /* LPR_SERVER */
  142.   ins_ips,      /* IMPRESS_SERVER */
  143.   ins_ips,      /* RLS_SERVER */
  144.   ins_str,      /* HOSTNAME */
  145.   ins_short,    /* BOOTSIZE */
  146.   ins_str,      /* MERIT_DUMP */
  147.   ins_str,      /* DNS_DOMAIN */
  148.   ins_ip,       /* SWAP_SERVER */
  149.   ins_str,      /* ROOT_PATH */
  150.   ins_str,      /* EXTENSIONS_PATH */
  151.   ins_octet,    /* IP_FORWARD */
  152.   ins_octet,    /* NONLOCAL_SRCROUTE */
  153.   ins_ippairs,  /* POLICY_FILTER */
  154.   ins_short,    /* MAX_DGRAM_SIZE */
  155.   ins_octet,    /* DEFAULT_IP_TTL */
  156.   ins_long,     /* MTU_AGING_TIMEOUT */
  157.   ins_mtpt,     /* MTU_PLATEAU_TABLE */
  158.   ins_short,    /* IF_MTU */
  159.   ins_octet,    /* ALL_SUBNET_LOCAL */
  160.   ins_ip,       /* BRDCAST_ADDR */
  161.   ins_octet,    /* MASK_DISCOVER */
  162.   ins_octet,    /* MASK_SUPPLIER */
  163.   ins_octet,    /* ROUTER_DISCOVER */
  164.   ins_ip,       /* ROUTER_SOLICIT */
  165.   ins_ippairs,  /* STATIC_ROUTE */
  166.   ins_octet,    /* TRAILER */
  167.   ins_long,     /* ARP_CACHE_TIMEOUT */
  168.   ins_octet,    /* ETHER_ENCAP */
  169.   ins_octet,    /* DEFAULT_TCP_TTL */
  170.   ins_long,     /* KEEPALIVE_INTER */
  171.   ins_octet,    /* KEEPALIVE_GARBA */
  172.   ins_str,      /* NIS_DOMAIN */
  173.   ins_ips,      /* NIS_SERVER */
  174.   ins_ips,      /* NTP_SERVER */
  175.   NULL,         /* VENDOR_SPEC */
  176.   ins_ips,      /* NBN_SERVER */
  177.   ins_ips,      /* NBDD_SERVER */
  178.   ins_octet,    /* NB_NODETYPE */
  179.   ins_str,      /* NB_SCOPE */
  180.   ins_ips,      /* XFONT_SERVER */
  181.   ins_ips,      /* XDISPLAY_MANAGER */
  182.   NULL,         /* REQUEST_IPADDR */
  183.   NULL,         /* LEASE_TIME */
  184.   NULL,         /* OPT_OVERLOAD */
  185.   NULL,         /* DHCP_MSGTYPE */
  186.   NULL,         /* SERVER_ID */
  187.   NULL,         /* REQ_LIST */
  188.   NULL,         /* DHCP_ERRMSG */
  189.   NULL,         /* DHCP_MAXMSGSIZE */
  190.   ins_dht,      /* DHCP_T1 */
  191.   ins_dht,      /* DHCP_T2 */
  192.   NULL,         /* CLASS_ID */
  193.   NULL,         /* CLIENT_ID */
  194.   NULL,
  195.   NULL,
  196.   ins_str,      /* NISP_DOMAIN */
  197.   ins_ips,      /* NISP_SERVER */
  198.   NULL,         /* TFTP_SERVERNAME */
  199.   NULL,         /* BOOTFILE */
  200.   ins_ips,      /* MOBILEIP_HA */
  201.   ins_ips,      /* SMTP_SERVER */
  202.   ins_ips,      /* POP3_SERVER */
  203.   ins_ips,      /* NNTP_SERVER */
  204.   ins_ips,      /* DFLT_WWW_SERVER */
  205.   ins_ips,      /* DFLT_FINGER_SERVER */
  206.   ins_ips,      /* DFLT_IRC_SERVER */
  207.   ins_ips,      /* STREETTALK_SERVER */
  208.   ins_ips       /* STDA_SERVER */
  209. };
  210. #ifdef __cplusplus
  211. }
  212. #endif
  213. #endif