/* ****************************************************************************** * HEADER FILE * * Document no: @(#) $Name: VXWORKS_ITER40_2019102207 $ $RCSfile: ipdhcpc6_ia.h,v $ $Revision: 1.19.16.1 $ * $Source: /home/interpeak/CVSRoot/ipdhcpc6/src/ipdhcpc6_ia.h,v $ * $Author: ulf $ $Date: 2011-11-16 10:33:26 $ * $State: Exp $ $Locker: $ * * INTERPEAK_COPYRIGHT_STRING * Design and implementation by Joel Hortelius ****************************************************************************** */ #ifndef IPDHCPC6_IA_H #define IPDHCPC6_IA_H /* **************************************************************************** * 1 DESCRIPTION **************************************************************************** */ /* **************************************************************************** * 2 CONFIGURATION **************************************************************************** */ /* **************************************************************************** * 3 INCLUDE FILES **************************************************************************** */ #ifdef __cplusplus extern "C" { #endif /* **************************************************************************** * 4 DEFINES **************************************************************************** */ #define ipdhcpc6_iap_deallocate(iap) ((*((struct Ipdhcpc6_ia*)(iap))->table->deallocate) (iap)) #define ipdhcpc6_iap_configure(iap) ((*((struct Ipdhcpc6_ia*)(iap))->table->configure) ((iap))) #define IPDHCPC6_IA_BINDING_CHECK(ia)\ {\ if (ia->ia.binding.binding.num == 0)\ {\ IPCOM_LOG1(INFO,\ "%s: No addresses in this IA",\ ia->ia.ifp->context->context->name);\ break;\ }\ } #define IPDHCPC6_IA_NAMESIZE (32) #define IPDHCPC6_IA_STATE_SOLICIT 0 #define IPDHCPC6_IA_STATE_BOUND 1 #define IPDHCPC6_IA_ACTION_IS_RUNNING(s) IP_BIT_ISTRUE((s), 0x80000000) #define IPDHCPC6_IA_ACTION_RUNNING(s) ((s) | 0x80000000) #define IPDHCPC6_IA_ACTION_BASE(s) ((s) & ~0x80000000) #define IPDHCPC6_IA_ACTION_IDLE 0 #define IPDHCPC6_IA_ACTION_SOLICIT 1 #define IPDHCPC6_IA_ACTION_REQUEST 2 #define IPDHCPC6_IA_ACTION_RENEW 3 #define IPDHCPC6_IA_ACTION_REBIND 4 #define IPDHCPC6_IA_ACTION_CONFIRM 5 #define IPDHCPC6_IA_ACTION_RELEASE 6 #define IPDHCPC6_IA_ACTION_DECLINE 7 #define IPDHCPC6_IA_ACTION_REBINDCONF 8 /* IA_PD only, because 'rebind' must be sent with 'confirm' parameters */ #define IPDHCPC6_IA_ACTION_SOLICITING IPDHCPC6_IA_ACTION_RUNNING(IPDHCPC6_IA_ACTION_SOLICIT) #define IPDHCPC6_IA_ACTION_REQUESTING IPDHCPC6_IA_ACTION_RUNNING(IPDHCPC6_IA_ACTION_REQUEST) #define IPDHCPC6_IA_ACTION_RENEWING IPDHCPC6_IA_ACTION_RUNNING(IPDHCPC6_IA_ACTION_RENEW) #define IPDHCPC6_IA_ACTION_REBINDING IPDHCPC6_IA_ACTION_RUNNING(IPDHCPC6_IA_ACTION_REBIND) #define IPDHCPC6_IA_ACTION_CONFIRMING IPDHCPC6_IA_ACTION_RUNNING(IPDHCPC6_IA_ACTION_CONFIRM) #define IPDHCPC6_IA_ACTION_RELEASING IPDHCPC6_IA_ACTION_RUNNING(IPDHCPC6_IA_ACTION_RELEASE) #define IPDHCPC6_IA_ACTION_DECLINEING IPDHCPC6_IA_ACTION_RUNNING(IPDHCPC6_IA_ACTION_DECLINE) #define IPDHCPC6_IA_ACTION_REBINDCONFING IPDHCPC6_IA_ACTION_RUNNING(IPDHCPC6_IA_ACTION_REBINDCONF) #define IPDHCPC6_IA_FLAGS_VERIFY 1 /* verify that the binding is valid */ /* **************************************************************************** * 5 TYPES **************************************************************************** */ struct Ipdhcpc6_if; struct Ipdhcpc6_if_server; struct Ipdhcpc6_ia_table; struct Ipdhcpc6_ia; struct Ipdhcpc6_ia_if; struct Ipdhcpc6_tagcomm_buffer; struct Ipdhcpc6_tagcomm_tag; typedef Ip_bool (*Ipdhcpc6_ia_configure_t) ( struct Ipdhcpc6_ia *iap ); typedef void (*Ipdhcpc6_ia_deallocate_t) ( struct Ipdhcpc6_ia *iap ); typedef struct Ipdhcpc6_ia* (*Ipdhcpc6_ia_allocate_t) ( ); typedef void (*Ipdhcpc6_ia_attributes_t) ( Ip_u32 cmd, struct Ipdhcpc6_ia *ia, struct Ipdhcpc6_tagcomm_tag *tag, struct Ipdhcpc6_tagcomm_buffer *response ); typedef void (*Ipdhcpc6_ia_ifevent_t) ( struct Ipdhcpc6_ia *ia, Ipcom_hash *table, Ip_u32 ostate, Ip_u32 nstate ); typedef void (*Ipdhcpc6_ia_reconfigure_t) ( struct Ipdhcpc6_ia *iap ); typedef struct Ipdhcpc6_ia_table { /**/ Ip_u32 type; const char *name; Ipdhcpc6_ia_configure_t configure; Ipdhcpc6_ia_deallocate_t deallocate; Ipdhcpc6_ia_allocate_t allocate; Ipdhcpc6_ia_attributes_t attributes; Ipdhcpc6_ia_ifevent_t ifevent; Ipdhcpc6_ia_reconfigure_t reconfigure; } Ipdhcpc6_ia_table_t; typedef struct Ipdhcpc6_fqdn { char name[255]; /*Full Qualified Domain Name*/ Ipdhcpc6_attr_array_t addrs; /*Address for the client*/ Ip_u32 success; /*Status of update*/ } Ipdhcpc6_fqdn_t; /* IA structure */ typedef struct Ipdhcpc6_ia { Ipcom_list next; /* Next IF */ struct Ipdhcpc6_if *ifp; /* Interface owner */ Ip_u32 flags; /* State flags */ Ip_u32 iaid; /* IAID */ char *desc; /* Description of this IA */ char *tag; /* Tag of this IA */ struct Ipdhcpc6_if_server *server; /* Server */ Ipcom_tmo2 valid; /* Valid timeout */ Ipdhcpc6_ia_table_t *table; /* Table */ Ipdhcpc6_attr_ia_state_t state; Ipdhcpc6_attr_array_t history; Ipdhcpc6_attr_ia_binding_t binding; /* Current bindings */ Ipdhcpc6_fqdn_t fqdn; /* Current used fqdn */ } Ipdhcpc6_ia_t; typedef struct Ipdhcpc6_ia_server { Ipcom_list next; Ipdhcpc6_if_server_t *server; } Ipdhcpc6_ia_server_t; /* IA offer strcuture */ typedef struct Ipdhcpc6_ia_offer { Ipdhcpc6_ia_server_t server; Ip_u8 preference; Ipdhcpc6_attr_ia_binding_t binding; } Ipdhcpc6_ia_offer_t; /* **************************************************************************** * 6 FUNCTIONS **************************************************************************** */ /* *=========================================================================== * ipdhcpc6_ia_set_context *=========================================================================== * Description: Set the context owning a particular IA * Parameters: iap - The IA * ifp - The context * Returns: * */ IP_GLOBAL Ip_bool ipdhcpc6_ia_set_context(Ipdhcpc6_ia_t *iap, struct Ipdhcpc6_if *ifp); /* *=========================================================================== * ipdhcpc6_ia_free *=========================================================================== * Description: Free an interface structure. * Parameters: iapp - [IN/OUT] Structure to free; pointer will be set * to NULL. * Returns: * */ IP_GLOBAL void ipdhcpc6_ia_free(Ipdhcpc6_ia_t **iapp); /* *=========================================================================== * ipdhcpc6_ia_hash_alloc *=========================================================================== * Description: Allocate the IA HASH for the interface. * Parameters: * Returns: The IA HASH tables * */ IP_GLOBAL Ipcom_hash **ipdhcpc6_ia_hash_alloc(void); /* *=========================================================================== * ipdhcpc6_ia_hash_free *=========================================================================== * Description: Free the IA hash table * Parameters: iahp - [IN/OUT] The Hash table array. Will be set to IP_NULL. * Returns: * */ IP_GLOBAL void ipdhcpc6_ia_hash_free(Ipcom_hash ***iahp); /* *=========================================================================== * ipdhcpc6_ia_list_alloc *=========================================================================== * Description: Allocate the IA LIST for the interface. * Parameters: * Returns: The IA LIST array * */ IP_GLOBAL Ipcom_list *ipdhcpc6_ia_list_alloc(void); /* *=========================================================================== * ipdhcpc6_ia_list_free *=========================================================================== * Description: Free the IA list array * Parameters: ialp - [IN/OUT] The IA list array. Will be set to IP_NULL * Returns: * */ IP_GLOBAL void ipdhcpc6_ia_list_free(Ipcom_list **ialp); /* *=========================================================================== * ipdhcpc6_ia_sysvar_hints *=========================================================================== * Description: Parse hints for addresses/prefixes in an IA * Parameters: iap - The IA we're parsing for. * tag - The tag we're looking in * hintsp - Where to store the hints * Returns: IP_TRUE if successful. * */ IP_GLOBAL Ip_bool ipdhcpc6_ia_sysvar_hints(Ipdhcpc6_ia_t *iap, Ipdhcpc6_attr_ia_binding_t *hintsp); /* *=========================================================================== * ipdhcpc6_ia_configure *=========================================================================== * Description: Read the IA's configured for this particular IFP * Parameters: IFP - The IFP. * Returns: IP_TRUE if successful * */ IP_GLOBAL Ip_bool ipdhcpc6_ia_configure(Ipdhcpc6_if_t *ifp); /* *=========================================================================== * ipdhcpc6_ia_lookup_by_iaid *=========================================================================== * Description: Find an IA based on type and IAID * Parameters: context - The DHCPC6 context * iatype - Type of IA * iaid - IAID * Returns: The IA if found. * */ IP_GLOBAL Ipdhcpc6_ia_t *ipdhcpc6_ia_lookup_by_iaid(Ipdhcpc6_context_t *context, Ip_u32 iatype, Ip_u32 iaid); /* *=========================================================================== * ipdhcpc6_ia_lookup_by_ianame *=========================================================================== * Description: Find an IA based on type and IANAME in a provided IF * Parameters: ifp - The interface * iatype - Type of IA * ianame - IA Name * Returns: The IA if found. * */ IP_GLOBAL Ipdhcpc6_ia_t *ipdhcpc6_ia_lookup_by_ianame(Ipdhcpc6_if_t *ifp, Ip_u32 iatype, const char *ianame); /* *=========================================================================== * ipdhcpc6_ia_lookup_by_iaobj *=========================================================================== * Description: Find an IA based on type and an identity block * Parameters: ifp - The interface * iaobj - The iaobj. * Returns: The IA if found. * */ IP_GLOBAL Ipdhcpc6_ia_t *ipdhcpc6_ia_lookup_by_iaobj(Ipdhcpc6_if_t *ifp, Ipdhcpc6_attr_ia_t *iaobj); /* *=========================================================================== * ipdhcpc6_ia_attr_header *=========================================================================== * Description: Add the identity blocks associated with an IA * Parameters: ia - The IA * buf - The buffer to add them in. * Returns: * */ IP_GLOBAL void ipdhcpc6_ia_attr_header(Ipdhcpc6_ia_t *ia, struct Ipdhcpc6_tagcomm_buffer *buf); /* *=========================================================================== * ipdhcpc6_ia_attr_bindings *=========================================================================== * Description: Add any hints to the buffer * Parameters: hints - The hints * buf - The buffer to add them in. * hints - Hints * Returns: * */ IP_GLOBAL void ipdhcpc6_ia_attr_bindings(Ipdhcpc6_attr_ia_binding_t *iab, Ipdhcpc6_tagcomm_buffer_t *buf, Ip_bool hints); /* *=========================================================================== * ipdhcpc6_ia_server_exists *=========================================================================== * Description: Does the server already existin the list * Parameters: head - The list * server - The server we're looking for. * Returns: IP_TRUE if yes. * */ IP_GLOBAL Ip_bool ipdhcpc6_ia_server_exists(Ipcom_list *head, Ipdhcpc6_if_server_t *server); /* *=========================================================================== * ipdhcpc6_ia_parse_iaaddr *=========================================================================== * Description: Parse and find all bindings in the IA options block. * Parameters: iab - The IA bindings attribute * options - The options block * size - size of the options block * Returns: * */ IP_GLOBAL void ipdhcpc6_ia_parse_iaaddr(Ipdhcpc6_attr_ia_binding_t *iab, Ip_u8 *options, Ip_size_t size); /* *=========================================================================== * ipdhcpc6_ia_set_binding_valid_timeout *=========================================================================== * Description: Set a timeout based on the valid values of the bindings. * Parameters: iap - The IAP * func - Timeout function * Returns: * */ IP_GLOBAL void ipdhcpc6_ia_set_binding_valid_timeout(Ipdhcpc6_ia_t *iap, Ipcom_tmo2_func func); /* *=========================================================================== * ipdhcpc6_ia_binding_lookup *=========================================================================== * Description: * Parameters: * Returns: * */ IP_GLOBAL Ipdhcpc6_attr_binding_t *ipdhcpc6_ia_binding_lookup(Ipdhcpc6_ia_t *ia, Ipdhcpc6_attr_binding_t *binding); /* *=========================================================================== * ipdhcpc6_ia_history_update *=========================================================================== * Description: Update the current history. * Parameters: ia - The IA to update the history for. * Returns: * */ IP_GLOBAL void ipdhcpc6_ia_history_update(Ipdhcpc6_ia_t *ia); /* *=========================================================================== * ipdhcpc6_ia_offer_free *=========================================================================== * Description: IA free * Parameters:offerp - offer pointer * Returns:None * */ IP_GLOBAL void ipdhcpc6_ia_offer_free(Ipdhcpc6_ia_offer_t **offerp); /* *=========================================================================== * ipdhcpc6_ia_set_running *=========================================================================== * Description: Set IA state as running * Parameters:ia - IA pointer * Returns: None * */ IP_GLOBAL void ipdhcpc6_ia_set_running(Ipdhcpc6_ia_t *ia); #ifdef __cplusplus } #endif #endif /* **************************************************************************** * END OF FILE **************************************************************************** */