mbed-os/source/Service_Libs/nd_proxy/nd_proxy.h

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_ */