Kenji Arai / mbed-os_TYBLE16

Dependents:   TYBLE16_simple_data_logger TYBLE16_MP3_Air

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers nd_proxy.h Source File

nd_proxy.h

00001 /*
00002  * Copyright (c) 2015-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 #ifndef ND_PROXY_H_
00019 #define ND_PROXY_H_
00020 
00021 #ifdef HAVE_ND_PROXY
00022 /**
00023  * Validation callback for destination address validation or Upstream route onlink check
00024  *
00025  *\param interface_id Mesh interface Id
00026  *\param address IPv6 address which need to validate
00027  *
00028  *\return 0 This address is behind this interface or Route is not onLink at Upstream
00029  *\return <0 This address is not registered to this interface or this address is OnLink at this interface
00030  */
00031 typedef int (nd_proxy_req_cb)(int8_t interface_id, uint8_t *address);
00032 
00033 /**
00034  * Inform Downstram Interface when proxy is enabled and disabled
00035  *
00036  *\param upstream_id Upstream interface id
00037  *\param downstream_id Downstram Interface ID
00038  *\param status True when proxy is is enabled and false when proxy is disabled
00039  *
00040  *\return 0 Process OK
00041  *\return <0 Process not valid
00042  */
00043 typedef int (bridge_state_update_cb)(int8_t upstream_id, int8_t downstream_id, bool status);
00044 
00045 /**
00046  * Register connected Downstram interface to nd proxy
00047  *
00048  * When Downstram Interface bootstrap interface is ready it can call this.
00049  * After call proxy will connect this interfaces to all registered Upstream interface's.
00050  *
00051  *\param interface_id interface id
00052  *\param nd_proxy_req function pointer for address validation (Must parameter)
00053  *\param bridge_state_update function pointer for proxy notify Downstram interface when proxy is enabled and disabled
00054  *
00055  *\return 0 Register OK
00056  *\return <0 Registeration fail
00057  */
00058 int nd_proxy_downstream_interface_register(int8_t interface_id, nd_proxy_req_cb *nd_proxy_req, bridge_state_update_cb *bridge_state_update);
00059 
00060 /**
00061  * Remove connected Downstram interface from nd proxy
00062  *
00063  * This should call when interface close interface or loose connection.
00064  * After call proxy remove connection from all connected proxy where interface is linked.
00065  *
00066  *\param interface_id interface id
00067  *
00068  *\return 0 Remove OK
00069  *\return <0 Remove fail
00070  */
00071 int nd_proxy_downstream_interface_unregister(int8_t interface_id);
00072 
00073 /**
00074  * Register Upstream interface to proxy
00075  *
00076  * When Mesh Interface bootstrap interface is ready it can call this
00077  * After call proxy will connect all registered mesh interfaces to this interface.
00078  *
00079  *\param interface_id interface id
00080  *
00081  *\return 0 Remove OK
00082  *\return <0 Remove fail
00083  */
00084 int nd_proxy_upstream_interface_register(int8_t interface_id, nd_proxy_req_cb *route_validation_req);
00085 /**
00086  * Remove connected Upstream interface from nd proxy
00087  *
00088  * This should call when interface close interface or loose connection.
00089  * After call proxy remove connection from all connected proxy where interface is linked.
00090  *
00091  *\param interface_id interface id
00092  *
00093  *\return 0 Remove OK
00094  *\return <0 Remove fail
00095  */
00096 int nd_proxy_upstream_interface_unregister(int8_t interface_id);
00097 
00098 /**
00099  * Upstream interface verify is proxy enabled for this interface
00100  *
00101  *\param interface_id interface id
00102  *
00103  *\return true Proxy is enabled
00104  *\return false proxy is disabled
00105  */
00106 bool nd_proxy_enabled_for_downstream(int8_t interface_id);
00107 
00108 /**
00109  * Downstream interface verify is proxy enabled for this interface
00110  *
00111  *\param interface_id interface id
00112  *
00113  *\return true Proxy is enabled
00114  *\return false proxy is disabled
00115  */
00116 bool nd_proxy_enabled_for_upstream(int8_t interface_id);
00117 
00118 /**
00119  * Upstream interface validate target address from proxy
00120  *
00121  *\param upstream_id interface id
00122  *\param address target address for verify
00123  *\param downstream_id_ptr pointer where proxy save mesh interface id where target is registered
00124  *
00125  *\return true Address validated behind downstream_id_ptr interface
00126  *\return false Unknown address for this proxy
00127  */
00128 bool nd_proxy_target_address_validation(int8_t upstream_id, uint8_t *address);
00129 /**
00130  * Downstream interface validate prefix route on Link status from connected Upstream interface
00131  *
00132  *\param downstream_id interface id
00133  *\param address Validated route prefix
00134  *
00135  *\return true Route is On-link at Downstream mesh should remove current route
00136  *\return false Route is not On-Link Downstream can add On-Link route
00137  */
00138 bool nd_proxy_upstream_route_onlink(int8_t downstream_id, uint8_t *address);
00139 
00140 #else
00141 
00142 NS_DUMMY_DEFINITIONS_OK
00143 
00144 #define nd_proxy_downstream_interface_register(interface_id, nd_proxy_req, bridge_state_update) -1
00145 #define nd_proxy_downstream_interface_unregister(interface_id) -1
00146 #define nd_proxy_upstream_interface_register(interface_id, route_validation_req) -1
00147 #define nd_proxy_upstream_interface_unregister(interface_id) -1
00148 #define nd_proxy_enabled_for_downstream(interface_id) false
00149 #define nd_proxy_enabled_for_upstream(interface_id) false
00150 #define nd_proxy_target_address_validation(upstream_id, address) false
00151 #define nd_proxy_upstream_route_onlink(downstream_id, address) false
00152 
00153 #endif /* HAVE_ND_PROXY */
00154 
00155 #endif /* ND_PROXY_H_ */