summaryrefslogtreecommitdiffstats
path: root/discover
diff options
context:
space:
mode:
authorSamuel Mendoza-Jonas <sam@mendozajonas.com>2018-05-23 16:25:25 +1000
committerSamuel Mendoza-Jonas <sam@mendozajonas.com>2018-07-10 14:42:56 +1000
commit08f8488096f397a1babc960bb9939484a3916c66 (patch)
tree5665a81249b540decd8e681d16b5f65991dfcc67 /discover
parentbecf2b28d8b0aa561ac7e42db519071f8065d37f (diff)
downloadtalos-petitboot-08f8488096f397a1babc960bb9939484a3916c66.tar.gz
talos-petitboot-08f8488096f397a1babc960bb9939484a3916c66.zip
discover/sysinfo: Set IPv6 addresses
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
Diffstat (limited to 'discover')
-rw-r--r--discover/sysinfo.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/discover/sysinfo.c b/discover/sysinfo.c
index 74d1eae..8497959 100644
--- a/discover/sysinfo.c
+++ b/discover/sysinfo.c
@@ -4,6 +4,7 @@
#include <talloc/talloc.h>
#include <process/process.h>
#include <log/log.h>
+#include <url/url.h>
#include "discover-server.h"
#include "platform.h"
@@ -32,7 +33,7 @@ void system_info_set_interface_address(unsigned int hwaddr_size,
{
struct interface_info *if_info;
unsigned int i;
- char mac[20];
+ char mac[20], **if_addr, *new_addr, *subnet;
for (i = 0; i < sysinfo->n_interfaces; i++) {
if_info = sysinfo->interfaces[i];
@@ -43,11 +44,24 @@ void system_info_set_interface_address(unsigned int hwaddr_size,
if (memcmp(if_info->hwaddr, hwaddr, hwaddr_size))
continue;
+ /*
+ * Don't include the subnet from a static config, and check if
+ * we're updating the IPv4 or IPv6 address.
+ * */
+ if ((subnet = strchr(address, '/')))
+ new_addr = talloc_strndup(if_info, address, subnet - address);
+ else
+ new_addr = talloc_strdup(if_info, address);
+ if (addr_scheme(new_addr) == AF_INET)
+ if_addr = &if_info->address;
+ else
+ if_addr = &if_info->address_v6;
+
/* Found an existing interface. Notify clients if a new address
* is set */
- if (!if_info->address || strcmp(if_info->address, address)) {
- talloc_free(if_info->address);
- if_info->address = talloc_strdup(if_info, address);
+ if (!*if_addr || strcmp(*if_addr, address)) {
+ talloc_free(*if_addr);
+ *if_addr = new_addr;
discover_server_notify_system_info(server, sysinfo);
return;
}
OpenPOWER on IntegriCloud