int manager_rtnl_process_rule(sd_netlink *rtnl, sd_netlink_message *message, Manager *m) {
_cleanup_(routing_policy_rule_freep) RoutingPolicyRule *tmp = NULL;
RoutingPolicyRule *rule = NULL;
- const char *iif = NULL, *oif = NULL;
bool adjust_protocol = false;
- uint32_t suppress_prefixlen;
- unsigned flags;
uint16_t type;
int r;
}
}
+ unsigned flags;
r = sd_rtnl_message_routing_policy_rule_get_flags(message, &flags);
if (r < 0) {
log_warning_errno(r, "rtnl: received rule message without valid flag, ignoring: %m");
return 0;
}
- r = sd_netlink_message_read_string(message, FRA_IIFNAME, &iif);
+ r = sd_netlink_message_read_string_strdup(message, FRA_IIFNAME, &tmp->iif);
if (r < 0 && r != -ENODATA) {
log_warning_errno(r, "rtnl: could not get FRA_IIFNAME attribute, ignoring: %m");
return 0;
}
- r = free_and_strdup(&tmp->iif, iif);
- if (r < 0)
- return log_oom();
- r = sd_netlink_message_read_string(message, FRA_OIFNAME, &oif);
+ r = sd_netlink_message_read_string_strdup(message, FRA_OIFNAME, &tmp->oif);
if (r < 0 && r != -ENODATA) {
log_warning_errno(r, "rtnl: could not get FRA_OIFNAME attribute, ignoring: %m");
return 0;
}
- r = free_and_strdup(&tmp->oif, oif);
- if (r < 0)
- return log_oom();
r = sd_netlink_message_read_u8(message, FRA_IP_PROTO, &tmp->ipproto);
if (r < 0 && r != -ENODATA) {
return 0;
}
+ uint32_t suppress_prefixlen;
r = sd_netlink_message_read_u32(message, FRA_SUPPRESS_PREFIXLEN, &suppress_prefixlen);
if (r < 0 && r != -ENODATA) {
log_warning_errno(r, "rtnl: could not get FRA_SUPPRESS_PREFIXLEN attribute, ignoring: %m");