xref: /aosp_15_r20/external/libnl/include/netlink/route/nh.h (revision 4dc78e53d49367fa8e61b07018507c90983a077d)
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; /*!< nexthop id */
20 	uint8_t weight; /*!< weight in nexthop group */
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 void rtnl_nh_put(struct rtnl_nh *);
33 
34 extern struct rtnl_nh *rtnl_nh_get(struct nl_cache *cache, int nhid);
35 
36 extern int rtnl_nh_set_gateway(struct rtnl_nh *, struct nl_addr *);
37 extern struct nl_addr *rtnl_nh_get_gateway(struct rtnl_nh *);
38 
39 extern int rtnl_nh_set_fdb(struct rtnl_nh *, int value);
40 extern int rtnl_nh_get_fdb(struct rtnl_nh *);
41 
42 extern int rtnl_nh_get_group_entry(struct rtnl_nh *, int n);
43 extern int rtnl_nh_get_group_size(struct rtnl_nh *);
44 
45 extern int rtnl_nh_get_id(struct rtnl_nh *);
46 extern int rtnl_nh_get_oif(struct rtnl_nh *);
47 
48 #ifdef __cplusplus
49 }
50 #endif
51 
52 #endif
53