X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fnetwork%2Fnetworkd-link.c;h=86d4b83d3b98cb1568b2b64432bc9f787e401c8a;hb=28cc555d8504c9429776aedbbe1fee7101258578;hp=ccf818115b3192313628c204ceabfcbf7783fc08;hpb=3f2650377631aed3bc26fdbc3a2eef6e33cdf7e7;p=elogind.git diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index ccf818115..86d4b83d3 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -24,6 +24,7 @@ #include #include "networkd.h" +#include "networkd-netdev.h" #include "libudev-private.h" #include "udev-util.h" #include "util.h" @@ -41,7 +42,7 @@ static bool ipv4ll_is_bound(sd_ipv4ll *ll); static int link_new(Manager *manager, sd_rtnl_message *message, Link **ret) { _cleanup_link_unref_ Link *link = NULL; uint16_t type; - char *ifname; + const char *ifname; int r, ifindex; assert(manager); @@ -400,23 +401,21 @@ static int route_handler(sd_rtnl *rtnl, sd_rtnl_message *m, void *userdata) { static int link_set_dhcp_routes(Link *link) { struct sd_dhcp_route *static_routes; - size_t static_routes_size; - int r; - unsigned i; + int r, n, i; assert(link); - r = sd_dhcp_lease_get_routes(link->dhcp_lease, &static_routes, &static_routes_size); - if (r < 0) { - if (r != -ENOENT) - log_warning_link(link, "DHCP error: could not get routes: %s", strerror(-r)); - return r; + n = sd_dhcp_lease_get_routes(link->dhcp_lease, &static_routes); + if (n < 0) { + if (n != -ENOENT) + log_warning_link(link, "DHCP error: could not get routes: %s", strerror(-n)); + return n; } - for (i = 0; i < static_routes_size; i++) { + for (i = 0; i < n; i++) { _cleanup_route_free_ Route *route = NULL; - r = route_new_dynamic(&route); + r = route_new_dynamic(&route, RTPROT_DHCP); if (r < 0) { log_error_link(link, "Could not allocate route: %s", strerror(-r)); @@ -482,7 +481,7 @@ static int link_enter_set_routes(Link *link) { } if (r != -ENOENT) { - r = route_new_dynamic(&route); + r = route_new_dynamic(&route, RTPROT_STATIC); if (r < 0) { log_error_link(link, "Could not allocate route: %s", strerror(-r)); @@ -518,14 +517,14 @@ static int link_enter_set_routes(Link *link) { } if (r >= 0) { - r = route_new_dynamic(&route); + r = route_new_dynamic(&route, RTPROT_DHCP); if (r < 0) { log_error_link(link, "Could not allocate route: %s", strerror(-r)); return r; } - r = route_new_dynamic(&route_gw); + r = route_new_dynamic(&route_gw, RTPROT_DHCP); if (r < 0) { log_error_link(link, "Could not allocate route: %s", strerror(-r)); @@ -954,7 +953,6 @@ static int dhcp_lease_lost(Link *link) { struct in_addr netmask; struct in_addr gateway; unsigned prefixlen; - unsigned i; int r; assert(link); @@ -964,14 +962,14 @@ static int dhcp_lease_lost(Link *link) { if (link->network->dhcp_routes) { struct sd_dhcp_route *routes; - size_t routes_size; + int n, i; - r = sd_dhcp_lease_get_routes(link->dhcp_lease, &routes, &routes_size); - if (r >= 0) { - for (i = 0; i < routes_size; i++) { + n = sd_dhcp_lease_get_routes(link->dhcp_lease, &routes); + if (n >= 0) { + for (i = 0; i < n; i++) { _cleanup_route_free_ Route *route = NULL; - r = route_new_dynamic(&route); + r = route_new_dynamic(&route, RTPROT_UNSPEC); if (r >= 0) { route->family = AF_INET; route->in_addr.in = routes[i].gw_addr; @@ -991,7 +989,7 @@ static int dhcp_lease_lost(Link *link) { _cleanup_route_free_ Route *route_gw = NULL; _cleanup_route_free_ Route *route = NULL; - r = route_new_dynamic(&route_gw); + r = route_new_dynamic(&route_gw, RTPROT_UNSPEC); if (r >= 0) { route_gw->family = AF_INET; route_gw->dst_addr.in = gateway; @@ -1001,7 +999,7 @@ static int dhcp_lease_lost(Link *link) { route_drop(route_gw, link, &route_drop_handler); } - r = route_new_dynamic(&route); + r = route_new_dynamic(&route, RTPROT_UNSPEC); if (r >= 0) { route->family = AF_INET; route->in_addr.in = gateway; @@ -1318,7 +1316,7 @@ static int ipv4ll_address_lost(Link *link) { address_drop(address, link, &address_drop_handler); - r = route_new_dynamic(&route); + r = route_new_dynamic(&route, RTPROT_UNSPEC); if (r < 0) { log_error_link(link, "Could not allocate route: %s", strerror(-r)); @@ -1810,7 +1808,7 @@ static int link_enter_join_netdev(Link *link) { "MESSAGE=%-*s: enslaving by '%s'", IFNAMSIZ, link->ifname, link->network->bond->ifname, - NETDEV(link->network->bond), + NETDEVIF(link->network->bond), NULL); r = netdev_join(link->network->bond, link, &netdev_join_handler); @@ -1819,7 +1817,7 @@ static int link_enter_join_netdev(Link *link) { "MESSAGE=%-*s: could not join netdev '%s': %s", IFNAMSIZ, link->ifname, link->network->bond->ifname, strerror(-r), - NETDEV(link->network->bond), + NETDEVIF(link->network->bond), NULL); link_enter_failed(link); return r; @@ -1833,7 +1831,7 @@ static int link_enter_join_netdev(Link *link) { "MESSAGE=%-*s: enslaving by '%s'", IFNAMSIZ, link->ifname, link->network->bridge->ifname, - NETDEV(link->network->bridge), + NETDEVIF(link->network->bridge), NULL); r = netdev_join(link->network->bridge, link, &netdev_join_handler); @@ -1842,7 +1840,7 @@ static int link_enter_join_netdev(Link *link) { "MESSAGE=%-*s: could not join netdev '%s': %s", IFNAMSIZ, link->ifname, link->network->bridge->ifname, strerror(-r), - NETDEV(link->network->bridge), + NETDEVIF(link->network->bridge), NULL); link_enter_failed(link); return r; @@ -1856,7 +1854,7 @@ static int link_enter_join_netdev(Link *link) { "MESSAGE=%-*s: enslaving by '%s'", IFNAMSIZ, link->ifname, link->network->tunnel->ifname, - NETDEV(link->network->tunnel), + NETDEVIF(link->network->tunnel), NULL); r = netdev_join(link->network->tunnel, link, &netdev_join_handler); @@ -1865,7 +1863,7 @@ static int link_enter_join_netdev(Link *link) { "MESSAGE=%-*s: could not join netdev '%s': %s", IFNAMSIZ, link->ifname, link->network->tunnel->ifname, strerror(-r), - NETDEV(link->network->tunnel), + NETDEVIF(link->network->tunnel), NULL); link_enter_failed(link); return r; @@ -1878,7 +1876,7 @@ static int link_enter_join_netdev(Link *link) { log_struct_link(LOG_DEBUG, link, "MESSAGE=%-*s: enslaving by '%s'", IFNAMSIZ, - link->ifname, vlan->ifname, NETDEV(vlan), NULL); + link->ifname, vlan->ifname, NETDEVIF(vlan), NULL); r = netdev_join(vlan, link, &netdev_join_handler); if (r < 0) { @@ -1886,7 +1884,7 @@ static int link_enter_join_netdev(Link *link) { "MESSAGE=%-*s: could not join netdev '%s': %s", IFNAMSIZ, link->ifname, vlan->ifname, strerror(-r), - NETDEV(vlan), NULL); + NETDEVIF(vlan), NULL); link_enter_failed(link); return r; } @@ -1898,7 +1896,7 @@ static int link_enter_join_netdev(Link *link) { log_struct_link(LOG_DEBUG, link, "MESSAGE=%-*s: enslaving by '%s'", IFNAMSIZ, - link->ifname, macvlan->ifname, NETDEV(macvlan), NULL); + link->ifname, macvlan->ifname, NETDEVIF(macvlan), NULL); r = netdev_join(macvlan, link, &netdev_join_handler); if (r < 0) { @@ -1906,7 +1904,7 @@ static int link_enter_join_netdev(Link *link) { "MESSAGE=%-*s: could not join netdev '%s': %s", IFNAMSIZ, link->ifname, macvlan->ifname, strerror(-r), - NETDEV(macvlan), NULL); + NETDEVIF(macvlan), NULL); link_enter_failed(link); return r; } @@ -1918,7 +1916,7 @@ static int link_enter_join_netdev(Link *link) { log_struct_link(LOG_DEBUG, link, "MESSAGE=%*s: enslaving by '%s'", IFNAMSIZ, - link->ifname, vxlan->ifname, NETDEV(vxlan), NULL); + link->ifname, vxlan->ifname, NETDEVIF(vxlan), NULL); r = netdev_join(vxlan, link, &netdev_join_handler); if (r < 0) { @@ -1926,7 +1924,7 @@ static int link_enter_join_netdev(Link *link) { "MESSAGE=%*s: could not join netdev '%s': %s", IFNAMSIZ, link->ifname, vxlan->ifname, strerror(-r), - NETDEV(vxlan), NULL); + NETDEVIF(vxlan), NULL); link_enter_failed(link); return r; } @@ -1997,6 +1995,10 @@ static int link_configure(Link *link) { 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) @@ -2121,6 +2123,9 @@ int link_initialized(Link *link, struct udev_device *device) { 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); @@ -2332,7 +2337,7 @@ int link_add(Manager *m, sd_rtnl_message *message, Link **ret) { int link_update(Link *link, sd_rtnl_message *m) { struct ether_addr mac; - char *ifname; + const char *ifname; int r; assert(link); @@ -2501,9 +2506,8 @@ int link_save(Link *link) { fprintf(f, "# This is private data. Do not parse.\n" "ADMIN_STATE=%s\n" - "OPER_STATE=%s\n" - "FLAGS=%u\n", - admin_state, oper_state, link->flags); + "OPER_STATE=%s\n", + admin_state, oper_state); if (link->network) { serialize_addresses(f, "DNS", link->network->dns);