net: ipv6: add support for rpl sr exthdr

This patch adds rpl source routing receive handling. Everything works
only if sysconf "rpl_seg_enabled" and source routing is enabled. Mostly
the same behaviour as IPv6 segmentation routing. To handle compression
and uncompression a rpl.c file is created which contains the necessary
functionality. The receive handling will also care about IPv6
encapsulated so far it's specified as possible nexthdr in RFC 6554.

Signed-off-by: Alexander Aring <alex.aring@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Alexander Aring
2020-03-27 18:00:20 -04:00
committed by David S. Miller
parent f37c605936
commit 8610c7c6e3
7 changed files with 370 additions and 3 deletions

34
include/net/rpl.h Normal file
View File

@@ -0,0 +1,34 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* RPL implementation
*
* Author:
* (C) 2020 Alexander Aring <alex.aring@gmail.com>
*/
#ifndef _NET_RPL_H
#define _NET_RPL_H
#include <linux/rpl.h>
/* Worst decompression memory usage ipv6 address (16) + pad 7 */
#define IPV6_RPL_SRH_WORST_SWAP_SIZE (sizeof(struct in6_addr) + 7)
static inline size_t ipv6_rpl_srh_alloc_size(unsigned char n)
{
return sizeof(struct ipv6_rpl_sr_hdr) +
((n + 1) * sizeof(struct in6_addr));
}
size_t ipv6_rpl_srh_size(unsigned char n, unsigned char cmpri,
unsigned char cmpre);
void ipv6_rpl_srh_decompress(struct ipv6_rpl_sr_hdr *outhdr,
const struct ipv6_rpl_sr_hdr *inhdr,
const struct in6_addr *daddr, unsigned char n);
void ipv6_rpl_srh_compress(struct ipv6_rpl_sr_hdr *outhdr,
const struct ipv6_rpl_sr_hdr *inhdr,
const struct in6_addr *daddr, unsigned char n);
#endif /* _NET_RPL_H */