From b43dfb6e6ed51e3b01ce1ff4f451e280ad63775a Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Wed, 16 Dec 2020 11:58:46 +0100 Subject: [PATCH] sd-netlink: routing policy rule port to fib_rule_hdr --- src/libsystemd/sd-netlink/rtnl-message.c | 109 ++++++++++----------- src/network/networkd-routing-policy-rule.c | 8 +- src/systemd/sd-netlink.h | 24 ++--- 3 files changed, 70 insertions(+), 71 deletions(-) diff --git a/src/libsystemd/sd-netlink/rtnl-message.c b/src/libsystemd/sd-netlink/rtnl-message.c index 4cabbabba6..7395ef89f8 100644 --- a/src/libsystemd/sd-netlink/rtnl-message.c +++ b/src/libsystemd/sd-netlink/rtnl-message.c @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include +#include #include #include #include @@ -197,7 +198,7 @@ int sd_rtnl_message_route_get_scope(const sd_netlink_message *m, unsigned char * return 0; } -int sd_rtnl_message_route_get_tos(const sd_netlink_message *m, unsigned char *tos) { +int sd_rtnl_message_route_get_tos(const sd_netlink_message *m, uint8_t *tos) { struct rtmsg *rtm; assert_return(m, -EINVAL); @@ -848,7 +849,7 @@ int sd_rtnl_message_addrlabel_get_prefixlen(const sd_netlink_message *m, unsigne } int sd_rtnl_message_new_routing_policy_rule(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int ifal_family) { - struct rtmsg *rtm; + struct fib_rule_hdr *frh; int r; assert_return(rtnl_message_type_is_routing_policy_rule(nlmsg_type), -EINVAL); @@ -861,177 +862,175 @@ int sd_rtnl_message_new_routing_policy_rule(sd_netlink *rtnl, sd_netlink_message if (nlmsg_type == RTM_NEWRULE) (*ret)->hdr->nlmsg_flags |= NLM_F_CREATE | NLM_F_EXCL; - rtm = NLMSG_DATA((*ret)->hdr); - rtm->rtm_family = ifal_family; - rtm->rtm_protocol = RTPROT_BOOT; - rtm->rtm_scope = RT_SCOPE_UNIVERSE; - rtm->rtm_type = RTN_UNICAST; + frh = NLMSG_DATA((*ret)->hdr); + frh->family = ifal_family; + frh->action = FR_ACT_TO_TBL; return 0; } -int sd_rtnl_message_routing_policy_rule_set_tos(sd_netlink_message *m, unsigned char tos) { - struct rtmsg *routing_policy_rule; +int sd_rtnl_message_routing_policy_rule_set_tos(sd_netlink_message *m, uint8_t tos) { + struct fib_rule_hdr *frh; assert_return(m, -EINVAL); assert_return(m->hdr, -EINVAL); assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL); - routing_policy_rule = NLMSG_DATA(m->hdr); + frh = NLMSG_DATA(m->hdr); - routing_policy_rule->rtm_tos = tos; + frh->tos = tos; return 0; } -int sd_rtnl_message_routing_policy_rule_get_tos(const sd_netlink_message *m, unsigned char *tos) { - struct rtmsg *routing_policy_rule; +int sd_rtnl_message_routing_policy_rule_get_tos(const sd_netlink_message *m, uint8_t *tos) { + struct fib_rule_hdr *frh; assert_return(m, -EINVAL); assert_return(m->hdr, -EINVAL); assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL); - routing_policy_rule = NLMSG_DATA(m->hdr); + frh = NLMSG_DATA(m->hdr); - *tos = routing_policy_rule->rtm_tos; + *tos = frh->tos; return 0; } -int sd_rtnl_message_routing_policy_rule_set_table(sd_netlink_message *m, unsigned char table) { - struct rtmsg *routing_policy_rule; +int sd_rtnl_message_routing_policy_rule_set_table(sd_netlink_message *m, uint8_t table) { + struct fib_rule_hdr *frh; assert_return(m, -EINVAL); assert_return(m->hdr, -EINVAL); assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL); - routing_policy_rule = NLMSG_DATA(m->hdr); + frh = NLMSG_DATA(m->hdr); - routing_policy_rule->rtm_table = table; + frh->table = table; return 0; } -int sd_rtnl_message_routing_policy_rule_get_table(const sd_netlink_message *m, unsigned char *table) { - struct rtmsg *routing_policy_rule; +int sd_rtnl_message_routing_policy_rule_get_table(const sd_netlink_message *m, uint8_t *table) { + struct fib_rule_hdr *frh; assert_return(m, -EINVAL); assert_return(m->hdr, -EINVAL); assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL); - routing_policy_rule = NLMSG_DATA(m->hdr); + frh = NLMSG_DATA(m->hdr); - *table = routing_policy_rule->rtm_table; + *table = frh->table; return 0; } -int sd_rtnl_message_routing_policy_rule_set_flags(sd_netlink_message *m, unsigned flags) { - struct rtmsg *routing_policy_rule; +int sd_rtnl_message_routing_policy_rule_set_flags(sd_netlink_message *m, uint32_t flags) { + struct fib_rule_hdr *frh; assert_return(m, -EINVAL); assert_return(m->hdr, -EINVAL); assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL); - routing_policy_rule = NLMSG_DATA(m->hdr); - routing_policy_rule->rtm_flags |= flags; + frh = NLMSG_DATA(m->hdr); + frh->flags |= flags; return 0; } -int sd_rtnl_message_routing_policy_rule_get_flags(const sd_netlink_message *m, unsigned *flags) { - struct rtmsg *routing_policy_rule; +int sd_rtnl_message_routing_policy_rule_get_flags(const sd_netlink_message *m, uint32_t *flags) { + struct fib_rule_hdr *frh; assert_return(m, -EINVAL); assert_return(m->hdr, -EINVAL); assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL); - routing_policy_rule = NLMSG_DATA(m->hdr); - *flags = routing_policy_rule->rtm_flags; + frh = NLMSG_DATA(m->hdr); + *flags = frh->flags; return 0; } -int sd_rtnl_message_routing_policy_rule_set_rtm_type(sd_netlink_message *m, unsigned char type) { - struct rtmsg *routing_policy_rule; +int sd_rtnl_message_routing_policy_rule_set_fib_type(sd_netlink_message *m, uint8_t type) { + struct fib_rule_hdr *frh; assert_return(m, -EINVAL); assert_return(m->hdr, -EINVAL); assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL); - routing_policy_rule = NLMSG_DATA(m->hdr); + frh = NLMSG_DATA(m->hdr); - routing_policy_rule->rtm_type = type; + frh->action = type; return 0; } -int sd_rtnl_message_routing_policy_rule_get_rtm_type(const sd_netlink_message *m, unsigned char *type) { - struct rtmsg *routing_policy_rule; +int sd_rtnl_message_routing_policy_rule_get_fib_type(const sd_netlink_message *m, uint8_t *type) { + struct fib_rule_hdr *frh; assert_return(m, -EINVAL); assert_return(m->hdr, -EINVAL); assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL); - routing_policy_rule = NLMSG_DATA(m->hdr); + frh = NLMSG_DATA(m->hdr); - *type = routing_policy_rule->rtm_type; + *type = frh->action; return 0; } -int sd_rtnl_message_routing_policy_rule_set_rtm_dst_prefixlen(sd_netlink_message *m, unsigned char len) { - struct rtmsg *routing_policy_rule; +int sd_rtnl_message_routing_policy_rule_set_fib_dst_prefixlen(sd_netlink_message *m, uint8_t len) { + struct fib_rule_hdr *frh; assert_return(m, -EINVAL); assert_return(m->hdr, -EINVAL); assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL); - routing_policy_rule = NLMSG_DATA(m->hdr); + frh = NLMSG_DATA(m->hdr); - routing_policy_rule->rtm_dst_len = len; + frh->dst_len = len; return 0; } -int sd_rtnl_message_routing_policy_rule_get_rtm_dst_prefixlen(const sd_netlink_message *m, unsigned char *len) { - struct rtmsg *routing_policy_rule; +int sd_rtnl_message_routing_policy_rule_get_fib_dst_prefixlen(const sd_netlink_message *m, uint8_t *len) { + struct fib_rule_hdr *frh; assert_return(m, -EINVAL); assert_return(m->hdr, -EINVAL); assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL); - routing_policy_rule = NLMSG_DATA(m->hdr); + frh = NLMSG_DATA(m->hdr); - *len = routing_policy_rule->rtm_dst_len; + *len = frh->dst_len; return 0; } -int sd_rtnl_message_routing_policy_rule_set_rtm_src_prefixlen(sd_netlink_message *m, unsigned char len) { - struct rtmsg *routing_policy_rule; +int sd_rtnl_message_routing_policy_rule_set_fib_src_prefixlen(sd_netlink_message *m, uint8_t len) { + struct fib_rule_hdr *frh; assert_return(m, -EINVAL); assert_return(m->hdr, -EINVAL); assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL); - routing_policy_rule = NLMSG_DATA(m->hdr); + frh = NLMSG_DATA(m->hdr); - routing_policy_rule->rtm_src_len = len; + frh->src_len = len; return 0; } -int sd_rtnl_message_routing_policy_rule_get_rtm_src_prefixlen(const sd_netlink_message *m, unsigned char *len) { - struct rtmsg *routing_policy_rule; +int sd_rtnl_message_routing_policy_rule_get_fib_src_prefixlen(const sd_netlink_message *m, uint8_t *len) { + struct fib_rule_hdr *frh; assert_return(m, -EINVAL); assert_return(m->hdr, -EINVAL); assert_return(rtnl_message_type_is_routing_policy_rule(m->hdr->nlmsg_type), -EINVAL); - routing_policy_rule = NLMSG_DATA(m->hdr); + frh = NLMSG_DATA(m->hdr); - *len = routing_policy_rule->rtm_src_len; + *len = frh->src_len; return 0; } diff --git a/src/network/networkd-routing-policy-rule.c b/src/network/networkd-routing-policy-rule.c index 797898093e..4e4c347c7b 100644 --- a/src/network/networkd-routing-policy-rule.c +++ b/src/network/networkd-routing-policy-rule.c @@ -380,7 +380,7 @@ static int routing_policy_rule_set_netlink_message(RoutingPolicyRule *rule, sd_n if (r < 0) return log_link_error_errno(link, r, "Could not append FRA_SRC attribute: %m"); - r = sd_rtnl_message_routing_policy_rule_set_rtm_src_prefixlen(m, rule->from_prefixlen); + r = sd_rtnl_message_routing_policy_rule_set_fib_src_prefixlen(m, rule->from_prefixlen); if (r < 0) return log_link_error_errno(link, r, "Could not set source prefix length: %m"); } @@ -390,7 +390,7 @@ static int routing_policy_rule_set_netlink_message(RoutingPolicyRule *rule, sd_n if (r < 0) return log_link_error_errno(link, r, "Could not append FRA_DST attribute: %m"); - r = sd_rtnl_message_routing_policy_rule_set_rtm_dst_prefixlen(m, rule->to_prefixlen); + r = sd_rtnl_message_routing_policy_rule_set_fib_dst_prefixlen(m, rule->to_prefixlen); if (r < 0) return log_link_error_errno(link, r, "Could not set destination prefix length: %m"); } @@ -749,7 +749,7 @@ int manager_rtnl_process_rule(sd_netlink *rtnl, sd_netlink_message *message, Man log_warning_errno(r, "rtnl: could not get FRA_SRC attribute, ignoring: %m"); return 0; } else if (r >= 0) { - r = sd_rtnl_message_routing_policy_rule_get_rtm_src_prefixlen(message, &tmp->from_prefixlen); + r = sd_rtnl_message_routing_policy_rule_get_fib_src_prefixlen(message, &tmp->from_prefixlen); if (r < 0) { log_warning_errno(r, "rtnl: received rule message without valid source prefix length, ignoring: %m"); return 0; @@ -761,7 +761,7 @@ int manager_rtnl_process_rule(sd_netlink *rtnl, sd_netlink_message *message, Man log_warning_errno(r, "rtnl: could not get FRA_DST attribute, ignoring: %m"); return 0; } else if (r >= 0) { - r = sd_rtnl_message_routing_policy_rule_get_rtm_dst_prefixlen(message, &tmp->to_prefixlen); + r = sd_rtnl_message_routing_policy_rule_get_fib_dst_prefixlen(message, &tmp->to_prefixlen); if (r < 0) { log_warning_errno(r, "rtnl: received rule message without valid destination prefix length, ignoring: %m"); return 0; diff --git a/src/systemd/sd-netlink.h b/src/systemd/sd-netlink.h index bf6d1e47ff..c0c436c7ca 100644 --- a/src/systemd/sd-netlink.h +++ b/src/systemd/sd-netlink.h @@ -196,18 +196,18 @@ int sd_rtnl_message_addrlabel_set_prefixlen(sd_netlink_message *m, unsigned char int sd_rtnl_message_addrlabel_get_prefixlen(const sd_netlink_message *m, unsigned char *prefixlen); int sd_rtnl_message_new_routing_policy_rule(sd_netlink *rtnl, sd_netlink_message **ret, uint16_t nlmsg_type, int ifal_family); -int sd_rtnl_message_routing_policy_rule_set_tos(sd_netlink_message *m, unsigned char tos); -int sd_rtnl_message_routing_policy_rule_get_tos(const sd_netlink_message *m, unsigned char *tos); -int sd_rtnl_message_routing_policy_rule_set_table(sd_netlink_message *m, unsigned char table); -int sd_rtnl_message_routing_policy_rule_get_table(const sd_netlink_message *m, unsigned char *table); -int sd_rtnl_message_routing_policy_rule_set_rtm_src_prefixlen(sd_netlink_message *m, unsigned char len); -int sd_rtnl_message_routing_policy_rule_get_rtm_src_prefixlen(const sd_netlink_message *m, unsigned char *len); -int sd_rtnl_message_routing_policy_rule_set_rtm_dst_prefixlen(sd_netlink_message *m, unsigned char len); -int sd_rtnl_message_routing_policy_rule_get_rtm_dst_prefixlen(const sd_netlink_message *m, unsigned char *len); -int sd_rtnl_message_routing_policy_rule_set_rtm_type(sd_netlink_message *m, unsigned char type); -int sd_rtnl_message_routing_policy_rule_get_rtm_type(const sd_netlink_message *m, unsigned char *type); -int sd_rtnl_message_routing_policy_rule_set_flags(sd_netlink_message *m, unsigned flags); -int sd_rtnl_message_routing_policy_rule_get_flags(const sd_netlink_message *m, unsigned *flags); +int sd_rtnl_message_routing_policy_rule_set_tos(sd_netlink_message *m, uint8_t tos); +int sd_rtnl_message_routing_policy_rule_get_tos(const sd_netlink_message *m, uint8_t *tos); +int sd_rtnl_message_routing_policy_rule_set_table(sd_netlink_message *m, uint8_t table); +int sd_rtnl_message_routing_policy_rule_get_table(const sd_netlink_message *m, uint8_t *table); +int sd_rtnl_message_routing_policy_rule_set_fib_src_prefixlen(sd_netlink_message *m, uint8_t len); +int sd_rtnl_message_routing_policy_rule_get_fib_src_prefixlen(const sd_netlink_message *m, uint8_t *len); +int sd_rtnl_message_routing_policy_rule_set_fib_dst_prefixlen(sd_netlink_message *m, uint8_t len); +int sd_rtnl_message_routing_policy_rule_get_fib_dst_prefixlen(const sd_netlink_message *m, uint8_t *len); +int sd_rtnl_message_routing_policy_rule_set_fib_type(sd_netlink_message *m, uint8_t type); +int sd_rtnl_message_routing_policy_rule_get_fib_type(const sd_netlink_message *m, uint8_t *type); +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(const 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);