2017-06-10 12:35:39 +00:00
|
|
|
/*
|
|
|
|
* Copyright (c) 2010, Swedish Institute of Computer Science.
|
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
* Redistribution and use in source and binary forms, with or without
|
|
|
|
* modification, are permitted provided that the following conditions
|
|
|
|
* are met:
|
|
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer.
|
|
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
|
|
* documentation and/or other materials provided with the distribution.
|
|
|
|
* 3. Neither the name of the Institute nor the names of its contributors
|
|
|
|
* may be used to endorse or promote products derived from this software
|
|
|
|
* without specific prior written permission.
|
|
|
|
*
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
|
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
|
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
|
|
* SUCH DAMAGE.
|
|
|
|
*
|
|
|
|
* This file is part of the Contiki operating system.
|
|
|
|
*
|
2017-09-29 20:18:48 +00:00
|
|
|
* \ingroup net-layer
|
|
|
|
* \addtogroup rpl-lite
|
|
|
|
RPL-lite is a lightweight implementation of RPL tailored for reliability.
|
|
|
|
Supports only non-storing mode, one instance and one DAG.
|
|
|
|
* @{
|
|
|
|
*
|
2017-06-10 12:35:39 +00:00
|
|
|
* \file
|
|
|
|
* Public API declarations for RPL.
|
|
|
|
* \author
|
|
|
|
* Joakim Eriksson <joakime@sics.se> & Nicolas Tsiftes <nvt@sics.se>
|
|
|
|
* Simon Duquennoy <simon.duquennoy@inria.fr>
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef RPL_H
|
|
|
|
#define RPL_H
|
|
|
|
|
|
|
|
/********** Includes **********/
|
|
|
|
|
2017-09-22 13:06:44 +00:00
|
|
|
#include "net/ipv6/uip.h"
|
2017-12-09 12:55:57 +00:00
|
|
|
#include "net/routing/rpl-lite/rpl-const.h"
|
|
|
|
#include "net/routing/rpl-lite/rpl-conf.h"
|
|
|
|
#include "net/routing/rpl-lite/rpl-types.h"
|
|
|
|
#include "net/routing/rpl-lite/rpl-icmp6.h"
|
|
|
|
#include "net/routing/rpl-lite/rpl-dag.h"
|
|
|
|
#include "net/routing/rpl-lite/rpl-dag-root.h"
|
|
|
|
#include "net/routing/rpl-lite/rpl-neighbor.h"
|
|
|
|
#include "net/routing/rpl-lite/rpl-ext-header.h"
|
|
|
|
#include "net/routing/rpl-lite/rpl-timers.h"
|
2017-06-10 12:35:39 +00:00
|
|
|
|
|
|
|
/********** Public symbols **********/
|
|
|
|
|
|
|
|
/* The only instance */
|
|
|
|
extern rpl_instance_t curr_instance;
|
|
|
|
/* The RPL multicast address (used for DIS and DIO) */
|
|
|
|
extern uip_ipaddr_t rpl_multicast_addr;
|
|
|
|
|
|
|
|
/********** Public functions **********/
|
|
|
|
|
2017-06-24 09:46:37 +00:00
|
|
|
/**
|
|
|
|
* Called by lower layers after every packet transmission
|
|
|
|
*
|
|
|
|
* \param addr The link-layer addrress of the packet destination
|
2017-09-01 13:29:00 +00:00
|
|
|
* \param status The transmission status (see os/net/mac/mac.h)
|
2017-06-24 09:46:37 +00:00
|
|
|
* \param numtx The total number of transmission attempts
|
|
|
|
*/
|
|
|
|
void rpl_link_callback(const linkaddr_t *addr, int status, int numtx);
|
|
|
|
|
2017-06-10 12:35:39 +00:00
|
|
|
/**
|
|
|
|
* Set prefix from an prefix data structure (from DIO)
|
|
|
|
*
|
|
|
|
* \param prefix The prefix
|
|
|
|
* \return 1 if success, 0 otherwise
|
|
|
|
*/
|
|
|
|
int rpl_set_prefix(rpl_prefix_t *prefix);
|
|
|
|
/**
|
|
|
|
* Set prefix from an IPv6 address
|
|
|
|
*
|
|
|
|
* \param addr The prefix
|
|
|
|
* \param len The prefix length
|
|
|
|
* \param flags The DIO prefix flags
|
|
|
|
* \return 1 if success, 0 otherwise
|
|
|
|
*/
|
|
|
|
|
|
|
|
int rpl_set_prefix_from_addr(uip_ipaddr_t *addr, unsigned len, uint8_t flags);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Removes current prefx
|
|
|
|
*
|
|
|
|
* \param last_prefix The last prefix (which is to be removed)
|
|
|
|
*/
|
|
|
|
void rpl_reset_prefix(rpl_prefix_t *last_prefix);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get one of the node's global addresses
|
|
|
|
*
|
|
|
|
* \return A (constant) pointer to the global IPv6 address found.
|
|
|
|
* The pointer directs to the internals of DS6, should only be used
|
|
|
|
* in the current function's local scope
|
|
|
|
*/
|
|
|
|
const uip_ipaddr_t *rpl_get_global_address(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the RPL's best guess on if we are reachable via have downward route or not.
|
|
|
|
*
|
|
|
|
* \return 1 if we are reachable, 0 otherwise.
|
|
|
|
*/
|
|
|
|
int rpl_is_reachable(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Greater-than function for a lollipop counter
|
|
|
|
*
|
|
|
|
* \param a The first counter
|
|
|
|
* \param b The second counter
|
|
|
|
* \return 1 is a>b else 0
|
|
|
|
*/
|
|
|
|
int rpl_lollipop_greater_than(int a, int b);
|
|
|
|
|
2018-04-05 15:54:08 +00:00
|
|
|
/**
|
|
|
|
* Triggers a route fresh via DTSN increment
|
|
|
|
*
|
|
|
|
* \param str a textual description of the cause for refresh
|
|
|
|
*/
|
|
|
|
void rpl_refresh_routes(const char *str);
|
|
|
|
|
2017-06-10 12:35:39 +00:00
|
|
|
/** @} */
|
|
|
|
|
|
|
|
#endif /* RPL_H */
|