mirror of https://github.com/ARMmbed/mbed-os.git
527 lines
19 KiB
C
527 lines
19 KiB
C
/*
|
|
* Copyright (c) 2014-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.
|
|
*/
|
|
/**
|
|
*
|
|
* \file protocol.h
|
|
* \brief Protocol support functions.
|
|
*
|
|
* Protocol core support functions.
|
|
*
|
|
*/
|
|
|
|
#ifndef _NS_PROTOCOL_H
|
|
#define _NS_PROTOCOL_H
|
|
|
|
#ifndef _NANOSTACK_SOURCE_CONFIG_H
|
|
#error "Why haven't you included config.h before all other headers?"
|
|
#endif
|
|
|
|
#include "NWK_INTERFACE/Include/protocol_abstract.h"
|
|
|
|
// Users of protocol.h can assume it includes these headers
|
|
#include "Core/include/ns_address_internal.h"
|
|
#include "Core/include/ns_buffer.h"
|
|
|
|
// Headers below this are implementation details - users of protocol.h shouldn't rely on them
|
|
#include "6LoWPAN/IPHC_Decode/lowpan_context.h"
|
|
#include "platform/arm_hal_phy.h"
|
|
#include "net_nwk_scan.h"
|
|
#include "net_interface.h"
|
|
#include "multicast_api.h"
|
|
#include "Service_Libs/Neighbor_cache/neighbor_table_definition.h"
|
|
#include "Service_Libs/Trickle/trickle.h"
|
|
#include "Service_Libs/pan_blacklist/pan_blacklist_api.h"
|
|
#include "Service_Libs/mac_neighbor_table/mac_neighbor_table.h"
|
|
#include "net_polling_api.h"
|
|
#include "ipv6_stack/ipv6_routing_table.h"
|
|
|
|
struct mlme_scan_s;
|
|
struct mlme_scan_conf_s;
|
|
struct mac_api_s;
|
|
struct eth_mac_api_s;
|
|
struct arm_device_driver_list;
|
|
struct mlme_security_s;
|
|
struct load_balance_api;
|
|
struct nwk_wpan_nvm_api;
|
|
struct red_info_s;
|
|
|
|
#define SLEEP_MODE_REQ 0x80
|
|
#define SLEEP_PERIOD_ACTIVE 0x40
|
|
#define ICMP_ACTIVE 0x08
|
|
|
|
extern void set_power_state(uint8_t mode);
|
|
extern void clear_power_state(uint8_t mode);
|
|
extern uint8_t check_power_state(uint8_t mode);
|
|
|
|
#define BUFFER_DATA_FIXED_SIZE 0
|
|
extern void protocol_push(buffer_t *buf);
|
|
extern void protocol_init(void);
|
|
extern void protocol_core_init(void);
|
|
|
|
#define INTERFACE_BOOTSTRAP_DEFINED 1
|
|
#define INTERFACE_SECURITY_DEFINED 2
|
|
#define INTERFACE_NETWORK_DRIVER_SETUP_DEFINED 4
|
|
#define INTERFACE_ND_BORDER_ROUTER_DEFINED 8
|
|
|
|
|
|
#define INTERFACE_SETUP_MASK 3
|
|
#define INTERFACE_SETUP_READY 3
|
|
#define INTERFACE_SETUP_NETWORK_DRIVER_MASK 5
|
|
#define INTERFACE_SETUP_NETWORK_DRIVER_READY 5
|
|
|
|
#define INTERFACE_SETUP_BORDER_ROUTER_MASK 11
|
|
#define INTERFACE_SETUP_BORDER_ROUTER_READY 11
|
|
typedef enum icmp_state {
|
|
ER_ACTIVE_SCAN = 0,
|
|
ER_WARM_ACTIVE_SCAN = 1,
|
|
ER_SCAN = 2,
|
|
ER_ADDRESS_REQ = 3,
|
|
ER_BIND_COMP = 4,
|
|
#ifdef HAVE_RPL
|
|
ER_RPL_MC = 5,
|
|
ER_RPL_SCAN = 6,
|
|
ER_RPL_UNICAST = 7,
|
|
ER_DAO_TX = 8,
|
|
#endif
|
|
ER_PANA_AUTH = 9,
|
|
ER_PANA_AUTH_DONE = 10,
|
|
ER_PANA_AUTH_ERROR = 11,
|
|
ER_BIND_FAIL = 12,
|
|
ER_MLE_LINK_REQ = 13,
|
|
ER_MLE_LINK_SHORT_SYNCH = 14,
|
|
ER_MLE_LINK_ADDRESS_SYNCH = 15,
|
|
#ifdef HAVE_RPL
|
|
ER_ROUTER_SYNCH = 17,
|
|
#endif
|
|
ER_PANA_PING = 18,
|
|
ER_PARENT_SYNCH_LOST = 19,
|
|
ER_MLE_SCAN = 20,
|
|
ER_MLE_SYNCH = 21,
|
|
ER_MLE_ATTACH_READY = 22,
|
|
ER_DHCP_ROUTER_ID_REQ = 23,
|
|
ER_DHCP_ROUTER_ID_RELEASE = 24,
|
|
ER_CHILD_ID_REQ,
|
|
ER_BOOTSRAP_DONE,
|
|
ER_BOOTSTRAP_CONNECTION_DOWN,
|
|
ER_BOOTSTRAP_IP_ADDRESS_ALLOC_FAIL,
|
|
ER_BOOTSTRAP_DAD_FAIL,
|
|
ER_BOOTSTRAP_SCAN_FAIL,
|
|
ER_BOOTSTRAP_LEADER_UP,
|
|
ER_BOOTSTRAP_NEW_FRAGMENT_START,
|
|
ER_WAIT_RESTART,
|
|
ER_RPL_LOCAL_REPAIR,
|
|
} icmp_state_t;
|
|
|
|
typedef enum {
|
|
INTERFACE_IDLE = 0,
|
|
INTERFACE_UP = 1
|
|
} interface_mode_t;
|
|
|
|
typedef enum arm_internal_event_type {
|
|
ARM_IN_TASKLET_INIT_EVENT = 0, /**< Tasklet Init come always when generate tasklet*/
|
|
ARM_IN_NWK_INTERFACE_EVENT = 1, /**< Interface Bootstrap or state update event */
|
|
ARM_IN_PROTOCOL_TIMER_EVENT = 2, /*!*< System Timer event */
|
|
ARM_IN_SOCKET_EVENT = 5, /**< Interface Bootstrap or state update event */
|
|
ARM_IN_INTERFACE_BOOTSTRAP_CB, /** call net_bootsrap_cb_run */
|
|
ARM_IN_INTERFACE_CORE_TIMER_CB, /** call net_bootsrap_cb_run */
|
|
ARM_IN_INTERFACE_PROTOCOL_HANDLE, /** protocol_buffer_poll */
|
|
ARM_IN_SECURITY_ECC_CALLER
|
|
} arm_internal_event_type_e;
|
|
|
|
typedef enum {
|
|
ARM_NWK_BOOTSRAP_MODE_6LoWPAN_ROUTER = 0,
|
|
ARM_NWK_BOOTSRAP_MODE_6LoWPAN_HOST,
|
|
ARM_NWK_BOOTSRAP_MODE_6LoWPAN_SLEEPY_HOST,
|
|
ARM_NWK_BOOTSRAP_MODE_6LoWPAN_BORDER_ROUTER,
|
|
ARM_NWK_BOOTSRAP_MODE_6LoWPAN_RF_ACCESPOINT,
|
|
ARM_NWK_BOOTSRAP_MODE_6LoWPAN_RF_SNIFFER,
|
|
ARM_NWK_BOOTSRAP_MODE_ETHERNET_ROUTER,
|
|
ARM_NWK_BOOTSRAP_MODE_ETHERNET_HOST,
|
|
} arm_nwk_bootsrap_mode_e;
|
|
|
|
typedef enum {
|
|
ARM_NWK_IDLE_MODE = 0,
|
|
ARM_NWK_GP_IP_MODE,
|
|
ARM_NWK_LL_IP_MODE,
|
|
ARM_NWK_MAC_MODE,
|
|
ARM_NWK_RAW_PHY_MODE,
|
|
ARM_NWK_SNIFFER_MODE,
|
|
} arm_nwk_interface_mode_e;
|
|
|
|
#define INTERFACE_NWK_BOOTSRAP_ADDRESS_REGISTER_READY 1
|
|
#define INTERFACE_NWK_BOOTSRAP_ACTIVE 2
|
|
#define INTERFACE_NWK_BOOTSRAP_PANA_AUTHENTICATION 4
|
|
#define INTERFACE_NWK_ACTIVE 8
|
|
#define INTERFACE_NWK_ROUTER_DEVICE 16
|
|
#define INTERFACE_NWK_CONF_MAC_RX_OFF_IDLE 64
|
|
#define INTERFACE_NWK_BOOTSRAP_MLE 128
|
|
|
|
struct nd_router;
|
|
struct nd_router_setup;
|
|
|
|
typedef struct {
|
|
channel_list_s *chanlist;
|
|
uint8_t channel;
|
|
int8_t radio_tx_power;
|
|
uint32_t channel_list;
|
|
uint16_t mac_short_adr;
|
|
uint16_t mac_panid;
|
|
uint8_t border_router_gp_adr[16];
|
|
bool initActive;
|
|
struct nd_router *nd_nwk;
|
|
struct nd_router_setup *nd_border_router_configure;
|
|
} br_info_t;
|
|
|
|
typedef struct nwk_scan_params {
|
|
uint8_t energy_treshold;
|
|
uint8_t nwk_scan_res_size;
|
|
channel_list_s stack_chan_list;
|
|
uint8_t scan_duration;
|
|
nwk_pan_descriptor_t *nwk_response_info;
|
|
nwk_pan_descriptor_t *nwk_cur_active;
|
|
bool active_scan_active;
|
|
} nwk_scan_params_t;
|
|
|
|
typedef struct nwk_filter_params {
|
|
uint8_t nwk_active_scan_level;
|
|
uint8_t beacon_protocol_id_filter;
|
|
uint16_t net_pan_id_filter;
|
|
uint8_t *beacon_nwk_id_filter;
|
|
} nwk_filter_params_s;
|
|
|
|
typedef struct mac_cordinator {
|
|
unsigned cord_adr_mode: 2;
|
|
uint8_t mac_mlme_coord_address[8];
|
|
} mac_cordinator_s;
|
|
|
|
typedef struct arm_15_4_mac_parameters_t {
|
|
/* Security API USE */
|
|
unsigned mac_configured_sec_level: 3;
|
|
unsigned mac_security_level: 3;
|
|
unsigned mac_key_id_mode: 2;
|
|
uint8_t mac_prev_key_index;
|
|
uint8_t mac_next_key_index;
|
|
uint8_t mac_default_key_index;
|
|
/* security mlme attribute */
|
|
uint8_t mac_prev_key_attribute_id;
|
|
uint8_t mac_default_key_attribute_id;
|
|
uint8_t mac_next_key_attribute_id;
|
|
uint32_t security_frame_counter;
|
|
bool shortAdressValid: 1;
|
|
/* MAC PIB boolean */
|
|
bool SecurityEnabled: 1;
|
|
bool RxOnWhenIdle: 1;
|
|
bool PromiscuousMode: 1;
|
|
bool GTSPermit: 1;
|
|
bool AssociationPermit: 1;
|
|
bool AssociatedPANCoord: 1;
|
|
bool TimestampSupported: 1;
|
|
bool BattLifeExt: 1;
|
|
bool AutoRequest: 1;
|
|
bool MacUnsusecured_2003_cab: 1;
|
|
/* MAC PIB boolean */
|
|
channel_list_s mac_channel_list;
|
|
uint8_t mac_channel;
|
|
uint16_t pan_id;
|
|
uint16_t mac_short_address;
|
|
mac_cordinator_s mac_cordinator_info;
|
|
cca_threshold_table_s cca_thr_table;
|
|
uint8_t number_of_fhss_channel_retries;
|
|
/* MAC Beacon info */
|
|
uint8_t *mac_beacon_payload;
|
|
uint8_t mac_beacon_payload_size;
|
|
nwk_scan_params_t nwk_scan_params;
|
|
nwk_filter_params_s nwk_filter_params;
|
|
uint16_t mac_in_direct_entry_timeout;
|
|
beacon_compare_rx_cb *beacon_compare_rx_cb_ptr;
|
|
beacon_join_priority_tx_cb *beacon_join_priority_tx_cb_ptr;
|
|
uint8_t (*beacon_ind)(uint8_t *ptr, uint8_t len, protocol_interface_info_entry_t *cur);
|
|
mac_neighbor_table_t *mac_neighbor_table;
|
|
} arm_15_4_mac_parameters_t;
|
|
|
|
typedef void mac_poll_fail_cb(int8_t nwk_interface_id);
|
|
|
|
typedef struct nwk_rfd_poll_setups {
|
|
uint32_t nwk_app_poll_time;
|
|
net_host_mode_t host_mode;
|
|
uint32_t slow_poll_rate_seconds;
|
|
uint32_t timeOutInSeconds;
|
|
uint8_t nwk_parent_poll_fail;
|
|
uint8_t protocol_poll;
|
|
mlme_poll_t poll_req;
|
|
bool pollActive: 1;
|
|
bool macDeepSleepEnabled: 1;
|
|
mac_poll_fail_cb *pollFailCb;
|
|
} nwk_rfd_poll_setups_s;
|
|
|
|
typedef struct nwk_pana_params {
|
|
net_tls_cipher_e nwk_chipher_mode;
|
|
net_pana_session_mode_e client_session_mode;
|
|
uint32_t psk_key_id;
|
|
uint8_t pana_client;
|
|
} nwk_pana_params_s;
|
|
|
|
typedef struct gp_ipv6_address_entry {
|
|
uint8_t address[16];
|
|
ns_list_link_t link;
|
|
} gp_ipv6_address_entry_t;
|
|
|
|
typedef NS_LIST_HEAD(gp_ipv6_address_entry_t, link) gp_ipv6_address_list_t;
|
|
|
|
typedef struct if_6lowpan_dad_entry {
|
|
uint8_t address[16]; // IPv6
|
|
uint32_t state_timer; // ticks to state change - used by DAD, then can be used by protocol
|
|
uint8_t count; // general count field - used by DAD, then can be used by protocol
|
|
bool active; // RFC 4941 temporary address
|
|
} if_6lowpan_dad_entry_t;
|
|
|
|
typedef struct if_6lowpan_security_info {
|
|
nwk_pana_params_s *pana_params;
|
|
net_link_layer_psk_security_info_s psk_key_info;
|
|
uint32_t mle_security_frame_counter;
|
|
net_6lowpan_link_layer_sec_mode_e nwk_security_mode;
|
|
uint8_t security_level;
|
|
} if_6lowpan_security_info_t;
|
|
|
|
typedef enum {
|
|
IPV6_LL_CONFIG,
|
|
IPV6_ROUTER_SOLICATION,
|
|
IPV6_GP_GEN,
|
|
IPV6_GP_CONFIG,
|
|
IPV6_READY,
|
|
IPV6_DHCPV6_SOLICATION,
|
|
IPV6_DHCPV6_ADDRESS_REQUEST,
|
|
IPV6_DHCPV6_ADDRESS_REQ_FAIL,
|
|
//IPV6_DHCPV6_PREFIX_READY
|
|
} IPv6_ND_STATE;
|
|
|
|
typedef struct {
|
|
net_ipv6_mode_e ipv6_stack_mode;
|
|
IPv6_ND_STATE IPv6_ND_state;
|
|
net_ipv6_accept_ra_e accept_ra;
|
|
uint8_t wb_table_ttl;
|
|
uint16_t ND_TIMER;
|
|
uint8_t static_prefix64[8];
|
|
uint8_t routerSolicationRetryCounter;
|
|
bool temporaryUlaAddressState;
|
|
} ipv6_interface_info_t;
|
|
|
|
struct thread_info_s;
|
|
struct ws_info_s;
|
|
struct mesh_callbacks_s;
|
|
struct auth_info;
|
|
struct rpl_domain;
|
|
|
|
/* Structure to keep track of timing of multicast adverts - potentially
|
|
* multiple required: one for our own adverts in the interface structure below,
|
|
* and one for each ABRO that we relay (in nd_router_t).
|
|
*/
|
|
typedef struct ipv6_ra_timing {
|
|
uint32_t rtr_adv_last_send_time; // monotonic time
|
|
uint8_t initial_rtr_adv_count;
|
|
} ipv6_ra_timing_t;
|
|
|
|
/**
|
|
* @brief scan_confirm_cb Callback function for scanning results
|
|
* @param if_id Protocol interface id
|
|
* @param conf MLME-SCAN confirm object (ownership not passed)
|
|
*/
|
|
typedef void scan_confirm_cb(int8_t if_id, const mlme_scan_conf_t *conf);
|
|
typedef void beacon_indication_cb(int8_t if_id, const mlme_beacon_ind_t *conf);
|
|
typedef void comm_status_indication_cb(int8_t if_id, const mlme_comm_status_t *status);
|
|
|
|
|
|
struct protocol_interface_info_entry {
|
|
beacon_indication_cb *beacon_cb;
|
|
scan_confirm_cb *scan_cb;
|
|
comm_status_indication_cb *comm_status_ind_cb;
|
|
nwk_interface_id nwk_id;
|
|
int8_t id;
|
|
int8_t bootStrapId;
|
|
uint8_t zone_index[16];
|
|
int8_t net_start_tasklet;
|
|
const char *interface_name;
|
|
ns_list_link_t link;
|
|
arm_nwk_bootsrap_mode_e bootsrap_mode;
|
|
net_6lowpan_gp_address_mode_e lowpan_address_mode;
|
|
arm_nwk_interface_mode_e nwk_mode;
|
|
uint8_t configure_flags;
|
|
uint8_t lowpan_info;
|
|
uint16_t bootsrap_state_machine_cnt;
|
|
icmp_state_t nwk_bootstrap_state;
|
|
if_address_list_t ip_addresses;
|
|
uint8_t ip_addresses_max_slaac_entries;
|
|
if_group_list_t ip_groups;
|
|
#ifdef MULTICAST_FORWARDING /* Conventional (non-MPL) forwarding */
|
|
if_group_fwd_list_t ip_groups_fwd;
|
|
uint8_t ip_mcast_fwd_for_scope;
|
|
#endif
|
|
#ifdef HAVE_MPL
|
|
bool mpl_proactive_forwarding;
|
|
multicast_mpl_seed_id_mode_e mpl_seed_id_mode;
|
|
trickle_params_t mpl_data_trickle_params;
|
|
trickle_params_t mpl_control_trickle_params;
|
|
uint16_t mpl_seed_set_entry_lifetime;
|
|
uint8_t mpl_seed_id[16];
|
|
struct mpl_domain *mpl_domain;
|
|
#endif
|
|
if_6lowpan_dad_entry_t if_6lowpan_dad_process;
|
|
lowpan_context_list_t lowpan_contexts;
|
|
uint16_t lowpan_desired_short_address;
|
|
bool global_address_available : 1;
|
|
bool reallocate_short_address_if_duplicate : 1;
|
|
bool iids_map_to_mac : 1;
|
|
bool opaque_slaac_iids : 1;
|
|
bool ip_multicast_as_mac_unicast_to_parent : 1;
|
|
uint8_t dad_failures;
|
|
ipv6_neighbour_cache_t ipv6_neighbour_cache;
|
|
uint8_t nwk_rpl_scan_counter;
|
|
uint8_t nwk_nd_re_scan_count;
|
|
|
|
int8_t nwk_timer_id;
|
|
uint16_t icmp_tokens; /* Token bucket for ICMP rate limiting */
|
|
uint16_t icmp_ra_tokens; /* Token bucket for RA receive rate limiting */
|
|
uint16_t mle_link_reject_tokens; /* Token bucket for Report wrong working device */
|
|
uint8_t iid_eui64[8]; // IID based on EUI-64 - used for link-local address
|
|
uint8_t iid_slaac[8]; // IID to use for SLAAC addresses - may or may not be same as iid_eui64
|
|
uint16_t max_link_mtu;
|
|
/* RFC 4861 Host Variables */
|
|
uint8_t cur_hop_limit;
|
|
uint16_t reachable_time_ttl; // s
|
|
uint32_t base_reachable_time; // ms
|
|
#ifdef HAVE_IPV6_ND
|
|
bool recv_ra_routes : 1;
|
|
bool recv_ra_prefixes: 1;
|
|
#endif
|
|
bool send_mld: 1;
|
|
#ifdef HAVE_MPL
|
|
bool mpl_seed: 1;
|
|
bool mpl_treat_realm_domains_as_one: 1;
|
|
bool mpl_auto_domain_on_group_join: 1;
|
|
#endif
|
|
bool send_na : 1;
|
|
/* RFC 4861 Router Variables */
|
|
bool ip_forwarding : 1;
|
|
bool ip_multicast_forwarding : 1;
|
|
#ifndef NO_RADV_TX
|
|
bool adv_send_advertisements : 1;
|
|
bool rtr_adv_unicast_to_rs : 1;
|
|
bool adv_copy_heard_flags : 1;
|
|
uint8_t rtr_adv_flags;
|
|
uint8_t max_ra_delay_time; // 100ms ticks
|
|
uint8_t min_delay_between_ras; // 100ms ticks
|
|
uint8_t max_initial_rtr_advertisements;
|
|
uint16_t max_initial_rtr_adv_interval; // 100ms ticks
|
|
uint8_t adv_cur_hop_limit;
|
|
uint32_t adv_reachable_time;
|
|
uint32_t adv_retrans_timer;
|
|
uint16_t adv_link_mtu;
|
|
uint16_t min_rtr_adv_interval; // 100ms ticks
|
|
uint16_t max_rtr_adv_interval; // 100ms ticks
|
|
ipv6_ra_timing_t ra_timing;
|
|
#endif
|
|
/* RFC 4862 Node Configuration */
|
|
uint8_t dup_addr_detect_transmits;
|
|
uint16_t pmtu_lifetime; // s
|
|
|
|
/* Link Layer Part */
|
|
uint8_t mac[8]; // MAC address (EUI-64 for LoWPAN, EUI-48 for Ethernet)
|
|
|
|
interface_mode_t interface_mode;
|
|
ipv6_interface_info_t *ipv6_configure;
|
|
struct auth_info *pana_sec_info_temp;
|
|
br_info_t *border_router_setup;
|
|
struct load_balance_api *lb_api;
|
|
struct red_info_s *random_early_detection;
|
|
neigh_cache_s neigh_cache;
|
|
pan_blaclist_cache_s pan_blaclist_cache;
|
|
pan_coordinator_blaclist_cache_s pan_cordinator_black_list;
|
|
#ifdef HAVE_THREAD
|
|
struct thread_info_s *thread_info;
|
|
#endif
|
|
#ifdef HAVE_WS
|
|
struct ws_info_s *ws_info;
|
|
#endif
|
|
struct rpl_domain *rpl_domain;
|
|
struct mesh_callbacks_s *mesh_callbacks;
|
|
if_6lowpan_security_info_t *if_lowpan_security_params; //Security Parameters
|
|
|
|
struct mac_api_s *mac_api;
|
|
arm_15_4_mac_parameters_t *mac_parameters;
|
|
|
|
struct eth_mac_api_s *eth_mac_api;
|
|
|
|
struct nwk_wpan_nvm_api *nwk_wpan_nvm_api;
|
|
nwk_rfd_poll_setups_s *rfd_poll_info;
|
|
struct arm_device_driver_list *dev_driver;
|
|
int8_t (*if_down)(struct protocol_interface_info_entry *cur);
|
|
int8_t (*if_up)(struct protocol_interface_info_entry *cur);
|
|
void (*if_stack_buffer_handler)(buffer_t *);
|
|
bool (*if_ns_transmit)(struct protocol_interface_info_entry *cur, ipv6_neighbour_t *neighCacheEntry, bool unicast, uint8_t seq);
|
|
bool (*if_map_ip_to_link_addr)(struct protocol_interface_info_entry *cur, const uint8_t *ip_addr, addrtype_t *ll_type, const uint8_t **ll_addr_out);
|
|
bool (*if_map_link_addr_to_ip)(struct protocol_interface_info_entry *cur, addrtype_t ll_type, const uint8_t *ll_addr, uint8_t *ip_addr_out);
|
|
buffer_t *(*if_special_forwarding)(struct protocol_interface_info_entry *cur, buffer_t *buf, const sockaddr_t *ll_src, bool *bounce);
|
|
void (*if_special_multicast_forwarding)(struct protocol_interface_info_entry *cur, buffer_t *buf);
|
|
buffer_t *(*if_snoop)(struct protocol_interface_info_entry *cur, buffer_t *buf, const sockaddr_t *ll_dst, const sockaddr_t *ll_src, bool *bounce);
|
|
buffer_t *(*if_icmp_handler)(struct protocol_interface_info_entry *cur, buffer_t *buf, bool *bounce);
|
|
uint8_t (*if_llao_parse)(struct protocol_interface_info_entry *cur, const uint8_t *opt_in, sockaddr_t *ll_addr_out);
|
|
uint8_t (*if_llao_write)(struct protocol_interface_info_entry *cur, uint8_t *opt_out, uint8_t opt_type, bool must, const uint8_t *ip_addr);
|
|
void (*mac_security_key_usage_update_cb)(struct protocol_interface_info_entry *cur, const struct mlme_security_s *security_params);
|
|
uint16_t (*etx_read_override)(struct protocol_interface_info_entry *cur, addrtype_t addr_type, const uint8_t *addr_ptr);
|
|
};
|
|
|
|
typedef NS_LIST_HEAD(protocol_interface_info_entry_t, link) protocol_interface_list_t;
|
|
|
|
extern protocol_interface_list_t protocol_interface_info_list;
|
|
|
|
extern protocol_interface_info_entry_t *nwk_interface_get_ipv6_ptr(void);
|
|
extern void nwk_interface_print_neigh_cache(route_print_fn_t *print_fn);
|
|
extern void nwk_interface_flush_neigh_cache(void);
|
|
|
|
//void nwk_interface_dhcp_process_callback(int8_t interfaceID, bool status,uint8_t * routerId, dhcpv6_client_server_data_t *server, bool reply);
|
|
|
|
void protocol_core_interface_info_reset(protocol_interface_info_entry_t *entry);
|
|
|
|
extern void arm_net_protocol_packet_handler(buffer_t *buf, protocol_interface_info_entry_t *cur_interface);
|
|
|
|
protocol_interface_info_entry_t *protocol_stack_interface_sleep_possibility(void);
|
|
extern uint8_t nwk_bootsrap_ready(protocol_interface_info_entry_t *cur);
|
|
|
|
extern protocol_interface_info_entry_t *protocol_stack_interface_info_get(nwk_interface_id nwk_id);
|
|
extern bool nwk_interface_compare_mac_address(protocol_interface_info_entry_t *cur, uint_fast8_t addrlen, const uint8_t addr[/*addrlen*/]);
|
|
extern protocol_interface_info_entry_t *protocol_stack_interface_generate_ethernet(struct eth_mac_api_s *api);
|
|
extern protocol_interface_info_entry_t *protocol_stack_interface_generate_ppp(struct eth_mac_api_s *api);
|
|
extern protocol_interface_info_entry_t *protocol_stack_interface_generate_lowpan(struct mac_api_s *api);
|
|
extern uint32_t protocol_stack_interface_set_reachable_time(protocol_interface_info_entry_t *cur, uint32_t base_reachable_time);
|
|
extern void net_bootsrap_cb_run(uint8_t event);
|
|
|
|
extern void protocol_core_security_tick_update(uint16_t tick_update);
|
|
|
|
extern int8_t protocol_read_tasklet_id(void);
|
|
extern void protocol_6lowpan_stack(buffer_t *b);
|
|
extern void protocol_6lowpan_register_handlers(protocol_interface_info_entry_t *cur);
|
|
extern void protocol_6lowpan_release_short_link_address_from_neighcache(protocol_interface_info_entry_t *cur, uint16_t shortAddress);
|
|
extern void protocol_6lowpan_release_long_link_address_from_neighcache(protocol_interface_info_entry_t *cur, uint8_t *mac64);
|
|
extern void protocol_core_dhcpv6_allocated_address_remove(protocol_interface_info_entry_t *cur, uint8_t *guaPrefix);
|
|
|
|
extern void nwk_bootsrap_state_update(arm_nwk_interface_status_type_e posted_event, protocol_interface_info_entry_t *cur);
|
|
void bootsrap_next_state_kick(icmp_state_t new_state, protocol_interface_info_entry_t *cur);
|
|
int8_t protocol_interface_address_compare(const uint8_t *addr);
|
|
bool protocol_address_prefix_cmp(protocol_interface_info_entry_t *cur, const uint8_t *prefix, uint8_t prefix_len);
|
|
bool protocol_interface_any_address_match(const uint8_t *prefix, uint8_t prefix_len);
|
|
#endif /* _NS_PROTOCOL_H */
|