mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-03-12 08:58:20 +03:00
network: introduce network_adjust_dhcp()
This commit is contained in:
parent
3773eb5485
commit
22d37e5df6
@ -26,18 +26,38 @@ bool link_dhcp_enabled(Link *link, int family) {
|
||||
if (link->flags & IFF_LOOPBACK)
|
||||
return false;
|
||||
|
||||
if (!link->network)
|
||||
return false;
|
||||
|
||||
if (link->network->bond)
|
||||
return false;
|
||||
|
||||
if (link->iftype == ARPHRD_CAN)
|
||||
return false;
|
||||
|
||||
if (!link->network)
|
||||
return false;
|
||||
|
||||
return link->network->dhcp & (family == AF_INET ? ADDRESS_FAMILY_IPV4 : ADDRESS_FAMILY_IPV6);
|
||||
}
|
||||
|
||||
void network_adjust_dhcp(Network *network) {
|
||||
assert(network);
|
||||
assert(network->dhcp >= 0);
|
||||
|
||||
if (network->dhcp == ADDRESS_FAMILY_NO)
|
||||
return;
|
||||
|
||||
/* Bonding slave does not support addressing. */
|
||||
if (network->bond) {
|
||||
log_warning("%s: Cannot enable DHCP= when Bond= is specified, disabling DHCP=.",
|
||||
network->filename);
|
||||
network->dhcp = ADDRESS_FAMILY_NO;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!FLAGS_SET(network->link_local, ADDRESS_FAMILY_IPV6) &&
|
||||
FLAGS_SET(network->dhcp, ADDRESS_FAMILY_IPV6)) {
|
||||
log_warning("%s: DHCPv6 client is enabled but IPv6 link local addressing is disabled. "
|
||||
"Disabling DHCPv6 client.", network->filename);
|
||||
SET_FLAG(network->dhcp, ADDRESS_FAMILY_IPV6, false);
|
||||
}
|
||||
}
|
||||
|
||||
DUID* link_get_duid(Link *link) {
|
||||
if (link->network->duid.type != _DUID_TYPE_INVALID)
|
||||
return &link->network->duid;
|
||||
|
@ -9,6 +9,7 @@
|
||||
|
||||
typedef struct Link Link;
|
||||
typedef struct Manager Manager;
|
||||
typedef struct Network Network;
|
||||
|
||||
typedef enum DHCPUseDomains {
|
||||
DHCP_USE_DOMAINS_NO,
|
||||
@ -46,6 +47,8 @@ static inline bool link_dhcp6_enabled(Link *link) {
|
||||
return link_dhcp_enabled(link, AF_INET6);
|
||||
}
|
||||
|
||||
void network_adjust_dhcp(Network *network);
|
||||
|
||||
DUID* link_get_duid(Link *link);
|
||||
int link_configure_duid(Link *link);
|
||||
int manager_request_product_uuid(Manager *m, Link *link);
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include "network-internal.h"
|
||||
#include "networkd-address-label.h"
|
||||
#include "networkd-address.h"
|
||||
#include "networkd-dhcp-common.h"
|
||||
#include "networkd-fdb.h"
|
||||
#include "networkd-manager.h"
|
||||
#include "networkd-mdb.h"
|
||||
@ -194,11 +195,6 @@ int network_verify(Network *network) {
|
||||
network->filename);
|
||||
network->link_local = ADDRESS_FAMILY_NO;
|
||||
}
|
||||
if (network->dhcp != ADDRESS_FAMILY_NO) {
|
||||
log_warning("%s: Cannot enable DHCP= when Bond= is specified, disabling DHCP=.",
|
||||
network->filename);
|
||||
network->dhcp = ADDRESS_FAMILY_NO;
|
||||
}
|
||||
if (network->dhcp_server) {
|
||||
log_warning("%s: Cannot enable DHCPServer= when Bond= is specified, disabling DHCPServer=.",
|
||||
network->filename);
|
||||
@ -219,12 +215,6 @@ int network_verify(Network *network) {
|
||||
network->link_local = network->bridge ? ADDRESS_FAMILY_NO : ADDRESS_FAMILY_IPV6;
|
||||
|
||||
if (!FLAGS_SET(network->link_local, ADDRESS_FAMILY_IPV6)) {
|
||||
if (FLAGS_SET(network->dhcp, ADDRESS_FAMILY_IPV6)) {
|
||||
log_warning("%s: DHCPv6 client is enabled by the .network file but IPv6 link local addressing is disabled. "
|
||||
"Disabling DHCPv6 client.", network->filename);
|
||||
SET_FLAG(network->dhcp, ADDRESS_FAMILY_IPV6, false);
|
||||
}
|
||||
|
||||
if (network->router_prefix_delegation != RADV_PREFIX_DELEGATION_NONE) {
|
||||
log_warning("%s: IPv6PrefixDelegation= is enabled but IPv6 link local addressing is disabled. "
|
||||
"Disabling IPv6PrefixDelegation=.", network->filename);
|
||||
@ -244,6 +234,7 @@ int network_verify(Network *network) {
|
||||
network->ip_forward |= ADDRESS_FAMILY_IPV4;
|
||||
|
||||
network_adjust_ipv6_accept_ra(network);
|
||||
network_adjust_dhcp(network);
|
||||
|
||||
if (network->mtu > 0 && network->dhcp_use_mtu) {
|
||||
log_warning("%s: MTUBytes= in [Link] section and UseMTU= in [DHCP] section are set. "
|
||||
|
Loading…
x
Reference in New Issue
Block a user