/* SPDX-License-Identifier: LGPL-2.1-only */ #ifndef __NETLINK_NL_AUX_ROUTE_NL_ROUTE_H__ #define __NETLINK_NL_AUX_ROUTE_NL_ROUTE_H__ #include "base/nl-base-utils.h" #include struct rtnl_link; void rtnl_link_put(struct rtnl_link *); #define _nl_auto_rtnl_link _nl_auto(_nl_auto_rtnl_link_fcn) _NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_link *, _nl_auto_rtnl_link_fcn, rtnl_link_put); struct rtnl_route; void rtnl_route_put(struct rtnl_route *); #define _nl_auto_rtnl_route _nl_auto(_nl_auto_rtnl_route_fcn) _NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_route *, _nl_auto_rtnl_route_fcn, rtnl_route_put); struct rtnl_mdb; void rtnl_mdb_put(struct rtnl_mdb *); #define _nl_auto_rtnl_mdb _nl_auto(_nl_auto_rtnl_mdb_fcn) _NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_mdb *, _nl_auto_rtnl_mdb_fcn, rtnl_mdb_put); struct rtnl_nexthop; void rtnl_route_nh_free(struct rtnl_nexthop *); #define _nl_auto_rtnl_nexthop _nl_auto(_nl_auto_rtnl_nexthop_fcn) _NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_nexthop *, _nl_auto_rtnl_nexthop_fcn, rtnl_route_nh_free); struct rtnl_nh; void rtnl_nh_put(struct rtnl_nh *); #define _nl_auto_rtnl_nh _nl_auto(_nl_auto_rtnl_nh_fcn) _NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_nh *, _nl_auto_rtnl_nh_fcn, rtnl_nh_put); struct rtnl_link_af_ops; void rtnl_link_af_ops_put(struct rtnl_link_af_ops *); #define _nl_auto_rtnl_link_af_ops _nl_auto(_nl_auto_rtnl_link_af_ops_fcn) _NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_link_af_ops *, _nl_auto_rtnl_link_af_ops_fcn, rtnl_link_af_ops_put); #define _nl_auto_rtnl_act _nl_auto(_nl_auto_rtnl_act_fcn) _NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_act *, _nl_auto_rtnl_act_fcn, rtnl_act_put); #define _nl_auto_rtnl_act_all _nl_auto(_nl_auto_rtnl_act_fcn_all) _NL_AUTO_DEFINE_FCN_INDIRECT0(struct rtnl_act *, _nl_auto_rtnl_act_fcn_all, rtnl_act_put_all); struct rtnl_ematch_tree; void rtnl_ematch_tree_free(struct rtnl_ematch_tree *); #define _nl_auto_rtnl_ematch_tree _nl_auto(_nl_auto_rtnl_ematch_tree_fcn) _NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_ematch_tree *, _nl_auto_rtnl_ematch_tree_fcn, rtnl_ematch_tree_free); struct rtnl_cls; void rtnl_cls_put(struct rtnl_cls *); #define _nl_auto_rtnl_cls _nl_auto(_nl_auto_rtnl_cls_fcn) _NL_AUTO_DEFINE_FCN_TYPED0(struct rtnl_cls *, _nl_auto_rtnl_cls_fcn, rtnl_cls_put); /*****************************************************************************/ static inline int _rtnl_act_append_get(struct rtnl_act **head, struct rtnl_act *new) { int r; r = rtnl_act_append(head, new); if (r >= 0) rtnl_act_get(new); return r; } static inline int _rtnl_act_append_take(struct rtnl_act **head, struct rtnl_act *new) { int r; r = rtnl_act_append(head, new); if (r < 0) rtnl_act_put(new); return r; } #endif /* __NETLINK_NL_AUX_ROUTE_NL_ROUTE_H__ */