.. _rpl-border-router-sample: RPL Border Router ################# Overview ******** The RPL border router sample application for Zephyr provides a HTTP(S) server and net shell for management purposes. Typically border router would be used to connect to IEEE 802.15.4 network but Bluetooth IPSP network functionality is also possible. The source code for this sample application can be found at: :file:`samples/net/rpl_border_router`. Requirements ************ - Real device like Freedom Board (FRDM-K64F) with MCR20A IEEE 802.15.4 support. - Linux machine with web browser and the screen terminal emulator (optional). - Ethernet access for management purposes (optional). Note that there is no support for running an RPL border router in QEMU, as the border router requires access to a real radio network technology such as IEEE 802.15.4, which is not available in QEMU. For testing purposes you can compile the RPL border router for QEMU and do some testing with the web UI. But with QEMU, it is not possible to connect to RPL network and get information about the RPL nodes. Building and Running ******************** By default, the integrated HTTP server is configured to listen at port 80. If you want to modify the HTTP server config options, please check the configuration settings in :file:`samples/net/rpl_border_router/src/main.c` file and also in the :file:`samples/net/rpl_border_router/src/config.h` file. This sample code supports both static and dynamic (DHCPv4) IP addresses that can be defined in the project configuration file: .. code-block:: console CONFIG_NET_APP_MY_IPV6_ADDR="2001:db8::1" CONFIG_NET_APP_MY_IPV4_ADDR="192.0.2.1" Note that the IPv4 address is only used for connection to the integrated web server that provides an admin web page for management purposes. The web server can also be connected using IPv6 address. If you do not have a web management network interface for your host computer, then IPv4 support can be disabled in the configuration file by setting :option:`CONFIG_NET_IPV4` to "n". The RPL router uses only IPv6 when routing the network traffic. Note that the default project configuration file :file:`samples/net/rpl_border_router/prj.conf` does not currently provide a working system as there are no boards that would provide suitable network interface support. The prj.conf file is provided only to compile test the border router sample application. It is possible to use the border router application with these boards and add-on cards: * `FRDM-K64F with Freescale CR20A card `_ You can build the application like this for CR20A: .. zephyr-app-commands:: :zephyr-app: samples/net/rpl_border_router :board: frdm_k64f :conf: prj_frdm_k64f_mcr20a.conf :goals: build flash :compact: By default, the RPL border router application enables net shell support and provides some useful commands for debugging and viewing the network status. The **br repair** command will cause the RPL network to re-configure itself. .. code-block:: console shell> br repair [rpl-br/shell] [INF] br_repair: Starting global repair... The **net rpl** command first prints out static compile time configuration settings. Then it prints information about runtime configuration of the system. .. code-block:: console shell> net rpl RPL Configuration ================= RPL mode : mesh Used objective function : MRHOF Used routing metric : none Mode of operation (MOP) : Storing, no mcast (MOP2) Send probes to nodes : disabled Max instances : 1 Max DAG / instance : 2 Min hop rank increment : 256 Initial link metric : 2 RPL preference value : 0 DAG grounded by default : no Default instance id : 30 (0x1e) Insert Hop-by-hop option : yes Specify DAG when sending DAO : yes DIO min interval : 12 (4096 ms) DIO doublings interval : 8 DIO redundancy value : 10 DAO sending timer value : 4 sec DAO max retransmissions : 4 Node expecting DAO ack : yes Send DIS periodically : yes DIS interval : 60 sec Default route lifetime unit : 65535 sec Default route lifetime : 255 Runtime status ============== Default instance (id 30) : 0xa80081e0 (active) Instance DAGs : [ 1]* fde3:2cda:3eea:4d14::1 prefix fde3:2cda:3eea:4d14::/64 rank 256/65535 ver 255 flags GJ parent 0x00000000 No parents found. The **net nbr** command prints information about currently found IPv6 neighbor nodes. In this example there are two leaf nodes that are part of this RPL network. .. code-block:: console shell> net nbr Neighbor Flags Interface State Remain Link Address [ 1] 0xa80065e0 1/0/1/0 0xa8007140 reachable 2920 00:12:4B:00:00:00:00:01 fe80::212:4b00:0:1 [ 2] 0xa8006660 1/0/1/0 0xa8007140 stale 0 00:12:4B:00:00:00:00:03 fe80::212:4b00:0:3 The **nbr route** command prints information about currently found IPv6 routes. In this example all the nodes are directly connected to this RPL border router root node. .. code-block:: console shell> net route IPv6 routes for interface 0xa8007140 ==================================== IPv6 prefix : fde3:2cda:3eea:4d14::212:4b00:0:3/128 neighbor : 0xa80065e0 link addr : 00:12:4B:00:00:00:00:03 IPv6 prefix : fde3:2cda:3eea:4d14::212:4b00:0:1/128 neighbor : 0xa8006660 link addr : 00:12:4B:00:00:00:00:01 The IEEE 802.15.4 shell support is enabled by default, so the **ieee15_4** command can be used to change the IEEE 802.15.4 network parameters such as used channel or PAN id, if needed. .. code-block:: console shell> ieee15_4 set_chan 15 Channel 15 set The border router sample application provides integrated HTTP(S) server. Currently the admin support is very rudimentary but you can try it by connecting to http://192.0.2.1 or http://[2001:db8::1] using web browser.