/* ipmip6_ipsec.h - ipmip6_ipsec.h */ /* ****************************************************************************** * HEADER FILE * * Document no: @(#) $Name: VXWORKS_ITER40_2019102207 $ $RCSfile: ipmip6_ipsec.h,v $ $Revision: 1.3.10.1 $ * $Source: /home/interpeak/CVSRoot/ipmip6/include/private/ipmip6_ipsec.h,v $ * $Author: jhorteli $ $Date: 2012-02-08 16:09:27 $ * $State: Exp $ $Locker: $ * * INTERPEAK_COPYRIGHT_STRING * Design and implementation by Joel Hortelius ****************************************************************************** */ #ifndef IPMIP6_IPSEC_H #define IPMIP6_IPSEC_H /* **************************************************************************** * 1 DESCRIPTION **************************************************************************** */ /* DESCRIPTION This module defines the basic IPIPSEC interface for adding security policies. Will be OBSOLETED. */ /* **************************************************************************** * 2 CONFIGURATION **************************************************************************** */ /* **************************************************************************** * 3 INCLUDE FILES **************************************************************************** */ #ifdef __cplusplus extern "C" { #endif /* **************************************************************************** * 4 DEFINES **************************************************************************** */ #define IPMIP6_IPSEC_SA_ENDPOINT_MOVEABLE (1) #define IPMIP6_IPSEC_SA_ENDPOINT_STATIC (2) #define IPMIP6_IPSEC_SA_MODE_TRANSPORT (1) #define IPMIP6_IPSEC_SA_MODE_TUNNEL (2) #define IPMIP6_IPSEC_SA_DIR_IN (1) #define IPMIP6_IPSEC_SA_DIR_OUT (2) #define IPMIP6_IPSEC_SA_PROTOCOL_ESP (0) #define IPMIP6_IPSEC_SA_PROTOCOL_AH (1) /* **************************************************************************** * 5 TYPES **************************************************************************** */ struct Ipmip6_context; struct Ipmip_proc; struct Ipmip6_if; typedef struct Ipmip6_ipsec_key { char *iik_mode; /* Arch specific mode */ Ip_u8 *iik_key; /* Key used with this key */ Ip_u32 iik_key_len; /* Length of key */ } Ipmip6_ipsec_key_t; /* SA's */ typedef struct Ipmip6_ipsec_sa { Ipcom_list iis_next; struct Ip_in6_addr iis_dst; /* Destination address */ struct Ip_in6_addr iis_src; /* Source address */ Ip_u8 iis_protocol; /* ESP or AH */ Ip_u32 iis_spi; /* SPI number */ Ip_u8 iis_mode; /* Transport mode or tunnel mode */ Ip_u8 iis_dir; /* Direction */ Ip_u8 iis_endpoint; /* Moveable */ Ip_u32 iis_references; /* Number of flow references */ Ip_u32 iis_installed; /* Installed */ Ipmip6_ipsec_key_t iis_enc; /* Encryption information */ Ipmip6_ipsec_key_t iis_auth; /* Authentication information */ Ipcom_list iis_flows; /* Installed flows */ struct Ipmip6_ipsec_sa *iis_chain; /* Chain SAs when parsing recv */ } Ipmip6_ipsec_sa_t; /* Flow */ typedef struct Ipmip6_ipsec_flow { Ipcom_list iif_next; /* Linked in for SA */ Ipmip6_ipsec_sa_t *iif_sa; /* SA for this flow */ struct Ipmip6_if *iif_if; /* In or outbound interface */ struct Ip_in6_addr iif_dst; /* Destination address */ struct Ip_in6_addr iif_dst_mask; /* Destination mask */ struct Ip_in6_addr iif_src; /* Source address */ struct Ip_in6_addr iif_src_mask; /* Source mask */ Ip_u32 iif_spi; /* SPI number */ Ip_u8 iif_mode; /* Transport mode or tunnel mode */ Ip_u8 iif_dir; /* Inbound or outbound */ Ip_u8 iif_endpoint; /* Moveable definitions */ Ip_u8 iif_protocol; /* Protocol */ Ip_bool iif_installed; /* Installed or not */ } Ipmip6_ipsec_flow_t; /* **************************************************************************** * 6 FUNCTIONS **************************************************************************** */ /* *=========================================================================== * ipmip6_ipsec_setup_flow *=========================================================================== * Description: Setup a flow * Parameters: flow - The flow to setup. * spi - The spi number. * direction - IPMIP6_IPSEC_SA_DIR_IN or IPMIP6_IPSEC_SA_DIR_OUT * endpoint - IPMIP6_IPSEC_SA_ENDPOINT_MOVEABLE or * IPMIP6_IPSEC_SA_ENDPOINT_STATIC * protocol - The protocol * mode - IPMIP6_IPSEC_SA_MODE_TRANSPORT or * IPMIP6_IPSEC_SA_MODE_TUNNEL * dst - Destination address * dst_mask - Destination mask * src - Source address * src_mask - Source mask * ife - Interface pointer. * Returns: * */ IP_GLOBAL void ipmip6_ipsec_setup_flow(Ipmip6_ipsec_flow_t *flow, Ip_u32 spi, Ip_u8 direction, Ip_u8 endpoint, Ip_u8 protocol, Ip_u8 mode, const struct Ip_in6_addr *dst, const struct Ip_in6_addr *dst_mask, const struct Ip_in6_addr *src, const struct Ip_in6_addr *src_mask, struct Ipmip6_if *ife); /* *=========================================================================== * ipmip6_ipsec_load_sa *=========================================================================== * Description: Load an SA and store it into the specified list. * Parameters: * Returns: * */ IP_GLOBAL Ip_bool ipmip6_ipsec_load_sa(struct Ipmip6_context *ctx, struct Ipmip_proc *proc, Ipcom_list *sas, Ip_u32 spi, const char *product, const char *configuration, const char *feature); /* *=========================================================================== * ipmip6_ipsec_attach_flow *=========================================================================== * Description: Reads the ipsec parameters from the sysvar interface * based on a given mask. * Parameters: sas - SA list * flow - The flow key to configure. * Returns: * */ IP_GLOBAL Ip_bool ipmip6_ipsec_attach_flow(struct Ipmip6_context *ctx, struct Ipmip_proc *proc, Ipcom_list *sas, Ipmip6_ipsec_flow_t *flow); /* *=========================================================================== * ipmip6_ipsec_detach_flow *=========================================================================== * Description: Detach a flow. * Parameters: flow - The flow * Returns: * */ IP_GLOBAL void ipmip6_ipsec_detach_flow(struct Ipmip6_context *ctx, struct Ipmip_proc *proc, Ipmip6_ipsec_flow_t *flow); /* *=========================================================================== * ipmip6_ipsec_move_sa_coa *=========================================================================== * Description: Move the endpoint of all moveable SA's * Parameters: sa - The list of SA's * coa - The new CoA. * Returns: * */ IP_GLOBAL void ipmip6_ipsec_move_sa_coa(struct Ipmip6_context *ctx, struct Ipmip_proc *proc, Ipcom_list *sas, struct Ip_in6_addr *coa); /* *=========================================================================== * ipmip6_ipsec_move_sa_peer *=========================================================================== * Description: Move the peer endpoint of all SA's * Parameters: sa - The list of SA's * peer - The new peer * Returns: * */ IP_GLOBAL void ipmip6_ipsec_move_sa_peer(struct Ipmip6_context *ctx, struct Ipmip_proc *proc, Ipcom_list *sas, struct Ip_in6_addr *peer); /* *=========================================================================== * ipmip6_ipsec_move_sa_home *=========================================================================== * Description: Move the home endpoint of all SA's * Parameters: sa - The list of SA's * home - The new home. * Returns: * */ IP_GLOBAL void ipmip6_ipsec_move_sa_home(struct Ipmip6_context *ctx, struct Ipmip_proc *proc, Ipcom_list *sas, struct Ip_in6_addr *home); /* *=========================================================================== * ipmip6_ipsec_install_sa_moveable *=========================================================================== * Description: Installs all moveable SA's and their attached flows. * Parameters: sas - The list of SA's * Returns: * */ IP_GLOBAL void ipmip6_ipsec_install_sa_moveable(struct Ipmip6_context *ctx, struct Ipmip_proc *proc, Ipcom_list *sas); /* *=========================================================================== * ipmip6_ipsec_uninstall_sa_moveable *=========================================================================== * Description: Uninnstalls all moveable SA's and their attached flows. * Parameters: sas - The list of SA's * Returns: * */ IP_GLOBAL void ipmip6_ipsec_uninstall_sa_moveable(struct Ipmip6_context *ctx, struct Ipmip_proc *proc, Ipcom_list *sas); /* *=========================================================================== * ipmip6_ipsec_install_sa_static *=========================================================================== * Description: Installs all static SA's and their attached flows. * Parameters: sas - The list of SA's * Returns: * */ IP_GLOBAL void ipmip6_ipsec_install_sa_static(struct Ipmip6_context *ctx, struct Ipmip_proc *proc, Ipcom_list *sas); /* *=========================================================================== * ipmip6_ipsec_uninstall_sa_static *=========================================================================== * Description: Uninstalls all static SA's and their attached flows. * Parameters: sas - The list of SA's * Returns: * */ IP_GLOBAL void ipmip6_ipsec_uninstall_sa_static(struct Ipmip6_context *ctx, struct Ipmip_proc *proc, Ipcom_list *sas); /* *=========================================================================== * ipmip6_ipsec_delete_sa *=========================================================================== * Description: Delete all SAS in a specified list. * Parameters: sas - The list. * Returns: * */ IP_GLOBAL void ipmip6_ipsec_delete_sa(struct Ipmip6_context *ctx, struct Ipmip_proc *proc, Ipcom_list *sas); /* *=========================================================================== * ipmip6_port_ipsec_install *=========================================================================== * Description: Install a SA * Parameters: sa - The SA to install. * Returns: IP_TRUE if successful. * */ IP_GLOBAL Ip_bool ipmip6_port_ipsec_install(struct Ipmip6_context *ctx, struct Ipmip_proc *proc, struct Ipmip6_ipsec_sa *sa); /* *=========================================================================== * ipmip6_port_ipsec_uninstall *=========================================================================== * Description: Uninstall a SA * Parameters: sa - The SA to uninstall. * Returns: * */ IP_GLOBAL void ipmip6_port_ipsec_uninstall(struct Ipmip6_context *ctx, struct Ipmip_proc *proc, struct Ipmip6_ipsec_sa *sa); /* *=========================================================================== * ipmip6_port_ipsec_install_flow *=========================================================================== * Description: Install a flow * Parameters: flow - The flow to install * Returns: IP_TRUE if successful * */ IP_GLOBAL Ip_bool ipmip6_port_ipsec_install_flow(struct Ipmip6_context *ctx, struct Ipmip_proc *proc, struct Ipmip6_ipsec_flow *flow); /* *=========================================================================== * ipmip6_port_ipsec_uninstall_flow *=========================================================================== * Description: Uninstall a flow * Parameters: flow - The flow to uninstall. * Returns: * */ IP_GLOBAL void ipmip6_port_ipsec_uninstall_flow(struct Ipmip6_context *ctx, struct Ipmip_proc *proc, struct Ipmip6_ipsec_flow *flow); #ifdef __cplusplus } #endif #endif /* **************************************************************************** * END OF FILE **************************************************************************** */