#include <log/log.h>
#include <list/list.h>
+#include <file/file.h>
#include <types/types.h>
#include <talloc/talloc.h>
#include <waiter/waiter.h>
#include <process/process.h>
#include <system/system.h>
-#include "file.h"
#include "network.h"
#include "sysinfo.h"
#include "platform.h"
return NULL;
}
+uint8_t *find_mac_by_name(void *ctx, struct network *network,
+ const char *name)
+{
+ struct interface *interface;
+
+ interface = find_interface_by_name(network, name);
+ if (!interface)
+ return NULL;
+
+ return talloc_memdup(ctx, &interface->hwaddr,
+ sizeof(uint8_t) * HWADDR_SIZE);
+}
+
static int network_init_netlink(struct network *network)
{
struct sockaddr_nl addr;
return;
}
-static void configure_interface_static(struct interface *interface,
+static void configure_interface_static(struct network *network,
+ struct interface *interface,
const struct interface_config *config)
{
int rc;
interface->name);
}
+ if (config->static_config.url) {
+ pb_log("config URL %s\n", config->static_config.url);
+ device_handler_process_url(network->handler,
+ config->static_config.url,
+ mac_bytes_to_string(interface->dev,
+ interface->hwaddr,
+ sizeof(interface->hwaddr)),
+ config->static_config.address);
+ }
+
return;
}
configure_interface_dhcp(interface);
} else if (config->method == CONFIG_METHOD_STATIC) {
- configure_interface_static(interface, config);
+ configure_interface_static(network, interface, config);
}
}
add_interface(network, interface);
}
+ /* A repeated RTM_NEWLINK can represent an interface name change */
+ if (strncmp(interface->name, ifname, IFNAMSIZ)) {
+ pb_debug("ifname update: %s -> %s\n", interface->name, ifname);
+ strncpy(interface->name, ifname, sizeof(interface->name) - 1);
+ talloc_free(interface->dev->device->id);
+ interface->dev->device->id =
+ talloc_strdup(interface->dev->device, ifname);
+ }
+
/* notify the sysinfo code about changes to this interface */
if (strcmp(interface->name, "lo"))
system_info_register_interface(