summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* ifcfg-rh: support RES_OPTIONSbg/wip/dns-optionsBeniamino Galvani2015-03-302-2/+82
|
* cli: add support for DNS optionsBeniamino Galvani2015-03-301-44/+150
|
* dns-manager: add support for DNS optionsBeniamino Galvani2015-03-301-6/+60
|
* build: fix compiler warnings in DNS managerBeniamino Galvani2015-03-301-1/+3
| | | | | | | | | | | | Fixes the following warnings in nm-dns-manager.c with NETCONFIG_PATH set: dns-manager/nm-dns-manager.c: In function 'dispatch_netconfig': dns-manager/nm-dns-manager.c:313:2: warning: implicit declaration of function 'waitpid' [-Wimplicit-function-declaration] ret = waitpid (pid, NULL, 0); ^ dns-manager/nm-dns-manager.c:271:14: warning: unused variable 'tmp' [-Wunused-variable] char *str, *tmp; ^
* core: add DNS options property to NMIP4Config and NMIP6ConfigBeniamino Galvani2015-03-306-4/+300
|
* libnm-core: add dns-options property to NMSettingIPConfigBeniamino Galvani2015-03-305-0/+321
|
* contrib/fedora: update REQUIRED_PACKAGES file with perl-YAML packageThomas Haller2015-03-291-0/+1
|
* merge: respawn DNS plugin children if they quit unexpectedly (bgo #728342)Dan Williams2015-03-275-93/+131
|\
| * dns: refresh DNS if plugin child quits unexpectedly (bgo #728342)Dan Williams2015-03-271-1/+22
| | | | | | | | | | | | | | | | If the child dies, or something kills the child externally, refresh DNS which should respawn the child, similar to what we do with wpa_supplicant, teamd, etc. https://bugzilla.gnome.org/show_bug.cgi?id=728342
| * dns: ensure that update_dns() always returns a GError on failureDan Williams2015-03-274-63/+63
| | | | | | | | Callers may expect this, so make sure we do it.
| * dns: refactor building IP config lists for plugins (bgo #728342)Dan Williams2015-03-271-27/+43
| | | | | | | | | | | | Don't bother building the lists if no DNS plugins are enabled. https://bugzilla.gnome.org/show_bug.cgi?id=728342
| * dns: kill plugin child synchronously to avoid restart race (rh #1161232) ↵Dan Williams2015-03-271-2/+3
|/ | | | | | | | | | | | | | | | | (bgo #728342) NM was killing the dnsmasq local caching nameserver process and immediately starting a new one, and new process couldn't bind to 127.0.0.1 because the old one hadn't quit yet. Thus the new process quit, and the user was left with no split DNS at all. While this does introduce more synchronous waiting into the connection process, it's not that much time and NM will kill dnsmasq if it hasn't quit after 1 second. The longer-term fix is to use dnsmasq's D-Bus interface to update DNS without respawning it. https://bugzilla.gnome.org/show_bug.cgi?id=728342 https://bugzilla.redhat.com/show_bug.cgi?id=1161232
* merge: use dev_id when constructing interface identifiers (rh #1101809)Dan Williams2015-03-277-6/+85
|\ | | | | | | | | | | | | | | Some devices (s390 and ipvlan) use the same MAC address for different interfaces, but dev_id differentiates them. So we must use dev_id to avoid IID conflicts. https://bugzilla.redhat.com/show_bug.cgi?id=1101809
| * core: use dev_id when calculating the interface IPv6 IID (rh #1101809)Dan Williams2015-03-273-4/+18
| | | | | | | | | | | | | | | | | | Some device types (s390 OSA and ipvlan) can use the same link-layer address for multiple virtual interfaces, and the kernel used the dev_id property to differentiate these devices when constructing the IID. NM should do this too to prevent IID clashes. https://bugzilla.redhat.com/show_bug.cgi?id=1101809
| * platform: add nm_platform_link_get_dev_id()Dan Williams2015-03-274-1/+60
| | | | | | | | | | Some devices (s390 OSA and ipvlan) use the same link layer address for different interfaces, and dev_id is what differentiates them.
| * platform: update code documentation for nm_platform_link_get_physical_port_id()Dan Williams2015-03-271-1/+7
|/
* platform: prevent warning when udev is clueless about a deviceDan Williams2015-03-271-1/+1
| | | | | | | | | udev doesn't know about the device yet when NM creates it internally. NetworkManager[9275]: <info> (team0): carrier is OFF NetworkManager[9275]: <info> (team0): new Team device (driver: 'team' ifindex: 16) (NetworkManager:9275): GUdev-CRITICAL **: g_udev_device_get_property: assertion 'G_UDEV_IS_DEVICE (device)' failed NetworkManager[9275]: <info> (team0): exported as /org/freedesktop/NetworkManager/Devices/5
* man: add an example to nmcli manual pageJiří Klimeš2015-03-261-0/+4
|
* libnm-util: allow 0.0.0.0/1 route in verify() (rh #1203904)Jiří Klimeš2015-03-242-10/+44
| | | | | | | | | | | | | | OpenVPN uses a trick to override default route by adding these two routes: 0.0.0.0/1 and 128.0.0.0/1. We should allow this and only refuse real default route (i.e. prefix == 0). Also verify IPv6 addresses and routes. See: man openvpn (search for def1) https://community.openvpn.net/openvpn/wiki/IgnoreRedirectGateway https://bugzilla.redhat.com/show_bug.cgi?id=1203904
* dhcp: merge branch 'systemd-dhcp' into masterth/dhcpThomas Haller2015-03-2311-91/+176
|\ | | | | | | | | Conflicts: src/dhcp-manager/systemd-dhcp/src/shared/util.c
| * dhcp: update systemd DHCP codeThomas Haller2015-03-2311-89/+175
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a direct dump from systemd git on 2015-03-23, git commit eaa5251d9167027. Only relevant files were included. SYSTEMD_DIR=../systemd COMMIT=eaa5251d9167027275d8275862e23e0b7dc8866e ( cd "$SYSTEMD_DIR" git checkout "$COMMIT" git reset --hard git clean -fdx ) /bin/cp "$SYSTEMD_DIR"/src/libsystemd/sd-id128/sd-id128.c ./src/dhcp-manager/systemd-dhcp/src/libsystemd/sd-id128/sd-id128.c /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp-identifier.c ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-identifier.c /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp-identifier.h ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-identifier.h /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp-internal.h ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-internal.h /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp-lease-internal.h ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-lease-internal.h /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp-network.c ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-network.c /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp-option.c ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-option.c /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp-packet.c ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-packet.c /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp-protocol.h ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-protocol.h /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp6-internal.h ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-internal.h /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp6-lease-internal.h ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-lease-internal.h /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp6-network.c ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-network.c /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp6-option.c ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-option.c /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp6-protocol.h ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-protocol.h /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/network-internal.c ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/network-internal.c /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/network-internal.h ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/network-internal.h /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/sd-dhcp-client.c ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-client.c /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/sd-dhcp-lease.c ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-lease.c /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/sd-dhcp6-client.c ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-client.c /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/sd-dhcp6-lease.c ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-lease.c /bin/cp "$SYSTEMD_DIR"/src/shared/async.h ./src/dhcp-manager/systemd-dhcp/src/shared/async.h /bin/cp "$SYSTEMD_DIR"/src/shared/fileio.c ./src/dhcp-manager/systemd-dhcp/src/shared/fileio.c /bin/cp "$SYSTEMD_DIR"/src/shared/fileio.h ./src/dhcp-manager/systemd-dhcp/src/shared/fileio.h /bin/cp "$SYSTEMD_DIR"/src/shared/list.h ./src/dhcp-manager/systemd-dhcp/src/shared/list.h /bin/cp "$SYSTEMD_DIR"/src/shared/log.h ./src/dhcp-manager/systemd-dhcp/src/shared/log.h /bin/cp "$SYSTEMD_DIR"/src/shared/macro.h ./src/dhcp-manager/systemd-dhcp/src/shared/macro.h /bin/cp "$SYSTEMD_DIR"/src/shared/path-util.c ./src/dhcp-manager/systemd-dhcp/src/shared/path-util.c /bin/cp "$SYSTEMD_DIR"/src/shared/path-util.h ./src/dhcp-manager/systemd-dhcp/src/shared/path-util.h /bin/cp "$SYSTEMD_DIR"/src/shared/refcnt.h ./src/dhcp-manager/systemd-dhcp/src/shared/refcnt.h /bin/cp "$SYSTEMD_DIR"/src/shared/siphash24.c ./src/dhcp-manager/systemd-dhcp/src/shared/siphash24.c /bin/cp "$SYSTEMD_DIR"/src/shared/siphash24.h ./src/dhcp-manager/systemd-dhcp/src/shared/siphash24.h /bin/cp "$SYSTEMD_DIR"/src/shared/socket-util.h ./src/dhcp-manager/systemd-dhcp/src/shared/socket-util.h /bin/cp "$SYSTEMD_DIR"/src/shared/sparse-endian.h ./src/dhcp-manager/systemd-dhcp/src/shared/sparse-endian.h /bin/cp "$SYSTEMD_DIR"/src/shared/strv.c ./src/dhcp-manager/systemd-dhcp/src/shared/strv.c /bin/cp "$SYSTEMD_DIR"/src/shared/strv.h ./src/dhcp-manager/systemd-dhcp/src/shared/strv.h /bin/cp "$SYSTEMD_DIR"/src/shared/time-util.c ./src/dhcp-manager/systemd-dhcp/src/shared/time-util.c /bin/cp "$SYSTEMD_DIR"/src/shared/time-util.h ./src/dhcp-manager/systemd-dhcp/src/shared/time-util.h /bin/cp "$SYSTEMD_DIR"/src/shared/utf8.c ./src/dhcp-manager/systemd-dhcp/src/shared/utf8.c /bin/cp "$SYSTEMD_DIR"/src/shared/utf8.h ./src/dhcp-manager/systemd-dhcp/src/shared/utf8.h /bin/cp "$SYSTEMD_DIR"/src/shared/util.c ./src/dhcp-manager/systemd-dhcp/src/shared/util.c /bin/cp "$SYSTEMD_DIR"/src/shared/util.h ./src/dhcp-manager/systemd-dhcp/src/shared/util.h /bin/cp "$SYSTEMD_DIR"/src/shared/unaligned.h ./src/dhcp-manager/systemd-dhcp/src/shared/unaligned.h /bin/cp "$SYSTEMD_DIR"/src/shared/in-addr-util.c ./src/dhcp-manager/systemd-dhcp/src/shared/in-addr-util.c /bin/cp "$SYSTEMD_DIR"/src/shared/in-addr-util.h ./src/dhcp-manager/systemd-dhcp/src/shared/in-addr-util.h /bin/cp "$SYSTEMD_DIR"/src/systemd/_sd-common.h ./src/dhcp-manager/systemd-dhcp/src/systemd/_sd-common.h /bin/cp "$SYSTEMD_DIR"/src/systemd/sd-dhcp-client.h ./src/dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp-client.h /bin/cp "$SYSTEMD_DIR"/src/systemd/sd-dhcp-lease.h ./src/dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp-lease.h /bin/cp "$SYSTEMD_DIR"/src/systemd/sd-dhcp6-client.h ./src/dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp6-client.h /bin/cp "$SYSTEMD_DIR"/src/systemd/sd-dhcp6-lease.h ./src/dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp6-lease.h /bin/cp "$SYSTEMD_DIR"/src/systemd/sd-event.h ./src/dhcp-manager/systemd-dhcp/src/systemd/sd-event.h /bin/cp "$SYSTEMD_DIR"/src/systemd/sd-id128.h ./src/dhcp-manager/systemd-dhcp/src/systemd/sd-id128.h
* | platform: merge branch 'lr/udev-unmanaged-fd731014'Lubomir Rintel2015-03-2317-61/+169
|\ \ | | | | | | | | | https://bugzilla.gnome.org/show_bug.cgi?id=731014
| * | Revert "core: make veth devices default-unmanaged for now"lr/udev-unmanaged-fd731014Lubomir Rintel2015-03-231-1/+0
| | | | | | | | | | | | | | | | | | | | | This reverts commit ebeaeaed4d3180c27cc059fe0ff199153fa9ec24. No need to hardwire these as unmanaged anymore, an udev rule will take care of it.
| * | data: move OLPC MESH udev rules away from calloutsLubomir Rintel2015-03-233-7/+4
| | | | | | | | | | | | | | | | | | | | | No idea why was it there in the first place. This also fixes a bug that the rules file was conditionally included in dist depending on presence of udev dir at configure time.
| * | data: add udev rules to make emulated ethernet devices default unmanagedLubomir Rintel2015-03-232-0/+40
| | | | | | | | | | | | | | | | | | | | | | | | | | | There are some out-of-tree drivers that create devices masquerading as ethernets which are supposed to use their own management tools. Avoid touching them. The rules should be run after 80-net-setup-link.rules, so that the ID_NET_DRIVER is set.
| * | platform: give the platform an opportunity to override default-unmanagedLubomir Rintel2015-03-236-1/+75
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some out of tree drivers add Ethernet devices that are supposed to be managed by other their tooling, e.g. VirtualBox or VMWare. Rather than hardcoding their drivers (at least VirtualBox doesn't even set a "driver" property in sysfs) or hardcoding a logic that identifies such devices let's just add a possibility to blacklist them in udev. This makes it possible for whoever who ships such a driver to ship rules that prevent NetworkManager from managing the device itself. Furthermore it makes it possible for the user with special needs leverage the flexibility of udev rules to override the defaults. In the end the user can decide to let NetworkManager manage default-unmanaged interfaces such as VEth or turn on default-unmanaged for devices on a particular bus. An udev rule for VirtualBox would look like this: SUBSYSTEM=="net", ENV{INTERFACE}=="vboxnet[0-9]*", ENV{NM_UNMANAGED}="1"
| * | platform: don't wait for udev device initializaton if there's no udevLubomir Rintel2015-03-237-53/+45
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There's no udev running in containers, it only starts if /sys is writable. If a hardware device is added to the container's namespace NM would not announce it. This also removes the software link special case -- the software links will now wait for udev initialization (in case udev is there) as well. There's no reason to treat them differently anymore. This makes it possible to use udev properties of the software links. https://bugzilla.gnome.org/show_bug.cgi?id=740526
| * | contrib: ensure udev rules from RPM package are appliedLubomir Rintel2015-03-201-0/+6
|/ / | | | | | | | | We install udev rules and need to ensure that correct ones are in effect when the package is installed, updated or removed.
* | trivial: remove semicolon after macro definitionThomas Haller2015-03-201-1/+1
| | | | | | | | Fixes: 58f08c8c9ce3602f31d2fdfaa2cc9ecca4713532
* | libnm/keyfile: sort keyfile entries and nm_connection_for_each_setting_value()Thomas Haller2015-03-204-71/+221
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | Fix the order for keyfile writer. It is nicer to have a fixed, sensible order with [connection] first. Do this by sorting the order in nm_connection_for_each_setting_value() and nm_setting_enumerate_values(). https://mail.gnome.org/archives/networkmanager-list/2015-March/msg00050.html
| * | libnm: sort properties for nm_setting_enumerate_values()Thomas Haller2015-03-201-0/+35
| | | | | | | | | | | | | | | | | | | | | | | | The sort order of nm_setting_enumerate_values() affects the order in which keyfile writer serializes the properties. Have a defined, stable sort order by sorting the properties by name (with prefering id,uuid,type for NMSettingConnection).
| * | libnm: sort settings for nm_connection_for_each_setting_value()Thomas Haller2015-03-201-3/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | nm_connection_for_each_setting_value() is used by keyfile writer to iterate over the settings and write the keyfile entires. The order there is important as g_key_file_to_data() prints the groups in the order they were created. To have a stable order and to have the [connection] entry first, sort the settings.
| * | keyfile/test: refactor and cleanup _keyfile_convert()Thomas Haller2015-03-201-58/+113
| | | | | | | | | | | | | | | _keyfile_convert() should really test for successful round-trip conversion of keyfile-connection and vice versa.
| * | test: print connections as keyfile on failure of ↵Thomas Haller2015-03-201-0/+18
| | | | | | | | | | | | | | | | | | | | | nmtst_assert_connection_equals() If the assertion nmtst_assert_connection_equals() is about to fail, dump out the offending connections as keyfile.
| * | test: fix printing error in nmtst_assert_connection_equals()Thomas Haller2015-03-201-7/+10
| | |
| * | test: fix __NMTST_LOG() macro to allow format-string-only argumentThomas Haller2015-03-201-3/+4
|/ / | | | | | | | | We want to be able to call __NMTST_LOG(g_message, "hallo"); without additional format string arguments.
* | libnm: merge branch 'th/wep-key-bgo745890'Thomas Haller2015-03-2011-167/+30
|\ \ | | | | | | | | | | | | | | | Don't verify() secrets. https://bugzilla.gnome.org/show_bug.cgi?id=745890
| * | libnm: accept unknown WEP key type in nm_utils_wep_key_valid()Thomas Haller2015-03-203-5/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | libnm-core treated the UNKNOWN WEP key type as KEY. Relax that and try to guess the correct type based on the key. This is for example important if you have a valid connection with wep-key-type=0 (unknown) If you request passwords for such a connection, the user cannot enter them in password format -- but there is no UI indication that the password must be KEY.
| * | libnm: don't check for valid passwords in NMSetting:verify()Thomas Haller2015-03-208-162/+8
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We must never fail verification of a connection based on a password because the password is re-requested during activation. Otherwise, if the user enters an invalid password for a (previously) valid connection, the connection becomes invalid. NetworkManager does not expect or handle that requesting password can make a connection invalid. Invalid passwords should be treated as wrong passwords. Only a UI (such as nm-connection-editor or nmcli) should validate passwords against a certain scheme. Note that there is need_secrets() which on the contrary must check for valid passwords. Error scenario: Connect to a WEP Wi-Fi, via `nmcli device wifi connect SSID`. The generated connection has wep-key-type=0 (UNKNOWN) and wep-key-flags=0. When trying to connect, NM will ask for secrets and set the wep-key0 field. After that, verification can fail (e.g. if the password is longer then 64 chars).
* | nm-iface-helper: remove duplicate setpgid() callThomas Haller2015-03-201-2/+0
| | | | | | | | Fixes: 5775df9a6dcfaa4a9d208c8e78d6a7419c0e6a07
* | core: merge branch 'th/main-order-bgo746254'Thomas Haller2015-03-204-252/+321
|\ \ | | | | | | | | | | | | | | | | | | | | | Some refactoring of the main() functions for NetworkManager and nm-iface-helper. Most notably, start the D-Bus service earlier so that NetworkManager starts faster. https://bugzilla.gnome.org/show_bug.cgi?id=746254
| * | main: (order) early start D-Bus serviceThomas Haller2015-03-201-15/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | systemd considers the startup time of NetworkManager until the D-Bus service is claimed. By doing that earlier, this time is significantly reduced. This has the advantage, that services that are ordered to start after NetworkManager can start earlier. Most notably, 'network.target' orders itself After=NetworkManager.service and many services are ordered After=network.target. $ systemd-analyze blame | grep NetworkManager.service
| * | main: (order) move run_from_build_dir check before setting up loggingThomas Haller2015-03-201-15/+15
| | | | | | | | | | | | | | | Or: move setup of nm-logging immediately after it is really needed: before setup of config.
| * | main: (order) earlier create rundirThomas Haller2015-03-202-10/+10
| | | | | | | | | | | | | | | | | | Create the rundir earlier and before setting up nm-logging. nm_main_utils_ensure_rundir() errors out with fprintf(stderr) and does not need nm-logging.
| * | main: (order) log "is starting" message immediately after setting up loggingThomas Haller2015-03-201-4/+3
| | |
| * | main: (order) parse state file later and use nm-loggingThomas Haller2015-03-201-10/+10
| | | | | | | | | | | | | | | Parse the state file a bit later after daemonizing and setting up logging. That way, we can use nm-logging.
| * | main: (order) check pidfile earlier for running NMThomas Haller2015-03-202-10/+10
| | | | | | | | | | | | | | | We should check for conflicting process (pidfile) early on and error out.
| * | nm-iface-helper: fix pidfile name and obtain the ifindex earlierThomas Haller2015-03-201-6/+9
| | | | | | | | | | | | | | | The @ifindex is needed for the @pidfile. Obtain the @ifindex earlier without resorting to platform.
| * | main: (order) move root user check after help/version optionThomas Haller2015-03-204-5/+16
| | | | | | | | | | | | | | | With this change, `NetworkManager --help` and `NetworkManager --version` work for non-root user.
| * | main: (order) early call _init_nm_debug()Thomas Haller2015-03-201-2/+2
| | | | | | | | | | | | | | | _init_nm_debug() only depends on DEBUG config setting. Let's call it first after parsing configuration.