mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-26 10:03:40 +03:00
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.
This commit is contained in:
parent
c18c2a0ea1
commit
c106cc36b9
@ -179,6 +179,30 @@
|
||||
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>[Link] Section Options</title>
|
||||
|
||||
<para> The <literal>[Link]</literal> section accepts the following keys:</para>
|
||||
|
||||
<variablelist class='network-directives'>
|
||||
<varlistentry>
|
||||
<term><varname>MACAddress=</varname></term>
|
||||
<listitem>
|
||||
<para>The hardware address.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>MTUBytes=</varname></term>
|
||||
<listitem>
|
||||
<para>The maximum transmission unit in bytes to
|
||||
set for the device. The usual suffixes K, M, G,
|
||||
are supported and are understood to the base of
|
||||
1024.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>[Network] Section Options</title>
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -108,6 +108,9 @@ struct Network {
|
||||
|
||||
unsigned cost;
|
||||
|
||||
struct ether_addr *mac;
|
||||
unsigned mtu;
|
||||
|
||||
LIST_HEAD(Address, static_addresses);
|
||||
LIST_HEAD(Route, static_routes);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user