summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2020-04-13 10:47:40 +0200
committerGitHub <noreply@github.com>2020-04-13 10:47:40 +0200
commitd9235719f204ad7d64b74a01de1fcbb27d45d2cf (patch)
tree9f9ee14fb31cd48a15a49d2152f83ce62cc32514
parent38cd55b007c955ee1a5fd80d89086d4f930d802d (diff)
parent659f85a519f4e33c17079d613603db7c822f17aa (diff)
downloadsystemd-d9235719f204ad7d64b74a01de1fcbb27d45d2cf.tar.gz
Merge pull request #15397 from ssahani/vxlan
network: VXlan group and remote fixes
-rw-r--r--src/network/netdev/vxlan.c14
-rw-r--r--src/network/networkctl.c10
2 files changed, 22 insertions, 2 deletions
diff --git a/src/network/netdev/vxlan.c b/src/network/netdev/vxlan.c
index ace3c5d2ed..d49f39e0c9 100644
--- a/src/network/netdev/vxlan.c
+++ b/src/network/netdev/vxlan.c
@@ -38,7 +38,14 @@ static int netdev_vxlan_fill_message_create(NetDev *netdev, Link *link, sd_netli
return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_ID attribute: %m");
}
- if (in_addr_is_null(v->remote_family, &v->remote) == 0) {
+ if (in_addr_is_null(v->group_family, &v->group) == 0) {
+ if (v->group_family == AF_INET)
+ r = sd_netlink_message_append_in_addr(m, IFLA_VXLAN_GROUP, &v->group.in);
+ else
+ r = sd_netlink_message_append_in6_addr(m, IFLA_VXLAN_GROUP6, &v->group.in6);
+ if (r < 0)
+ return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_GROUP attribute: %m");
+ } else if (in_addr_is_null(v->remote_family, &v->remote) == 0) {
if (v->remote_family == AF_INET)
r = sd_netlink_message_append_in_addr(m, IFLA_VXLAN_GROUP, &v->remote.in);
else
@@ -348,6 +355,11 @@ static int netdev_vxlan_verify(NetDev *netdev, const char *filename) {
if (!v->dest_port && v->generic_protocol_extension)
v->dest_port = 4790;
+ if (in_addr_is_null(v->group_family, &v->group) == 0 && in_addr_is_null(v->remote_family, &v->remote) == 0)
+ return log_netdev_warning_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
+ "%s: VXLAN both 'Group=' and 'Remote=' cannot be specified. Ignoring.",
+ filename);
+
return 0;
}
diff --git a/src/network/networkctl.c b/src/network/networkctl.c
index 952fd55578..2e2ba4732c 100644
--- a/src/network/networkctl.c
+++ b/src/network/networkctl.c
@@ -1549,9 +1549,17 @@ static int link_status_one(
}
if (IN_SET(info->vxlan_info.group_family, AF_INET, AF_INET6)) {
+ const char *p;
+
+ r = in_addr_is_multicast(info->vxlan_info.group_family, &info->vxlan_info.group);
+ if (r <= 0)
+ p = "Remote:";
+ else
+ p = "Group:";
+
r = table_add_many(table,
TABLE_EMPTY,
- TABLE_STRING, "Group:",
+ TABLE_STRING, p,
info->vxlan_info.group_family == AF_INET ? TABLE_IN_ADDR : TABLE_IN6_ADDR,
&info->vxlan_info.group);
if (r < 0)