diff options
author | Tom Gundersen <teg@jklm.no> | 2014-12-04 21:57:13 +0100 |
---|---|---|
committer | Tom Gundersen <teg@jklm.no> | 2014-12-05 00:38:10 +0100 |
commit | c106cc36b9b8e8998eb95299b02f1db9c1209122 (patch) | |
tree | f60a30744029dd69fb0ba47e5bc21c79d516b162 /src/network | |
parent | c18c2a0ea15820c49226aa05f294f5d5c1417263 (diff) |
networkd: add basic [Link] settings to .network files
This allows the default link settings (set in .link files) to be overridden per Network. Only MTU and MACAddress is supported for now.
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/networkd-link.c | 17 | ||||
-rw-r--r-- | src/network/networkd-network-gperf.gperf | 2 | ||||
-rw-r--r-- | src/network/networkd-network.c | 11 | ||||
-rw-r--r-- | src/network/networkd.h | 3 |
4 files changed, 32 insertions, 1 deletions
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 7cffcb48d0..d59a8192b0 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -1074,6 +1074,7 @@ static int link_up(Link *link) { int r; assert(link); + assert(link->network); assert(link->manager); assert(link->manager->rtnl); @@ -1093,6 +1094,22 @@ static int link_up(Link *link) { return r; } + if (link->network->mac) { + r = sd_rtnl_message_append_ether_addr(req, IFLA_ADDRESS, link->network->mac); + if (r < 0) { + log_link_error(link, "Could not set MAC address: %s", strerror(-r)); + return r; + } + } + + if (link->network->mtu) { + r = sd_rtnl_message_append_u32(req, IFLA_MTU, link->network->mtu); + if (r < 0) { + log_link_error(link, "Could not set MTU: %s", strerror(-r)); + return r; + } + } + r = sd_rtnl_call_async(link->manager->rtnl, req, link_up_handler, link, 0, NULL); if (r < 0) { diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf index 4f0e05aeb6..bd422e3e0b 100644 --- a/src/network/networkd-network-gperf.gperf +++ b/src/network/networkd-network-gperf.gperf @@ -24,6 +24,8 @@ Match.Host, config_parse_net_condition, CONDITION_HOST, Match.Virtualization, config_parse_net_condition, CONDITION_VIRTUALIZATION, offsetof(Network, match_virt) Match.KernelCommandLine, config_parse_net_condition, CONDITION_KERNEL_COMMAND_LINE, offsetof(Network, match_kernel) Match.Architecture, config_parse_net_condition, CONDITION_ARCHITECTURE, offsetof(Network, match_arch) +Link.MACAddress, config_parse_hwaddr, 0, offsetof(Network, mac) +Link.MTUBytes, config_parse_iec_size, 0, offsetof(Network, mtu) Network.Description, config_parse_string, 0, offsetof(Network, description) Network.Bridge, config_parse_netdev, 0, offsetof(Network, bridge) Network.Bond, config_parse_netdev, 0, offsetof(Network, bond) diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index cb111382f5..b014a6b649 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -90,7 +90,14 @@ static int network_load_one(Manager *manager, const char *filename) { network->llmnr = LLMNR_SUPPORT_YES; r = config_parse(NULL, filename, file, - "Match\0Network\0Address\0Route\0DHCP\0DHCPv4\0BridgePort\0", + "Match\0" + "Link\0" + "Network\0" + "Address\0" + "Route\0" + "DHCP\0" + "DHCPv4\0" + "BridgePort\0", config_item_perf_lookup, network_network_gperf_lookup, false, false, true, network); if (r < 0) @@ -163,6 +170,8 @@ void network_free(Network *network) { free(network->description); free(network->dhcp_vendor_class_identifier); + free(network->mac); + strv_free(network->ntp); strv_free(network->dns); strv_free(network->domains); diff --git a/src/network/networkd.h b/src/network/networkd.h index 07917f0ef4..5f553fb3b9 100644 --- a/src/network/networkd.h +++ b/src/network/networkd.h @@ -108,6 +108,9 @@ struct Network { unsigned cost; + struct ether_addr *mac; + unsigned mtu; + LIST_HEAD(Address, static_addresses); LIST_HEAD(Route, static_routes); |