/* ipdhcps.h - API of DHCP Server */ /* ****************************************************************************** * HEADER FILE * * Document no: @(#) $Name: VXWORKS_ITER40_2019102207 $ $RCSfile: ipdhcps.h,v $ $Revision: 1.40.10.1 $ * $Source: /home/interpeak/CVSRoot/ipdhcps/include/ipdhcps.h,v $ * $Author: zluo0 $ $Date: 2012-12-13 06:10:11 $ * $State: Exp $ $Locker: $ * * INTERPEAK_COPYRIGHT_STRING * * Design and implementation by Jonas Rendel ****************************************************************************** */ #ifndef IPDHCPS_H #define IPDHCPS_H /* **************************************************************************** * 1 DESCRIPTION **************************************************************************** */ /* DESCRIPTION This library contains the API for the DHCP Server */ /* **************************************************************************** * 2 CONFIGURATION **************************************************************************** */ #include "ipdhcps_config.h" /* **************************************************************************** * 3 INCLUDE FILES **************************************************************************** */ #include /* #include for 64-bit compile warning */ #ifdef __cplusplus extern "C" { #endif /* **************************************************************************** * 4 DEFINES **************************************************************************** */ /* *=========================================================================== * IPDHCPS_RELEASE *=========================================================================== * IPDHCPS release version. */ #define IPDHCPS_RELEASE 60600 /* *=========================================================================== * DHCPS Eternity constant *=========================================================================== * To be used for setting certain timer constanst in ipdhcps_config.h */ #define IPDHCPS_ETERNITY (Ip_time_t)0xffffffff /* *=========================================================================== * DHCP hardware types *=========================================================================== * Hardware types handled by the IPDHCPS. */ #define IPDHCPS_HWTYPE_ETHERNET 1 /* *=========================================================================== * DHCP option codes *=========================================================================== * DHCP option codes accepted by DHCPS for client configurations */ #define IPDHCPS_OPTCODE_SUBNET_MASK 1 #define IPDHCPS_OPTCODE_TIME_OFFSET 2 #define IPDHCPS_OPTCODE_ROUTERS 3 #define IPDHCPS_OPTCODE_TIME_SERVERS 4 #define IPDHCPS_OPTCODE_NAME_SERVERS 5 #define IPDHCPS_OPTCODE_DOMAIN_NAME_SERVERS 6 #define IPDHCPS_OPTCODE_LOG_SERVERS 7 #define IPDHCPS_OPTCODE_COOKIE_SERVERS 8 #define IPDHCPS_OPTCODE_LPR_SERVERS 9 #define IPDHCPS_OPTCODE_IMPRESS_SERVERS 10 #define IPDHCPS_OPTCODE_RESOURCE_LOCATION_SERVERS 11 #define IPDHCPS_OPTCODE_HOST_NAME 12 #define IPDHCPS_OPTCODE_BOOT_SIZE 13 #define IPDHCPS_OPTCODE_MERIT_DUMP 14 #define IPDHCPS_OPTCODE_DOMAIN_NAME 15 #define IPDHCPS_OPTCODE_SWAP_SERVER 16 #define IPDHCPS_OPTCODE_ROOT_PATH 17 #define IPDHCPS_OPTCODE_EXTENSIONS_PATH 18 #define IPDHCPS_OPTCODE_IP_FORWARDING 19 #define IPDHCPS_OPTCODE_NON_LOCAL_SOURCE_ROUTING 20 #define IPDHCPS_OPTCODE_POLICY_FILTER 21 #define IPDHCPS_OPTCODE_MAX_DGRAM_REASSEMBLY 22 #define IPDHCPS_OPTCODE_DEFAULT_IP_TTL 23 #define IPDHCPS_OPTCODE_PATH_MTU_AGING_TIMEOUT 24 #define IPDHCPS_OPTCODE_PATH_MTU_PLATEAU_TABLE 25 #define IPDHCPS_OPTCODE_INTERFACE_MTU 26 #define IPDHCPS_OPTCODE_ALL_SUBNETS_LOCAL 27 #define IPDHCPS_OPTCODE_BROADCAST_ADDRESS 28 #define IPDHCPS_OPTCODE_PERFORM_MASK_DISCOVERY 29 #define IPDHCPS_OPTCODE_MASK_SUPPLIER 30 #define IPDHCPS_OPTCODE_ROUTER_DISCOVERY 31 #define IPDHCPS_OPTCODE_ROUTER_SOLICITATION_ADDRESS 32 #define IPDHCPS_OPTCODE_STATIC_ROUTES 33 #define IPDHCPS_OPTCODE_TRAILER_ENCAPSULATION 34 #define IPDHCPS_OPTCODE_ARP_CACHE_TIMEOUT 35 #define IPDHCPS_OPTCODE_IEEE802_3_ENCAPSULATION 36 #define IPDHCPS_OPTCODE_DEFAULT_TCP_TTL 37 #define IPDHCPS_OPTCODE_TCP_KEEPALIVE_INTERVAL 38 #define IPDHCPS_OPTCODE_TCP_KEEPALIVE_GARBAGE 39 #define IPDHCPS_OPTCODE_NIS_DOMAIN 40 #define IPDHCPS_OPTCODE_NIS_SERVERS 41 #define IPDHCPS_OPTCODE_NTP_SERVERS 42 #define IPDHCPS_OPTCODE_VENDOR_ENCAPSULATED_OPTIONS 43 #define IPDHCPS_OPTCODE_NETBIOS_NAME_SERVERS 44 #define IPDHCPS_OPTCODE_NETBIOS_DD_SERVER 45 #define IPDHCPS_OPTCODE_NETBIOS_NODE_TYPE 46 #define IPDHCPS_OPTCODE_NETBIOS_SCOPE 47 #define IPDHCPS_OPTCODE_FONT_SERVERS 48 #define IPDHCPS_OPTCODE_X_DISPLAY_MANAGER 49 #define IPDHCPS_OPTCODE_VENDOR_CLASS 60 #define IPDHCPS_OPTCODE_CLIENT_IDENTIFIER 61 #define IPDHCPS_OPTCODE_NWIP_DOMAIN 62 #define IPDHCPS_OPTCODE_NWIP_SUBOPTIONS 63 #define IPDHCPS_OPTCODE_NISPLUS_DOMAIN 64 #define IPDHCPS_OPTCODE_NISPLUS_SERVERS 65 #define IPDHCPS_OPTCODE_HOME_AGENTS 68 #define IPDHCPS_OPTCODE_SMTP_SERVERS 69 #define IPDHCPS_OPTCODE_POP3_SERVERS 70 #define IPDHCPS_OPTCODE_NNTP_SERVERS 71 #define IPDHCPS_OPTCODE_WWW_SERVERS 72 #define IPDHCPS_OPTCODE_FINGER_SERVERS 73 #define IPDHCPS_OPTCODE_IRC_SERVERS 74 #define IPDHCPS_OPTCODE_STREETTALK_SERVERS 75 #define IPDHCPS_OPTCODE_STDA_SERVERS 76 #define IPDHCPS_OPTCODE_USER_CLASS 77 #define IPDHCPS_OPTCODE_RELAY_AGENT_INFO 82 #define IPDHCPS_OPTCODE_LIMIT 82 #define IPDHCPS_OPTCODE_UNUSED 254 #define IPDHCPS_OPTCODE_END 255 #define IPDHCPS_OPT_DHCP 0 /* *=========================================================================== * DHCP RELAY AGENT IFNO SUBOPTIONS *=========================================================================== * DHCP sub options used with IPDHCPS_OPTCODE_RELAY_AGENT_INFO (82) */ #define IPDHCPS_SUBOPTCODE_RA_CIRCUIT_ID 1 #define IPDHCPS_SUBOPTCODE_RA_REMOTE_ID 2 #define IPDHCPS_SUBOPTCODE_RA_AUTHENTICATION 8 #define IPDHCPS_SUBOPTCODE_RA_LINK_SELECTION 5 /* RFC3527 */ #define IPDHCPS_SUBOPTCODE_RA_SERVER_OVERRIDE 11/* RFC5107 */ /* *=========================================================================== * CONFIG option codes *=========================================================================== * Configuration option codes accepted by DHCPS for client and * server configuration. */ #define IPDHCPS_OPT_CONF 0x8000 #define IPDHCPS_CONFCODE_LEASE_TIME_DFLT IPDHCPS_OPT_CONF + 1 /* Host Byte Order */ #define IPDHCPS_CONFCODE_LEASE_TIME_MAX IPDHCPS_OPT_CONF + 2 /* Host Byte Order */ #define IPDHCPS_CONFCODE_LEASE_TIME_MIN IPDHCPS_OPT_CONF + 3 /* Host Byte Order */ #define IPDHCPS_CONFCODE_RENEWAL_TIME IPDHCPS_OPT_CONF + 4 /* Host Byte Order */ #define IPDHCPS_CONFCODE_REBINDING_TIME IPDHCPS_OPT_CONF + 5 /* Host Byte Order */ #define IPDHCPS_CONFCODE_ALLOW_BOOTP IPDHCPS_OPT_CONF + 6 #define IPDHCPS_CONFCODE_ALLOW_DYNAMIC_BOOTP IPDHCPS_OPT_CONF + 7 #define IPDHCPS_CONFCODE_NEXT_SERVER_NAME IPDHCPS_OPT_CONF + 8 #define IPDHCPS_CONFCODE_NEXT_SERVER_IP IPDHCPS_OPT_CONF + 9 /* Network Byte Order */ #define IPDHCPS_CONFCODE_BOOT_FILE IPDHCPS_OPT_CONF + 10 #define IPDHCPS_CONFCODE_DO_ICMP_ADDRESS_CHECK IPDHCPS_OPT_CONF + 11 #define IPDHCPS_CONFCODE_AUTHORIZED_AGENTS IPDHCPS_OPT_CONF + 12 #define IPDHCPS_CONFCODE_RA_AUTHENTICATION IPDHCPS_OPT_CONF + 13 #define IPDHCPS_CONFCODE_RA_DROP IPDHCPS_OPT_CONF + 14 #define IPDHCPS_CONFCODE_END IPDHCPS_OPT_CONF + IPDHCPS_OPTCODE_END /* **************************************************************************** * 5 TYPES **************************************************************************** */ /* *=========================================================================== * Ipdhcps_open *=========================================================================== */ typedef struct Ipdhcps_open_struct { Ip_u32 api_version; /* Currently version 1. Used for future compability. */ } Ipdhcps_open; /* *=========================================================================== * Ipdhcps_poolinfo *=========================================================================== * Data structure used when configuring pools on subnets */ typedef struct Ipdhcps_poolinfo_struct { Ip_u32 first_addr; /* First address in pool. Network byte order */ Ip_u32 last_addr; /* Last address in pool. Network byte order */ char *classname; /* Allowed classname */ } Ipdhcps_poolinfo; /* *=========================================================================== * Ipdhcps_classinfo *=========================================================================== * Data structure used when configuring classes on subnets */ #define IPDHCPS_CLASSNAME_MAX 20 typedef struct Ipdhcps_classinfo_struct { Ip_bool data_is_string; char *name; Ip_u8 *data; Ip_u16 priv_data_len; } Ipdhcps_classinfo; /* **************************************************************************** * 6 FUNCTIONS **************************************************************************** */ /* *=========================================================================== * Ipdhcps_init *=========================================================================== * Description: Initiate IPDHCPS * Parameters: * Returns: IPCOM_SUCCESS - success * other - failure */ IP_PUBLIC Ip_err ipdhcps_create(void); /* *=========================================================================== * Ipdhcps_exit *=========================================================================== * Description: * Parameters: * Returns: * */ IP_PUBLIC Ip_err ipdhcps_start(void); /* *=========================================================================== * ipdhcps_version *=========================================================================== * Description: * Parameters: * Returns: * */ IP_PUBLIC const char *ipdhcps_version(void); /******************************************************************************* * * ipdhcps_interface_status_set - set the status for an interface handled by * IPDHCPS * * This routine sets the status for an interface handled by IPDHCPS. The * interface is specified by its name. * * Parameters: * \is * \i * Name of interface. * \i * Enable ('IP_TRUE') or disable ('IP_FALSE') the interface. * \ie * * RETURNS: Either 'IPCOM_SUCCESS', on success, or the following error: * \is * \i 'IPCOM_ERR_NOT_FOUND' * No interface with specifie name found. * \ie * * ERRNO: */ IP_GLOBAL Ip_err ipdhcps_interface_status_set ( char* ifname, Ip_bool status ); /******************************************************************************* * * ipdhcps_class_add - add a new client class to a subnet * * This routine adds a new client class to an existing specified by its * address. * * If the address 'IP_INADDR_ANY' is used as the subnet address, the class will be * configured on the defaults net. * * Parameters: * \is * \i * IPv4 address of the subnet, in network byte order. * \i * Pointer to the class descriptor. * \ie * * RETURNS: 'IPCOM_SUCCESS', or one of the following errors: * \is * \i 'IPCOM_ERR_NOT_OPENED' * IPDHCPS not started. * \i 'IPCOM_ERR_NOT_FOUND' * does not exist. * \i 'IPCOM_ERR_INVALID_ARG' * Invalid net address. * \i 'IPCOM_ERR_ALREADY_INSTALLED' * already exists on * \i 'IPCOM_ERR_NO_MEMORY' * Out of memory. * \ie * * ERRNO: */ IP_PUBLIC Ip_err ipdhcps_class_add ( Ip_u32 subnet, Ipdhcps_classinfo *client_class ); /******************************************************************************* * * ipdhcps_class_delete - delete a client class from a subnet * * This routine deletes a client class from an existing specified by its * address. * * If the address 'IP_INADDR_ANY' is used as the subnet address, the class will be * removed from the defaults net. * * Parameters: * \is * \i * IPv4 address of the subnet, in network byte order. * \i * The name of the client class * \ie * * RETURNS: 'IPCOM_SUCCESS', or one of the following errors: * \is * \i 'IPCOM_ERR_NOT_OPENED' * IPDHCPS not started. * \i 'IPCOM_ERR_NOT_FOUND' * or does not exist. * \ie * * ERRNO: */ IP_PUBLIC Ip_err ipdhcps_class_delete ( Ip_u32 subnet, char *classname ); /******************************************************************************* * * ipdhcps_subnet_add - add a new subnet descriptor to the configuration database * * This routine adds a new subnet descriptor to the IPDHCPS configuration * database. * * The subnet is defined by the subnet address. The net mask to be used by the * subnet is given in the DHCP option list (option code * 'IPDHCPS_OPTCODE_SUBNET_MASK'). * * Parameters: * \is * \i * IPv4 address of the subnet, in network byte order. * \i * Array of address pools to be mapped on the subnet. * \i * Number of elements in the array of address pools. * \i * Pointer to an array of DHCP options of standard DHCP format. * \i * Pointer to an array of config options of standard DHCP format. * \ie * * RETURNS: 'IPCOM_SUCCESS', or one of the following errors: * \is * \i 'IPCOM_ERR_NOT_OPENED' * IPDHCPS not started. * \i 'IPCOM_ERR_ALREADY_INSTALLED' * Subnet already exists. * \i 'IPCOM_ERR_NO_MEMORY' * Out of memory. * \ie * * ERRNO: */ IP_PUBLIC Ip_err ipdhcps_subnet_add ( Ip_u32 subnet, Ipdhcps_poolinfo pools[], Ip_u32 n_pools, Ip_u8 *dhcp_options, Ip_u8 *conf_options ); /******************************************************************************* * * ipdhcps_subnet_delete - delete a subnet descriptor from IPDHCPS configuration * database * * This routine deletes a subnet descriptor from the IPDHCPS configuration * database. The subnet is defined by its address. * * Parameter: * \is * \i * IPv4 address of the subnet, in network byte order. * \ie * * RETURNS: 'IPCOM_SUCCESS', or one of the following errors: * \is * \i 'IPCOM_ERR_NOT_OPENED' * IPDHCPS not started. * \i 'IPCOM_ERR_NOT_FOUND' * does not exist. * \i 'IPCOM_ERR_INVALID_ARG' * Invalid net address. * \ie * * ERRNO: */ IP_PUBLIC Ip_err ipdhcps_subnet_delete ( Ip_u32 subnet ); /******************************************************************************* * * ipdhcps_host_add - add a new host descriptor to the IPDHCPS configuration * * This routine adds a new host descriptor to the IPDHCPS configuration. * * The host is defined by its IPv4 address and identified by either its * link-layer address and/or by a client-identifier. The latter has to be * attached to the list of DHCP options bound to the host (option code * 'IPDHCPS_OPTCODE_CLIENT_IDENTIFIER'). * * The hosts\' link-layer address can be left out if a client identifier is * specified. IPDHCPS will then use this id only for client identification. * * If both link-layer address and a client identifier are specified the * identification will be done first by the identifier and then by the address. * * Parameters: * \is * \i * IPv4 address of the host (network byte order). * \i * Pointer to hosts link-layer address. * \i * Length of link-layer address. * \i * List of hosts DHCP options of standard DHCP format. * \i * List of hosts of standard DHCP format. * \ie * * RETURNS: 'IPCOM_SUCCESS', or one of the following errors: * \is * \i 'IPCOM_ERR_NOT_OPENED' * IPDHCPS not started. * \i 'PCOM_ERR_ALREADY_INSTALLED' * Host already exists. * \i 'IPCOM_ERR_NO_MEMORY' * Out of memory. * \ie * * ERRNO: */ IP_PUBLIC Ip_err ipdhcps_host_add ( Ip_u32 addr, Ip_u8 *hwaddr, Ip_u8 len, Ip_u8 *dhcp_options, Ip_u8 *conf_options ); /******************************************************************************* * * ipdhcps_host_delete - delete a host descriptor from the IPDHCPS configuration * * This routine deletes a host descriptor from the IPDHCPS configuration. The * host is defined by its IPv4 address. * * Parameter: * \is * \i * IPv4 address of host. * \ie * * RETURNS: 'IPCOM_SUCCESS', or one of the following errors: * \is * \i 'IPCOM_ERR_NOT_OPENED' * IPDHCPS not started. * \i 'IPCOM_ERR_NOT_FOUND' * Host not found. * \i 'IPCOM_ERR_INVALID_ARG' * Invalid host address. * \ie * * ERRNO: */ IP_PUBLIC Ip_err ipdhcps_host_delete ( Ip_u32 addr ); /******************************************************************************* * * ipdhcps_pool_add - add a new address pool to an existing subnet * * This routine adds a new address pool to an existing specified by its * address. The pool is defined by its first address and last address. * * If the address 'IP_INADDR_ANY' is used as the subnet address, the pool will be * configured on the defaults net. * * Parameters: * \is * \i * IPv4 address of the subnet, in network byte order. * \i * Pointer to the pool descriptor. * \ie * * RETURNS: 'IPCOM_SUCCESS', or one of the following errors: * \is * \i 'IPCOM_ERR_NOT_OPENED' * IPDHCPS not started. * \i 'IPCOM_ERR_NOT_FOUND' * does not exist. * \i 'IPCOM_ERR_INVALID_ARG' * Invalid net address. * \i 'IPCOM_ERR_ALREADY_INSTALLED' * already exists on (in part or completely). * \ie * * ERRNO: */ IP_PUBLIC Ip_err ipdhcps_pool_add ( Ip_u32 subnet, Ipdhcps_poolinfo *pool ); /******************************************************************************* * * ipdhcps_pool_delete - delete an existing address pool on a defined subnet * * This routine deletes an existing address on a defined subnet specified * by its subnet address. The address is defined by its first address and * last address. * * If the address 'IP_INADDR_ANY' is used as subnet address the pool will be * deleted on the defaults net. * * Parameters: * \is * \i * IPv4 address of . * \i * Pointer to descriptor. * \ie * * RETURNS: 'IPCOM_SUCCESS', or one of the following errors: * \is * \i 'IPCOM_ERR_NOT_OPENED' * IPDHCPS not started. * \i 'IPCOM_ERR_NOT_FOUND' * not found on specified . * \ie * * ERRNO: */ IP_PUBLIC Ip_err ipdhcps_pool_delete ( Ip_u32 subnet, Ipdhcps_poolinfo *pool ); /******************************************************************************* * * ipdhcps_option_add - add a new set of DHCP/CONFIG options to a subnet or host * * This routine adds a new set of DHCP or CONFIG options to a subnet or host as * specified by the IPv4 address. An option with a code that already exists on * the subnet/host will be replaced by the new one in the set. * * Using 'IP_INADDR_ANY' as address parameter will make IPDHCPS apply the * operation to the system global default DHCP option list. * * Parameters: * \is * \i * IPv4 address of either a host or subnet in network byte order. * \i * Name of specific client class. Set to IP_NULL if no client class * \i * Option type. Either IPDHCPS_OPT_DHCP or IPDHCPS_OPT_CONF * \i * List of DHCP or CONFIG options. * \ie * * RETURNS: 'IPCOM_SUCCESS', or one of the following errors: * \is * \i 'IPCOM_ERR_NOT_OPENED' * IPDHCPS not started. * \i 'IPCOM_ERR_NOT_FOUND' * No host or subnet with specified address found. * \ie * * ERRNO: */ IP_PUBLIC Ip_err ipdhcps_option_add ( Ip_u32 addr, char *classname, Ip_u16 type, Ip_u8 *options ); /******************************************************************************* * * ipdhcps_option_delete - delete a DHCP or CONFIG option * * Delete a DHCP option specified by its code and defined on a host or subnet as * specified by the address. * * Using 'IP_INADDR_ANY' as address parameter will make IPDHCPS apply the * operation to the system global default DHCP option list. * * Parameters: * \is * \i * IPv4 address of host or subnet in network byte order. * \i * Name of specific client class. Set to IP_NULL if no client class * \i * Option type. Either IPDHCPS_OPT_DHCP or IPDHCPS_OPT_CONF * \i * DHCP or CONFIG option code for option to be deleted. * \ie * * RETURNS: 'IPCOM_SUCCESS', or one of the following errors: * \is * \i 'IPCOM_ERR_NOT_OPENED' * PDHCPS not started. * \i 'IPCOM_ERR_NOT_FOUND' * No host or subnet with specified address found. * \ie * * ERRNO: */ IP_PUBLIC Ip_err ipdhcps_option_delete ( Ip_u32 addr, char *classname, Ip_u16 type, Ip_u8 option_code ); /******************************************************************************* * * ipdhcps_lease_db_dump - dump entries in the lease database to a data buffer * * This routine dumps the current entries in the lease database to a data buffer. * * This function is part of the IPDHCPS lease dump API intended to let IPDHCPS * utilize persistent storage of the lease database to make it survive a restart * of the server. * * The function can for instance be used when the server is running on systems * supplied with a file system or a non-volatile memory. * * Example: Call it from within the IPDHCPS stop hook, together with extra target * specific code to let the server save its current lease database. * * It is important to know that the contents of the data buffer are created from * the lease database only. It does not contain any configuration settings. * * The data buffer must be freed by the caller upon exit (using ipcom_free * (buffer pointer)). * * Parameter: * \is * \i * Reference to pointer to dump buffer. * \ie * * RETURNS: 'IPCOM_SUCCESS', or the following error: * \is * \i 'IPCOM_ERR_FAILED' * Failure. * \ie * * ERRNO: */ IP_PUBLIC int ipdhcps_lease_db_dump ( void* obj ); /******************************************************************************* * * ipdhcps_lease_db_restore - initialize the IPDHCPS lease database * * This routine initializes the IPDHCPS lease database with data from an * externally provided data buffer. * * This function is part of the IPDHCPS lease dump API intended to let IPDHCPS * utilize persistent storage of the lease database to make it survive a restart * of the server. * * The function can for instance be used when the server is running on systems * supplied with a file system or a non-volatile memory. * * Example: Call it from the IPDHCPS start hook together with extra target * specific code to let the server restore its lease database from a previous * session. * * It is important that all configurations of subnets and address pools are done * before restoring the lease database. The function will drop all leases that do * not match the current configuration. * * Parameter: * \is * \i * Reference to pointer to dump buffer. * \ie * * RETURNS: 'IPCOM_SUCCESS,' , or the following error: * \is * \i 'IPCOM_ERR_FAILED' * Failure. * \ie * * ERRNO: */ IP_PUBLIC Ip_err ipdhcps_lease_db_restore ( void *obj ); /* *=========================================================================== * Ipdhcps_cmd_dhcps *=========================================================================== * Description: Install IPDHCPS shell commands * Parameters: * Returns: * */ #ifdef IPDHCPS_INCLUDE_CMD IP_GLOBAL int Ipdhcps_cmd_dhcps(int argc, char **argv); #endif /* *=========================================================================== * ipdhcps_configure *=========================================================================== * Description: * Parameters: * Returns: * */ IP_PUBLIC Ip_err ipdhcps_configure(void); #ifdef __cplusplus } #endif #endif /* **************************************************************************** * END OF FILE **************************************************************************** */