RPL rank and forward errors

Currently when a packet with a Forward Error set in the Hop-by-Hop option is received by a RPL node, it is forwarded back to its originator. When such a packet reaches the Border Router it trigger a global repair. This means that any route error in the DAG will trigger a complete reconfiguration of the network, wasting a huge amount of energy as all the timer are reset and all the nodes must learn again their neighbourhood. In our testbed we have observed global repair triggered several times per hour.

As solution we have removed the forwarding of the packet with forward error flag set and instead we send back a No-Path DAO to remove the offending route on the originating node, this is as suggested by the RFC. On the BR router, the route is simply removed and the DIO timer is reset to trigger DAO from all the children.

Also, packets with the rank error flag set are currently forwarded, this is forbidden by the RFC (except for the first error as one hop rank errors are tolerated), instead the packet should be dropped and the DIO timer must be reset to refresh the nodes rank.

Please change into /* Packet cannot be forwarded. */