diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/dhcp/nm-dhcp-client.h | 5 | ||||
-rw-r--r-- | src/dhcp/nm-dhcp-dhclient.c | 2 | ||||
-rw-r--r-- | src/dhcp/nm-dhcp-dhcpcanon.c | 2 | ||||
-rw-r--r-- | src/dhcp/nm-dhcp-dhcpcd.c | 2 | ||||
-rw-r--r-- | src/dhcp/nm-dhcp-listener.c | 3 | ||||
-rw-r--r-- | src/dhcp/nm-dhcp-manager.c | 12 | ||||
-rw-r--r-- | src/dhcp/nm-dhcp-manager.h | 2 | ||||
-rw-r--r-- | src/dhcp/nm-dhcp-nettools.c | 6 | ||||
-rw-r--r-- | src/dhcp/nm-dhcp-systemd.c | 21 | ||||
-rw-r--r-- | src/nm-iface-helper.c | 5 |
10 files changed, 42 insertions, 18 deletions
diff --git a/src/dhcp/nm-dhcp-client.h b/src/dhcp/nm-dhcp-client.h index 9eb76f33a8..551e2449a8 100644 --- a/src/dhcp/nm-dhcp-client.h +++ b/src/dhcp/nm-dhcp-client.h @@ -207,15 +207,18 @@ void nm_dhcp_client_set_client_id_bin (NMDhcpClient *self, *****************************************************************************/ typedef struct { - GType (*get_type)(void); + GType (*get_type) (void); + GType (*get_type_per_addr_family) (int addr_family); const char *name; const char *(*get_path) (void); + bool experimental:1; } NMDhcpClientFactory; extern const NMDhcpClientFactory _nm_dhcp_client_factory_dhcpcanon; extern const NMDhcpClientFactory _nm_dhcp_client_factory_dhclient; extern const NMDhcpClientFactory _nm_dhcp_client_factory_dhcpcd; extern const NMDhcpClientFactory _nm_dhcp_client_factory_internal; +extern const NMDhcpClientFactory _nm_dhcp_client_factory_systemd; extern const NMDhcpClientFactory _nm_dhcp_client_factory_nettools; #endif /* __NETWORKMANAGER_DHCP_CLIENT_H__ */ diff --git a/src/dhcp/nm-dhcp-dhclient.c b/src/dhcp/nm-dhcp-dhclient.c index 54b50479dd..72ea3d48f8 100644 --- a/src/dhcp/nm-dhcp-dhclient.c +++ b/src/dhcp/nm-dhcp-dhclient.c @@ -723,7 +723,7 @@ nm_dhcp_dhclient_class_init (NMDhcpDhclientClass *dhclient_class) } const NMDhcpClientFactory _nm_dhcp_client_factory_dhclient = { - .name = "dhclient", + .name = "dhclient", .get_type = nm_dhcp_dhclient_get_type, .get_path = nm_dhcp_dhclient_get_path, }; diff --git a/src/dhcp/nm-dhcp-dhcpcanon.c b/src/dhcp/nm-dhcp-dhcpcanon.c index 2d2113cc76..c193e36780 100644 --- a/src/dhcp/nm-dhcp-dhcpcanon.c +++ b/src/dhcp/nm-dhcp-dhcpcanon.c @@ -248,7 +248,7 @@ nm_dhcp_dhcpcanon_class_init (NMDhcpDhcpcanonClass *dhcpcanon_class) } const NMDhcpClientFactory _nm_dhcp_client_factory_dhcpcanon = { - .name = "dhcpcanon", + .name = "dhcpcanon", .get_type = nm_dhcp_dhcpcanon_get_type, .get_path = nm_dhcp_dhcpcanon_get_path, }; diff --git a/src/dhcp/nm-dhcp-dhcpcd.c b/src/dhcp/nm-dhcp-dhcpcd.c index c300bbe2f0..b07d5a1bba 100644 --- a/src/dhcp/nm-dhcp-dhcpcd.c +++ b/src/dhcp/nm-dhcp-dhcpcd.c @@ -242,7 +242,7 @@ nm_dhcp_dhcpcd_class_init (NMDhcpDhcpcdClass *dhcpcd_class) } const NMDhcpClientFactory _nm_dhcp_client_factory_dhcpcd = { - .name = "dhcpcd", + .name = "dhcpcd", .get_type = nm_dhcp_dhcpcd_get_type, .get_path = nm_dhcp_dhcpcd_get_path, }; diff --git a/src/dhcp/nm-dhcp-listener.c b/src/dhcp/nm-dhcp-listener.c index 88aafeb0b1..ce86d55622 100644 --- a/src/dhcp/nm-dhcp-listener.c +++ b/src/dhcp/nm-dhcp-listener.c @@ -38,7 +38,7 @@ /*****************************************************************************/ -const NMDhcpClientFactory *const _nm_dhcp_manager_factories[5] = { +const NMDhcpClientFactory *const _nm_dhcp_manager_factories[6] = { /* the order here matters, as we will try the plugins in this order to find * the first available plugin. */ @@ -52,6 +52,7 @@ const NMDhcpClientFactory *const _nm_dhcp_manager_factories[5] = { &_nm_dhcp_client_factory_dhcpcd, #endif &_nm_dhcp_client_factory_internal, + &_nm_dhcp_client_factory_systemd, &_nm_dhcp_client_factory_nettools, }; diff --git a/src/dhcp/nm-dhcp-manager.c b/src/dhcp/nm-dhcp-manager.c index 507fc64359..3c78d7c2dc 100644 --- a/src/dhcp/nm-dhcp-manager.c +++ b/src/dhcp/nm-dhcp-manager.c @@ -119,7 +119,10 @@ _client_factory_get_gtype (const NMDhcpClientFactory *client_factory, * to those plugins. But we don't intend to do so. The internal plugin is the way forward and * not extending other plugins. */ - gtype = client_factory->get_type (); + if (client_factory->get_type_per_addr_family) + gtype = client_factory->get_type_per_addr_family (addr_family); + else + gtype = client_factory->get_type (); if (client_factory == &_nm_dhcp_client_factory_internal) { /* we are already using the internal plugin. Nothing to do. */ @@ -547,9 +550,10 @@ nm_dhcp_manager_init (NMDhcpManager *self) if (!f) continue; - nm_log_dbg (LOGD_DHCP, "dhcp-init: enabled DHCP client '%s' (%s)%s", - f->name, g_type_name (f->get_type ()), - _client_factory_available (f) ? "" : " (not available)"); + nm_log_dbg (LOGD_DHCP, "dhcp-init: enabled DHCP client '%s'%s%s", + f->name, + _client_factory_available (f) ? "" : " (not available)", + f->experimental ? " (undocumented internal plugin)" : ""); } /* Client-specific setup */ diff --git a/src/dhcp/nm-dhcp-manager.h b/src/dhcp/nm-dhcp-manager.h index ff0d6f5472..1e0a972b1f 100644 --- a/src/dhcp/nm-dhcp-manager.h +++ b/src/dhcp/nm-dhcp-manager.h @@ -86,7 +86,7 @@ NMDhcpClient * nm_dhcp_manager_start_ip6 (NMDhcpManager *manager, /* For testing only */ extern const char* nm_dhcp_helper_path; -extern const NMDhcpClientFactory *const _nm_dhcp_manager_factories[5]; +extern const NMDhcpClientFactory *const _nm_dhcp_manager_factories[6]; void nmtst_dhcp_manager_unget (gpointer singleton_instance); diff --git a/src/dhcp/nm-dhcp-nettools.c b/src/dhcp/nm-dhcp-nettools.c index 3aa921807b..292cfecc01 100644 --- a/src/dhcp/nm-dhcp-nettools.c +++ b/src/dhcp/nm-dhcp-nettools.c @@ -1272,7 +1272,7 @@ nm_dhcp_nettools_class_init (NMDhcpNettoolsClass *class) } const NMDhcpClientFactory _nm_dhcp_client_factory_nettools = { - .name = "nettools", - .get_type = nm_dhcp_nettools_get_type, - .get_path = NULL, + .name = "nettools", + .get_type = nm_dhcp_nettools_get_type, + .experimental = TRUE, }; diff --git a/src/dhcp/nm-dhcp-systemd.c b/src/dhcp/nm-dhcp-systemd.c index 073a6da051..0e30ab3883 100644 --- a/src/dhcp/nm-dhcp-systemd.c +++ b/src/dhcp/nm-dhcp-systemd.c @@ -1173,8 +1173,23 @@ nm_dhcp_systemd_class_init (NMDhcpSystemdClass *sdhcp_class) client_class->stop = stop; } +const NMDhcpClientFactory _nm_dhcp_client_factory_systemd = { + .name = "systemd", + .get_type = nm_dhcp_systemd_get_type, + .experimental = TRUE, +}; + +/*****************************************************************************/ + +static GType +_get_type_per_addr_family (int addr_family) +{ + nm_assert_addr_family (addr_family); + + return nm_dhcp_systemd_get_type (); +} + const NMDhcpClientFactory _nm_dhcp_client_factory_internal = { - .name = "internal", - .get_type = nm_dhcp_systemd_get_type, - .get_path = NULL, + .name = "internal", + .get_type_per_addr_family = _get_type_per_addr_family, }; diff --git a/src/nm-iface-helper.c b/src/nm-iface-helper.c index dd5bb327a0..239b46a140 100644 --- a/src/nm-iface-helper.c +++ b/src/nm-iface-helper.c @@ -596,9 +596,10 @@ main (int argc, char *argv[]) /*****************************************************************************/ -const NMDhcpClientFactory *const _nm_dhcp_manager_factories[5] = { +const NMDhcpClientFactory *const _nm_dhcp_manager_factories[6] = { + /* For nm-iface-helper there is no option to choose a DHCP plugin. + * It just uses the "internal" one. */ &_nm_dhcp_client_factory_internal, - &_nm_dhcp_client_factory_nettools, }; /*****************************************************************************/ |