mirror of https://github.com/ARMmbed/mbed-os.git
156 lines
5.3 KiB
C
156 lines
5.3 KiB
C
/*
|
|
* Copyright (c) 2015-2018, 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 ND_PROXY_H_
|
|
#define ND_PROXY_H_
|
|
|
|
#ifdef HAVE_ND_PROXY
|
|
/**
|
|
* Validation callback for destination address validation or Upstream route onlink check
|
|
*
|
|
*\param interface_id Mesh interface Id
|
|
*\param address IPv6 address which need to validate
|
|
*
|
|
*\return 0 This address is behind this interface or Route is not onLink at Upstream
|
|
*\return <0 This address is not registered to this interface or this address is OnLink at this interface
|
|
*/
|
|
typedef int (nd_proxy_req_cb)(int8_t interface_id, uint8_t *address);
|
|
|
|
/**
|
|
* Inform Downstram Interface when proxy is enabled and disabled
|
|
*
|
|
*\param upstream_id Upstream interface id
|
|
*\param downstream_id Downstram Interface ID
|
|
*\param status True when proxy is is enabled and false when proxy is disabled
|
|
*
|
|
*\return 0 Process OK
|
|
*\return <0 Process not valid
|
|
*/
|
|
typedef int (bridge_state_update_cb)(int8_t upstream_id, int8_t downstream_id, bool status);
|
|
|
|
/**
|
|
* Register connected Downstram interface to nd proxy
|
|
*
|
|
* When Downstram Interface bootstrap interface is ready it can call this.
|
|
* After call proxy will connect this interfaces to all registered Upstream interface's.
|
|
*
|
|
*\param interface_id interface id
|
|
*\param nd_proxy_req function pointer for address validation (Must parameter)
|
|
*\param bridge_state_update function pointer for proxy notify Downstram interface when proxy is enabled and disabled
|
|
*
|
|
*\return 0 Register OK
|
|
*\return <0 Registeration fail
|
|
*/
|
|
int nd_proxy_downstream_interface_register(int8_t interface_id, nd_proxy_req_cb *nd_proxy_req, bridge_state_update_cb *bridge_state_update);
|
|
|
|
/**
|
|
* Remove connected Downstram interface from nd proxy
|
|
*
|
|
* This should call when interface close interface or loose connection.
|
|
* After call proxy remove connection from all connected proxy where interface is linked.
|
|
*
|
|
*\param interface_id interface id
|
|
*
|
|
*\return 0 Remove OK
|
|
*\return <0 Remove fail
|
|
*/
|
|
int nd_proxy_downstream_interface_unregister(int8_t interface_id);
|
|
|
|
/**
|
|
* Register Upstream interface to proxy
|
|
*
|
|
* When Mesh Interface bootstrap interface is ready it can call this
|
|
* After call proxy will connect all registered mesh interfaces to this interface.
|
|
*
|
|
*\param interface_id interface id
|
|
*
|
|
*\return 0 Remove OK
|
|
*\return <0 Remove fail
|
|
*/
|
|
int nd_proxy_upstream_interface_register(int8_t interface_id, nd_proxy_req_cb *route_validation_req);
|
|
/**
|
|
* Remove connected Upstream interface from nd proxy
|
|
*
|
|
* This should call when interface close interface or loose connection.
|
|
* After call proxy remove connection from all connected proxy where interface is linked.
|
|
*
|
|
*\param interface_id interface id
|
|
*
|
|
*\return 0 Remove OK
|
|
*\return <0 Remove fail
|
|
*/
|
|
int nd_proxy_upstream_interface_unregister(int8_t interface_id);
|
|
|
|
/**
|
|
* Upstream interface verify is proxy enabled for this interface
|
|
*
|
|
*\param interface_id interface id
|
|
*
|
|
*\return true Proxy is enabled
|
|
*\return false proxy is disabled
|
|
*/
|
|
bool nd_proxy_enabled_for_downstream(int8_t interface_id);
|
|
|
|
/**
|
|
* Downstream interface verify is proxy enabled for this interface
|
|
*
|
|
*\param interface_id interface id
|
|
*
|
|
*\return true Proxy is enabled
|
|
*\return false proxy is disabled
|
|
*/
|
|
bool nd_proxy_enabled_for_upstream(int8_t interface_id);
|
|
|
|
/**
|
|
* Upstream interface validate target address from proxy
|
|
*
|
|
*\param upstream_id interface id
|
|
*\param address target address for verify
|
|
*\param downstream_id_ptr pointer where proxy save mesh interface id where target is registered
|
|
*
|
|
*\return true Address validated behind downstream_id_ptr interface
|
|
*\return false Unknown address for this proxy
|
|
*/
|
|
bool nd_proxy_target_address_validation(int8_t upstream_id, uint8_t *address);
|
|
/**
|
|
* Downstream interface validate prefix route on Link status from connected Upstream interface
|
|
*
|
|
*\param downstream_id interface id
|
|
*\param address Validated route prefix
|
|
*
|
|
*\return true Route is On-link at Downstream mesh should remove current route
|
|
*\return false Route is not On-Link Downstream can add On-Link route
|
|
*/
|
|
bool nd_proxy_upstream_route_onlink(int8_t downstream_id, uint8_t *address);
|
|
|
|
#else
|
|
|
|
NS_DUMMY_DEFINITIONS_OK
|
|
|
|
#define nd_proxy_downstream_interface_register(interface_id, nd_proxy_req, bridge_state_update) -1
|
|
#define nd_proxy_downstream_interface_unregister(interface_id) -1
|
|
#define nd_proxy_upstream_interface_register(interface_id, route_validation_req) -1
|
|
#define nd_proxy_upstream_interface_unregister(interface_id) -1
|
|
#define nd_proxy_enabled_for_downstream(interface_id) false
|
|
#define nd_proxy_enabled_for_upstream(interface_id) false
|
|
#define nd_proxy_target_address_validation(upstream_id, address) false
|
|
#define nd_proxy_upstream_route_onlink(downstream_id, address) false
|
|
|
|
#endif /* HAVE_ND_PROXY */
|
|
|
|
#endif /* ND_PROXY_H_ */
|