diff options
author | Tom Gundersen <teg@jklm.no> | 2014-01-27 20:52:07 +0100 |
---|---|---|
committer | Tom Gundersen <teg@jklm.no> | 2014-01-30 14:30:39 +0100 |
commit | eb27aeca247a4cf8816fffc4c0dbcab55ead3864 (patch) | |
tree | 4c27a114379b0874f229db32aad3df9138f41164 /src/network | |
parent | e7fb33ffefcdc68ad096eea7444da877b68390e8 (diff) |
networkd: dhcpv4 - add notion of 'CriticalConnection'
These connections are never torn down, even when the DHCP specifications say that
they should be. This is useful/necessary when the rootfs (or another critical fs)
is mounted over this network connection, and dataloss would result if the connection
is lost.
This option defaults to off, but our initrd generator (TBD) will enable it when
applicable.
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/networkd-gperf.gperf | 51 | ||||
-rw-r--r-- | src/network/networkd-link.c | 6 | ||||
-rw-r--r-- | src/network/networkd.h | 1 |
3 files changed, 33 insertions, 25 deletions
diff --git a/src/network/networkd-gperf.gperf b/src/network/networkd-gperf.gperf index aff23bb55d..de72805625 100644 --- a/src/network/networkd-gperf.gperf +++ b/src/network/networkd-gperf.gperf @@ -15,28 +15,29 @@ struct ConfigPerfItem; %struct-type %includes %% -Match.MACAddress, config_parse_hwaddr, 0, offsetof(Network, match_mac) -Match.Path, config_parse_string, 0, offsetof(Network, match_path) -Match.Driver, config_parse_string, 0, offsetof(Network, match_driver) -Match.Type, config_parse_string, 0, offsetof(Network, match_type) -Match.Name, config_parse_ifname, 0, offsetof(Network, match_name) -Network.Description, config_parse_string, 0, offsetof(Network, description) -Network.Bridge, config_parse_bridge, 0, offsetof(Network, bridge) -Network.Bond, config_parse_bond, 0, offsetof(Network, bond) -Network.VLAN, config_parse_vlan, 0, offsetof(Network, vlan) -Network.DHCP, config_parse_bool, 0, offsetof(Network, dhcp) -Network.Address, config_parse_address, 0, 0 -Network.Gateway, config_parse_gateway, 0, 0 -Network.DNS, config_parse_dns, 0, offsetof(Network, dns) -Address.Address, config_parse_address, 0, 0 -Address.Label, config_parse_label, 0, 0 -Route.Gateway, config_parse_gateway, 0, 0 -Route.Destination, config_parse_destination, 0, 0 -DHCPv4.UseDNS, config_parse_bool, 0, offsetof(Network, dhcp_dns) -DHCPv4.UseMTU, config_parse_bool, 0, offsetof(Network, dhcp_mtu) -DHCPv4.UseHostname, config_parse_bool, 0, offsetof(Network, dhcp_hostname) -DHCPv4.UseDomainName, config_parse_bool, 0, offsetof(Network, dhcp_domainname) -Netdev.Description, config_parse_string, 0, offsetof(Netdev, description) -Netdev.Name, config_parse_ifname, 0, offsetof(Netdev, name) -Netdev.Kind, config_parse_netdev_kind, 0, offsetof(Netdev, kind) -VLAN.Id, config_parse_int, 0, offsetof(Netdev, vlanid) +Match.MACAddress, config_parse_hwaddr, 0, offsetof(Network, match_mac) +Match.Path, config_parse_string, 0, offsetof(Network, match_path) +Match.Driver, config_parse_string, 0, offsetof(Network, match_driver) +Match.Type, config_parse_string, 0, offsetof(Network, match_type) +Match.Name, config_parse_ifname, 0, offsetof(Network, match_name) +Network.Description, config_parse_string, 0, offsetof(Network, description) +Network.Bridge, config_parse_bridge, 0, offsetof(Network, bridge) +Network.Bond, config_parse_bond, 0, offsetof(Network, bond) +Network.VLAN, config_parse_vlan, 0, offsetof(Network, vlan) +Network.DHCP, config_parse_bool, 0, offsetof(Network, dhcp) +Network.Address, config_parse_address, 0, 0 +Network.Gateway, config_parse_gateway, 0, 0 +Network.DNS, config_parse_dns, 0, offsetof(Network, dns) +Address.Address, config_parse_address, 0, 0 +Address.Label, config_parse_label, 0, 0 +Route.Gateway, config_parse_gateway, 0, 0 +Route.Destination, config_parse_destination, 0, 0 +DHCPv4.UseDNS, config_parse_bool, 0, offsetof(Network, dhcp_dns) +DHCPv4.UseMTU, config_parse_bool, 0, offsetof(Network, dhcp_mtu) +DHCPv4.UseHostname, config_parse_bool, 0, offsetof(Network, dhcp_hostname) +DHCPv4.UseDomainName, config_parse_bool, 0, offsetof(Network, dhcp_domainname) +DHCPv4.CriticalConnection, config_parse_bool, 0, offsetof(Network, dhcp_critical) +Netdev.Description, config_parse_string, 0, offsetof(Netdev, description) +Netdev.Name, config_parse_ifname, 0, offsetof(Netdev, name) +Netdev.Kind, config_parse_netdev_kind, 0, offsetof(Netdev, kind) +VLAN.Id, config_parse_int, 0, offsetof(Netdev, vlanid) diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index d9622ac4b7..9b5ebeda20 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -443,6 +443,12 @@ static void dhcp_handler(sd_dhcp_client *client, int event, void *userdata) { if (event == DHCP_EVENT_IP_CHANGE || event == DHCP_EVENT_EXPIRED || event == DHCP_EVENT_STOP) { + if (link->network->dhcp_critical) { + log_warning_link(link, "DHCPv4 connection considered system critical, " + "ignoring request to reconfigure it down."); + return; + } + if (link->dhcp_address) { address_drop(link->dhcp_address, link, address_drop_handler); diff --git a/src/network/networkd.h b/src/network/networkd.h index 22dcbd0987..968edf6a70 100644 --- a/src/network/networkd.h +++ b/src/network/networkd.h @@ -103,6 +103,7 @@ struct Network { bool dhcp_mtu; bool dhcp_hostname; bool dhcp_domainname; + bool dhcp_critical; LIST_HEAD(Address, static_addresses); LIST_HEAD(Route, static_routes); |