Skip to content

Commit 780d06a

Browse files
zstasthom311
authored andcommitted
route: add nh type
1 parent 1b6433d commit 780d06a

File tree

6 files changed

+669
-0
lines changed

6 files changed

+669
-0
lines changed

Makefile.am

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ libnlinclude_netlink_route_HEADERS = \
110110
include/netlink/route/neightbl.h \
111111
include/netlink/route/netconf.h \
112112
include/netlink/route/nexthop.h \
113+
include/netlink/route/nh.h \
113114
include/netlink/route/pktloc.h \
114115
include/netlink/route/qdisc.h \
115116
include/netlink/route/route.h \
@@ -437,6 +438,7 @@ lib_libnl_route_3_la_SOURCES = \
437438
lib/route/neightbl.c \
438439
lib/route/netconf.c \
439440
lib/route/nexthop.c \
441+
lib/route/nh.c \
440442
lib/route/nexthop_encap.c \
441443
lib/route/nh_encap_mpls.c \
442444
lib/route/pktloc.c \

include/netlink-private/nl-auto.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,11 @@ void rtnl_route_nh_free(struct rtnl_nexthop *);
6969
#define _nl_auto_rtnl_nexthop _nl_auto(_nl_auto_rtnl_nexthop_fcn)
7070
_NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_nexthop *, _nl_auto_rtnl_nexthop_fcn, rtnl_route_nh_free);
7171

72+
struct rtnl_nh;
73+
void rtnl_nh_put(struct rtnl_nh *);
74+
#define _nl_auto_rtnl_nh _nl_auto(_nl_auto_rtnl_nh_fcn)
75+
_NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_nh *, _nl_auto_rtnl_nh_fcn, rtnl_nh_put);
76+
7277
struct nl_cache;
7378
void nl_cache_put(struct nl_cache *);
7479
#define _nl_auto_nl_cache _nl_auto(_nl_auto_nl_cache_fcn)

include/netlink-private/types.h

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <netlink-private/object-api.h>
1818
#include <netlink-private/route/tc-api.h>
1919
#include <netlink-private/route/link/sriov.h>
20+
#include <netlink/route/nh.h>
2021
#include <netlink-private/route/nexthop-encap.h>
2122
#include <linux/netlink.h>
2223
#include <linux/rtnetlink.h>
@@ -324,6 +325,28 @@ struct rtnl_nexthop
324325
struct rtnl_nh_encap * rtnh_encap;
325326
};
326327

328+
struct rtnl_nexthop_group
329+
{
330+
struct nl_list_head nexthop_list;
331+
int ce_refcnt;
332+
uint32_t id;
333+
uint8_t weight;
334+
};
335+
336+
struct rtnl_nh
337+
{
338+
NLHDR_COMMON
339+
340+
uint8_t nh_family;
341+
uint32_t nh_flags;
342+
343+
uint32_t nh_id;
344+
uint32_t nh_group_type;
345+
nl_nh_group_t * nh_group;
346+
uint32_t nh_oif;
347+
struct nl_addr * nh_gateway;
348+
};
349+
327350
struct rtnl_route
328351
{
329352
NLHDR_COMMON

include/netlink/route/nh.h

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/* SPDX-License-Identifier: LGPL-2.1-only */
2+
/*
3+
* Copyright (c) 2022 Stanislav Zaikin <[email protected]>
4+
*/
5+
6+
#ifndef NETLINK_ROUTE_NEXTHOP2_H_
7+
#define NETLINK_ROUTE_NEXTHOP2_H_
8+
9+
#include <netlink/netlink.h>
10+
#include <netlink/addr.h>
11+
12+
#ifdef __cplusplus
13+
extern "C" {
14+
#endif
15+
16+
struct rtnl_nh;
17+
18+
typedef struct nl_nh_group_info {
19+
uint32_t nh_id; /*!< VLAN number */
20+
uint8_t weight; /*!< VLAN QOS value */
21+
} nl_nh_group_info_t;
22+
23+
typedef struct nl_nh_group {
24+
int ce_refcnt;
25+
unsigned size;
26+
nl_nh_group_info_t *entries;
27+
} nl_nh_group_t;
28+
29+
extern int rtnl_nh_alloc_cache(struct nl_sock *sk, int family,
30+
struct nl_cache **result);
31+
extern struct rtnl_nh *rtnl_nh_alloc(void);
32+
extern struct rtnl_nh *rtnl_nh_clone(struct rtnl_nh *);
33+
extern void rtnl_nh_put(struct rtnl_nh *);
34+
35+
extern struct rtnl_nh *rtnl_nh_get(struct nl_cache *cache, int nhid);
36+
37+
extern int rtnl_nh_compare(struct rtnl_nh *, struct rtnl_nh *, uint32_t, int);
38+
39+
extern void rtnl_nh_dump(struct rtnl_nh *, struct nl_dump_params *);
40+
41+
extern int rtnl_nh_set_gateway(struct rtnl_nh *, struct nl_addr *);
42+
extern struct nl_addr *rtnl_nh_get_gateway(struct rtnl_nh *);
43+
44+
extern int rtnl_nh_set_fdb(struct rtnl_nh *, int value);
45+
extern int rtnl_nh_get_fdb(struct rtnl_nh *);
46+
47+
extern int rtnl_nh_get_group_entry(struct rtnl_nh *, int n);
48+
extern int rtnl_nh_get_group_size(struct rtnl_nh *);
49+
50+
extern int rtnl_nh_get_id(struct rtnl_nh *);
51+
extern int rtnl_nh_get_oif(struct rtnl_nh *);
52+
53+
#ifdef __cplusplus
54+
}
55+
#endif
56+
57+
#endif

0 commit comments

Comments
 (0)