Gleb Klochkov / Mbed OS Climatcontroll_Main

Dependencies:   esp8266-driver

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