Files
m241Neelima/components/ip_net2-6.9/ipike/include/ipike_configuration_api.h
T
2026-07-30 11:19:44 +05:30

865 lines
25 KiB
C

/* ipike_configuration_api.h - Public API of Wind River IKE */
/*
******************************************************************************
* HEADER FILE
*
* Document no: @(#) $Name: VXWORKS_ITER40_2019102207 $ $RCSfile: ipike_configuration_api.h,v $ $Revision: 1.12.10.3 $
* $Source: /home/interpeak/CVSRoot/ipike/include/ipike_configuration_api.h,v $
* $Author: svc-cmnet $ $Date: 2013-03-13 07:45:25 $
* $State: Exp $ $Locker: $
*
* INTERPEAK_COPYRIGHT_STRING
* Design and implementation by Kenneth Jonsson <kenneth@interpeak.se>
******************************************************************************
*/
#ifndef IPIKE_CONFIGURATION_API_H
#define IPIKE_CONFIGURATION_API_H
/*
****************************************************************************
* 1 DESCRIPTION
****************************************************************************
*/
/*
DESCRIPTION
This file contains the API used for configuration of Wind River IKE.
*/
/*
****************************************************************************
* 2 CONFIGURATION
****************************************************************************
*/
#include "ipike_config.h"
/*
****************************************************************************
* 3 INCLUDE FILES
****************************************************************************
*/
#include "ipike.h"
#ifdef __cplusplus
extern "C" {
#endif
/*
****************************************************************************
* 4 DEFINES
****************************************************************************
*/
#define IPIKE_CONFIG_INVALID_VALUE -1
#define IPIKE_CONFIG_MAX_ID_LEN 64
/*
****************************************************************************
* 5 TYPES
****************************************************************************
*/
typedef struct Ipike_config_api_proposal_struct
{
const char* dh_group;
const char* hash_alg;
const char* encryption_alg;
const char* integrity_alg;
const char* use_esn;
struct
{
const char* lifetime;
} v1;
const char* number;
}
Ipike_config_api_proposal;
typedef struct Ipike_config_api_rohc_struct
{
const char* max_cid;
const char* mrru;
const char* icv_len;
const char* integrity_alg;
const char* profiles;
}
Ipike_config_api_rohc;
typedef struct Ipike_config_api_general_struct
{
const char* listen;
Ip_u32 retransmits;
Ip_u32 exchange_max_time;
Ip_u32 spi_min;
Ip_u32 spi_max;
}
Ipike_config_api_general;
typedef struct Ipike_config_api_ike_sa_struct
{
const char* version;
const char* mode;
Ip_bool passive;
Ip_bool initial_contact;
Ip_bool reauth; /* IKE SA rekeying, reauthentication yes/no. Default = yes */
Ip_s32 liveness;
const char* local_address;
const char* remote_address;
const char* local_id;
const char* remote_id;
const char* lifetime;
struct
{
const char* method;
const char* psk_id;
const char* shared_key;
const char* certificate;
const char* certificate_uri;
const char* send_certificate;
const char* request_certificate;
const char* ocsp_response;
const char* remote_certificate;
const char* key_id;
const char* private_key;
const char* private_key_password;
const char* trusted_ca_store;
const char* crl_store;
const char* intermediate_ca_store;
const char* identity;
} authentication;
struct
{
const char* server_address;
const char* local_address;
const char* shared_secret;
} radius;
}
Ipike_config_api_ike_sa;
typedef struct Ipike_config_api_ipsec_flow_struct
{
const char* src_address;
const char* dst_address;
const char* src_port;
const char* dst_port;
const char* protocol;
}
Ipike_config_api_ipsec_flow;
typedef struct Ipike_config_api_ipsec_sa_struct
{
const char *ike_id;
const char *encap_mode;
const char *lifetime;
const char *use_tfc;
const char *dynamic_address;
const char *flowtype; /* flowtype: none,require,acquire */
const char *use_ecn;
const char *granularity;
Ip_u32 replay_window;
Ipike_config_api_ipsec_flow flow;
Ipike_config_api_ipsec_flow flow_end; /* Address/Port range support */
}
Ipike_config_api_ipsec_sa;
/*
****************************************************************************
* 6 FUNCTIONS
****************************************************************************
*/
/*******************************************************************************
*
* ipike_config_api_new - create a new configuration context
*
* This routine creates a new configuration context. Depending on the value in
* the <load_current> parameter, either the current context is copied to the new
* context or the context is left empty.
*
* Parameter:
* \is
* \i <load_current>
* A boolean value, either 'IP_TRUE', in which case the current configuration is
* to be loaded into the new context, or 'IP_FALSE', in which case the context is
* left empty.
* \ie
*
* RETURNS: Returns a pointer to the configuration context or 'IP_NULL,' if the
* context could not be allocated.
*
* ERRNO:
*/
IP_PUBLIC void* ipike_config_api_new
(
Ip_bool load_current
);
/*******************************************************************************
*
* ipike_config_api_free - release resources allocated in the config context
*
* This routine releases all resources allocated in the configuration context.
* This routine must be called when finished using the context.
*
* Parameter:
* \is
* \i <conf>
* A pointer to void for an 'Ipike_config_api_ike' structure specifying the
* configuration context. The pointer is returned by the ipike_config_api_new()
* routine.
* \ie
*
* RETURNS: N/A
*
* ERRNO:
*/
IP_PUBLIC void ipike_config_api_free
(
void* conf
);
/*******************************************************************************
*
* ipike_config_api_import - import the configuration from a data buffer
*
* This routine imports the configuration from a data buffer. The data must be
* formatted according to the standard configuration file format or the output
* from the ipike_config_api_export() routine.
*
* Parameters:
* \is
* \i <conf>
* A pointer to a configuration context created by the ipike_config_api_new()
* routine.
* \i <buf>
* A pointer to the buffer with the configuration data.
* \i <buf_len>
* The size of the buffer.
* \ie
*
* RETURNS: 'IPIKE_SUCCESS', or an error listed in the file 'ipike.h'.
*
* ERRNO:
*/
IP_PUBLIC Ipike_error ipike_config_api_import
(
void* conf,
const char* buf,
Ip_size_t buf_len
);
/*******************************************************************************
*
* ipike_config_api_export - export the configuration context to a data buffer
*
* This routine exports the configuration context to a data buffer. The data is
* formatted according to the standard configuration file format and can be used
* as input to ipike_config_api_import().
*
* Parameters:
* \is
* \i <conf>
* A pointer to a configuration context created by the ipike_config_api_new()
* routine.
* \i <buf>
* A pointer to the buffer that will receive the configuration data. Set the
* pointer to 'IP_NULL,' if the buf_len parameter is to return the number of
* bytes needed.
* \i <buf_len>
* A pointer to the size, in bytes, of the configuration data buffer; on return,
* <buf_len> points to the number of bytes used for the configuration data.
* \ie
*
* RETURNS: 'IPIKE_SUCCESS', or an error listed in the file 'ipike.h'.
*
* ERRNO:
*/
IP_PUBLIC Ipike_error ipike_config_api_export
(
void* conf,
char* buf,
Ip_size_t* buf_len
);
/*******************************************************************************
*
* ipike_config_api_validate - validate the configuration context
*
* This routine validates the configuration context. Sets all needed default
* values and does error checking. This routine must complete successfully
* before the ipike_config_api_commit() routine tries to set the configuration
* context to IPIKE daemon.
*
* Parameter:
* \is
* \i <conf>
* A pointer to the configuration context to be validated.
* \ie
*
* RETURNS: 'IPIKE_SUCCESS', or an error listed in the file 'ipike.h'.
*
* ERRNO:
*/
IP_PUBLIC Ipike_error ipike_config_api_validate
(
void* conf
);
/*******************************************************************************
*
* ipike_config_api_commit - commit a new configuration context
*
* This routine commits a new configuration context; it replaces the current
* IPIKE daemon configuration with the new configuration pointed to by the <conf>
* parameter. The ipike_config_api_validate routine must complete successfully
* before the new configuration can replace the current configuration. If the new
* context has not already been validated with ipike_config_api_validate(),
* ipike_config_api_commit() calls ipike_config_api_validate() internally.
*
* Parameter:
* \is
* \i <conf>
* A pointer to the configuration context to commit.
* \ie
*
* RETURNS: 'IPIKE_SUCCESS', or an error listed in the file 'ipike.h'.
*
* ERRNO:
*/
IP_PUBLIC Ipike_error ipike_config_api_commit
(
void* conf
);
/*******************************************************************************
*
* ipike_config_api_set_general - set general-param section of a config
*
* This routine sets the general-parameters section of a configuration. Existing
* parameter values are overwritten.
*
* Parameters:
* \is
* \i <conf>
* A pointer to the configuration context.
* \i <ipike_config_api_general* general>
* A pointer to a general parameters structure ('ipike_config_api_general') to be
* copied into the configuration context.
* \ie
*
* RETURNS: 'IPIKE_SUCCESS', or an error listed in the file 'ipike.h'.
*
* ERRNO:
*/
IP_PUBLIC Ipike_error ipike_config_api_set_general
(
void* conf,
Ipike_config_api_general* general
);
/*******************************************************************************
*
* ipike_config_api_set_ike_sa - set an IKE SA in a configuration
*
* This routine sets IKE SA parameters in a configuration context. Any existing
* IKE SA parameters with the same 'ike_id' value will be overwritten.
*
* Parameters:
* \is
* \i <conf>
* A pointer to the configuration context.
* \i <ike_id>
* A string identifying the IKE SA to set. The string must not exceed
* 'IPIKE_CONFIG_MAX_ID_LEN' bytes. Enter an empty string to set the default IKE
* SA parameter values.
* \i <ike_sa>
* A pointer to an IKE SA structure to be copied into the configuration context.
* The values are copied to the configuration context, so this structure can
* safely be deleted.
* \ie
*
* RETURNS: 'IPIKE_SUCCESS', or an error listed in the file 'ipike.h'.
*
* ERRNO:
*/
IP_PUBLIC Ipike_error ipike_config_api_set_ike_sa
(
void* conf,
const char ike_id[IPIKE_CONFIG_MAX_ID_LEN],
Ipike_config_api_ike_sa* ike
);
/*******************************************************************************
*
* ipike_config_api_set_ipsec_sa - set an IPSec SA in a configuration
*
* This routine sets IPsec SA parameters in a configuration context. Any existing
* IPsec SA parameters with the same 'ipsec_id' value will be overwritten.
*
* Parameters:
* \is
* \i <conf>
* A pointer to the configuration context.
* \i <ipsec_id>
* A string identifying the IPsec SA to set. The string must not exceed
* 'IPIKE_CONFIG_MAX_ID_LEN' bytes. Enter an empty string to set the default
* IPsec SA parameter values.
* \i <ipsec_sa>
* A pointer to an IPsec SA structure to be copied into the configuration
* context. The values are copied to the configuration context, so this structure
* can safely be deleted.
* \ie
*
* RETURNS: 'IPIKE_SUCCESS', or an error listed in the file 'ipike.h'.
*
* ERRNO:
*/
IP_PUBLIC Ipike_error ipike_config_api_set_ipsec_sa
(
void* conf,
const char ipsec_id[IPIKE_CONFIG_MAX_ID_LEN],
Ipike_config_api_ipsec_sa* ipsec
);
/*******************************************************************************
*
* ipike_config_api_set_ike_sa_proposal - set an IKE SA proposal in a config
*
* This routine sets parameters for a specific proposal associated with a
* specific IKE SA in a configuration context. Any existing IKE SA proposal
* parameters with the same 'ike_id' and 'prop_id' values will be overwritten.
*
* Parameters:
* \is
* \i <conf>
* pointer to the configuration context.
* \i <ike_id>
* A string with the 'ike_sa' identifier of an existing IKE SA.
* \i <prop_id>
* A pointer to a proposal identifier. To return a proposal identifier in
* <prop_id>, set <prop_id> to 'IPIKE_CONFIG_INVALID_VALUE'.
* \i <proposal>
* pointer to an IKE SA proposal structure to be copied into the configuration
* context. The values are copied to the configuration context, so this structure
* can be safely deleted.
* \ie
*
* RETURNS: 'IPIKE_SUCCESS', or an error listed in the file 'ipike.h'.
*
* ERRNO:
*/
IP_PUBLIC Ipike_error ipike_config_api_set_ike_sa_proposal
(
void* conf,
const char ike_id[IPIKE_CONFIG_MAX_ID_LEN],
int* proposal_id,
Ipike_config_api_proposal* proposal
);
/*******************************************************************************
*
* ipike_config_api_set_ipsec_sa_proposal - set IPSEC SA proposal in a config
*
* This routine sets parameters for a specific proposal associated with a
* specific IPsec SA in a configuration context. Any existing IPsec SA proposal
* parameters with the same 'ipsec_id' and 'prop_id' values will be overwritten.
*
* Parameters:
* \is
* \i <conf>
* pointer to the configuration context.
* \i <ipsec_id>
* A string with the 'ipsec_sa' identifier for an existing IPSec SA.
* \i <prop_id>
* A pointer to a proposal identifier. To return a proposal identifier in
* <prop_id>, set <prop_id> to 'IPIKE_CONFIG_INVALID_VALUE'.
* \i <proposal>
* A pointer to an IPsec SA proposal structure to be copied into the
* configuration context. The values are copied to the configuration context, so
* this structure can be safely deleted.
* \ie
*
* RETURNS: 'IPIKE_SUCCESS', or an error listed in the file 'ipike.h'.
*
* ERRNO:
*/
IP_PUBLIC Ipike_error ipike_config_api_set_ipsec_sa_proposal
(
void* conf,
const char ipsec_id[IPIKE_CONFIG_MAX_ID_LEN],
int* proposal_id,
Ipike_config_api_proposal* proposal
);
/*******************************************************************************
*
* ipike_config_api_set_ipsec_sa_rohc - set ROHC parameters in an IPsec SA config
*
* This routine sets ROHC parameters for a specific IPsec SA in a configuration
* context. Any existing ROHC parameters in the IPsec SA configuration will be
* overwritten.
*
* Parameters:
* \is
* \i <conf>
* pointer to the configuration context.
* \i <ipsec_id>
* A string with the 'ipsec_sa' identifier for an existing IPSec SA.
* \i <rohc>
* A pointer to an IPsec SA ROHC structure to be copied into the
* configuration context. The values are copied to the configuration context, so
* this structure can be safely deleted.*
* \ie
*
* RETURNS: 'IPIKE_SUCCESS', or an error listed in the file 'ipike.h'.
*
* ERRNO:
*/
IP_PUBLIC Ipike_error
ipike_config_api_set_ipsec_sa_rohc(
void* conf,
const char ipsec_id[IPIKE_CONFIG_MAX_ID_LEN],
Ipike_config_api_rohc * rohc);
/*******************************************************************************
*
* ipike_config_api_get_ipsec_sa_rohc - get ROHC parameters from an IPsec SA config
*
* This routine gets ROHC parameters for a specific IPsec SA in a configuration
* context.
*
* Parameters:
* \is
* \i <conf>
* pointer to the configuration context.
* \i <ipsec_id>
* A string with the 'ipsec_sa' identifier for an existing IPSec SA.
* \i <rohc>
* A pointer to an Ipike_config_api_rohc' structure for receiving the fetched
* parameter values.
* \ie
*
* RETURNS: 'IPIKE_SUCCESS', or an error listed in the file 'ipike.h'.
*
* ERRNO:
*/
IP_PUBLIC Ipike_error
ipike_config_api_get_ipsec_sa_rohc(
void* p,
const char ipsec_id[IPIKE_CONFIG_MAX_ID_LEN],
Ipike_config_api_rohc * rohc);
/*******************************************************************************
*
* ipike_config_api_get_general - get the general parameters of a configuration
*
* This routine gets the general parameters of a configuration context. Call
* ipike_config_api_release_general to release the structure.
*
* Parameters:
* \is
* \i <conf>
* A pointer to the configuration context.
* \i <general>
* A pointer to an 'ipike_config_api_general' structure for receiving the fetched
* parameter values.
* \ie
*
* RETURNS: 'IPIKE_SUCCESS', or an error listed in the file 'ipike.h'.
*
* ERRNO:
*/
IP_PUBLIC Ipike_error ipike_config_api_get_general
(
void* conf,
Ipike_config_api_general* general
);
/*******************************************************************************
*
* ipike_config_api_get_next_ike_sa - get an IKE SA in a configuration
*
* Get an IKE SA in a configuration. Call ipike_config_api_release_ike_sa to
* release the structure.
*
* Parameters:
* \is
* \i <conf>
* A pointer to the configuration context.
* \i <ike_id>
* A character array for receiving the identifier of the IKE SA.
* \i <ike_sa>
* A pointer to an 'Ipike_config_api_ike_sa' structure for receiving the IKE SA.
* \i <pos>
* A pointer to the position of an IKE SA in a configuration. On return, the
* parameter references the position of the next SA in the configuration. To get
* the position of the first IKE SA, set <pos> to 'IPIKE_CONFIG_INVALID_VALUE'.
* \ie
*
* RETURNS: 'IPIKE_SUCCESS', or an error listed in the file 'ipike.h'.
*
* ERRNO:
*/
IP_PUBLIC Ipike_error ipike_config_api_get_next_ike_sa
(
void* conf,
char ike_id[IPIKE_CONFIG_MAX_ID_LEN],
Ipike_config_api_ike_sa* ike,
int* pos
);
/*******************************************************************************
*
* ipike_config_api_get_next_ipsec_sa - get an IPSec SA from a configuration
*
* Get an IPSec SA from a configuration. Call ipike_config_api_release_ipsec_sa
* to release the structure.
*
* Parameters:
* \is
* \i <conf>
* A pointer to the configuration context.
* \i <ipsec_id>
* A character array for receiving the identifier of the IPSec SA.
* \i <ipsec_sa>
* A pointer to an 'Ipike_config_api_ike_sa' structure for receiving the IPSec
* SA.
* \i <pos>
* A pointer to the position of an IKE SA in a configuration. On return, the
* parameter references the position of the next SA in the configuration. To
* get the position of the first IKE SA, set <pos> to
* 'IPIKE_CONFIG_INVALID_VALUE'.
* \ie
*
* RETURNS: 'IPIKE_SUCCESS', or an error listed in the file 'ipike.h'.
*
* ERRNO:
*/
IP_PUBLIC Ipike_error ipike_config_api_get_next_ipsec_sa
(
void* conf,
char ipsec_id[IPIKE_CONFIG_MAX_ID_LEN],
Ipike_config_api_ipsec_sa* ipsec,
int* pos
);
/*******************************************************************************
*
* ipike_config_api_get_next_ike_sa_proposal - get SA proposal from config
*
* Get an IKE SA proposal from a configuration context. Call
* ipike_config_api_release_proposal to release the structure.
*
* Parameters:
* \is
* \i <conf>
* A pointer to the configuration context.
* \i <ike_id>
* A string with the IKE SA identifier for an existing IKE SA.
* \i <prop_id>
* A pointer to 'int' for receiving the proposal ID.
* \i <proposal>
* A pointer to an 'ipike_config_api_proposal' structure for receiving the
* proposal configuration structure values.
* \i <pos>
* A pointer to the position of an IKE SA proposal in a configuration. On
* return, the parameter references the position of the next IKE SA
* proposal in the configuration. To get the position of the first proposal,
* set <pos> to 'IPIKE_CONFIG_INVALID_VALUE'.
* \ie
*
* RETURNS: 'IPIKE_SUCCESS', or an error listed in the file 'ipike.h'.
*
* ERRNO:
*/
IP_PUBLIC Ipike_error ipike_config_api_get_next_ike_sa_proposal
(
void* conf,
const char ike_id[IPIKE_CONFIG_MAX_ID_LEN],
int* proposal_id,
Ipike_config_api_proposal* proposal,
int* pos
);
/*******************************************************************************
*
* ipike_config_api_get_next_ipsec_sa_proposal - get SA proposal from config
*
* Get an IPSec SA proposal from a configuration. Call
* ipike_config_api_release_proposal to release the structure.
*
* Parameters:
* \is
* \i <conf>
* A pointer to the configuration context.
* \i <ipsec_id>
* A string containing the IPSec SA identifier for an IPSec SA.
* \i <prop_id>
* A pointer to 'int' for receiving the proposal ID.
* \i <proposal>
* A pointer to an 'Ipike_config_api_proposal' structure for receiving the
* proposal configuration structure values.
* \i <pos>
* A pointer to the position of an IPSec SA proposal in a configuration. On
* return, the parameter references the position of the next IPSec SA proposal
* in the configuration. To get the position of the first proposal, set <pos> to
* 'IPIKE_CONFIG_INVALID_VALUE'.
* \ie
*
* RETURNS: 'IPIKE_SUCCESS', or an error listed in the file 'ipike.h'.
*
* ERRNO:
*/
IP_PUBLIC Ipike_error ipike_config_api_get_next_ipsec_sa_proposal
(
void* conf,
const char ipsec_id[IPIKE_CONFIG_MAX_ID_LEN],
int* proposal_id,
Ipike_config_api_proposal* proposal,
int* pos
);
/*******************************************************************************
*
* ipike_config_api_release_general - release allocated general structure values
*
* Release memory containing general structure values allocated by
* ipike_config_api_get_general().
*
* Parameter:
* \is
* \i <general>
* A pointer to the 'ipike_config_api_general' structure to release.
* \ie
*
* RETURNS: N/A
*
* ERRNO:
*/
IP_PUBLIC void ipike_config_api_release_general
(
Ipike_config_api_general* general
);
/*******************************************************************************
*
* ipike_config_api_release_ike_sa - release 'ike_sa' structure values
*
* Release memory containing the 'ike_sa' structure values allocated by
* ipike_config_api_get_next_ike_sa.
*
* Parameter:
* \is
* \i <ike_sa>
* A pointer to the 'ipike_config_api_ike_sa' structure to be released.
* \ie
*
* RETURNS: N/A
*
* ERRNO:
*/
IP_PUBLIC void ipike_config_api_release_ike_sa
(
Ipike_config_api_ike_sa* ike
);
/*******************************************************************************
*
* ipike_config_api_release_ipsec_sa - release 'ipsec_sa' structure values
*
* Release memory containing the 'ipsec_sa' structure values allocated by
* ipike_config_api_get_next_ipsec_sa.
*
* Parameter:
* \is
* \i <ipsec_sa>
* A pointer to the 'Ipike_config_api_ipsec_sa' configuration structure to be
* released.
* \ie
*
* RETURNS: N/A
*
* ERRNO:
*/
IP_PUBLIC void ipike_config_api_release_ipsec_sa
(
Ipike_config_api_ipsec_sa* ipsec
);
/*******************************************************************************
*
* ipike_config_api_release_proposal - release sa_proposal struct values
*
* Release memory containing structure values allocated by either
* ipike_config_api_get_next_ike_sa_proposal or
* ipike_config_api_get_next_ipsec_sa_proposal.
*
* Parameter:
* \is
* \i <proposal>
* A pointer to the 'Ipike_config_api_proposal' proposal configuration structure
* to be released.
* \ie
*
* RETURNS: N/A
*
* ERRNO:
*/
IP_PUBLIC void ipike_config_api_release_proposal
(
Ipike_config_api_proposal* prop
);
/*******************************************************************************
*
* ipike_config_api_release_rohc - release rohc struct values
*
* Release memory containing structure values allocated by
* ipike_config_api_get_ipsec_sa_rohc
*
* Parameter:
* \is
* \i <proposal>
* A pointer to the 'Ipike_config_api_rohc' ROHC configuration structure
* to be released.
* \ie
*
* RETURNS: N/A
*
* ERRNO:
*/
IP_PUBLIC void
ipike_config_api_release_rohc(Ipike_config_api_rohc *rohc);
/*
*===========================================================================
* ipike_config_api_from_config
*===========================================================================
* Description: Create a new configuration context from internal
* configuration structure.
* Parameters: config - the configuration structure.
* Returns: A pointer to the new structure (else IP_NULL)
*/
IP_GLOBAL void* ipike_config_api_from_config
(
void* config
);
#ifdef __cplusplus
}
#endif
#endif
/*
****************************************************************************
* END OF FILE
****************************************************************************
*/