224 lines
7.6 KiB
C
224 lines
7.6 KiB
C
/*
|
|
******************************************************************************
|
|
* HEADER FILE
|
|
*
|
|
* Document no: @(#) $Name: VXWORKS_ITER40_2019102207 $ $RCSfile: ipike_radius.h,v $ $Revision: 1.7 $
|
|
* $Source: /home/interpeak/CVSRoot/ipike/src/ipike_radius.h,v $
|
|
* $Author: edahlber $ $Date: 2010-04-23 15:31:41 $
|
|
* $State: Exp $ $Locker: $
|
|
*
|
|
* INTERPEAK_COPYRIGHT_STRING
|
|
* Design and implementation by Kenneth Jonsson <kenneth@interpeak.se>
|
|
******************************************************************************
|
|
*/
|
|
#if !defined(IPIKE_RADIUS_H) && defined(IPIKE_USE_RADIUS) && defined(IPIKE_USE_EAP)
|
|
#define IPIKE_RADIUS_H
|
|
|
|
/*
|
|
****************************************************************************
|
|
* 1 DESCRIPTION
|
|
****************************************************************************
|
|
*/
|
|
|
|
/*
|
|
****************************************************************************
|
|
* 2 CONFIGURATION
|
|
****************************************************************************
|
|
*/
|
|
#include "ipike_config.h"
|
|
|
|
/*
|
|
****************************************************************************
|
|
* 3 INCLUDE FILES
|
|
****************************************************************************
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <ipradius.h>
|
|
#include <ipeap.h>
|
|
|
|
/*
|
|
****************************************************************************
|
|
* 4 DEFINES
|
|
****************************************************************************
|
|
*/
|
|
|
|
#define IPIKE_RADIUS_MAX_KEY_LEN 64
|
|
|
|
/*
|
|
****************************************************************************
|
|
* 5 TYPES
|
|
****************************************************************************
|
|
*/
|
|
|
|
typedef struct Ipike_radius_server_st
|
|
{
|
|
Ip_u8 id;
|
|
Ip_fd fd;
|
|
Ipradius_server server;
|
|
union Ip_sockaddr_union local_addr;
|
|
} Ipike_radius_server;
|
|
|
|
typedef struct Ipike_radius_ctx_st
|
|
{
|
|
Ipike_radius_server* server;
|
|
char identity[IPEAP_IDENTITY_MAX_LEN];
|
|
Ipradius_header* last_msg;
|
|
} Ipike_radius_ctx;
|
|
|
|
/*
|
|
****************************************************************************
|
|
* 6 FUNCTIONS
|
|
****************************************************************************
|
|
*/
|
|
|
|
/*
|
|
*===========================================================================
|
|
* ipike_radius_create
|
|
*===========================================================================
|
|
* Description: Open a new connection towards a radius server and return a
|
|
* context if successful.
|
|
* Parameters: server_address - A string represtation of server address.
|
|
* local_address - A string represtation of local address.
|
|
* shared_secret - The shared secret used to secure the
|
|
* connection.
|
|
* Returns: A radius context if successful (otherwise IP_NULL)
|
|
*/
|
|
IP_GLOBAL Ipike_radius_ctx*
|
|
ipike_radius_create(
|
|
const char* ike_id,
|
|
union Ip_sockaddr_union* server_addr,
|
|
union Ip_sockaddr_union* local_addr,
|
|
const char* shared_secret);
|
|
|
|
/*
|
|
*===========================================================================
|
|
* ipike_radius_free
|
|
*===========================================================================
|
|
* Description: Close the radius connection and free all allocated resources.
|
|
* Parameters: server - The server that should be connected.
|
|
* Returns: A radius context if successful (otherwise IP_NULL)
|
|
*/
|
|
IP_GLOBAL void
|
|
ipike_radius_free(Ipike_radius_ctx* ctx);
|
|
|
|
/*
|
|
*===========================================================================
|
|
* ipike_radius_send
|
|
*===========================================================================
|
|
* Description: Send a message to a radius server.
|
|
* Parameters: ctx - The radius context.
|
|
* unique_id - Buffer with unique id that will be returned at
|
|
* receive.
|
|
* unique_id_len - Length of unique id buffer.
|
|
* pkt - The message to send.
|
|
* Returns: IPIKE_SUCCESS
|
|
* IPIKE_FAILED
|
|
*/
|
|
IP_GLOBAL Ipike_error
|
|
ipike_radius_send(
|
|
Ipike_radius_ctx* ctx,
|
|
Ip_u8* unique_id,
|
|
Ip_u32 unique_id_len,
|
|
Ipeap_pkt* pkt);
|
|
|
|
/*
|
|
*===========================================================================
|
|
* ipike_radius_receive
|
|
*===========================================================================
|
|
* Description: Receive a message from a radius server.
|
|
* Parameters: fd - The radius socket.
|
|
* eap - Will receive the eap message (if successful).
|
|
* unique_id - Buffer that will receive unique id that was sent.
|
|
* unique_id_len - Length of unique id buffer.
|
|
* Returns: IPIKE_SUCCESS
|
|
* IPIKE_FAILED
|
|
*/
|
|
IP_GLOBAL Ipike_error
|
|
ipike_radius_receive(
|
|
Ip_fd fd,
|
|
Ipike_value* eap,
|
|
Ip_u8* unique_id,
|
|
Ip_u32* unique_id_len,
|
|
Ipradius_header** last_msg);
|
|
|
|
/*
|
|
*===========================================================================
|
|
* ipike_radius_process_pkt
|
|
*===========================================================================
|
|
* Description: Process EAP packet.
|
|
* Parameters: ctx - The radius context.
|
|
* Returns: IPEAP_FAILURE
|
|
* IPEAP_PENDING_SEND_OUT_PKT
|
|
*/
|
|
IP_GLOBAL Ipike_error
|
|
ipike_radius_process_pkt(
|
|
Ipike_radius_ctx* ctx,
|
|
Ip_u8* unique_id,
|
|
Ip_u32 unique_id_len,
|
|
Ipeap_pkt* pkt_in,
|
|
Ipeap_pkt* pkt_out);
|
|
|
|
/*
|
|
*===========================================================================
|
|
* ipike_radius_process_dispatcher_event
|
|
*===========================================================================
|
|
* Description: A radius message is available on the socket. Find the
|
|
* corresponing EAP exchange and process the message.
|
|
* Parameters: fd - The radius socket.
|
|
* Returns:
|
|
*/
|
|
IP_GLOBAL void
|
|
ipike_radius_process_dispatcher_event(Ip_fd fd);
|
|
|
|
/*
|
|
*===========================================================================
|
|
* ipike_radius_process_dispatcher_event
|
|
*===========================================================================
|
|
* Description: Extract key from radius message. Will return zero length key
|
|
* if no key available.
|
|
* Parameters: ctx - The radius context.
|
|
* key - Buffer that will receive the key value.
|
|
* key_len - Length of key buffer and will receive key length.
|
|
* Returns:
|
|
*/
|
|
IP_GLOBAL void
|
|
ipike_radius_extract_key(Ipike_radius_ctx* ctx, Ip_u8* key, Ip_u32* key_len);
|
|
|
|
/*
|
|
*===========================================================================
|
|
* ipike_radius_startup
|
|
*===========================================================================
|
|
* Description: Initialize radius.
|
|
* Parameters:
|
|
* Returns:
|
|
*/
|
|
IP_GLOBAL Ipike_error
|
|
ipike_radius_startup(void);
|
|
|
|
/*
|
|
*===========================================================================
|
|
* ipike_radius_shutdown
|
|
*===========================================================================
|
|
* Description: Finalize radius.
|
|
* Parameters:
|
|
* Returns:
|
|
*/
|
|
IP_GLOBAL void
|
|
ipike_radius_shutdown(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|
|
|
|
/*
|
|
****************************************************************************
|
|
* END OF FILE
|
|
****************************************************************************
|
|
*/
|