#include <unistd.h>
#include "networkd.h"
+#include "networkd-netdev.h"
#include "libudev-private.h"
#include "udev-util.h"
#include "util.h"
route->in_addr.in = static_routes[i].gw_addr;
route->dst_addr.in = static_routes[i].dst_addr;
route->dst_prefixlen = static_routes[i].dst_prefixlen;
- route->metrics = DHCP_STATIC_ROUTE_METRIC;
+ route->metrics = DHCP_ROUTE_METRIC;
r = route_configure(route, link, &route_handler);
if (r < 0) {
route->family = AF_INET;
route->scope = RT_SCOPE_LINK;
- route->metrics = 99;
+ route->metrics = IPV4LL_ROUTE_METRIC;
r = route_configure(route, link, &route_handler);
if (r < 0) {
route_gw->dst_addr.in = gateway;
route_gw->dst_prefixlen = 32;
route_gw->scope = RT_SCOPE_LINK;
- route_gw->metrics = DHCP_STATIC_ROUTE_METRIC;
+ route_gw->metrics = DHCP_ROUTE_METRIC;
r = route_configure(route_gw, link, &route_handler);
if (r < 0) {
route->family = AF_INET;
route->in_addr.in = gateway;
- route->metrics = DHCP_STATIC_ROUTE_METRIC;
+ route->metrics = DHCP_ROUTE_METRIC;
r = route_configure(route, link, &route_handler);
if (r < 0) {
"ERRNO=%d", -r,
NULL);
- return 0;
+ return 1;
}
static int link_get_address_handler(sd_rtnl *rtnl, sd_rtnl_message *m, void *userdata) {
link->ifname, strerror(-r),
"ERRNO=%d", -r,
NULL);
- if (r >= 0) {
+ else if (r >= 0) {
/* calling handler directly so take a ref */
link_ref(link);
link_get_address_handler(rtnl, m, link);
"ERRNO=%d", -r,
NULL);
- return 0;
+ return 1;
}
static int address_drop_handler(sd_rtnl *rtnl, sd_rtnl_message *m, void *userdata) {
"ERRNO=%d", -r,
NULL);
- return 0;
+ return 1;
}
static int set_hostname_handler(sd_bus *bus, sd_bus_message *m, void *userdata, sd_bus_error *ret_error) {
return 0;
}
-static int link_enslaved(Link *link) {
+static int link_joined(Link *link) {
int r;
assert(link);
assert(link->state == LINK_STATE_ENSLAVING);
assert(link->network);
- log_debug_link(link, "enslaved");
+ log_debug_link(link, "joined netdev");
if (!(link->flags & IFF_UP)) {
r = link_up(link);
return link_enter_set_addresses(link);
}
-static int enslave_handler(sd_rtnl *rtnl, sd_rtnl_message *m, void *userdata) {
+static int netdev_join_handler(sd_rtnl *rtnl, sd_rtnl_message *m, void *userdata) {
_cleanup_link_unref_ Link *link = userdata;
int r;
r = sd_rtnl_message_get_errno(m);
if (r < 0 && r != -EEXIST) {
log_struct_link(LOG_ERR, link,
- "MESSAGE=%-*s: could not enslave: %s",
+ "MESSAGE=%-*s: could not join netdev: %s",
IFNAMSIZ,
link->ifname, strerror(-r),
"ERRNO=%d", -r,
}
if (link->enslaving <= 0)
- link_enslaved(link);
+ link_joined(link);
return 1;
}
-static int link_enter_enslave(Link *link) {
+static int link_enter_join_netdev(Link *link) {
NetDev *vlan, *macvlan, *vxlan;
Iterator i;
int r;
hashmap_isempty(link->network->vlans) &&
hashmap_isempty(link->network->macvlans) &&
hashmap_isempty(link->network->vxlans))
- return link_enslaved(link);
+ return link_joined(link);
if (link->network->bond) {
log_struct_link(LOG_DEBUG, link,
NETDEV(link->network->bond),
NULL);
- r = netdev_enslave(link->network->bond, link, &enslave_handler);
+ r = netdev_join(link->network->bond, link, &netdev_join_handler);
if (r < 0) {
log_struct_link(LOG_WARNING, link,
- "MESSAGE=%-*s: could not enslave by '%s': %s",
+ "MESSAGE=%-*s: could not join netdev '%s': %s",
IFNAMSIZ,
link->ifname, link->network->bond->ifname, strerror(-r),
NETDEV(link->network->bond),
NETDEV(link->network->bridge),
NULL);
- r = netdev_enslave(link->network->bridge, link, &enslave_handler);
+ r = netdev_join(link->network->bridge, link, &netdev_join_handler);
if (r < 0) {
log_struct_link(LOG_WARNING, link,
- "MESSAGE=%-*s: could not enslave by '%s': %s",
+ "MESSAGE=%-*s: could not join netdev '%s': %s",
IFNAMSIZ,
link->ifname, link->network->bridge->ifname, strerror(-r),
NETDEV(link->network->bridge),
NETDEV(link->network->tunnel),
NULL);
- r = netdev_enslave(link->network->tunnel, link, &enslave_handler);
+ r = netdev_join(link->network->tunnel, link, &netdev_join_handler);
if (r < 0) {
log_struct_link(LOG_WARNING, link,
- "MESSAGE=%-*s: could not enslave by '%s': %s",
+ "MESSAGE=%-*s: could not join netdev '%s': %s",
IFNAMSIZ,
link->ifname, link->network->tunnel->ifname, strerror(-r),
NETDEV(link->network->tunnel),
IFNAMSIZ,
link->ifname, vlan->ifname, NETDEV(vlan), NULL);
- r = netdev_enslave(vlan, link, &enslave_handler);
+ r = netdev_join(vlan, link, &netdev_join_handler);
if (r < 0) {
log_struct_link(LOG_WARNING, link,
- "MESSAGE=%-*s: could not enslave by '%s': %s",
+ "MESSAGE=%-*s: could not join netdev '%s': %s",
IFNAMSIZ,
link->ifname, vlan->ifname, strerror(-r),
NETDEV(vlan), NULL);
IFNAMSIZ,
link->ifname, macvlan->ifname, NETDEV(macvlan), NULL);
- r = netdev_enslave(macvlan, link, &enslave_handler);
+ r = netdev_join(macvlan, link, &netdev_join_handler);
if (r < 0) {
log_struct_link(LOG_WARNING, link,
- "MESSAGE=%-*s: could not enslave by '%s': %s",
+ "MESSAGE=%-*s: could not join netdev '%s': %s",
IFNAMSIZ,
link->ifname, macvlan->ifname, strerror(-r),
NETDEV(macvlan), NULL);
IFNAMSIZ,
link->ifname, vxlan->ifname, NETDEV(vxlan), NULL);
- r = netdev_enslave(vxlan, link, &enslave_handler);
+ r = netdev_join(vxlan, link, &netdev_join_handler);
if (r < 0) {
log_struct_link(LOG_WARNING, link,
- "MESSAGE=%*s: could not enslave by '%s': %s",
+ "MESSAGE=%*s: could not join netdev '%s': %s",
IFNAMSIZ,
link->ifname, vxlan->ifname, strerror(-r),
NETDEV(vxlan), NULL);
if (r < 0)
return r;
+ r = sd_dhcp_client_set_request_broadcast(link->dhcp_client, link->network->dhcp_broadcast);
+ if (r < 0)
+ return r;
+
if (link->network->dhcp_mtu) {
r = sd_dhcp_client_set_request_option(link->dhcp_client, 26);
if (r < 0)
return r;
}
}
+
+ if (link->network->dhcp_vendor_class_identifier) {
+ r = sd_dhcp_client_set_vendor_class_identifier(link->dhcp_client,
+ link->network->dhcp_vendor_class_identifier);
+ if (r < 0)
+ return r;
+ }
}
if (link->network->dhcp_server) {
return r;
}
- return link_enter_enslave(link);
+ return link_enter_join_netdev(link);
}
static int link_initialized_and_synced(sd_rtnl *rtnl, sd_rtnl_message *m, void *userdata) {
if (link->state != LINK_STATE_INITIALIZING)
return 0;
+ if (link->udev_device)
+ return 0;
+
log_debug_link(link, "udev initialized link");
link->udev_device = udev_device_ref(device);