Files
2026-07-30 11:19:44 +05:30

256 lines
7.6 KiB
C

/*
******************************************************************************
* IPCOM CONFIGURATION SOURCE FILE
*
* Document no: @(#) $Name: VXWORKS_ITER40_2019102207 $ $RCSfile: ipdhcpr_config.c,v $ $Revision: 1.9 $
* $Source: /home/interpeak/CVSRoot/ipdhcpr/config/ipdhcpr_config.c,v $
* $Author: fguo $
* $State: Exp $ $Locker: $
*
* INTERPEAK_COPYRIGHT_STRING
* Design and implementation by Jonas Rendel <jonas@interpeak.se>
******************************************************************************
*/
/*
modification history
--------------------
01g,11aug10.h_s merge two config.c file for <Networking Configuration Enhancements>.
01f,04sep09,h_s Fix WIND00184353.
01e,03jan07,kch Updated CVS revision log entry for Jan 03 code drop.
01d,14dec06,kch Modified ipdhcpr_start_hook() to allow for user configurable
callback hook. Also added DHCPR_NETCONF_SYSVAR to allow
preconfigure network configurations.
01c,13sep06,kch Refresh with Sept 08, 2006 code drop
01b,05sep06,dlk Eliminate some compiler warnings.
01a,28aug06,kch Update based on Aug 22, 2006 code drop.
*/
/*
****************************************************************************
* 1 DESCRIPTION
****************************************************************************
*/
/*
****************************************************************************
* 2 INCLUDE FILES
****************************************************************************
*/
#include "ipcom_config.h"
#include "ipcom_err.h"
#include "ipcom_sysvar.h"
#include "ipdhcpr_config.h"
#if defined(IP_WB_BUILD)
/*
****************************************************************************
* 3 TYPES
****************************************************************************
*/
/* typedef to make compiler happy... */
typedef int (*ipdhcpr_start_cb)(void);
#endif
/*
****************************************************************************
* 4 GENERAL
****************************************************************************
*/
/*
*===========================================================================
* ipdhcpr_conf_sysvar
*===========================================================================
* Description: Initiates mandatory system configuration variables specific
* for IPDHCPR.
*
*/
IP_STATIC IP_CONST Ipcom_sysvar ipdhcpr_conf_sysvar[] =
{
/*
* server_port
*
* UDP port used by the DHCP server.
*
* Default: 67
*/
IP_SYSVAR( "ipdhcpr.ServerPort", "67", DHCPR_SERVER_PORT),
/*
* client_port
*
* UDP port used by the dhcp/bootp clients.
*
* Default: 68
*/
IP_SYSVAR( "ipdhcpr.ClientPort", "68", DHCPR_CLIENT_PORT),
/*
* packet_size
*
* Max DHCP packet size the DHCPR can handle
*
* Default: 576
*/
IP_SYSVAR( "ipdhcpr.PacketSize", "576", DHCPR_MAX_PKT_SIZE),
/*
* hops_treshold
*
* Max number of relay agent allowed between a client and | *
* and a server. Packets with a hops count greater than this | * Default: 67
* treshold value are silently dropped.
*
* Default: 3
*/
IP_SYSVAR( "ipdhcpr.HopsThreshold", "3", DHCPR_HOPS_THRESHOLD),
{ IP_NULL, IP_NULL}
};
/*
*===========================================================================
* ipdhcpr_netconf_sysvar
*===========================================================================
* Description: example implementation of dhcp relay network
* configuration array
*
* DHCP relay network pre-configuratio array is used to statically configure
* the dhcp relay with a preconfigured setup of networks and hosts when
* initiated. Each system variable in this array must be named according to
* the syntax ipdhcpr.netconf.<index>, where <index> is a unique line
* indicator. The value of each system variable must consist of a IPDHCPR
* shell command (without the preceeding dhcpr that is used only when
* executing from a shell). The commands are executed in the order they
* are defined.
*/
#ifdef IPDHCPR_INCLUDE_CMD
IP_STATIC IP_CONST Ipcom_sysvar ipdhcpr_netconf_sysvar[] =
{
#if defined(IPDHCPR_USE_EXAMPLE) || defined(INCLUDE_IPDHCPR_USE_EXAMPLE)
{"ipdhcpr.netconf.0", "server add 10.1.2.165"},
#endif /* IPDHCPR_USE_EXAMPLE || INCLUDE_IPDHCPR_USE_EXAMPLE */
{IP_NULL, IP_NULL}
};
#endif /* IPDHCPR_INCLUDE_CMD */
#ifdef IP_WB_BUILD
#if DHCPR_INSTALL_CALLBACK_HOOK == TRUE
/*
* forward declarations for the user-defined dhcp relay callback hooks
* to satisfy the compiler.
*/
#if (DHCPR_START_CALLBACK_HOOK != 0)
int DHCPR_START_CALLBACK_HOOK (void);
#endif
#else
/*
* DHCPR_START_CALLBACK_HOOK is applicable only if DHCPR_INSTALL_CALLBACK_HOOK
* is set to TRUE. Explicitly re-define the hook to NULL so that we don't get
* compiler errors
*/
#undef DHCPR_START_CALLBACK_HOOK
#define DHCPR_START_CALLBACK_HOOK NULL
#endif /* DHCPR_INSTALL_CALLBACK_HOOK */
#endif /* IP_WB_BUILD */
/*
****************************************************************************
* 10 GLOBAL FUNCTIONS
****************************************************************************
*/
/*
*===========================================================================
* ipdhcpr_start_hook
*===========================================================================
* Description: This routine is called by IPDHCPR at start-up. It is
* intended to be used for static configuration of IPDHCPR.
*
* Parameters: -
* Returns: 0 - success
* -1 - failure
*
*/
IP_GLOBAL int
ipdhcpr_start_hook (void)
{
#ifdef IP_WB_BUILD
ipdhcpr_start_cb dhcpr_cb;
dhcpr_cb = (DHCPR_START_CALLBACK_HOOK != NULL) ?
DHCPR_START_CALLBACK_HOOK : NULL;
/*
* call the user callback routine if provided. Otherwise, simply return 0.
*/
return (dhcpr_cb != NULL) ? dhcpr_cb() : 0;
#else
return 0;
#endif
}
/*
****************************************************************************
* 11 GLOBAL FUNCTIONS
****************************************************************************
*/
/*
*===========================================================================
* ipdhcps_configure
*===========================================================================
* Description:
* Parameters:
* Returns:
*
*/
IP_PUBLIC Ip_err
ipdhcpr_configure(void)
{
/* Initialize IPDHCPR system configuration. */
(void)ipcom_sysvar_setv(ipdhcpr_conf_sysvar, 0);
/*
* Note: IPDHCPR_INCLUDE_CMD is defined in ipdhcpr_config.h. If
* changing that define, the <ipdhcpr> directory must be
* recompiled
*/
#ifdef IPDHCPR_INCLUDE_CMD
#ifdef IP_WB_BUILD
{
Ipcom_sysvar *entries;
if ((entries = (Ipcom_sysvar *)DHCPR_NETCONF_SYSVAR) != NULL)
{
/* Initialize IPDHCPR network preconfiguration */
(void)ipcom_sysvar_setv(entries, 0);
}
}
#else
/* Initialize IPDHCPR network preconfiguration */
(void)ipcom_sysvar_setv(ipdhcpr_netconf_sysvar, 0);
#endif /* IP_WB_BUILD */
#endif
return IPCOM_SUCCESS;
}
/*
****************************************************************************
* END OF FILE
****************************************************************************
*/