⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dhcpslib.c

📁 vxworks的完整的源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
/* dhcpsLib.c - Dynamic Host Configuration Protocol (DHCP) server library *//* Copyright 1984 - 2001 Wind River Systems, Inc.  */#include "copyright_wrs.h"/*modification history--------------------01v,16nov01,spm  fixed modification history01u,29oct01,wap  Correct typo in documentation (SPR #34808)01t,15oct01,rae  merge from truestack ver 01x, base 01p (VIRTUAL_STACK)01s,17nov00,spm  added support for BSD Ethernet devices01r,24oct00,spm  fixed modification history after merge from tor3_0_x branch;                 corrected pathname in library description01q,23oct00,niq  merged from version 01t of tor3_0_x branch (base version 01p);                 upgrade to BPF replaces tagged frames support01p,17jan98,kbw  removed NOMANUAL restriction from init function01o,17dec97,spm  fixed byte order of address-based loop boundaries (SPR #20056)01n,14dec97,kbw  made minor man page fixes01m,10dec97,kbw  made minor man page fixes01l,04dec97,spm  added code review modifications01k,25oct97,kbw  made minor man page fixes01j,06oct97,spm  removed reference to deleted endDriver global; replaced with                 support for dynamic driver type detection01i,25sep97,gnn  SENS beta feedback fixes01h,26aug97,spm  added code review fixes and support for UDP port selection01g,12aug97,gnn  changes necessitated by MUX/END update.01f,30jul97,kbw  fixed man page problems found in beta review01e,15jul97,spm  allowed startup without lease storage; changed module title01d,02jun97,spm  updated man pages and added ERRNO entries01c,06may97,spm  changed memory access to align IP header on four byte                 boundary and corrected cleanup routine01b,17apr97,kbw  fixed man page format, changed wording, spell checked doc01a,07apr97,spm  created by modifying WIDE project DHCP implementation*//*DESCRIPTIONThis library implements the server side of the Dynamic Host ConfigurationProtocol (DHCP).  DHCP is an extension of BOOTP.  Like BOOTP, it allows atarget to configure itself dynamically by using the network to get its IP address, a boot file name, and the DHCP server's address.  Additionally,DHCP provides for automatic reuse of network addresses by specifyingindividual leases as well as many additional options.  The compatiblemessage format allows DHCP participants to interoperate with BOOTPparticipants.  The dhcpsInit() routine links this library into the VxWorks image.  This happens automatically if INCLUDE_DHCPS is defined when the image is built.PRIMARY INTERFACEThe dhcpsInit() routine initializes the server.  It reads the hard-coded server configuration data that is stored in three separate tables.The first table contains entries as follows:.CSDHCPS_LEASE_DESC dhcpsLeaseTbl [] =    {    {"sample1", "90.11.42.24", "90.11.42.24", "clid=\e"1:0x08003D21FE90\e""},    {"sample2", "90.11.42.25", "90.11.42.28", "maxl=90:dfll=60"},    {"sample3", "90.11.42.29", "90.11.42.34", "maxl=0xffffffff:file=/vxWorks"},    {"sample4", "90.11.42.24", "90.11.42.24", "albp=true:file=/vxWorks"}    };.CEEach entry contains a name of up to eight characters, the starting and ending IP addresses of a range, and the parameters associated with the lease.  Thefour samples shown demonstrate the four types of leases. Manual leases contain a specific client ID, and are issued only to that client, with an infinite duration.  The example shown specifies a MAC address, which is the identifier type used by the VxWorks DHCP client.Dynamic leases specify a finite maximum length, and can be issued to anyrequesting client.  These leases allow later re-use of the assigned IP address.If not explicitly specified in the parameters field, these leases use the values of DHCPS_MAX_LEASE and DHCPS_DFLT_LEASE to determine the lease length.Automatic leases are implied by the infinite maximum length.  Their IP addressesare assigned permanently to any requesting client.The last sample demonstrates a lease that is also available to BOOTP clients.The infinite maximum length is implied, and any timing-related parameters areignored. The DHCP server supplies leases to DHCP clients according to the lease type inthe order shown above.  Manual leases have the highest priority and leases available to BOOTP clients the lowest.Entries in the parameters field may be one of these types:.IP `bool' 8Takes values of "true" or "false", for example, ipfd=true.  Unrecognized values default to false. .IP 'str'Takes a character string as a value, for example, hstn="clapton".If the string includes a delimiter character, such as a colon, it should be enclosed in quotation marks..IP 'octet'Takes an 8-bit integer in decimal, octal, or hexadecimal, for example,8, 070, 0xff..IP 'short'Takes a 16-bit integer..IP 'long'Takes a 32-bit integer..IP 'ip'Takes a string that is interpreted as a 32-bit IP address.  One of the following formats isexpected: a.b.c.d, a.b.c or a.b.  In the secondformat, c is interpreted as a 16-bit value.  Inthe third format, b is interpreted as a 24-bitvalue, for example siad=90.11.42.1.  .IP 'iplist'Takes a list of IP addresses, separated bywhite space, for example, rout=133.4.31.1 133.4.31.2 133.4.31.3..IP 'ippairs'Takes a list of IP address pairs.  Each IPaddress is separated by white space and groupedin pairs, for example, strt=133.4.27.0  133.4.31.1133.4.36.0 133.4.31.1..IP 'mtpt'Takes a list of 16 bit integers,separated by white space, for example, mtpt=1 2 3 4 6 8..IP 'clid'Takes a client identifier as a value.Client identifiers are represented by the quotedstring "<type>:<data>", where <type> is aninteger from 0 to 255, as defined by the IANA,and <data> is a sequence of 8-bit values in hexadecimal.The client ID is usually a MAC address, for example, clid="1:0x08004600e5d5"..LPThe following table lists the option specifiers and descriptions forevery possible entry in the parameter list.  When available, the optioncode from RFC 2132 is included..TStab(|);lf3 lf3 lf3 lf3l   l   l   l.Name | Code | Type    | Description_snam | -    | str     | Optional server name.file | -    | str     | Name of file containing the boot image.siad | -    | ip      | Address of server that offers the boot image.albp | -    | bool    | If true, this entry is also available     |      |         | to BOOTP clients.  For entries using     |      |         | static allocation, this value becomes     |      |         | true by default and <maxl> becomes     |      |         | infinity.maxl | -    | long    | Maximum lease duration in seconds. dfll | -    | long    | Default lease duration in seconds.  If a     |      |         | client does not request a specific lease     |      |         | duration, the server uses this value.clid | -    | clid    | This specifies a client identifier for     |      |         | manual leases.  The VxWorks client uses     |      |         | a MAC address as the client identifier.pmid | -    | clid    | This specifies a client identifier for     |      |         | client-specific parameters to be included     |      |         | in a lease.  It should be present in separate     |      |         | entries without IP addresses.clas | -    | str     | This specifies a class identifier for     |      |         | class-specific parameters to be included in      |      |         | a lease.  It should be present in separate entries     |      |         | without IP addresses.snmk | 1    | ip      | Subnet mask of the IP address to be     |      |         | allocated.  The default is a natural mask     |      |         | corresponding to the IP address.  The     |      |         | server will not issue IP addresses to      |      |         | clients on different subnets.tmof | 2    | long    | Time offset from UTC in seconds.rout | 3    | iplist  | A list of routers on the same subnet as     |      |         | the client.tmsv |  4   | iplist  | A list of time servers (RFC 868).nmsv |  5   | iplist  | A list of name servers (IEN 116).dnsv |  6   | iplist  | A list of DNS servers (RFC 1035).lgsv |  7   | iplist  | A list of MIT-LCS UDP log servers.cksv |  8   | iplist  | A list of Cookie servers (RFC 865).lpsv |  9   | iplist  | A list of LPR servers (RFC 1179).imsv |  10  | iplist  | A list of Imagen Impress servers.rlsv |  11  | iplist  | A list of Resource Location servers (RFC 887).hstn |  12  | str     | Hostname of the client.btsz |  13  | short   | Size of boot image.mdmp |  14  | str     | Path name to which client dumps core.dnsd |  15  | str     | Domain name for DNS.swsv |  16  | ip      | IP address of swap server.rpth |  17  | str     | Path name of root disk of the client.epth |  18  | str     | Extensions Path (See RFC 1533).ipfd |  19  | bool    | If true, the client performs IP     |      |         | forwarding.nlsr |  20  | bool    | If true, the client can perform non-local     |      |         | source routing.plcy |  21  | ippairs | Policy filter for non-local source     |      |         | routing.  A list of pairs of     |      |         | (Destination IP, Subnet mask).mdgs |  22  | short   | Maximum size of IP datagram that the     |      |         | client should be able to reassemble.ditl |  23  | octet   | Default IP TTL.mtat |  24  | long    | Aging timeout (in seconds) to be used     |      |         | with Path MTU discovery (RFC 1191).mtpt |  25  | mtpt    | A table of MTU sizes to be used with     |      |         | Path MTU Discovery.ifmt |  26  | short   | MTU to be used on an interface.asnl |  27  | bool    | If true, the client assumes that all     |      |         | subnets to which the client is connected     |      |         | use the same MTU.brda |  28  | ip      | Broadcast address in use on the client's     |      |         | subnet.  The default is calculated from     |      |         | the subnet mask and the IP address.mskd |  29  | bool    | If true, the client should perform subnet     |      |         | mask discovery using ICMP.msks |  30  | bool    | If true, the client should respond to     |      |         | subnet mask requests using ICMP.rtrd |  31  | bool    | If true, the client should solicit     |      |         | routers using Router Discovery defined     |      |         | in RFC 1256.rtsl |  32  | ip      | Destination IP address to which the     |      |         | client sends router solicitation     |      |         | requests.strt |  33  | ippairs | A table of static routes for the client,     |      |         | which are pairs of (Destination, Router).     |      |         | It is illegal to specify default route     |      |         | as a destination.trlr |  34  | bool    | If true, the client should negotiate     |      |         | the use of trailers with ARP (RFC 893).arpt |  35  | long    | Timeout in seconds for ARP cache.encp |  36  | bool    | If false, the client uses RFC 894     |      |         | encapsulation.  If true, it uses     |      |         | RFC 1042 (IEEE 802.3) encapsulation.dttl |  37  | octet   | Default TTL of TCP.kain |  38  | long    | Interval of the client's TCP keepalive     |      |         | in seconds.kagb |  39  | bool    | If true, the client should send TCP     |      |         | keepalive messages with a octet of     |      |         | garbage for compatibility.nisd |  40  | str     | Domain name for NIS.nisv |  41  | iplist  | A list of NIS servers.ntsv |  42  | iplist  | A list of NTP servers.nnsv |  44  | iplist  | A list of NetBIOS name server.     |      |         | (RFC 1001, 1002)ndsv |  45  | iplist  | A list of NetBIOS datagram distribution     |      |         | servers (RFC 1001, 1002).nbnt |  46  | octet   | NetBIOS node type (RFC 1001, 1002).nbsc |  47  | str     | NetBIOS scope (RFC 1001, 1002).xfsv |  48  | iplist  | A list of font servers of X Window system.xdmn |  49  | iplist  | A list of display managers of X Window     |      |         | system.dht1 |  58  | short   | This value specifies when the client should     |      |         | start RENEWING.  The default of 500 means     |      |         | the client starts RENEWING after 50% of the     |      |         | lease duration passes.dht2 |  59  | short   | This value specifies when the client should     |      |         | start REBINDING.  The default of 875 means     |      |         | the client starts REBINDING after 87.5% of     |      |         | the lease duration passes..TE.LPFinally, to function correctly, the DHCP server requires access to some formof permanent storage.  The DHCPS_LEASE_HOOK constant specifies the name of a storage routine with the following interface:.CS    STATUS dhcpsStorageHook (int op, char *buffer, int datalen);.CEThe storage routine is installed by a call to the dhcpsLeaseHookAdd() routineThe manual pages for dhcpsLeaseHookAdd() describe the parameters and required operation of the storage routine.SECONDARY INTERFACEIn addition to the hard-coded entries, address entries may be added after the server has started by calling the following routine:.CS    STATUS dhcpsLeaseEntryAdd (char *name, char *start, char *end, char *config);.CEThe parameters specify an entry name, starting and ending values for a block of IP addresses, and additional configuration information in the same format as shown above for the hard-coded entries.  Each parameter must be formatted as a NULL-terminated string. The DHCPS_ADDRESS_HOOK constant specifies the name of a storage routine, used to preserve address entries added after startup, which has the following prototype:.CS    STATUS dhcpsAddressStorageHook (int op,				    char *name, char *start, char *end, 				    char *params);.CEThe storage routine is installed with the dhcpsAddressHookAdd() routine, and is fully described in the manual pages for that function.OPTIONAL INTERFACEThe DHCP server can also receive messages forwarded from different subnetsby a relay agent.  To provide addresses to clients on different subnets, theappropriate relay agents must be listed in the provided table in usrNetwork.c. A sample configuration is:.CS    DHCPS_RELAY_DESC dhcpsRelayTbl [] =	{	{"90.11.46.75", "90.11.46.0"}	};.CEEach entry in the table specifies the address of a relay agent that will transmit the request and the corresponding subnet number.  To issue leasessuccessfully, the address pool must also contain IP addresses for the monitored subnets.The following table allows a DHCP server to act as a relay agent in addition to its default function of processing messages.  It consists of a list of IP addresses..CS    DHCP_TARGET_DESC dhcpTargetTbl [] =	 {	 {"90.11.43.2"},	 {"90.11.44.1"}	 };.CEEach IP address in this list receives a copy of any client messagesgenerated on the subnets monitored by the server.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -