Skip to content

Commit 6c0c02f

Browse files
committed
route/nexthop: merge branch 'cpaasch-oai:t/nh_encap_generic'
#443
2 parents 320b2bd + 6ec1802 commit 6c0c02f

File tree

18 files changed

+1083
-205
lines changed

18 files changed

+1083
-205
lines changed

Makefile.am

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1064,9 +1064,10 @@ tests_check_all_SOURCES = \
10641064
tests/cksuite-all-attr.c \
10651065
tests/cksuite-all-ematch-tree-clone.c \
10661066
tests/cksuite-all-netns.c \
1067+
tests/cksuite-all.h \
10671068
tests/cksuite-link-ip6tnl.c \
1069+
tests/cksuite-route-nexthop.c \
10681070
tests/cksuite-route-nh.c \
1069-
tests/cksuite-all.h \
10701071
$(NULL)
10711072

10721073
tests_check_all_CPPFLAGS = \

include/netlink/route/nexthop.h

Lines changed: 42 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ extern "C" {
1414
#endif
1515

1616
struct rtnl_nexthop;
17+
struct rtnl_nh_encap;
1718

1819
enum {
1920
NH_DUMP_FROM_ONELINE = -2,
@@ -22,53 +23,56 @@ enum {
2223
/* > 0 reserved for nexthop index */
2324
};
2425

25-
extern struct rtnl_nexthop * rtnl_route_nh_alloc(void);
26-
extern struct rtnl_nexthop * rtnl_route_nh_clone(struct rtnl_nexthop *);
27-
extern void rtnl_route_nh_free(struct rtnl_nexthop *);
26+
extern struct rtnl_nexthop *rtnl_route_nh_alloc(void);
27+
extern struct rtnl_nexthop *rtnl_route_nh_clone(struct rtnl_nexthop *);
28+
extern void rtnl_route_nh_free(struct rtnl_nexthop *);
2829

29-
extern int rtnl_route_nh_compare(struct rtnl_nexthop *,
30-
struct rtnl_nexthop *,
31-
uint32_t, int);
30+
extern int rtnl_route_nh_compare(struct rtnl_nexthop *, struct rtnl_nexthop *,
31+
uint32_t, int);
3232

33-
extern int rtnl_route_nh_identical(struct rtnl_nexthop *,
34-
struct rtnl_nexthop *);
33+
extern int rtnl_route_nh_identical(struct rtnl_nexthop *,
34+
struct rtnl_nexthop *);
3535

36-
extern void rtnl_route_nh_dump(struct rtnl_nexthop *,
37-
struct nl_dump_params *);
36+
extern void rtnl_route_nh_dump(struct rtnl_nexthop *, struct nl_dump_params *);
3837

39-
extern void rtnl_route_nh_set_weight(struct rtnl_nexthop *, uint8_t);
40-
extern uint8_t rtnl_route_nh_get_weight(struct rtnl_nexthop *);
41-
extern void rtnl_route_nh_set_ifindex(struct rtnl_nexthop *, int);
42-
extern int rtnl_route_nh_get_ifindex(struct rtnl_nexthop *);
43-
extern void rtnl_route_nh_set_gateway(struct rtnl_nexthop *,
44-
struct nl_addr *);
45-
extern struct nl_addr * rtnl_route_nh_get_gateway(struct rtnl_nexthop *);
46-
extern void rtnl_route_nh_set_flags(struct rtnl_nexthop *,
47-
unsigned int);
48-
extern void rtnl_route_nh_unset_flags(struct rtnl_nexthop *,
49-
unsigned int);
50-
extern unsigned int rtnl_route_nh_get_flags(struct rtnl_nexthop *);
51-
extern void rtnl_route_nh_set_realms(struct rtnl_nexthop *,
52-
uint32_t);
53-
extern uint32_t rtnl_route_nh_get_realms(struct rtnl_nexthop *);
38+
extern void rtnl_route_nh_set_weight(struct rtnl_nexthop *, uint8_t);
39+
extern uint8_t rtnl_route_nh_get_weight(struct rtnl_nexthop *);
40+
extern void rtnl_route_nh_set_ifindex(struct rtnl_nexthop *, int);
41+
extern int rtnl_route_nh_get_ifindex(struct rtnl_nexthop *);
42+
extern void rtnl_route_nh_set_gateway(struct rtnl_nexthop *, struct nl_addr *);
43+
extern struct nl_addr *rtnl_route_nh_get_gateway(struct rtnl_nexthop *);
44+
extern void rtnl_route_nh_set_flags(struct rtnl_nexthop *, unsigned int);
45+
extern void rtnl_route_nh_unset_flags(struct rtnl_nexthop *, unsigned int);
46+
extern unsigned int rtnl_route_nh_get_flags(struct rtnl_nexthop *);
47+
extern void rtnl_route_nh_set_realms(struct rtnl_nexthop *, uint32_t);
48+
extern uint32_t rtnl_route_nh_get_realms(struct rtnl_nexthop *);
5449

55-
extern int rtnl_route_nh_set_newdst(struct rtnl_nexthop *,
56-
struct nl_addr *);
57-
extern struct nl_addr * rtnl_route_nh_get_newdst(struct rtnl_nexthop *);
58-
extern int rtnl_route_nh_set_via(struct rtnl_nexthop *,
59-
struct nl_addr *);
60-
extern struct nl_addr * rtnl_route_nh_get_via(struct rtnl_nexthop *);
61-
extern char * rtnl_route_nh_flags2str(int, char *, size_t);
62-
extern int rtnl_route_nh_str2flags(const char *);
50+
extern int rtnl_route_nh_set_newdst(struct rtnl_nexthop *, struct nl_addr *);
51+
extern struct nl_addr *rtnl_route_nh_get_newdst(struct rtnl_nexthop *);
52+
extern int rtnl_route_nh_set_via(struct rtnl_nexthop *, struct nl_addr *);
53+
extern struct nl_addr *rtnl_route_nh_get_via(struct rtnl_nexthop *);
54+
extern int rtnl_route_nh_set_encap(struct rtnl_nexthop *,
55+
struct rtnl_nh_encap *);
56+
extern struct rtnl_nh_encap *rtnl_route_nh_get_encap(struct rtnl_nexthop *);
57+
extern char *rtnl_route_nh_flags2str(int, char *, size_t);
58+
extern int rtnl_route_nh_str2flags(const char *);
6359

6460
/*
6561
* nexthop encapsulations
6662
*/
67-
extern int rtnl_route_nh_encap_mpls(struct rtnl_nexthop *nh,
68-
struct nl_addr *addr,
69-
uint8_t ttl);
70-
extern struct nl_addr * rtnl_route_nh_get_encap_mpls_dst(struct rtnl_nexthop *);
71-
extern uint8_t rtnl_route_nh_get_encap_mpls_ttl(struct rtnl_nexthop *);
63+
extern struct rtnl_nh_encap *rtnl_nh_encap_alloc(void);
64+
extern void rtnl_nh_encap_free(struct rtnl_nh_encap *nh_encap);
65+
extern struct rtnl_nh_encap *rtnl_nh_encap_clone(struct rtnl_nh_encap *src);
66+
67+
extern int rtnl_nh_encap_mpls(struct rtnl_nh_encap *nh_encap,
68+
struct nl_addr *dst, uint8_t ttl);
69+
struct nl_addr *rtnl_nh_get_encap_mpls_dst(struct rtnl_nh_encap *);
70+
extern int rtnl_nh_get_encap_mpls_ttl(struct rtnl_nh_encap *);
71+
72+
extern int rtnl_route_nh_encap_mpls(struct rtnl_nexthop *nh,
73+
struct nl_addr *addr, uint8_t ttl);
74+
extern struct nl_addr *rtnl_route_nh_get_encap_mpls_dst(struct rtnl_nexthop *);
75+
extern uint8_t rtnl_route_nh_get_encap_mpls_ttl(struct rtnl_nexthop *);
7276
#ifdef __cplusplus
7377
}
7478
#endif

include/netlink/route/nh.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@ extern int rtnl_nh_set_res_group_unbalanced_timer(struct rtnl_nh *,
7272
extern int rtnl_nh_get_res_group_unbalanced_timer(struct rtnl_nh *,
7373
uint32_t *out_value);
7474

75+
/* lwtunnel encapsulation */
76+
struct rtnl_nh_encap;
77+
extern int rtnl_nh_set_encap(struct rtnl_nh *, struct rtnl_nh_encap *);
78+
extern struct rtnl_nh_encap *rtnl_nh_get_encap(struct rtnl_nh *);
79+
7580
#ifdef __cplusplus
7681
}
7782
#endif

include/nl-aux-route/nl-route.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include "base/nl-base-utils.h"
77

88
#include <netlink/route/action.h>
9+
#include <netlink/route/nexthop.h>
910

1011
struct rtnl_link;
1112
void rtnl_link_put(struct rtnl_link *);
@@ -42,6 +43,10 @@ void rtnl_nh_put(struct rtnl_nh *);
4243
#define _nl_auto_rtnl_nh _nl_auto(_nl_auto_rtnl_nh_fcn)
4344
_NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_nh *, _nl_auto_rtnl_nh_fcn, rtnl_nh_put);
4445

46+
#define _nl_auto_rtnl_nh_encap _nl_auto(_nl_auto_rtnl_nh_encap_fcn)
47+
_NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_nh_encap *, _nl_auto_rtnl_nh_encap_fcn,
48+
rtnl_nh_encap_free);
49+
4550
struct rtnl_link_af_ops;
4651
void rtnl_link_af_ops_put(struct rtnl_link_af_ops *);
4752
#define _nl_auto_rtnl_link_af_ops _nl_auto(_nl_auto_rtnl_link_af_ops_fcn)

lib/route/nexthop-encap.h

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,26 @@
11
#ifndef NETLINK_NEXTHOP_ENCAP_H_
2-
#define NETLINK_NEXTHOP_ENCAP_H_
2+
#define NETLINK_NEXTHOP_ENCAP_H_
3+
4+
struct rtnl_nh_encap;
35

46
struct nh_encap_ops {
57
uint16_t encap_type;
68

7-
int (*build_msg)(struct nl_msg *msg, void *priv);
8-
int (*parse_msg)(struct nlattr *nla, struct rtnl_nexthop *rtnh);
9+
int (*build_msg)(struct nl_msg *msg, void *priv);
10+
int (*parse_msg)(struct nlattr *nla, struct rtnl_nh_encap **encap_out);
911

10-
int (*compare)(void *a, void *b);
12+
int (*compare)(void *a, void *b);
13+
void *(*clone)(void *priv);
1114

12-
void (*dump)(void *priv, struct nl_dump_params *dp);
13-
void (*destructor)(void *priv);
15+
void (*dump)(void *priv, struct nl_dump_params *dp);
16+
void (*destructor)(void *priv);
1417
};
1518

16-
struct rtnl_nh_encap;
17-
1819
/*
1920
* generic nexthop encap
2021
*/
21-
void nh_set_encap(struct rtnl_nexthop *nh, struct rtnl_nh_encap *rtnh_encap);
22-
2322
int nh_encap_parse_msg(struct nlattr *encap, struct nlattr *encap_type,
24-
struct rtnl_nexthop *rtnh);
23+
struct rtnl_nh_encap **encap_out);
2524
int nh_encap_build_msg(struct nl_msg *msg, struct rtnl_nh_encap *rtnh_encap);
2625

2726
void nh_encap_dump(struct rtnl_nh_encap *rtnh_encap, struct nl_dump_params *dp);

0 commit comments

Comments
 (0)