From: Yu Watanabe Date: Tue, 25 Jan 2022 21:00:55 +0000 (+0900) Subject: sd-netlink: unify sd_rtnl_message_new_qdisc() and sd_rtnl_message_new_tclass() X-Git-Tag: v251-rc1~322^2~8 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f50b93fed75e2f8a583e7a91160104d2d6aa8eb8;p=thirdparty%2Fsystemd.git sd-netlink: unify sd_rtnl_message_new_qdisc() and sd_rtnl_message_new_tclass() As the netlink message header types for both qdisc and tclass are equivalent. --- diff --git a/src/libsystemd/sd-netlink/netlink-message-rtnl.c b/src/libsystemd/sd-netlink/netlink-message-rtnl.c index d15ca06aa85..888d097d986 100644 --- a/src/libsystemd/sd-netlink/netlink-message-rtnl.c +++ b/src/libsystemd/sd-netlink/netlink-message-rtnl.c @@ -1043,88 +1043,31 @@ int sd_rtnl_message_routing_policy_rule_get_fib_src_prefixlen(sd_netlink_message return 0; } -int sd_rtnl_message_new_qdisc(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int tcm_family, int tcm_ifindex) { - struct tcmsg *tcm; - int r; - - assert_return(rtnl_message_type_is_qdisc(nlmsg_type), -EINVAL); - assert_return(ret, -EINVAL); - - r = message_new(rtnl, ret, nlmsg_type); - if (r < 0) - return r; - - if (nlmsg_type == RTM_NEWQDISC) - (*ret)->hdr->nlmsg_flags |= NLM_F_CREATE | NLM_F_EXCL; - - tcm = NLMSG_DATA((*ret)->hdr); - tcm->tcm_family = tcm_family; - tcm->tcm_ifindex = tcm_ifindex; +int sd_rtnl_message_new_traffic_control( + sd_netlink *rtnl, + sd_netlink_message **ret, + uint16_t nlmsg_type, + int ifindex, + uint32_t handle, + uint32_t parent) { - return 0; -} - -int sd_rtnl_message_set_qdisc_parent(sd_netlink_message *m, uint32_t parent) { - struct tcmsg *tcm; - - assert_return(rtnl_message_type_is_qdisc(m->hdr->nlmsg_type), -EINVAL); - - tcm = NLMSG_DATA(m->hdr); - tcm->tcm_parent = parent; - - return 0; -} - -int sd_rtnl_message_set_qdisc_handle(sd_netlink_message *m, uint32_t handle) { - struct tcmsg *tcm; - - assert_return(rtnl_message_type_is_qdisc(m->hdr->nlmsg_type), -EINVAL); - - tcm = NLMSG_DATA(m->hdr); - tcm->tcm_handle = handle; - - return 0; -} - -int sd_rtnl_message_new_tclass(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int tcm_family, int tcm_ifindex) { struct tcmsg *tcm; int r; - assert_return(rtnl_message_type_is_tclass(nlmsg_type), -EINVAL); + assert_return(rtnl_message_type_is_traffic_control(nlmsg_type), -EINVAL); assert_return(ret, -EINVAL); r = message_new(rtnl, ret, nlmsg_type); if (r < 0) return r; - if (nlmsg_type == RTM_NEWTCLASS) + if (IN_SET(nlmsg_type, RTM_NEWQDISC, RTM_NEWTCLASS)) (*ret)->hdr->nlmsg_flags |= NLM_F_CREATE | NLM_F_EXCL; tcm = NLMSG_DATA((*ret)->hdr); - tcm->tcm_family = tcm_family; - tcm->tcm_ifindex = tcm_ifindex; - - return 0; -} - -int sd_rtnl_message_set_tclass_parent(sd_netlink_message *m, uint32_t parent) { - struct tcmsg *tcm; - - assert_return(rtnl_message_type_is_tclass(m->hdr->nlmsg_type), -EINVAL); - - tcm = NLMSG_DATA(m->hdr); - tcm->tcm_parent = parent; - - return 0; -} - -int sd_rtnl_message_set_tclass_handle(sd_netlink_message *m, uint32_t handle) { - struct tcmsg *tcm; - - assert_return(rtnl_message_type_is_tclass(m->hdr->nlmsg_type), -EINVAL); - - tcm = NLMSG_DATA(m->hdr); + tcm->tcm_ifindex = ifindex; tcm->tcm_handle = handle; + tcm->tcm_parent = parent; return 0; } diff --git a/src/libsystemd/sd-netlink/netlink-util.h b/src/libsystemd/sd-netlink/netlink-util.h index 9024c00830a..097483c4351 100644 --- a/src/libsystemd/sd-netlink/netlink-util.h +++ b/src/libsystemd/sd-netlink/netlink-util.h @@ -59,12 +59,10 @@ static inline bool rtnl_message_type_is_routing_policy_rule(uint16_t type) { return IN_SET(type, RTM_NEWRULE, RTM_DELRULE, RTM_GETRULE); } -static inline bool rtnl_message_type_is_qdisc(uint16_t type) { - return IN_SET(type, RTM_NEWQDISC, RTM_DELQDISC, RTM_GETQDISC); -} - -static inline bool rtnl_message_type_is_tclass(uint16_t type) { - return IN_SET(type, RTM_NEWTCLASS, RTM_DELTCLASS, RTM_GETTCLASS); +static inline bool rtnl_message_type_is_traffic_control(uint16_t type) { + return IN_SET(type, + RTM_NEWQDISC, RTM_DELQDISC, RTM_GETQDISC, + RTM_NEWTCLASS, RTM_DELTCLASS, RTM_GETTCLASS); } static inline bool rtnl_message_type_is_mdb(uint16_t type) { diff --git a/src/network/tc/qdisc.c b/src/network/tc/qdisc.c index c7a7bad1686..f0e643b9aed 100644 --- a/src/network/tc/qdisc.c +++ b/src/network/tc/qdisc.c @@ -179,18 +179,11 @@ int qdisc_configure(Link *link, QDisc *qdisc) { assert(link->manager->rtnl); assert(link->ifindex > 0); - r = sd_rtnl_message_new_qdisc(link->manager->rtnl, &req, RTM_NEWQDISC, AF_UNSPEC, link->ifindex); + r = sd_rtnl_message_new_traffic_control(link->manager->rtnl, &req, RTM_NEWQDISC, + link->ifindex, qdisc->handle, qdisc->parent); if (r < 0) return log_link_debug_errno(link, r, "Could not create RTM_NEWQDISC message: %m"); - r = sd_rtnl_message_set_qdisc_parent(req, qdisc->parent); - if (r < 0) - return r; - - r = sd_rtnl_message_set_qdisc_handle(req, qdisc->handle); - if (r < 0) - return r; - if (QDISC_VTABLE(qdisc)) { if (QDISC_VTABLE(qdisc)->fill_tca_kind) { r = QDISC_VTABLE(qdisc)->fill_tca_kind(link, qdisc, req); diff --git a/src/network/tc/tclass.c b/src/network/tc/tclass.c index 4e1386b48ff..860d8c997a9 100644 --- a/src/network/tc/tclass.c +++ b/src/network/tc/tclass.c @@ -137,18 +137,11 @@ int tclass_configure(Link *link, TClass *tclass) { assert(link->manager->rtnl); assert(link->ifindex > 0); - r = sd_rtnl_message_new_tclass(link->manager->rtnl, &req, RTM_NEWTCLASS, AF_UNSPEC, link->ifindex); + r = sd_rtnl_message_new_traffic_control(link->manager->rtnl, &req, RTM_NEWTCLASS, + link->ifindex, tclass->classid, tclass->parent); if (r < 0) return log_link_debug_errno(link, r, "Could not create RTM_NEWTCLASS message: %m"); - r = sd_rtnl_message_set_tclass_parent(req, tclass->parent); - if (r < 0) - return r; - - r = sd_rtnl_message_set_tclass_handle(req, tclass->classid); - if (r < 0) - return r; - r = sd_netlink_message_append_string(req, TCA_KIND, TCLASS_VTABLE(tclass)->tca_kind); if (r < 0) return r; diff --git a/src/systemd/sd-netlink.h b/src/systemd/sd-netlink.h index c166cc16716..6b1fcd45219 100644 --- a/src/systemd/sd-netlink.h +++ b/src/systemd/sd-netlink.h @@ -202,13 +202,8 @@ int sd_rtnl_message_routing_policy_rule_get_fib_type(sd_netlink_message *m, uint int sd_rtnl_message_routing_policy_rule_set_flags(sd_netlink_message *m, uint32_t flags); int sd_rtnl_message_routing_policy_rule_get_flags(sd_netlink_message *m, uint32_t *flags); -int sd_rtnl_message_new_qdisc(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int tcm_family, int tcm_ifindex); -int sd_rtnl_message_set_qdisc_parent(sd_netlink_message *m, uint32_t parent); -int sd_rtnl_message_set_qdisc_handle(sd_netlink_message *m, uint32_t handle); - -int sd_rtnl_message_new_tclass(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int tcm_family, int tcm_ifindex); -int sd_rtnl_message_set_tclass_parent(sd_netlink_message *m, uint32_t parent); -int sd_rtnl_message_set_tclass_handle(sd_netlink_message *m, uint32_t handle); +int sd_rtnl_message_new_traffic_control(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, + int ifindex, uint32_t handle, uint32_t parent); int sd_rtnl_message_new_mdb(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int mdb_ifindex);