Some minor updates to the RIB library to fix issues found while reviewing and trying it out. Stephen Hemminger (3): rib: constify arguments rib: check for invalid max_nodes rib: add C++ include guard lib/librte_rib/rte_rib.c | 11 +++++------ lib/librte_rib/rte_rib.h | 17 +++++++++++++---- lib/librte_rib/rte_rib6.c | 13 +++++++------ lib/librte_rib/rte_rib6.h | 23 ++++++++++++++++------- 4 files changed, 41 insertions(+), 23 deletions(-) -- 2.26.2
The getter functions should take a constant pointer to make it clear that node is not modified. The rib create functions do not modify their config structure. Mark the config as constant so that programs can pass simple constant data. Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> --- lib/librte_rib/rte_rib.c | 8 ++++---- lib/librte_rib/rte_rib.h | 9 +++++---- lib/librte_rib/rte_rib6.c | 10 ++++++---- lib/librte_rib/rte_rib6.h | 13 +++++++------ 4 files changed, 22 insertions(+), 18 deletions(-) diff --git a/lib/librte_rib/rte_rib.c b/lib/librte_rib/rte_rib.c index 55d612dc2e27..e40cf715c099 100644 --- a/lib/librte_rib/rte_rib.c +++ b/lib/librte_rib/rte_rib.c @@ -342,7 +342,7 @@ rte_rib_insert(struct rte_rib *rib, uint32_t ip, uint8_t depth) } int -rte_rib_get_ip(struct rte_rib_node *node, uint32_t *ip) +rte_rib_get_ip(const struct rte_rib_node *node, uint32_t *ip) { if ((node == NULL) || (ip == NULL)) { rte_errno = EINVAL; @@ -353,7 +353,7 @@ rte_rib_get_ip(struct rte_rib_node *node, uint32_t *ip) } int -rte_rib_get_depth(struct rte_rib_node *node, uint8_t *depth) +rte_rib_get_depth(const struct rte_rib_node *node, uint8_t *depth) { if ((node == NULL) || (depth == NULL)) { rte_errno = EINVAL; @@ -370,7 +370,7 @@ rte_rib_get_ext(struct rte_rib_node *node) } int -rte_rib_get_nh(struct rte_rib_node *node, uint64_t *nh) +rte_rib_get_nh(const struct rte_rib_node *node, uint64_t *nh) { if ((node == NULL) || (nh == NULL)) { rte_errno = EINVAL; @@ -392,7 +392,7 @@ rte_rib_set_nh(struct rte_rib_node *node, uint64_t nh) } struct rte_rib * -rte_rib_create(const char *name, int socket_id, struct rte_rib_conf *conf) +rte_rib_create(const char *name, int socket_id, const struct rte_rib_conf *conf) { char mem_name[RTE_RIB_NAMESIZE]; struct rte_rib *rib = NULL; diff --git a/lib/librte_rib/rte_rib.h b/lib/librte_rib/rte_rib.h index 6b70de980a2c..a7daa9d8a76e 100644 --- a/lib/librte_rib/rte_rib.h +++ b/lib/librte_rib/rte_rib.h @@ -171,7 +171,7 @@ rte_rib_insert(struct rte_rib *rib, uint32_t ip, uint8_t depth); */ __rte_experimental int -rte_rib_get_ip(struct rte_rib_node *node, uint32_t *ip); +rte_rib_get_ip(const struct rte_rib_node *node, uint32_t *ip); /** * Get a depth from rte_rib_node @@ -186,7 +186,7 @@ rte_rib_get_ip(struct rte_rib_node *node, uint32_t *ip); */ __rte_experimental int -rte_rib_get_depth(struct rte_rib_node *node, uint8_t *depth); +rte_rib_get_depth(const struct rte_rib_node *node, uint8_t *depth); /** * Get ext field from the rib node @@ -215,7 +215,7 @@ rte_rib_get_ext(struct rte_rib_node *node); */ __rte_experimental int -rte_rib_get_nh(struct rte_rib_node *node, uint64_t *nh); +rte_rib_get_nh(const struct rte_rib_node *node, uint64_t *nh); /** * Set nexthop into the rib node @@ -247,7 +247,8 @@ rte_rib_set_nh(struct rte_rib_node *node, uint64_t nh); */ __rte_experimental struct rte_rib * -rte_rib_create(const char *name, int socket_id, struct rte_rib_conf *conf); +rte_rib_create(const char *name, int socket_id, + const struct rte_rib_conf *conf); /** * Find an existing RIB object and return a pointer to it. diff --git a/lib/librte_rib/rte_rib6.c b/lib/librte_rib/rte_rib6.c index 78b8dcfd94a9..02563b951620 100644 --- a/lib/librte_rib/rte_rib6.c +++ b/lib/librte_rib/rte_rib6.c @@ -399,7 +399,8 @@ rte_rib6_insert(struct rte_rib6 *rib, } int -rte_rib6_get_ip(struct rte_rib6_node *node, uint8_t ip[RTE_RIB6_IPV6_ADDR_SIZE]) +rte_rib6_get_ip(const struct rte_rib6_node *node, + uint8_t ip[RTE_RIB6_IPV6_ADDR_SIZE]) { if ((node == NULL) || (ip == NULL)) { rte_errno = EINVAL; @@ -410,7 +411,7 @@ rte_rib6_get_ip(struct rte_rib6_node *node, uint8_t ip[RTE_RIB6_IPV6_ADDR_SIZE]) } int -rte_rib6_get_depth(struct rte_rib6_node *node, uint8_t *depth) +rte_rib6_get_depth(const struct rte_rib6_node *node, uint8_t *depth) { if ((node == NULL) || (depth == NULL)) { rte_errno = EINVAL; @@ -427,7 +428,7 @@ rte_rib6_get_ext(struct rte_rib6_node *node) } int -rte_rib6_get_nh(struct rte_rib6_node *node, uint64_t *nh) +rte_rib6_get_nh(const struct rte_rib6_node *node, uint64_t *nh) { if ((node == NULL) || (nh == NULL)) { rte_errno = EINVAL; @@ -449,7 +450,8 @@ rte_rib6_set_nh(struct rte_rib6_node *node, uint64_t nh) } struct rte_rib6 * -rte_rib6_create(const char *name, int socket_id, struct rte_rib6_conf *conf) +rte_rib6_create(const char *name, int socket_id, + const struct rte_rib6_conf *conf) { char mem_name[RTE_RIB6_NAMESIZE]; struct rte_rib6 *rib = NULL; diff --git a/lib/librte_rib/rte_rib6.h b/lib/librte_rib/rte_rib6.h index 871457138d7b..e6b4b7fff98c 100644 --- a/lib/librte_rib/rte_rib6.h +++ b/lib/librte_rib/rte_rib6.h @@ -70,7 +70,7 @@ rte_rib6_copy_addr(uint8_t *dst, const uint8_t *src) * 0 otherwise */ static inline int -rte_rib6_is_equal(uint8_t *ip1, uint8_t *ip2) { +rte_rib6_is_equal(const uint8_t *ip1, const uint8_t *ip2) { int i; if ((ip1 == NULL) || (ip2 == NULL)) @@ -227,8 +227,8 @@ rte_rib6_insert(struct rte_rib6 *rib, */ __rte_experimental int -rte_rib6_get_ip(struct rte_rib6_node *node, - uint8_t ip[RTE_RIB6_IPV6_ADDR_SIZE]); +rte_rib6_get_ip(const struct rte_rib6_node *node, + uint8_t ip[RTE_RIB6_IPV6_ADDR_SIZE]); /** * Get a depth from rte_rib6_node @@ -243,7 +243,7 @@ rte_rib6_get_ip(struct rte_rib6_node *node, */ __rte_experimental int -rte_rib6_get_depth(struct rte_rib6_node *node, uint8_t *depth); +rte_rib6_get_depth(const struct rte_rib6_node *node, uint8_t *depth); /** * Get ext field from the rte_rib6_node @@ -272,7 +272,7 @@ rte_rib6_get_ext(struct rte_rib6_node *node); */ __rte_experimental int -rte_rib6_get_nh(struct rte_rib6_node *node, uint64_t *nh); +rte_rib6_get_nh(const struct rte_rib6_node *node, uint64_t *nh); /** * Set nexthop into the rte_rib6_node @@ -304,7 +304,8 @@ rte_rib6_set_nh(struct rte_rib6_node *node, uint64_t nh); */ __rte_experimental struct rte_rib6 * -rte_rib6_create(const char *name, int socket_id, struct rte_rib6_conf *conf); +rte_rib6_create(const char *name, int socket_id, + const struct rte_rib6_conf *conf); /** * Find an existing RIB object and return a pointer to it. -- 2.26.2
Max_nodes in config is signed, but a negative value makes no sense. Get rid of extra BSD style parens. Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> --- lib/librte_rib/rte_rib.c | 3 +-- lib/librte_rib/rte_rib6.c | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/librte_rib/rte_rib.c b/lib/librte_rib/rte_rib.c index e40cf715c099..2a370d7f8439 100644 --- a/lib/librte_rib/rte_rib.c +++ b/lib/librte_rib/rte_rib.c @@ -401,8 +401,7 @@ rte_rib_create(const char *name, int socket_id, const struct rte_rib_conf *conf) struct rte_mempool *node_pool; /* Check user arguments. */ - if ((name == NULL) || (conf == NULL) || - (conf->max_nodes == 0)) { + if (name == NULL || conf == NULL || conf->max_nodes <= 0) { rte_errno = EINVAL; return NULL; } diff --git a/lib/librte_rib/rte_rib6.c b/lib/librte_rib/rte_rib6.c index 02563b951620..f6c55ee454be 100644 --- a/lib/librte_rib/rte_rib6.c +++ b/lib/librte_rib/rte_rib6.c @@ -460,8 +460,7 @@ rte_rib6_create(const char *name, int socket_id, struct rte_mempool *node_pool; /* Check user arguments. */ - if ((name == NULL) || (conf == NULL) || - (conf->max_nodes == 0)) { + if (name == NULL || conf == NULL || conf->max_nodes <= 0) { rte_errno = EINVAL; return NULL; } -- 2.26.2
All include files should be safe from C++ Fixes: 5a5793a5ffa2 ("rib: add RIB library") Fixes: f7e861e21c46 ("rib: support IPv6") Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> --- lib/librte_rib/rte_rib.h | 8 ++++++++ lib/librte_rib/rte_rib6.h | 10 +++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/librte_rib/rte_rib.h b/lib/librte_rib/rte_rib.h index a7daa9d8a76e..e9ffefce6edd 100644 --- a/lib/librte_rib/rte_rib.h +++ b/lib/librte_rib/rte_rib.h @@ -13,6 +13,10 @@ #include <rte_compat.h> +#ifdef __cplusplus +extern "C" { +#endif + /** * rte_rib_get_nxt() flags */ @@ -275,4 +279,8 @@ __rte_experimental void rte_rib_free(struct rte_rib *rib); +#ifdef __cplusplus +} +#endif + #endif /* _RTE_RIB_H_ */ diff --git a/lib/librte_rib/rte_rib6.h b/lib/librte_rib/rte_rib6.h index e6b4b7fff98c..68eaa8aa4812 100644 --- a/lib/librte_rib/rte_rib6.h +++ b/lib/librte_rib/rte_rib6.h @@ -14,6 +14,10 @@ #include <rte_memcpy.h> #include <rte_compat.h> +#ifdef __cplusplus +extern "C" { +#endif + #define RTE_RIB6_IPV6_ADDR_SIZE 16 /** @@ -332,4 +336,8 @@ __rte_experimental void rte_rib6_free(struct rte_rib6 *rib); -#endif /* _RTE_RIB_H_ */ +#ifdef __cplusplus +} +#endif + +#endif /* _RTE_RIB6_H_ */ -- 2.26.2
On 25/06/2020 21:32, Stephen Hemminger wrote:
> The getter functions should take a constant pointer
> to make it clear that node is not modified.
>
> The rib create functions do not modify their config structure.
> Mark the config as constant so that programs can pass
> simple constant data.
>
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> ---
> lib/librte_rib/rte_rib.c | 8 ++++----
> lib/librte_rib/rte_rib.h | 9 +++++----
> lib/librte_rib/rte_rib6.c | 10 ++++++----
> lib/librte_rib/rte_rib6.h | 13 +++++++------
> 4 files changed, 22 insertions(+), 18 deletions(-)
>
> diff --git a/lib/librte_rib/rte_rib.c b/lib/librte_rib/rte_rib.c
> index 55d612dc2e27..e40cf715c099 100644
> --- a/lib/librte_rib/rte_rib.c
> +++ b/lib/librte_rib/rte_rib.c
> @@ -342,7 +342,7 @@ rte_rib_insert(struct rte_rib *rib, uint32_t ip, uint8_t depth)
> }
>
> int
> -rte_rib_get_ip(struct rte_rib_node *node, uint32_t *ip)
> +rte_rib_get_ip(const struct rte_rib_node *node, uint32_t *ip)
> {
> if ((node == NULL) || (ip == NULL)) {
> rte_errno = EINVAL;
> @@ -353,7 +353,7 @@ rte_rib_get_ip(struct rte_rib_node *node, uint32_t *ip)
> }
>
> int
> -rte_rib_get_depth(struct rte_rib_node *node, uint8_t *depth)
> +rte_rib_get_depth(const struct rte_rib_node *node, uint8_t *depth)
> {
> if ((node == NULL) || (depth == NULL)) {
> rte_errno = EINVAL;
> @@ -370,7 +370,7 @@ rte_rib_get_ext(struct rte_rib_node *node)
> }
>
> int
> -rte_rib_get_nh(struct rte_rib_node *node, uint64_t *nh)
> +rte_rib_get_nh(const struct rte_rib_node *node, uint64_t *nh)
> {
> if ((node == NULL) || (nh == NULL)) {
> rte_errno = EINVAL;
> @@ -392,7 +392,7 @@ rte_rib_set_nh(struct rte_rib_node *node, uint64_t nh)
> }
>
> struct rte_rib *
> -rte_rib_create(const char *name, int socket_id, struct rte_rib_conf *conf)
> +rte_rib_create(const char *name, int socket_id, const struct rte_rib_conf *conf)
> {
> char mem_name[RTE_RIB_NAMESIZE];
> struct rte_rib *rib = NULL;
> diff --git a/lib/librte_rib/rte_rib.h b/lib/librte_rib/rte_rib.h
> index 6b70de980a2c..a7daa9d8a76e 100644
> --- a/lib/librte_rib/rte_rib.h
> +++ b/lib/librte_rib/rte_rib.h
> @@ -171,7 +171,7 @@ rte_rib_insert(struct rte_rib *rib, uint32_t ip, uint8_t depth);
> */
> __rte_experimental
> int
> -rte_rib_get_ip(struct rte_rib_node *node, uint32_t *ip);
> +rte_rib_get_ip(const struct rte_rib_node *node, uint32_t *ip);
>
> /**
> * Get a depth from rte_rib_node
> @@ -186,7 +186,7 @@ rte_rib_get_ip(struct rte_rib_node *node, uint32_t *ip);
> */
> __rte_experimental
> int
> -rte_rib_get_depth(struct rte_rib_node *node, uint8_t *depth);
> +rte_rib_get_depth(const struct rte_rib_node *node, uint8_t *depth);
>
> /**
> * Get ext field from the rib node
> @@ -215,7 +215,7 @@ rte_rib_get_ext(struct rte_rib_node *node);
> */
> __rte_experimental
> int
> -rte_rib_get_nh(struct rte_rib_node *node, uint64_t *nh);
> +rte_rib_get_nh(const struct rte_rib_node *node, uint64_t *nh);
>
> /**
> * Set nexthop into the rib node
> @@ -247,7 +247,8 @@ rte_rib_set_nh(struct rte_rib_node *node, uint64_t nh);
> */
> __rte_experimental
> struct rte_rib *
> -rte_rib_create(const char *name, int socket_id, struct rte_rib_conf *conf);
> +rte_rib_create(const char *name, int socket_id,
> + const struct rte_rib_conf *conf);
>
> /**
> * Find an existing RIB object and return a pointer to it.
> diff --git a/lib/librte_rib/rte_rib6.c b/lib/librte_rib/rte_rib6.c
> index 78b8dcfd94a9..02563b951620 100644
> --- a/lib/librte_rib/rte_rib6.c
> +++ b/lib/librte_rib/rte_rib6.c
> @@ -399,7 +399,8 @@ rte_rib6_insert(struct rte_rib6 *rib,
> }
>
> int
> -rte_rib6_get_ip(struct rte_rib6_node *node, uint8_t ip[RTE_RIB6_IPV6_ADDR_SIZE])
> +rte_rib6_get_ip(const struct rte_rib6_node *node,
> + uint8_t ip[RTE_RIB6_IPV6_ADDR_SIZE])
> {
> if ((node == NULL) || (ip == NULL)) {
> rte_errno = EINVAL;
> @@ -410,7 +411,7 @@ rte_rib6_get_ip(struct rte_rib6_node *node, uint8_t ip[RTE_RIB6_IPV6_ADDR_SIZE])
> }
>
> int
> -rte_rib6_get_depth(struct rte_rib6_node *node, uint8_t *depth)
> +rte_rib6_get_depth(const struct rte_rib6_node *node, uint8_t *depth)
> {
> if ((node == NULL) || (depth == NULL)) {
> rte_errno = EINVAL;
> @@ -427,7 +428,7 @@ rte_rib6_get_ext(struct rte_rib6_node *node)
> }
>
> int
> -rte_rib6_get_nh(struct rte_rib6_node *node, uint64_t *nh)
> +rte_rib6_get_nh(const struct rte_rib6_node *node, uint64_t *nh)
> {
> if ((node == NULL) || (nh == NULL)) {
> rte_errno = EINVAL;
> @@ -449,7 +450,8 @@ rte_rib6_set_nh(struct rte_rib6_node *node, uint64_t nh)
> }
>
> struct rte_rib6 *
> -rte_rib6_create(const char *name, int socket_id, struct rte_rib6_conf *conf)
> +rte_rib6_create(const char *name, int socket_id,
> + const struct rte_rib6_conf *conf)
> {
> char mem_name[RTE_RIB6_NAMESIZE];
> struct rte_rib6 *rib = NULL;
> diff --git a/lib/librte_rib/rte_rib6.h b/lib/librte_rib/rte_rib6.h
> index 871457138d7b..e6b4b7fff98c 100644
> --- a/lib/librte_rib/rte_rib6.h
> +++ b/lib/librte_rib/rte_rib6.h
> @@ -70,7 +70,7 @@ rte_rib6_copy_addr(uint8_t *dst, const uint8_t *src)
> * 0 otherwise
> */
> static inline int
> -rte_rib6_is_equal(uint8_t *ip1, uint8_t *ip2) {
> +rte_rib6_is_equal(const uint8_t *ip1, const uint8_t *ip2) {
> int i;
>
> if ((ip1 == NULL) || (ip2 == NULL))
> @@ -227,8 +227,8 @@ rte_rib6_insert(struct rte_rib6 *rib,
> */
> __rte_experimental
> int
> -rte_rib6_get_ip(struct rte_rib6_node *node,
> - uint8_t ip[RTE_RIB6_IPV6_ADDR_SIZE]);
> +rte_rib6_get_ip(const struct rte_rib6_node *node,
> + uint8_t ip[RTE_RIB6_IPV6_ADDR_SIZE]);
>
> /**
> * Get a depth from rte_rib6_node
> @@ -243,7 +243,7 @@ rte_rib6_get_ip(struct rte_rib6_node *node,
> */
> __rte_experimental
> int
> -rte_rib6_get_depth(struct rte_rib6_node *node, uint8_t *depth);
> +rte_rib6_get_depth(const struct rte_rib6_node *node, uint8_t *depth);
>
> /**
> * Get ext field from the rte_rib6_node
> @@ -272,7 +272,7 @@ rte_rib6_get_ext(struct rte_rib6_node *node);
> */
> __rte_experimental
> int
> -rte_rib6_get_nh(struct rte_rib6_node *node, uint64_t *nh);
> +rte_rib6_get_nh(const struct rte_rib6_node *node, uint64_t *nh);
>
> /**
> * Set nexthop into the rte_rib6_node
> @@ -304,7 +304,8 @@ rte_rib6_set_nh(struct rte_rib6_node *node, uint64_t nh);
> */
> __rte_experimental
> struct rte_rib6 *
> -rte_rib6_create(const char *name, int socket_id, struct rte_rib6_conf *conf);
> +rte_rib6_create(const char *name, int socket_id,
> + const struct rte_rib6_conf *conf);
>
> /**
> * Find an existing RIB object and return a pointer to it.
Acked-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
--
Regards,
Vladimir
On 25/06/2020 21:32, Stephen Hemminger wrote:
> Max_nodes in config is signed, but a negative value makes
> no sense. Get rid of extra BSD style parens.
>
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> ---
> lib/librte_rib/rte_rib.c | 3 +--
> lib/librte_rib/rte_rib6.c | 3 +--
> 2 files changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/lib/librte_rib/rte_rib.c b/lib/librte_rib/rte_rib.c
> index e40cf715c099..2a370d7f8439 100644
> --- a/lib/librte_rib/rte_rib.c
> +++ b/lib/librte_rib/rte_rib.c
> @@ -401,8 +401,7 @@ rte_rib_create(const char *name, int socket_id, const struct rte_rib_conf *conf)
> struct rte_mempool *node_pool;
>
> /* Check user arguments. */
> - if ((name == NULL) || (conf == NULL) ||
> - (conf->max_nodes == 0)) {
> + if (name == NULL || conf == NULL || conf->max_nodes <= 0) {
> rte_errno = EINVAL;
> return NULL;
> }
> diff --git a/lib/librte_rib/rte_rib6.c b/lib/librte_rib/rte_rib6.c
> index 02563b951620..f6c55ee454be 100644
> --- a/lib/librte_rib/rte_rib6.c
> +++ b/lib/librte_rib/rte_rib6.c
> @@ -460,8 +460,7 @@ rte_rib6_create(const char *name, int socket_id,
> struct rte_mempool *node_pool;
>
> /* Check user arguments. */
> - if ((name == NULL) || (conf == NULL) ||
> - (conf->max_nodes == 0)) {
> + if (name == NULL || conf == NULL || conf->max_nodes <= 0) {
> rte_errno = EINVAL;
> return NULL;
> }
Acked-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
--
Regards,
Vladimir
On 25/06/2020 21:32, Stephen Hemminger wrote:
> All include files should be safe from C++
>
> Fixes: 5a5793a5ffa2 ("rib: add RIB library")
> Fixes: f7e861e21c46 ("rib: support IPv6")
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> ---
> lib/librte_rib/rte_rib.h | 8 ++++++++
> lib/librte_rib/rte_rib6.h | 10 +++++++++-
> 2 files changed, 17 insertions(+), 1 deletion(-)
>
> diff --git a/lib/librte_rib/rte_rib.h b/lib/librte_rib/rte_rib.h
> index a7daa9d8a76e..e9ffefce6edd 100644
> --- a/lib/librte_rib/rte_rib.h
> +++ b/lib/librte_rib/rte_rib.h
> @@ -13,6 +13,10 @@
>
> #include <rte_compat.h>
>
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> /**
> * rte_rib_get_nxt() flags
> */
> @@ -275,4 +279,8 @@ __rte_experimental
> void
> rte_rib_free(struct rte_rib *rib);
>
> +#ifdef __cplusplus
> +}
> +#endif
> +
> #endif /* _RTE_RIB_H_ */
> diff --git a/lib/librte_rib/rte_rib6.h b/lib/librte_rib/rte_rib6.h
> index e6b4b7fff98c..68eaa8aa4812 100644
> --- a/lib/librte_rib/rte_rib6.h
> +++ b/lib/librte_rib/rte_rib6.h
> @@ -14,6 +14,10 @@
> #include <rte_memcpy.h>
> #include <rte_compat.h>
>
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> #define RTE_RIB6_IPV6_ADDR_SIZE 16
>
> /**
> @@ -332,4 +336,8 @@ __rte_experimental
> void
> rte_rib6_free(struct rte_rib6 *rib);
>
> -#endif /* _RTE_RIB_H_ */
> +#ifdef __cplusplus
> +}
> +#endif
> +
> +#endif /* _RTE_RIB6_H_ */
Acked-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
--
Regards,
Vladimir
25/06/2020 22:32, Stephen Hemminger:
> Some minor updates to the RIB library to fix issues found
> while reviewing and trying it out.
>
> Stephen Hemminger (3):
> rib: constify arguments
> rib: check for invalid max_nodes
> rib: add C++ include guard
Applied, thanks