takashi kadono / Mbed OS Nucleo_446

Dependencies:   ssd1331

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers protocol.h Source File

protocol.h

Go to the documentation of this file.
00001 /*
00002  * Copyright (c) 2014-2018, Arm Limited and affiliates.
00003  * SPDX-License-Identifier: Apache-2.0
00004  *
00005  * Licensed under the Apache License, Version 2.0 (the "License");
00006  * you may not use this file except in compliance with the License.
00007  * You may obtain a copy of the License at
00008  *
00009  *     http://www.apache.org/licenses/LICENSE-2.0
00010  *
00011  * Unless required by applicable law or agreed to in writing, software
00012  * distributed under the License is distributed on an "AS IS" BASIS,
00013  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00014  * See the License for the specific language governing permissions and
00015  * limitations under the License.
00016  */
00017 /**
00018  *
00019  * \file protocol.h
00020  * \brief Protocol support functions.
00021  *
00022  *  Protocol core support functions.
00023  *
00024  */
00025 
00026 #ifndef _NS_PROTOCOL_H
00027 #define _NS_PROTOCOL_H
00028 
00029 #ifndef _NANOSTACK_SOURCE_CONFIG_H
00030 #error "Why haven't you included config.h before all other headers?"
00031 #endif
00032 
00033 #include "NWK_INTERFACE/Include/protocol_abstract.h"
00034 
00035 // Users of protocol.h can assume it includes these headers
00036 #include "Core/include/address.h"
00037 #include "Core/include/ns_buffer.h"
00038 
00039 // Headers below this are implementation details - users of protocol.h shouldn't rely on them
00040 #include "6LoWPAN/IPHC_Decode/lowpan_context.h"
00041 #include "platform/arm_hal_phy.h"
00042 #include "net_nwk_scan.h"
00043 #include "net_interface.h"
00044 #include "multicast_api.h"
00045 #include "Service_Libs/Neighbor_cache/neighbor_table_definition.h"
00046 #include "Service_Libs/Trickle/trickle.h"
00047 #include "Service_Libs/pan_blacklist/pan_blacklist_api.h"
00048 #include "Service_Libs/mac_neighbor_table/mac_neighbor_table.h"
00049 #include "net_polling_api.h"
00050 #include "ipv6_stack/ipv6_routing_table.h"
00051 
00052 struct mlme_scan_s;
00053 struct mlme_scan_conf_s;
00054 struct mac_api_s;
00055 struct eth_mac_api_s;
00056 struct arm_device_driver_list;
00057 struct mlme_security_s;
00058 struct load_balance_api;
00059 struct nwk_wpan_nvm_api;
00060 
00061 #define SLEEP_MODE_REQ      0x80
00062 #define SLEEP_PERIOD_ACTIVE 0x40
00063 #define ICMP_ACTIVE         0x08
00064 
00065 extern void set_power_state(uint8_t mode);
00066 extern void clear_power_state(uint8_t mode);
00067 extern uint8_t check_power_state(uint8_t mode);
00068 
00069 #define BUFFER_DATA_FIXED_SIZE 0
00070 extern void protocol_push(buffer_t *buf);
00071 extern void protocol_init(void);
00072 extern void protocol_core_init(void);
00073 
00074 #define INTERFACE_BOOTSTRAP_DEFINED     1
00075 #define INTERFACE_SECURITY_DEFINED      2
00076 #define INTERFACE_NETWORK_DRIVER_SETUP_DEFINED      4
00077 #define INTERFACE_ND_BORDER_ROUTER_DEFINED      8
00078 
00079 
00080 #define INTERFACE_SETUP_MASK        3
00081 #define INTERFACE_SETUP_READY       3
00082 #define INTERFACE_SETUP_NETWORK_DRIVER_MASK         5
00083 #define INTERFACE_SETUP_NETWORK_DRIVER_READY        5
00084 
00085 #define INTERFACE_SETUP_BORDER_ROUTER_MASK          11
00086 #define INTERFACE_SETUP_BORDER_ROUTER_READY         11
00087 typedef enum icmp_state {
00088     ER_ACTIVE_SCAN  = 0,
00089     ER_WARM_ACTIVE_SCAN  = 1,
00090     ER_SCAN = 2,
00091     ER_ADDRESS_REQ = 3,
00092     ER_BIND_COMP = 4,
00093 #ifdef HAVE_RPL
00094     ER_RPL_MC       = 5,
00095     ER_RPL_SCAN     = 6,
00096     ER_RPL_UNICAST  = 7,
00097     ER_DAO_TX       = 8,
00098 #endif
00099     ER_PANA_AUTH    = 9,
00100     ER_PANA_AUTH_DONE   = 10,
00101     ER_PANA_AUTH_ERROR  = 11,
00102     ER_BIND_FAIL = 12,
00103     ER_MLE_LINK_REQ = 13,
00104     ER_MLE_LINK_SHORT_SYNCH = 14,
00105     ER_MLE_LINK_ADDRESS_SYNCH = 15,
00106 #ifdef HAVE_RPL
00107     ER_ROUTER_SYNCH = 17,
00108 #endif
00109     ER_PANA_PING = 18,
00110     ER_PARENT_SYNCH_LOST = 19,
00111     ER_MLE_SCAN = 20,
00112     ER_MLE_SYNCH = 21,
00113     ER_MLE_ATTACH_READY = 22,
00114     ER_DHCP_ROUTER_ID_REQ = 23,
00115     ER_DHCP_ROUTER_ID_RELEASE = 24,
00116     ER_CHILD_ID_REQ,
00117     ER_BOOTSRAP_DONE ,
00118     ER_BOOTSTRAP_CONNECTION_DOWN,
00119     ER_BOOTSTRAP_IP_ADDRESS_ALLOC_FAIL,
00120     ER_BOOTSTRAP_DAD_FAIL,
00121     ER_BOOTSTRAP_SCAN_FAIL,
00122     ER_BOOTSTRAP_LEADER_UP,
00123     ER_BOOTSTRAP_NEW_FRAGMENT_START,
00124     ER_RPL_LOCAL_REPAIR,
00125 } icmp_state_t;
00126 
00127 typedef enum {
00128     INTERFACE_IDLE = 0,
00129     INTERFACE_UP = 1
00130 } interface_mode_t;
00131 
00132 typedef enum arm_internal_event_type  {
00133     ARM_IN_TASKLET_INIT_EVENT = 0, /**< Tasklet Init come always when generate tasklet*/
00134     ARM_IN_NWK_INTERFACE_EVENT = 1, /**< Interface Bootstrap  or state update event */
00135     ARM_IN_PROTOCOL_TIMER_EVENT = 2, /*!*< System Timer event */
00136     ARM_IN_SOCKET_EVENT = 5,    /**< Interface Bootstrap  or state update event */
00137     ARM_IN_INTERFACE_BOOTSTRAP_CB, /** call net_bootsrap_cb_run */
00138     ARM_IN_INTERFACE_CORE_TIMER_CB, /** call net_bootsrap_cb_run */
00139     ARM_IN_INTERFACE_PROTOCOL_HANDLE, /** protocol_buffer_poll */
00140     ARM_IN_SECURITY_ECC_CALLER
00141 } arm_internal_event_type_e;
00142 
00143 typedef enum {
00144     ARM_NWK_BOOTSRAP_MODE_6LoWPAN_ROUTER = 0,
00145     ARM_NWK_BOOTSRAP_MODE_6LoWPAN_HOST,
00146     ARM_NWK_BOOTSRAP_MODE_6LoWPAN_SLEEPY_HOST,
00147     ARM_NWK_BOOTSRAP_MODE_6LoWPAN_BORDER_ROUTER,
00148     ARM_NWK_BOOTSRAP_MODE_6LoWPAN_RF_ACCESPOINT,
00149     ARM_NWK_BOOTSRAP_MODE_6LoWPAN_RF_SNIFFER,
00150     ARM_NWK_BOOTSRAP_MODE_ETHERNET_ROUTER,
00151     ARM_NWK_BOOTSRAP_MODE_ETHERNET_HOST,
00152 } arm_nwk_bootsrap_mode_e;
00153 
00154 typedef enum {
00155     ARM_NWK_IDLE_MODE = 0,
00156     ARM_NWK_GP_IP_MODE,
00157     ARM_NWK_LL_IP_MODE,
00158     ARM_NWK_MAC_MODE,
00159     ARM_NWK_RAW_PHY_MODE,
00160     ARM_NWK_SNIFFER_MODE,
00161 } arm_nwk_interface_mode_e;
00162 
00163 #define INTERFACE_NWK_BOOTSRAP_ADDRESS_REGISTER_READY   1
00164 #define INTERFACE_NWK_BOOTSRAP_ACTIVE                   2
00165 #define INTERFACE_NWK_BOOTSRAP_PANA_AUTHENTICATION      4
00166 #define INTERFACE_NWK_ACTIVE                            8
00167 #define INTERFACE_NWK_ROUTER_DEVICE                     16
00168 #define INTERFACE_NWK_CONF_MAC_RX_OFF_IDLE              64
00169 #define INTERFACE_NWK_BOOTSRAP_MLE                      128
00170 
00171 struct nd_router;
00172 struct nd_router_setup;
00173 
00174 typedef struct {
00175     channel_list_s      *chanlist;
00176     uint8_t             channel;
00177     int8_t              radio_tx_power;
00178     uint32_t            channel_list;
00179     uint16_t            mac_short_adr;
00180     uint16_t            mac_panid;
00181     uint8_t             border_router_gp_adr[16];
00182     bool                initActive;
00183     struct nd_router    *nd_nwk;
00184     struct nd_router_setup *nd_border_router_configure;
00185 } br_info_t;
00186 
00187 typedef struct nwk_scan_params {
00188     uint8_t energy_treshold;
00189     uint8_t nwk_scan_res_size;
00190     channel_list_s stack_chan_list;
00191     uint8_t scan_duration;
00192     nwk_pan_descriptor_t *nwk_response_info;
00193     nwk_pan_descriptor_t *nwk_cur_active;
00194     bool active_scan_active;
00195 } nwk_scan_params_t;
00196 
00197 typedef struct nwk_filter_params {
00198     uint8_t nwk_active_scan_level;
00199     uint8_t beacon_protocol_id_filter;
00200     uint16_t net_pan_id_filter;
00201     uint8_t   *beacon_nwk_id_filter;
00202 } nwk_filter_params_s;
00203 
00204 typedef struct mac_cordinator {
00205     unsigned cord_adr_mode:2;
00206     uint8_t mac_mlme_coord_address[8];
00207 } mac_cordinator_s;
00208 
00209 typedef struct arm_15_4_mac_parameters_t {
00210     /* Security API USE */
00211     unsigned mac_configured_sec_level:3;
00212     unsigned mac_security_level:3;
00213     unsigned mac_key_id_mode:2;
00214     uint8_t mac_prev_key_index;
00215     uint8_t mac_next_key_index;
00216     uint8_t mac_default_key_index;
00217     /* security mlme attribute */
00218     uint8_t mac_prev_key_attribute_id;
00219     uint8_t mac_default_key_attribute_id;
00220     uint8_t mac_next_key_attribute_id;
00221     uint32_t security_frame_counter;
00222     bool shortAdressValid:1;
00223     /* MAC PIB boolean */
00224     bool SecurityEnabled:1;
00225     bool RxOnWhenIdle:1;
00226     bool PromiscuousMode:1;
00227     bool GTSPermit:1;
00228     bool AssociationPermit:1;
00229     bool AssociatedPANCoord:1;
00230     bool TimestampSupported:1;
00231     bool BattLifeExt:1;
00232     bool AutoRequest:1;
00233     bool MacUnsusecured_2003_cab:1;
00234     /* MAC PIB boolean */
00235     channel_list_s mac_channel_list;
00236     uint8_t mac_channel;
00237     uint16_t pan_id;
00238     uint16_t mac_short_address;
00239     mac_cordinator_s mac_cordinator_info;
00240     uint8_t number_of_fhss_channel_retries;
00241     /* MAC Beacon info */
00242     uint8_t *mac_beacon_payload;
00243     uint8_t mac_beacon_payload_size;
00244     nwk_scan_params_t nwk_scan_params;
00245     nwk_filter_params_s nwk_filter_params;
00246     uint16_t mac_in_direct_entry_timeout;
00247     beacon_compare_rx_cb *beacon_compare_rx_cb_ptr;
00248     beacon_join_priority_tx_cb *beacon_join_priority_tx_cb_ptr;
00249     uint8_t (*beacon_ind)(uint8_t *ptr, uint8_t len, protocol_interface_info_entry_t *cur);
00250     mac_neighbor_table_t *mac_neighbor_table;
00251 }arm_15_4_mac_parameters_t;
00252 
00253 typedef void mac_poll_fail_cb(int8_t nwk_interface_id);
00254 
00255 typedef struct nwk_rfd_poll_setups {
00256     uint32_t nwk_app_poll_time;
00257     net_host_mode_t host_mode;
00258     uint32_t slow_poll_rate_seconds;
00259     uint32_t timeOutInSeconds;
00260     uint8_t nwk_parent_poll_fail;
00261     uint8_t protocol_poll;
00262     mlme_poll_t poll_req;
00263     bool pollActive:1;
00264     bool macDeepSleepEnabled:1;
00265     mac_poll_fail_cb *pollFailCb;
00266 } nwk_rfd_poll_setups_s;
00267 
00268 typedef struct nwk_pana_params{
00269     net_tls_cipher_e nwk_chipher_mode;
00270     net_pana_session_mode_e client_session_mode;
00271     uint32_t psk_key_id;
00272     uint8_t pana_client;
00273 } nwk_pana_params_s;
00274 
00275 typedef struct gp_ipv6_address_entry {
00276     uint8_t address[16];
00277     ns_list_link_t link;
00278 } gp_ipv6_address_entry_t;
00279 
00280 typedef NS_LIST_HEAD (gp_ipv6_address_entry_t, link) gp_ipv6_address_list_t;
00281 
00282 typedef struct if_6lowpan_dad_entry {
00283     uint8_t address[16];        // IPv6
00284     uint32_t state_timer;       // ticks to state change - used by DAD, then can be used by protocol
00285     uint8_t count;              // general count field - used by DAD, then can be used by protocol
00286     bool active;                // RFC 4941 temporary address
00287 } if_6lowpan_dad_entry_t;
00288 
00289 typedef struct if_6lowpan_security_info {
00290     nwk_pana_params_s *pana_params;
00291     net_link_layer_psk_security_info_s psk_key_info;
00292     uint32_t mle_security_frame_counter;
00293     net_6lowpan_link_layer_sec_mode_e nwk_security_mode;
00294     uint8_t security_level;
00295 } if_6lowpan_security_info_t;
00296 
00297 typedef enum {
00298     IPV6_LL_CONFIG,
00299     IPV6_ROUTER_SOLICATION,
00300     IPV6_GP_GEN,
00301     IPV6_GP_CONFIG,
00302     IPV6_READY,
00303     IPV6_DHCPV6_SOLICATION,
00304     IPV6_DHCPV6_ADDRESS_REQUEST,
00305     IPV6_DHCPV6_ADDRESS_REQ_FAIL,
00306     //IPV6_DHCPV6_PREFIX_READY
00307 } IPv6_ND_STATE;
00308 
00309 typedef struct {
00310     net_ipv6_mode_e ipv6_stack_mode;
00311     IPv6_ND_STATE IPv6_ND_state;
00312     net_ipv6_accept_ra_e accept_ra;
00313     uint8_t     wb_table_ttl;
00314     uint16_t    ND_TIMER;
00315     uint8_t     static_prefix64[8];
00316     uint8_t     routerSolicationRetryCounter;
00317     bool        temporaryUlaAddressState;
00318 } ipv6_interface_info_t;
00319 
00320 struct thread_info_s;
00321 struct ws_info_s;
00322 struct mesh_callbacks_s;
00323 struct auth_info;
00324 struct rpl_domain;
00325 
00326 /* Structure to keep track of timing of multicast adverts - potentially
00327  * multiple required: one for our own adverts in the interface structure below,
00328  * and one for each ABRO that we relay (in nd_router_t).
00329  */
00330 typedef struct ipv6_ra_timing {
00331     uint32_t rtr_adv_last_send_time;    // monotonic time
00332     uint8_t initial_rtr_adv_count;
00333 } ipv6_ra_timing_t;
00334 
00335 /**
00336  * @brief scan_confirm_cb Callback function for scanning results
00337  * @param if_id Protocol interface id
00338  * @param conf MLME-SCAN confirm object (ownership not passed)
00339  */
00340 typedef void scan_confirm_cb(int8_t if_id, const mlme_scan_conf_t* conf);
00341 typedef void beacon_indication_cb(int8_t if_id, const mlme_beacon_ind_t* conf);
00342 typedef void comm_status_indication_cb(int8_t if_id, const mlme_comm_status_t* status);
00343 
00344 
00345 struct protocol_interface_info_entry {
00346     beacon_indication_cb *beacon_cb;
00347     scan_confirm_cb *scan_cb;
00348     comm_status_indication_cb *comm_status_ind_cb;
00349     nwk_interface_id nwk_id;
00350     int8_t id;
00351     int8_t bootStrapId;
00352     uint8_t zone_index[16];
00353     int8_t net_start_tasklet;
00354     const char *interface_name;
00355     ns_list_link_t link;
00356     arm_nwk_bootsrap_mode_e bootsrap_mode;
00357     net_6lowpan_gp_address_mode_e lowpan_address_mode;
00358     arm_nwk_interface_mode_e nwk_mode;
00359     uint8_t configure_flags;
00360     uint8_t lowpan_info;
00361     uint16_t bootsrap_state_machine_cnt;
00362     icmp_state_t nwk_bootstrap_state;
00363     if_address_list_t ip_addresses;
00364     uint8_t ip_addresses_max_slaac_entries;
00365     if_group_list_t ip_groups;
00366 #ifdef MULTICAST_FORWARDING /* Conventional (non-MPL) forwarding */
00367     if_group_fwd_list_t ip_groups_fwd;
00368     uint8_t ip_mcast_fwd_for_scope;
00369 #endif
00370 #ifdef HAVE_MPL
00371     bool mpl_proactive_forwarding;
00372     multicast_mpl_seed_id_mode_e mpl_seed_id_mode;
00373     trickle_params_t mpl_data_trickle_params;
00374     trickle_params_t mpl_control_trickle_params;
00375     uint16_t mpl_seed_set_entry_lifetime;
00376     uint8_t mpl_seed_id[16];
00377 #endif
00378     if_6lowpan_dad_entry_t if_6lowpan_dad_process;
00379     lowpan_context_list_t lowpan_contexts;
00380     uint16_t lowpan_desired_short_address;
00381     bool global_address_available : 1;
00382     bool reallocate_short_address_if_duplicate : 1;
00383     bool iids_map_to_mac : 1;
00384     bool opaque_slaac_iids : 1;
00385     bool ip_multicast_as_mac_unicast_to_parent : 1;
00386     uint8_t dad_failures;
00387     ipv6_neighbour_cache_t ipv6_neighbour_cache;
00388     uint8_t nwk_rpl_scan_counter;
00389     uint8_t nwk_nd_re_scan_count;
00390 
00391     int8_t nwk_timer_id;
00392     uint16_t icmp_tokens; /* Token bucket for ICMP rate limiting */
00393     uint16_t icmp_ra_tokens; /* Token bucket for RA receive rate limiting */
00394     uint16_t mle_link_reject_tokens; /* Token bucket for Report wrong working device */
00395     uint8_t iid_eui64[8]; // IID based on EUI-64 - used for link-local address
00396     uint8_t iid_slaac[8]; // IID to use for SLAAC addresses - may or may not be same as iid_eui64
00397     uint16_t max_link_mtu;
00398     /* RFC 4861 Host Variables */
00399     uint8_t cur_hop_limit;
00400     uint16_t reachable_time_ttl;        // s
00401     uint32_t base_reachable_time;       // ms
00402 #ifdef HAVE_IPV6_ND
00403     bool recv_ra_routes : 1;
00404     bool recv_ra_prefixes: 1;
00405 #endif
00406     bool send_mld: 1;
00407 #ifdef HAVE_MPL
00408     bool mpl_seed: 1;
00409     bool mpl_treat_realm_domains_as_one: 1;
00410     bool mpl_auto_domain_on_group_join: 1;
00411 #endif
00412     /* RFC 4861 Router Variables */
00413     bool ip_forwarding : 1;
00414     bool ip_multicast_forwarding : 1;
00415 #ifndef NO_RADV_TX
00416     bool adv_send_advertisements : 1;
00417     bool rtr_adv_unicast_to_rs : 1;
00418     bool adv_copy_heard_flags : 1;
00419     uint8_t rtr_adv_flags;
00420     uint8_t max_ra_delay_time;          // 100ms ticks
00421     uint8_t min_delay_between_ras;      // 100ms ticks
00422     uint8_t max_initial_rtr_advertisements;
00423     uint16_t max_initial_rtr_adv_interval; // 100ms ticks
00424     uint8_t adv_cur_hop_limit;
00425     uint32_t adv_reachable_time;
00426     uint32_t adv_retrans_timer;
00427     uint16_t adv_link_mtu;
00428     uint16_t min_rtr_adv_interval;      // 100ms ticks
00429     uint16_t max_rtr_adv_interval;      // 100ms ticks
00430     ipv6_ra_timing_t ra_timing;
00431 #endif
00432     /* RFC 4862 Node Configuration */
00433     uint8_t dup_addr_detect_transmits;
00434     uint16_t pmtu_lifetime;             // s
00435 
00436     /* Link Layer Part */
00437     uint8_t mac[8]; // MAC address (EUI-64 for LoWPAN, EUI-48 for Ethernet)
00438 
00439     interface_mode_t interface_mode;
00440     ipv6_interface_info_t *ipv6_configure;
00441     struct auth_info *pana_sec_info_temp;
00442     br_info_t *border_router_setup;
00443     struct load_balance_api *lb_api;
00444     neigh_cache_s neigh_cache;
00445     pan_blaclist_cache_s pan_blaclist_cache;
00446     pan_coordinator_blaclist_cache_s pan_cordinator_black_list;
00447 #ifdef HAVE_THREAD
00448     struct thread_info_s *thread_info;
00449 #endif
00450 #ifdef HAVE_WS
00451     struct ws_info_s *ws_info;
00452 #endif
00453     struct rpl_domain *rpl_domain;
00454     struct mesh_callbacks_s *mesh_callbacks;
00455     if_6lowpan_security_info_t *if_lowpan_security_params; //Security Parameters
00456 
00457     struct mac_api_s *mac_api;
00458     arm_15_4_mac_parameters_t* mac_parameters;
00459 
00460     struct eth_mac_api_s *eth_mac_api;
00461 
00462     struct nwk_wpan_nvm_api *nwk_wpan_nvm_api;
00463     nwk_rfd_poll_setups_s *rfd_poll_info;
00464     struct arm_device_driver_list *dev_driver;
00465     int8_t (*if_down)(struct protocol_interface_info_entry *cur);
00466     int8_t (*if_up)(struct protocol_interface_info_entry *cur);
00467     void (*if_stack_buffer_handler)(buffer_t *);
00468     bool (*if_ns_transmit)(struct protocol_interface_info_entry *cur, ipv6_neighbour_t *neighCacheEntry, bool unicast, uint8_t seq);
00469     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);
00470     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);
00471     buffer_t *(*if_special_forwarding)(struct protocol_interface_info_entry *cur, buffer_t *buf, const sockaddr_t *ll_src, bool *bounce);
00472     void (*if_special_multicast_forwarding)(struct protocol_interface_info_entry *cur, buffer_t *buf);
00473     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);
00474     buffer_t *(*if_icmp_handler)(struct protocol_interface_info_entry *cur, buffer_t *buf, bool *bounce);
00475     uint8_t (*if_llao_parse)(struct protocol_interface_info_entry *cur, const uint8_t *opt_in, sockaddr_t *ll_addr_out);
00476     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);
00477     void (*mac_security_key_usage_update_cb)(struct protocol_interface_info_entry *cur, const struct mlme_security_s *security_params);
00478     uint16_t (*etx_read_override)(struct protocol_interface_info_entry *cur, addrtype_t addr_type, const uint8_t *addr_ptr);
00479 };
00480 
00481 typedef NS_LIST_HEAD (protocol_interface_info_entry_t, link) protocol_interface_list_t;
00482 
00483 extern protocol_interface_list_t protocol_interface_info_list;
00484 
00485 extern protocol_interface_info_entry_t *nwk_interface_get_ipv6_ptr(void);
00486 extern void nwk_interface_print_neigh_cache(route_print_fn_t *print_fn);
00487 extern void nwk_interface_flush_neigh_cache(void);
00488 
00489 //void nwk_interface_dhcp_process_callback(int8_t interfaceID, bool status,uint8_t * routerId,  dhcpv6_client_server_data_t *server, bool reply);
00490 
00491 void protocol_core_interface_info_reset(protocol_interface_info_entry_t *entry);
00492 
00493 extern void arm_net_protocol_packet_handler(buffer_t *buf, protocol_interface_info_entry_t *cur_interface);
00494 
00495 protocol_interface_info_entry_t *protocol_stack_interface_sleep_possibility(void);
00496 extern uint8_t nwk_bootsrap_ready(protocol_interface_info_entry_t *cur);
00497 
00498 extern protocol_interface_info_entry_t *protocol_stack_interface_info_get(nwk_interface_id nwk_id);
00499 extern bool nwk_interface_compare_mac_address(protocol_interface_info_entry_t *cur, uint_fast8_t addrlen, const uint8_t addr[/*addrlen*/]);
00500 extern protocol_interface_info_entry_t *protocol_stack_interface_generate_ethernet(struct eth_mac_api_s *api);
00501 extern protocol_interface_info_entry_t *protocol_stack_interface_generate_lowpan(struct mac_api_s *api);
00502 extern uint32_t protocol_stack_interface_set_reachable_time(protocol_interface_info_entry_t *cur, uint32_t base_reachable_time);
00503 extern void net_bootsrap_cb_run(uint8_t event);
00504 
00505 extern void protocol_core_security_tick_update(uint16_t tick_update);
00506 
00507 extern int8_t protocol_read_tasklet_id(void);
00508 extern void protocol_6lowpan_stack(buffer_t *b);
00509 extern void protocol_6lowpan_register_handlers(protocol_interface_info_entry_t *cur);
00510 extern void protocol_6lowpan_release_short_link_address_from_neighcache(protocol_interface_info_entry_t *cur, uint16_t shortAddress);
00511 extern void protocol_6lowpan_release_long_link_address_from_neighcache(protocol_interface_info_entry_t *cur, uint8_t *mac64);
00512 extern void protocol_core_dhcpv6_allocated_address_remove(protocol_interface_info_entry_t *cur, uint8_t *guaPrefix);
00513 
00514 extern void nwk_bootsrap_state_update(arm_nwk_interface_status_type_e posted_event, protocol_interface_info_entry_t *cur);
00515 void bootsrap_next_state_kick(icmp_state_t new_state, protocol_interface_info_entry_t *cur);
00516 int8_t protocol_interface_address_compare(const uint8_t *addr);
00517 #endif /* _NS_PROTOCOL_H */