summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2020-10-28 17:49:49 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2020-12-14 23:25:09 +0900
commitad6df71759aac0218519e3d0da61fb33b729387e (patch)
treeafaf8d38c2e6728bd7000485c16846ae734eefa7
parent38abd1bfc514bef0eb5580277ed661ebb1c7727e (diff)
downloadsystemd-ad6df71759aac0218519e3d0da61fb33b729387e.tar.gz
network: use netlink_message_read_in_addr_union() where applicable
-rw-r--r--src/network/networkd-route.c79
1 files changed, 22 insertions, 57 deletions
diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c
index ccacfacf3d..2c182fe19c 100644
--- a/src/network/networkd-route.c
+++ b/src/network/networkd-route.c
@@ -1370,7 +1370,6 @@ int manager_rtnl_process_route(sd_netlink *rtnl, sd_netlink_message *message, Ma
uint32_t ifindex;
uint16_t type;
unsigned char table;
- RouteVia via;
size_t rta_len;
int r;
@@ -1434,20 +1433,20 @@ int manager_rtnl_process_route(sd_netlink *rtnl, sd_netlink_message *message, Ma
return 0;
}
- switch (tmp->family) {
- case AF_INET:
- r = sd_netlink_message_read_in_addr(message, RTA_DST, &tmp->dst.in);
- if (r < 0 && r != -ENODATA) {
- log_link_warning_errno(link, r, "rtnl: received route message without valid destination, ignoring: %m");
- return 0;
- }
+ r = netlink_message_read_in_addr_union(message, RTA_DST, tmp->family, &tmp->dst);
+ if (r < 0 && r != -ENODATA) {
+ log_link_warning_errno(link, r, "rtnl: received route message without valid destination, ignoring: %m");
+ return 0;
+ }
- r = sd_netlink_message_read_in_addr(message, RTA_GATEWAY, &tmp->gw.in);
- if (r < 0 && r != -ENODATA) {
- log_link_warning_errno(link, r, "rtnl: received route message without valid gateway, ignoring: %m");
- return 0;
- } else if (r >= 0)
- tmp->gw_family = AF_INET;
+ r = netlink_message_read_in_addr_union(message, RTA_GATEWAY, tmp->family, &tmp->gw);
+ if (r < 0 && r != -ENODATA) {
+ log_link_warning_errno(link, r, "rtnl: received route message without valid gateway, ignoring: %m");
+ return 0;
+ } else if (r >= 0)
+ tmp->gw_family = tmp->family;
+ else if (tmp->family == AF_INET) {
+ RouteVia via;
r = sd_netlink_message_read(message, RTA_VIA, sizeof(via), &via);
if (r < 0 && r != -ENODATA) {
@@ -1457,51 +1456,17 @@ int manager_rtnl_process_route(sd_netlink *rtnl, sd_netlink_message *message, Ma
tmp->gw_family = via.family;
tmp->gw = via.address;
}
+ }
- r = sd_netlink_message_read_in_addr(message, RTA_SRC, &tmp->src.in);
- if (r < 0 && r != -ENODATA) {
- log_link_warning_errno(link, r, "rtnl: received route message without valid source, ignoring: %m");
- return 0;
- }
-
- r = sd_netlink_message_read_in_addr(message, RTA_PREFSRC, &tmp->prefsrc.in);
- if (r < 0 && r != -ENODATA) {
- log_link_warning_errno(link, r, "rtnl: received route message without valid preferred source, ignoring: %m");
- return 0;
- }
-
- break;
-
- case AF_INET6:
- r = sd_netlink_message_read_in6_addr(message, RTA_DST, &tmp->dst.in6);
- if (r < 0 && r != -ENODATA) {
- log_link_warning_errno(link, r, "rtnl: received route message without valid destination, ignoring: %m");
- return 0;
- }
-
- r = sd_netlink_message_read_in6_addr(message, RTA_GATEWAY, &tmp->gw.in6);
- if (r < 0 && r != -ENODATA) {
- log_link_warning_errno(link, r, "rtnl: received route message without valid gateway, ignoring: %m");
- return 0;
- } else if (r >= 0)
- tmp->gw_family = AF_INET6;
-
- r = sd_netlink_message_read_in6_addr(message, RTA_SRC, &tmp->src.in6);
- if (r < 0 && r != -ENODATA) {
- log_link_warning_errno(link, r, "rtnl: received route message without valid source, ignoring: %m");
- return 0;
- }
-
- r = sd_netlink_message_read_in6_addr(message, RTA_PREFSRC, &tmp->prefsrc.in6);
- if (r < 0 && r != -ENODATA) {
- log_link_warning_errno(link, r, "rtnl: received route message without valid preferred source, ignoring: %m");
- return 0;
- }
-
- break;
+ r = netlink_message_read_in_addr_union(message, RTA_SRC, tmp->family, &tmp->src);
+ if (r < 0 && r != -ENODATA) {
+ log_link_warning_errno(link, r, "rtnl: received route message without valid source, ignoring: %m");
+ return 0;
+ }
- default:
- assert_not_reached("Received route message with unsupported address family");
+ r = netlink_message_read_in_addr_union(message, RTA_PREFSRC, tmp->family, &tmp->prefsrc);
+ if (r < 0 && r != -ENODATA) {
+ log_link_warning_errno(link, r, "rtnl: received route message without valid preferred source, ignoring: %m");
return 0;
}