1*4dc78e53SAndroid Build Coastguard Worker /* SPDX-License-Identifier: LGPL-2.1-only */
2*4dc78e53SAndroid Build Coastguard Worker
3*4dc78e53SAndroid Build Coastguard Worker #ifndef __NETLINK_NL_AUX_ROUTE_NL_ROUTE_H__
4*4dc78e53SAndroid Build Coastguard Worker #define __NETLINK_NL_AUX_ROUTE_NL_ROUTE_H__
5*4dc78e53SAndroid Build Coastguard Worker
6*4dc78e53SAndroid Build Coastguard Worker #include "base/nl-base-utils.h"
7*4dc78e53SAndroid Build Coastguard Worker
8*4dc78e53SAndroid Build Coastguard Worker #include <netlink/route/action.h>
9*4dc78e53SAndroid Build Coastguard Worker
10*4dc78e53SAndroid Build Coastguard Worker struct rtnl_link;
11*4dc78e53SAndroid Build Coastguard Worker void rtnl_link_put(struct rtnl_link *);
12*4dc78e53SAndroid Build Coastguard Worker #define _nl_auto_rtnl_link _nl_auto(_nl_auto_rtnl_link_fcn)
13*4dc78e53SAndroid Build Coastguard Worker _NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_link *, _nl_auto_rtnl_link_fcn,
14*4dc78e53SAndroid Build Coastguard Worker rtnl_link_put);
15*4dc78e53SAndroid Build Coastguard Worker
16*4dc78e53SAndroid Build Coastguard Worker struct rtnl_route;
17*4dc78e53SAndroid Build Coastguard Worker void rtnl_route_put(struct rtnl_route *);
18*4dc78e53SAndroid Build Coastguard Worker #define _nl_auto_rtnl_route _nl_auto(_nl_auto_rtnl_route_fcn)
19*4dc78e53SAndroid Build Coastguard Worker _NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_route *, _nl_auto_rtnl_route_fcn,
20*4dc78e53SAndroid Build Coastguard Worker rtnl_route_put);
21*4dc78e53SAndroid Build Coastguard Worker
22*4dc78e53SAndroid Build Coastguard Worker struct rtnl_mdb;
23*4dc78e53SAndroid Build Coastguard Worker void rtnl_mdb_put(struct rtnl_mdb *);
24*4dc78e53SAndroid Build Coastguard Worker #define _nl_auto_rtnl_mdb _nl_auto(_nl_auto_rtnl_mdb_fcn)
25*4dc78e53SAndroid Build Coastguard Worker _NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_mdb *, _nl_auto_rtnl_mdb_fcn,
26*4dc78e53SAndroid Build Coastguard Worker rtnl_mdb_put);
27*4dc78e53SAndroid Build Coastguard Worker
28*4dc78e53SAndroid Build Coastguard Worker struct rtnl_nexthop;
29*4dc78e53SAndroid Build Coastguard Worker void rtnl_route_nh_free(struct rtnl_nexthop *);
30*4dc78e53SAndroid Build Coastguard Worker #define _nl_auto_rtnl_nexthop _nl_auto(_nl_auto_rtnl_nexthop_fcn)
31*4dc78e53SAndroid Build Coastguard Worker _NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_nexthop *, _nl_auto_rtnl_nexthop_fcn,
32*4dc78e53SAndroid Build Coastguard Worker rtnl_route_nh_free);
33*4dc78e53SAndroid Build Coastguard Worker
34*4dc78e53SAndroid Build Coastguard Worker struct rtnl_nh;
35*4dc78e53SAndroid Build Coastguard Worker void rtnl_nh_put(struct rtnl_nh *);
36*4dc78e53SAndroid Build Coastguard Worker #define _nl_auto_rtnl_nh _nl_auto(_nl_auto_rtnl_nh_fcn)
37*4dc78e53SAndroid Build Coastguard Worker _NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_nh *, _nl_auto_rtnl_nh_fcn, rtnl_nh_put);
38*4dc78e53SAndroid Build Coastguard Worker
39*4dc78e53SAndroid Build Coastguard Worker struct rtnl_link_af_ops;
40*4dc78e53SAndroid Build Coastguard Worker void rtnl_link_af_ops_put(struct rtnl_link_af_ops *);
41*4dc78e53SAndroid Build Coastguard Worker #define _nl_auto_rtnl_link_af_ops _nl_auto(_nl_auto_rtnl_link_af_ops_fcn)
42*4dc78e53SAndroid Build Coastguard Worker _NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_link_af_ops *,
43*4dc78e53SAndroid Build Coastguard Worker _nl_auto_rtnl_link_af_ops_fcn, rtnl_link_af_ops_put);
44*4dc78e53SAndroid Build Coastguard Worker
45*4dc78e53SAndroid Build Coastguard Worker #define _nl_auto_rtnl_act _nl_auto(_nl_auto_rtnl_act_fcn)
46*4dc78e53SAndroid Build Coastguard Worker _NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_act *, _nl_auto_rtnl_act_fcn,
47*4dc78e53SAndroid Build Coastguard Worker rtnl_act_put);
48*4dc78e53SAndroid Build Coastguard Worker
49*4dc78e53SAndroid Build Coastguard Worker #define _nl_auto_rtnl_act_all _nl_auto(_nl_auto_rtnl_act_fcn_all)
50*4dc78e53SAndroid Build Coastguard Worker _NL_AUTO_DEFINE_FCN_INDIRECT0(struct rtnl_act *, _nl_auto_rtnl_act_fcn_all,
51*4dc78e53SAndroid Build Coastguard Worker rtnl_act_put_all);
52*4dc78e53SAndroid Build Coastguard Worker
53*4dc78e53SAndroid Build Coastguard Worker struct rtnl_ematch_tree;
54*4dc78e53SAndroid Build Coastguard Worker void rtnl_ematch_tree_free(struct rtnl_ematch_tree *);
55*4dc78e53SAndroid Build Coastguard Worker #define _nl_auto_rtnl_ematch_tree _nl_auto(_nl_auto_rtnl_ematch_tree_fcn)
56*4dc78e53SAndroid Build Coastguard Worker _NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_ematch_tree *,
57*4dc78e53SAndroid Build Coastguard Worker _nl_auto_rtnl_ematch_tree_fcn,
58*4dc78e53SAndroid Build Coastguard Worker rtnl_ematch_tree_free);
59*4dc78e53SAndroid Build Coastguard Worker
60*4dc78e53SAndroid Build Coastguard Worker struct rtnl_cls;
61*4dc78e53SAndroid Build Coastguard Worker void rtnl_cls_put(struct rtnl_cls *);
62*4dc78e53SAndroid Build Coastguard Worker #define _nl_auto_rtnl_cls _nl_auto(_nl_auto_rtnl_cls_fcn)
63*4dc78e53SAndroid Build Coastguard Worker _NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_cls *, _nl_auto_rtnl_cls_fcn,
64*4dc78e53SAndroid Build Coastguard Worker rtnl_cls_put);
65*4dc78e53SAndroid Build Coastguard Worker
66*4dc78e53SAndroid Build Coastguard Worker /*****************************************************************************/
67*4dc78e53SAndroid Build Coastguard Worker
_rtnl_act_append_get(struct rtnl_act ** head,struct rtnl_act * new)68*4dc78e53SAndroid Build Coastguard Worker static inline int _rtnl_act_append_get(struct rtnl_act **head,
69*4dc78e53SAndroid Build Coastguard Worker struct rtnl_act *new)
70*4dc78e53SAndroid Build Coastguard Worker {
71*4dc78e53SAndroid Build Coastguard Worker int r;
72*4dc78e53SAndroid Build Coastguard Worker
73*4dc78e53SAndroid Build Coastguard Worker r = rtnl_act_append(head, new);
74*4dc78e53SAndroid Build Coastguard Worker if (r >= 0)
75*4dc78e53SAndroid Build Coastguard Worker rtnl_act_get(new);
76*4dc78e53SAndroid Build Coastguard Worker return r;
77*4dc78e53SAndroid Build Coastguard Worker }
78*4dc78e53SAndroid Build Coastguard Worker
_rtnl_act_append_take(struct rtnl_act ** head,struct rtnl_act * new)79*4dc78e53SAndroid Build Coastguard Worker static inline int _rtnl_act_append_take(struct rtnl_act **head,
80*4dc78e53SAndroid Build Coastguard Worker struct rtnl_act *new)
81*4dc78e53SAndroid Build Coastguard Worker {
82*4dc78e53SAndroid Build Coastguard Worker int r;
83*4dc78e53SAndroid Build Coastguard Worker
84*4dc78e53SAndroid Build Coastguard Worker r = rtnl_act_append(head, new);
85*4dc78e53SAndroid Build Coastguard Worker if (r < 0)
86*4dc78e53SAndroid Build Coastguard Worker rtnl_act_put(new);
87*4dc78e53SAndroid Build Coastguard Worker return r;
88*4dc78e53SAndroid Build Coastguard Worker }
89*4dc78e53SAndroid Build Coastguard Worker
90*4dc78e53SAndroid Build Coastguard Worker #endif /* __NETLINK_NL_AUX_ROUTE_NL_ROUTE_H__ */
91