Skip to content

Commit f50b93f

Browse files
committed
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.
1 parent 89346ac commit f50b93f

File tree

5 files changed

+21
-99
lines changed

5 files changed

+21
-99
lines changed

src/libsystemd/sd-netlink/netlink-message-rtnl.c

Lines changed: 11 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1043,88 +1043,31 @@ int sd_rtnl_message_routing_policy_rule_get_fib_src_prefixlen(sd_netlink_message
10431043
return 0;
10441044
}
10451045

1046-
int sd_rtnl_message_new_qdisc(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int tcm_family, int tcm_ifindex) {
1047-
struct tcmsg *tcm;
1048-
int r;
1049-
1050-
assert_return(rtnl_message_type_is_qdisc(nlmsg_type), -EINVAL);
1051-
assert_return(ret, -EINVAL);
1052-
1053-
r = message_new(rtnl, ret, nlmsg_type);
1054-
if (r < 0)
1055-
return r;
1056-
1057-
if (nlmsg_type == RTM_NEWQDISC)
1058-
(*ret)->hdr->nlmsg_flags |= NLM_F_CREATE | NLM_F_EXCL;
1059-
1060-
tcm = NLMSG_DATA((*ret)->hdr);
1061-
tcm->tcm_family = tcm_family;
1062-
tcm->tcm_ifindex = tcm_ifindex;
1046+
int sd_rtnl_message_new_traffic_control(
1047+
sd_netlink *rtnl,
1048+
sd_netlink_message **ret,
1049+
uint16_t nlmsg_type,
1050+
int ifindex,
1051+
uint32_t handle,
1052+
uint32_t parent) {
10631053

1064-
return 0;
1065-
}
1066-
1067-
int sd_rtnl_message_set_qdisc_parent(sd_netlink_message *m, uint32_t parent) {
1068-
struct tcmsg *tcm;
1069-
1070-
assert_return(rtnl_message_type_is_qdisc(m->hdr->nlmsg_type), -EINVAL);
1071-
1072-
tcm = NLMSG_DATA(m->hdr);
1073-
tcm->tcm_parent = parent;
1074-
1075-
return 0;
1076-
}
1077-
1078-
int sd_rtnl_message_set_qdisc_handle(sd_netlink_message *m, uint32_t handle) {
1079-
struct tcmsg *tcm;
1080-
1081-
assert_return(rtnl_message_type_is_qdisc(m->hdr->nlmsg_type), -EINVAL);
1082-
1083-
tcm = NLMSG_DATA(m->hdr);
1084-
tcm->tcm_handle = handle;
1085-
1086-
return 0;
1087-
}
1088-
1089-
int sd_rtnl_message_new_tclass(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int tcm_family, int tcm_ifindex) {
10901054
struct tcmsg *tcm;
10911055
int r;
10921056

1093-
assert_return(rtnl_message_type_is_tclass(nlmsg_type), -EINVAL);
1057+
assert_return(rtnl_message_type_is_traffic_control(nlmsg_type), -EINVAL);
10941058
assert_return(ret, -EINVAL);
10951059

10961060
r = message_new(rtnl, ret, nlmsg_type);
10971061
if (r < 0)
10981062
return r;
10991063

1100-
if (nlmsg_type == RTM_NEWTCLASS)
1064+
if (IN_SET(nlmsg_type, RTM_NEWQDISC, RTM_NEWTCLASS))
11011065
(*ret)->hdr->nlmsg_flags |= NLM_F_CREATE | NLM_F_EXCL;
11021066

11031067
tcm = NLMSG_DATA((*ret)->hdr);
1104-
tcm->tcm_family = tcm_family;
1105-
tcm->tcm_ifindex = tcm_ifindex;
1106-
1107-
return 0;
1108-
}
1109-
1110-
int sd_rtnl_message_set_tclass_parent(sd_netlink_message *m, uint32_t parent) {
1111-
struct tcmsg *tcm;
1112-
1113-
assert_return(rtnl_message_type_is_tclass(m->hdr->nlmsg_type), -EINVAL);
1114-
1115-
tcm = NLMSG_DATA(m->hdr);
1116-
tcm->tcm_parent = parent;
1117-
1118-
return 0;
1119-
}
1120-
1121-
int sd_rtnl_message_set_tclass_handle(sd_netlink_message *m, uint32_t handle) {
1122-
struct tcmsg *tcm;
1123-
1124-
assert_return(rtnl_message_type_is_tclass(m->hdr->nlmsg_type), -EINVAL);
1125-
1126-
tcm = NLMSG_DATA(m->hdr);
1068+
tcm->tcm_ifindex = ifindex;
11271069
tcm->tcm_handle = handle;
1070+
tcm->tcm_parent = parent;
11281071

11291072
return 0;
11301073
}

src/libsystemd/sd-netlink/netlink-util.h

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,10 @@ static inline bool rtnl_message_type_is_routing_policy_rule(uint16_t type) {
5959
return IN_SET(type, RTM_NEWRULE, RTM_DELRULE, RTM_GETRULE);
6060
}
6161

62-
static inline bool rtnl_message_type_is_qdisc(uint16_t type) {
63-
return IN_SET(type, RTM_NEWQDISC, RTM_DELQDISC, RTM_GETQDISC);
64-
}
65-
66-
static inline bool rtnl_message_type_is_tclass(uint16_t type) {
67-
return IN_SET(type, RTM_NEWTCLASS, RTM_DELTCLASS, RTM_GETTCLASS);
62+
static inline bool rtnl_message_type_is_traffic_control(uint16_t type) {
63+
return IN_SET(type,
64+
RTM_NEWQDISC, RTM_DELQDISC, RTM_GETQDISC,
65+
RTM_NEWTCLASS, RTM_DELTCLASS, RTM_GETTCLASS);
6866
}
6967

7068
static inline bool rtnl_message_type_is_mdb(uint16_t type) {

src/network/tc/qdisc.c

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -179,18 +179,11 @@ int qdisc_configure(Link *link, QDisc *qdisc) {
179179
assert(link->manager->rtnl);
180180
assert(link->ifindex > 0);
181181

182-
r = sd_rtnl_message_new_qdisc(link->manager->rtnl, &req, RTM_NEWQDISC, AF_UNSPEC, link->ifindex);
182+
r = sd_rtnl_message_new_traffic_control(link->manager->rtnl, &req, RTM_NEWQDISC,
183+
link->ifindex, qdisc->handle, qdisc->parent);
183184
if (r < 0)
184185
return log_link_debug_errno(link, r, "Could not create RTM_NEWQDISC message: %m");
185186

186-
r = sd_rtnl_message_set_qdisc_parent(req, qdisc->parent);
187-
if (r < 0)
188-
return r;
189-
190-
r = sd_rtnl_message_set_qdisc_handle(req, qdisc->handle);
191-
if (r < 0)
192-
return r;
193-
194187
if (QDISC_VTABLE(qdisc)) {
195188
if (QDISC_VTABLE(qdisc)->fill_tca_kind) {
196189
r = QDISC_VTABLE(qdisc)->fill_tca_kind(link, qdisc, req);

src/network/tc/tclass.c

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -137,18 +137,11 @@ int tclass_configure(Link *link, TClass *tclass) {
137137
assert(link->manager->rtnl);
138138
assert(link->ifindex > 0);
139139

140-
r = sd_rtnl_message_new_tclass(link->manager->rtnl, &req, RTM_NEWTCLASS, AF_UNSPEC, link->ifindex);
140+
r = sd_rtnl_message_new_traffic_control(link->manager->rtnl, &req, RTM_NEWTCLASS,
141+
link->ifindex, tclass->classid, tclass->parent);
141142
if (r < 0)
142143
return log_link_debug_errno(link, r, "Could not create RTM_NEWTCLASS message: %m");
143144

144-
r = sd_rtnl_message_set_tclass_parent(req, tclass->parent);
145-
if (r < 0)
146-
return r;
147-
148-
r = sd_rtnl_message_set_tclass_handle(req, tclass->classid);
149-
if (r < 0)
150-
return r;
151-
152145
r = sd_netlink_message_append_string(req, TCA_KIND, TCLASS_VTABLE(tclass)->tca_kind);
153146
if (r < 0)
154147
return r;

src/systemd/sd-netlink.h

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -202,13 +202,8 @@ int sd_rtnl_message_routing_policy_rule_get_fib_type(sd_netlink_message *m, uint
202202
int sd_rtnl_message_routing_policy_rule_set_flags(sd_netlink_message *m, uint32_t flags);
203203
int sd_rtnl_message_routing_policy_rule_get_flags(sd_netlink_message *m, uint32_t *flags);
204204

205-
int sd_rtnl_message_new_qdisc(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int tcm_family, int tcm_ifindex);
206-
int sd_rtnl_message_set_qdisc_parent(sd_netlink_message *m, uint32_t parent);
207-
int sd_rtnl_message_set_qdisc_handle(sd_netlink_message *m, uint32_t handle);
208-
209-
int sd_rtnl_message_new_tclass(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int tcm_family, int tcm_ifindex);
210-
int sd_rtnl_message_set_tclass_parent(sd_netlink_message *m, uint32_t parent);
211-
int sd_rtnl_message_set_tclass_handle(sd_netlink_message *m, uint32_t handle);
205+
int sd_rtnl_message_new_traffic_control(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type,
206+
int ifindex, uint32_t handle, uint32_t parent);
212207

213208
int sd_rtnl_message_new_mdb(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int mdb_ifindex);
214209

0 commit comments

Comments
 (0)