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

VxWorks

开发平台:

C/C++

  1. /* dhcpc.h - DHCP runtime client include file for shared definitions */
  2. /* Copyright 1984 - 2001 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. ---------------------
  6. 01k,12dec01,wap  Interface name field of if_info structure is too small for
  7.                  some interface names (SPR #29087)
  8. 01j,31oct01,vvv  fixed warnings when BOOTP and DHCP are included in image
  9. 01i,09oct01,rae  merge from truestack ver 01b/2 base 01h (SPRs 69850, 68014)
  10. 01h,05apr00,spm  removed unused offset (BPF provides required alignment)
  11. 01g,24nov99,spm  upgraded to RFC 2131 and removed direct link-level access
  12. 01f,06oct97,spm  split interface name into device name and unit number
  13. 01e,06aug97,spm  removed parameters linked list to reduce memory required;
  14.                  added definitions for C++ compilation; renamed class field
  15.                  of dhcp_reqspec structure to prevent C++ errors (SPR #9079)
  16. 01d,02jun97,spm  changed DHCP option tags to prevent name conflicts (SPR #8667)
  17. 01c,07apr97,spm  removed #define's now in configAll.h, changed router_solicit
  18.                  field in parameter descriptor from pointer to structure
  19. 01b,03jan97,spm  added little-endian support and moved macros to dhcp.h
  20. 01a,03oct96,spm  created by modifying WIDE project DHCP implementation
  21. */
  22. #ifndef __INCdhcpch
  23. #define __INCdhcpch
  24. #ifdef __cplusplus
  25. extern "C" {
  26. #endif
  27. #include "wdLib.h"
  28. #include "netinet/in.h"
  29. #include "netinet/if_ether.h"
  30. #include "dhcp/dhcp.h"
  31. #include "dhcp/copyright_dhcp.h"
  32. #define ETHERHL    sizeof(struct ether_header)
  33. #ifndef IPHL
  34. #define IPHL       sizeof(struct ip)
  35. #endif
  36. #ifndef UDPHL
  37. #define UDPHL      sizeof(struct udphdr)
  38. #endif
  39. #define WORD  4  /* Multiplier for IP header length field */
  40. /* Notification routine event types. */
  41. #define DHCPC_LEASE_NEW 0
  42. #define DHCPC_LEASE_INVALID 1
  43. /* DHCP client operations to access permanent storage. */
  44. #define DHCP_CACHE_READ 0
  45. #define DHCP_CACHE_WRITE 1
  46. #define DHCP_CACHE_ERASE 2
  47. #if CPU_FAMILY==I960
  48. #pragma align 1                 /* tell gcc960 not to optimize alignments */
  49. #endif  /* CPU_FAMILY==I960 */
  50. struct client_id
  51.     {
  52.     /*
  53.      * The DHCP client identifer consists of a string of characters.
  54.      * Typically, the client identifier contains a type value (from the
  55.      * hardware type values in the ARP section of the assigned numbers
  56.      * RFC) followed by the hardware address from the data link layer.
  57.      */
  58.     unsigned char       len;
  59.     char *              id;
  60.     };
  61. struct request_list
  62.     {
  63.     /*
  64.      * This structure defines the contents of the option request list, which
  65.      * consists of a sequence of DHCP option tags of the indicated length.
  66.      * A DHCP server may provide any, all, or none of the specified options
  67.      * to the requesting client.
  68.      */
  69.     u_char      len;  /* Length of request list. */
  70.     char        list [0xff];     /* Storage for option tags. */
  71.     };
  72. struct vendor_list
  73.     {
  74.     /*
  75.      * This structure defines the components of vendor-specific information
  76.      * which may be returned by a DHCP server. The contents of that option
  77.      * are not defined by the DHCP specification.
  78.      */
  79.     u_char      len;            /* Amount of vendor-specific data. */
  80.     char        list [255];     /* Contents of vendor-specific data. */
  81.     };
  82. /* 
  83.  * Request specification for DHCP lease - partially filled by 
  84.  * dhcpcOptionSet() and/or dhcpcOptionAdd() routines.
  85.  */
  86. struct dhcp_reqspec
  87.     {
  88.     u_short  maxlen;  /* Maximum supported DHCP message */
  89.     u_short  optlen;  /* Length of message's option field. */
  90.     int waitsecs;       /* Duration for collecting additional lease offers. */
  91.     struct in_addr      ipaddr;         /* Requested IP address */
  92.     struct in_addr      srvaddr;        /* IP address of DHCP server */
  93.     struct request_list reqlist;        /* List of requested options */
  94.     struct client_id *  clid;           /* Client identifier */
  95.     char *              dhcp_errmsg;
  96.     struct dhcpcOpts *  pOptList;  /* Suggested values for options */
  97.     char *  pOptions;  /* Derived options field contents */
  98.     };
  99. struct in_addrs
  100.     {
  101.     /*
  102.      * This structure defines the components of a list of IP addresses.
  103.      * Some of the options provided by the DHCP server use this format.
  104.      */
  105.     unsigned char  num;  /* Number of IP addresses returned. */
  106.     struct in_addr *  addr;  /* IP address values. */
  107.     };
  108. struct u_shorts
  109.     {
  110.     /*
  111.      * This structure defines a list of 16-bit numbers used for some of
  112.      * the DHCP options.
  113.      */
  114.     unsigned char  num;  /* Number of 16-bit values returned. */
  115.     unsigned short *  shortnum;  /* List of values returned. */
  116.     };
  117. #define MAXTAGNUM     (_DHCP_LAST_OPTION + 1)
  118. #define OPTMASKSIZE     (MAXTAGNUM / 8 + 1 )
  119. /* Options storage structure - used by the dhcpcOptionAdd () routine. */
  120. struct dhcpcOpts
  121.     {
  122.     int  optlen;  /* Current total size of option data */
  123.     char  optmask [OPTMASKSIZE];  /* indicates available entries */
  124.     ULONG  tag1;  /* subnet mask value */
  125.     long  tag2;  /* time offset value */
  126.     UCHAR *  pTag3;  /* router address values */
  127.     UCHAR *  pTag4;  /* time server address values */
  128.     UCHAR *  pTag5;  /* name server address values */
  129.     UCHAR *  pTag6;  /* domain name server address values */
  130.     UCHAR *  pTag7;  /* log server address values */
  131.     UCHAR *  pTag8;  /* cookie server address values */
  132.     UCHAR *  pTag9;  /* LPR server address values */
  133.     UCHAR *  pTag10;  /* Impress server address values */
  134.     UCHAR *  pTag11;  /* Resource location server address values */
  135.     char *  pTag12;  /* Host name value */
  136.     USHORT  tag13;  /* Boot file size value */
  137.     char *  pTag14;  /* Merit dump file value */
  138.     char *  pTag15;  /* Domain name value */
  139.     ULONG  tag16;  /* Swap server value */
  140.     char *  pTag17;  /* Root path value */
  141.     char *  pTag18;  /* Extensions path value */
  142.     UCHAR  tag19;  /* IP Forwarding flag value */
  143.     UCHAR  tag20;  /* Non-local source routing flag value */
  144.     UCHAR *  pTag21;  /* Policy filter address/mask values */
  145.     USHORT  tag22;  /* Maximum datagram size value */
  146.     UCHAR  tag23;  /* Default IP TTL value */
  147.     ULONG  tag24;  /* Path MTU aging timeout value */
  148.     UCHAR *  pTag25;  /* Path MTU plateau table values */
  149.     USHORT  tag26;  /* MTU size value */
  150.     UCHAR  tag27;  /* All subnets local flag value */
  151.     ULONG  tag28;  /* Broadcast address value */
  152.     UCHAR  tag29;  /* Mask discovery flag value */
  153.     UCHAR tag30;  /* Mask supplier flag value */
  154.     UCHAR  tag31;  /* Router discovery flag value */
  155.     ULONG  tag32;  /* Router soliciation address value */
  156.     UCHAR *  pTag33;  /* Static route address/mask values */
  157.     UCHAR  tag34;  /* Trailer encapsulation flag value */
  158.     ULONG  tag35;  /* ARP cache timeout value */
  159.     UCHAR tag36;  /* Ethernet encapsulation flag value */
  160.     UCHAR  tag37;  /* Default TCP TTL value */
  161.     ULONG  tag38;  /* TCP keepalive interval value */
  162.     UCHAR  tag39;  /* TCP keepalive garbage octet flag value */
  163.     char *  pTag40;  /* NIS domain value */
  164.     UCHAR *  pTag41;  /* NIS server address values */
  165.     UCHAR *  pTag42;  /* NTP server address values */
  166.     UCHAR *  pTag43;  /* Vendor specific information value */
  167.     UCHAR *  pTag44;  /* NetBIOS name server address values */
  168.     UCHAR *  pTag45;  /* NBDD server address values */
  169.     UCHAR  tag46;  /* NetBIOS node type value */
  170.     char *  pTag47;  /* NetBIOS scope value */
  171.     UCHAR *  pTag48;  /* X Windows font server address values */
  172.     UCHAR *  pTag49;  /* X Windows display manager address values */
  173.      /* Tag 50 may not be set manually. */
  174.     ULONG  tag51;  /* Lease time value */
  175.      /* Tags 52, 53, 54 and 57 may not be set manually. */
  176.     UCHAR *  pTag55;  /* Parameter request list value */
  177.     char *  pTag56;  /* Error message value */
  178.     ULONG  tag58;  /* Renewal time value */
  179.     ULONG  tag59;  /* Rebinding time value */
  180.     UCHAR *  pTag60;  /* Class identifier value */
  181.     UCHAR *  pTag61;  /* Client identifier value */
  182.      /* Tags 62 and 63 are currently undefined. */
  183.     char *  pTag64;  /* NIS+ domain value */
  184.     UCHAR *  pTag65;  /* NIS+ server address values */
  185.     char *  pTag66;  /* TFTP server name value */
  186.     char *  pTag67;  /* Boot file name value */
  187.     UCHAR *  pTag68;  /* Mobile IP home agent address values */
  188.     UCHAR *  pTag69;  /* SMTP server address values */
  189.     UCHAR *  pTag70;  /* POP server address values */
  190.     UCHAR *  pTag71;  /* NNTP server address values */
  191.     UCHAR *  pTag72;  /* WWW server address values */
  192.     UCHAR *  pTag73;  /* Finger server address values */
  193.     UCHAR *  pTag74;  /* IRC server address values */
  194.     UCHAR *  pTag75;  /* StreetTalk server address values */
  195.     UCHAR *  pTag76;  /* STDA server address values */
  196.     };
  197. /* Parameter retrieval structure - used by the dhcpcParamsGet () routine. */
  198. struct dhcp_param
  199.     {
  200.     char        got_option [OPTMASKSIZE];
  201.     char        msgtype;                /* DHCP reply or BOOTP reply? */
  202.     char *      sname;                  /* Host name of DHCP server */
  203.     char *      temp_sname;    /* Server host name if 'sname' holds options. */
  204.     char *      file;                   /* Boot file name */
  205.     char *      temp_file;      /* File name if 'file' holds options. */
  206.     char *      hostname;               /* Host name of bootstrap server */
  207.     char *      merit_dump;
  208.     char *      dns_domain;
  209.     char *      root_path;
  210.     char *      extensions_path;
  211.     char *      nis_domain;
  212.     char *      nb_scope;               /* NetBIOS scope */
  213.     char *      errmsg;
  214.     char *      nisp_domain;            /* NIS+ domain name */
  215.     unsigned char       ip_forward;     /* Boolean flag */
  216.     unsigned char       nonlocal_srcroute;      /* Boolean flag */
  217.     unsigned char       all_subnet_local;       /* Boolean flag */
  218.     unsigned char       mask_discover;          /* Boolean flag */
  219.     unsigned char       mask_supplier;          /* Boolean flag */
  220.     unsigned char       router_discover;        /* Boolean flag */
  221.     unsigned char       trailer;                /* Boolean flag */
  222.     unsigned char       ether_encap;            /* Boolean flag */
  223.     unsigned char       keepalive_garba;        /* Boolean flag */
  224.     unsigned char       nb_nodetype;            /* NetBIOS node type */
  225. #define BNODE 0x1
  226. #define PNODE 0x2
  227. #define MNODE 0x4
  228. #define HNODE 0x8
  229.     unsigned char       default_ip_ttl;         /* time to live (1 - 255) */
  230.     unsigned char       default_tcp_ttl;
  231.     unsigned short      bootsize;               /* bootfile size in 16 bits */
  232.     unsigned short      max_dgram_size;         /* max dgram reassembly */
  233.     unsigned short      intf_mtu;               /* interface mtu */
  234.     long        time_offset;            /* 32 bits integer (network byte order)
  235.                                                 offset from UTC */
  236.     unsigned long       lease_origin;           /* DHCP lease start time */
  237.     unsigned long       lease_duration;         /* DHCP lease duration */
  238.     unsigned long       dhcp_t1;
  239.     unsigned long       dhcp_t2;
  240.     unsigned long       mtu_aging_timeout;      /* 32 bit unsigned integer */
  241.     unsigned long       arp_cache_timeout;
  242.     unsigned long       keepalive_inter;
  243.     struct u_shorts *   mtu_plateau_table;      /* array of 16 bit integers */
  244.     struct in_addr      server_id;              /* DHCP server's IP address */
  245.     struct in_addr      ciaddr;                 /* Client's current address */
  246.     struct in_addr      yiaddr;                 /* Client's assigned address */
  247.     struct in_addr      siaddr;                 /* Address of (tftp) server */
  248.     struct in_addr      giaddr;                 /* Address of relay agent */
  249.     struct in_addr *    subnet_mask;
  250.     struct in_addr *    swap_server;
  251.     struct in_addr *    brdcast_addr;
  252.     struct in_addr      router_solicit;
  253.     struct in_addrs *   router;
  254.     struct in_addrs *   time_server;
  255.     struct in_addrs *   name_server;
  256.     struct in_addrs *   dns_server;     /* DNS server */
  257.     struct in_addrs *   log_server;
  258.     struct in_addrs *   cookie_server;
  259.     struct in_addrs *   lpr_server;
  260.     struct in_addrs *   impress_server;
  261.     struct in_addrs *   rls_server;     /* Resource Location Server */
  262.     struct in_addrs *   policy_filter;
  263.     struct in_addrs *   static_route;
  264.     struct in_addrs *   nis_server;
  265.     struct in_addrs *   ntp_server;
  266.     struct in_addrs *   nbn_server;     /* NetBIOS name server */
  267.     struct in_addrs *   nbdd_server;    /* NetBIOS dgram distrib server */
  268.     struct in_addrs *   xfont_server;   /* X font erver */
  269.     struct in_addrs *   xdisplay_manager;       /* X display manager */
  270.     struct in_addrs *   nisp_server;    /* NIS+ server */
  271.     struct in_addrs *   mobileip_ha;    /* Mobile IP Home Agent */
  272.     struct in_addrs *   smtp_server;
  273.     struct in_addrs *   pop3_server;
  274.     struct in_addrs *   nntp_server;
  275.     struct in_addrs *   dflt_www_server;
  276.     struct in_addrs *   dflt_finger_server;
  277.     struct in_addrs *   dflt_irc_server;
  278.     struct in_addrs *   streettalk_server;
  279.     struct in_addrs *   stda_server;    /* StreetTalk Directory Assistance */
  280.     struct vendor_list * vendlist;      /* Vendor-specific information */
  281.     };
  282. struct chaddr 
  283.     {
  284.     unsigned char  htype;
  285.     unsigned char  hlen;
  286.     char  haddr[MAX_HLEN];
  287.     };
  288. struct if_info 
  289.     {
  290.     char  name [IFNAMSIZ];
  291.     short  unit;
  292.     int  bpfDev;     /* BPF file descriptor */
  293.     int  bufSize;    /* Size of BPF data buffer */
  294.     struct chaddr  haddr;
  295.     struct ifnet *  iface;
  296.     };
  297. struct msg
  298.     {
  299.     struct ip *ip;
  300.     struct udphdr *udp;
  301.     struct dhcp *dhcp;
  302.     };
  303. #if CPU_FAMILY==I960
  304. #pragma align 0                 /* turn off alignment requirement */
  305. #endif  /* CPU_FAMILY==I960 */
  306. #ifdef __cplusplus
  307. }
  308. #endif
  309. #endif