mbed-os/features/nanostack/sal-stack-nanostack/source/6LoWPAN/ws/ws_pae_lib.h

272 lines
7.0 KiB
C

/*
* Copyright (c) 2018-2019, Arm Limited and affiliates.
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef WS_PAE_LIB_H_
#define WS_PAE_LIB_H_
typedef struct {
kmp_api_t *kmp; /**< KMP API */
bool timer_running; /**< Timer running inside KMP */
ns_list_link_t link; /**< Link */
} kmp_entry_t;
typedef NS_LIST_HEAD(kmp_entry_t, link) kmp_list_t;
typedef struct {
kmp_list_t kmp_list; /**< Ongoing KMP negotiations */
kmp_addr_t *addr; /**< EUI-64 (Relay IP address, Relay port) */
sec_prot_keys_t sec_keys; /**< Security keys */
uint32_t ticks; /**< Ticks */
bool active; /**< Is active */
ns_list_link_t link; /**< Link */
} supp_entry_t;
typedef NS_LIST_HEAD(supp_entry_t, link) supp_list_t;
/**
* ws_pae_lib_kmp_list_init initializes KMP list
*
* \param kmp_list KMP list
*
* \return < 0 failure
* \return >= 0 success
*
*/
void ws_pae_lib_kmp_list_init(kmp_list_t *kmp_list);
/**
* ws_pae_lib_kmp_list_add adds KMP to KMP list
*
* \param kmp_list KMP list
* \param kmp KMP
*
* \return KMP list entry on success
* \return NULL on failure
*
*/
kmp_entry_t *ws_pae_lib_kmp_list_add(kmp_list_t *kmp_list, kmp_api_t *kmp);
/**
* ws_pae_lib_kmp_list_delete deletes KMP from KMP list
*
* \param kmp_list KMP list
* \param kmp KMP
*
* \return < 0 failure
* \return >= 0 success
*
*/
int8_t ws_pae_lib_kmp_list_delete(kmp_list_t *kmp_list, kmp_api_t *kmp);
/**
* ws_pae_lib_kmp_list_free frees KMP list
*
* \param kmp_list KMP list
*
*/
void ws_pae_lib_kmp_list_free(kmp_list_t *kmp_list);
/**
* ws_pae_lib_kmp_list_type_get gets KMP entry from KMP list based on KMP type
*
* \param kmp_list KMP list
* \param type type
*
* \return KMP on success
* \return NULL on failure
*
*/
kmp_api_t *ws_pae_lib_kmp_list_type_get(kmp_list_t *kmp_list, kmp_type_e type);
/**
* ws_pae_lib_kmp_list_entry_get gets KMP entry from KMP list based on KMP
*
* \param kmp_list KMP list
* \param kmp KMP
*
* \return KMP list entry on success
* \return NULL on failure
*
*/
kmp_entry_t *ws_pae_lib_kmp_list_entry_get(kmp_list_t *kmp_list, kmp_api_t *kmp);
/**
* ws_pae_lib_kmp_timer_start starts KMP timer
*
* \param kmp_list KMP list
* \param entry KMP list entry
*
*/
void ws_pae_lib_kmp_timer_start(kmp_list_t *kmp_list, kmp_entry_t *entry);
/**
* ws_pae_lib_kmp_timer_stop stops KMP timer
*
* \param kmp_list KMP list
* \param entry KMP list entry
*
*/
void ws_pae_lib_kmp_timer_stop(kmp_list_t *kmp_list, kmp_entry_t *entry);
/**
* ws_pae_lib_kmp_timer_timeout KMP timer timeout callback
*
* \param kmp KMP
* \param ticks timer ticks
*
*/
typedef void ws_pae_lib_kmp_timer_timeout(kmp_api_t *kmp, uint16_t ticks);
/**
* ws_pae_lib_kmp_timer_update updates KMP timers on KMP list
*
* \param kmp_list KMP list
* \param ticks timer ticks
* \param timeout callback to call on timeout
*
* \return true KMP list has KMPs
* \return false no KMPs on KMP list
*
*/
bool ws_pae_lib_kmp_timer_update(kmp_list_t *kmp_list, uint16_t ticks, ws_pae_lib_kmp_timer_timeout timeout);
/**
* ws_pae_lib_supp_list_init initiates supplicant list
*
* \param supp_list supplicant list
*
*/
void ws_pae_lib_supp_list_init(supp_list_t *supp_list);
/**
* ws_pae_lib_supp_list_add adds entry to supplicant list
*
* \param supp_list supplicant list
* \param addr address
*
* \return supplicant list entry on success
* \return NULL on failure
*/
supp_entry_t *ws_pae_lib_supp_list_add(supp_list_t *supp_list, const kmp_addr_t *addr);
/**
* ws_pae_lib_supp_list_add removes entry from supplicant list
*
* \param supp_list supplicant list
* \param entry entry
*
* \return < 0 failure
* \return >= 0 success
*/
int8_t ws_pae_lib_supp_list_remove(supp_list_t *supp_list, supp_entry_t *entry);
/**
* ws_pae_lib_supp_list_entry_eui_64_get gets entry from supplicant list based on EUI-64
*
* \param supp_list supplicant list
* \param eui_64 EUI-64
*
* \return supplicant list entry on success
* \return NULL on failure
*/
supp_entry_t *ws_pae_lib_supp_list_entry_eui_64_get(const supp_list_t *supp_list, const uint8_t *eui_64);
/**
* ws_pae_lib_supp_list_delete deletes supplicant list
*
* \param supp_list supplicant list
*
*/
void ws_pae_lib_supp_list_delete(supp_list_t *supp_list);
/**
* ws_pae_lib_supp_list_timer_update updates timers on supplicant list
*
* \param active_supp_list list of active supplicants
* \param inactive_supp_list list of inactive supplicants
* \param ticks timer ticks
* \param timeout callback to call on timeout
*
* \return true timer needs still to be running
* \return false timer can be stopped
*/
bool ws_pae_lib_supp_list_timer_update(supp_list_t *active_supp_list, supp_list_t *inactive_supp_list, uint16_t ticks, ws_pae_lib_kmp_timer_timeout timeout);
/**
* ws_pae_lib_supp_list_timer_update updates supplicant timers
*
* \param entry supplicant entry
* \param ticks timer ticks
* \param timeout callback to call on timeout
*
* \return true timer needs still to be running
* \return false timer can be stopped
*/
bool ws_pae_lib_supp_timer_update(supp_entry_t *entry, uint16_t ticks, ws_pae_lib_kmp_timer_timeout timeout);
/**
* ws_pae_lib_supp_init initiates supplicant entry
*
* \param entry supplicant entry
*
*/
void ws_pae_lib_supp_init(supp_entry_t *entry);
/**
* ws_pae_lib_supp_delete deletes supplicant entry
*
* \param entry supplicant entry
*
*/
void ws_pae_lib_supp_delete(supp_entry_t *entry);
/**
* ws_pae_lib_supp_timer_ticks_set sets supplicant timer ticks
*
* \param entry supplicant entry
* \param ticks ticks
*
*/
void ws_pae_lib_supp_timer_ticks_set(supp_entry_t *entry, uint32_t ticks);
/**
* ws_pae_lib_supp_list_to_active move supplicant to active supplicants list
*
* \param active_supp_list list of active supplicants
* \param inactive_supp_list list of inactive supplicants
* \param entry supplicant entry
*
*/
void ws_pae_lib_supp_list_to_active(supp_list_t *active_supp_list, supp_list_t *inactive_supp_list, supp_entry_t *entry);
/**
* ws_pae_lib_supp_list_to_inactive move supplicant to inactive supplicants list
*
* \param active_supp_list list of active supplicants
* \param inactive_supp_list list of inactive supplicants
* \param entry supplicant entry
*
*/
void ws_pae_lib_supp_list_to_inactive(supp_list_t *active_supp_list, supp_list_t *inactive_supp_list, supp_entry_t *entry);
#endif /* WS_PAE_AUTH_H_ */