diff options
| author | Gleb Smirnoff <glebius@FreeBSD.org> | 2024-12-03 20:04:18 +0000 |
|---|---|---|
| committer | Gleb Smirnoff <glebius@FreeBSD.org> | 2024-12-03 20:04:18 +0000 |
| commit | a034c0aeccd899a5872333625771df278e0a8ba7 (patch) | |
| tree | 2aebd441a771430f95e127f1f2fc2586927f7e42 /sys/netlink/route/rt.c | |
| parent | edf5608bfef3840718bf31b453efb714ef290f31 (diff) | |
netlink: refactor writer initialization KPI
o Allow callers to initialize a writer that will malloc(9) with M_WAITOK.
o Use size_t for expected malloc size.
o Use correct types to initialize a group writer.
o Rename functions into nl_writer_ namespace instead of nlmsg_, cause
they are working on nl_writer, not on nlmsg.
o Make the KPI responsible to sparsely initialize the writer structure.
o Garbage collect chain writer. Fixes 17083b94a915.
All current consumers are left as is, however some may benefit from
M_WAITOK allocation as well as supplying a correct expected size.
Reviewed by: melifaro
Differential Revision: https://reviews.freebsd.org/D47549
Diffstat (limited to 'sys/netlink/route/rt.c')
| -rw-r--r-- | sys/netlink/route/rt.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/sys/netlink/route/rt.c b/sys/netlink/route/rt.c index 00315afbcb02..c9b0f56498ec 100644 --- a/sys/netlink/route/rt.c +++ b/sys/netlink/route/rt.c @@ -350,10 +350,10 @@ static void report_operation(uint32_t fibnum, struct rib_cmd_info *rc, struct nlpcb *nlp, struct nlmsghdr *hdr) { - struct nl_writer nw = {}; + struct nl_writer nw; uint32_t group_id = family_to_group(rt_get_family(rc->rc_rt)); - if (nlmsg_get_group_writer(&nw, NLMSG_SMALL, NETLINK_ROUTE, group_id)) { + if (nl_writer_group(&nw, NLMSG_SMALL, NETLINK_ROUTE, group_id, false)) { struct route_nhop_data rnd = { .rnd_nhop = rc_get_nhop(rc), .rnd_weight = rc->rc_nh_weight, @@ -1043,7 +1043,7 @@ rtnl_handle_getroute(struct nlmsghdr *hdr, struct nlpcb *nlp, struct nl_pstate * void rtnl_handle_route_event(uint32_t fibnum, const struct rib_cmd_info *rc) { - struct nl_writer nw = {}; + struct nl_writer nw; int family, nlm_flags = 0; family = rt_get_family(rc->rc_rt); @@ -1082,7 +1082,8 @@ rtnl_handle_route_event(uint32_t fibnum, const struct rib_cmd_info *rc) }; uint32_t group_id = family_to_group(family); - if (!nlmsg_get_group_writer(&nw, NLMSG_SMALL, NETLINK_ROUTE, group_id)) { + if (!nl_writer_group(&nw, NLMSG_SMALL, NETLINK_ROUTE, group_id, + false)) { NL_LOG(LOG_DEBUG, "error allocating event buffer"); return; } |
