mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-11 15:40:17 +01:00
Currently, NMDevice does ACD. It intercepts certain NMIP4Config instances, and tries to perform ACD on the addresses. I think this functionality should be handled by NML3Cfg instead. For one, NML3Cfg sees all configurations, and can perform ACD for all (relevant) addresses. Also, it moves logic away from NMDevice and makes the functionality available without an NMDevice. As such, it also will allow that independent "controllers" contribute NML3ConfigData instances and ACD will performed for all of them (as requested). This will be our implementation for IPv4 ACD (https://tools.ietf.org/html/rfc5227) based on nettools' n-acd library. The code is not actually tested yes, because NMDevice did not yet switch over to use NML3Cfg. Once that happens, surely issues with this patch will be found that will need fixing.
318 lines
7.4 KiB
Meson
318 lines
7.4 KiB
Meson
# SPDX-License-Identifier: LGPL-2.1+
|
|
|
|
src_inc = include_directories('.')
|
|
|
|
daemon_nm_default_dep = declare_dependency(
|
|
sources: libnm_core_enum_sources[1],
|
|
include_directories: src_inc,
|
|
dependencies: libnm_core_nm_default_dep,
|
|
)
|
|
|
|
install_data(
|
|
'org.freedesktop.NetworkManager.conf',
|
|
install_dir: dbus_conf_dir,
|
|
)
|
|
|
|
subdir('systemd')
|
|
|
|
core_plugins = []
|
|
|
|
daemon_c_flags = ['-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_DAEMON']
|
|
|
|
sources = files(
|
|
'dhcp/nm-dhcp-client.c',
|
|
'dhcp/nm-dhcp-manager.c',
|
|
'dhcp/nm-dhcp-nettools.c',
|
|
'dhcp/nm-dhcp-systemd.c',
|
|
'dhcp/nm-dhcp-utils.c',
|
|
'dhcp/nm-dhcp-options.c',
|
|
'ndisc/nm-lndp-ndisc.c',
|
|
'ndisc/nm-ndisc.c',
|
|
'platform/nm-netlink.c',
|
|
'platform/wifi/nm-wifi-utils-nl80211.c',
|
|
'platform/wifi/nm-wifi-utils.c',
|
|
'platform/wpan/nm-wpan-utils.c',
|
|
'platform/nm-linux-platform.c',
|
|
'platform/nm-platform.c',
|
|
'platform/nm-platform-utils.c',
|
|
'platform/nmp-netns.c',
|
|
'platform/nmp-object.c',
|
|
'platform/nmp-rules-manager.c',
|
|
'main-utils.c',
|
|
'NetworkManagerUtils.c',
|
|
'nm-core-utils.c',
|
|
'nm-dbus-object.c',
|
|
'nm-dbus-utils.c',
|
|
'nm-netns.c',
|
|
'nm-l3-config-data.c',
|
|
'nm-l3cfg.c',
|
|
'nm-ip-config.c',
|
|
'nm-ip4-config.c',
|
|
'nm-ip6-config.c',
|
|
'nm-logging.c',
|
|
)
|
|
|
|
deps = [
|
|
daemon_nm_default_dep,
|
|
libn_dhcp4_dep,
|
|
libnm_keyfile_dep,
|
|
libnm_core_dep,
|
|
libnm_systemd_shared_dep,
|
|
libnm_udev_aux_dep,
|
|
libsystemd_dep,
|
|
libudev_dep,
|
|
]
|
|
|
|
if enable_wext
|
|
sources += files('platform/wifi/nm-wifi-utils-wext.c')
|
|
endif
|
|
|
|
libnetwork_manager_base = static_library(
|
|
nm_name + 'Base',
|
|
sources: sources,
|
|
dependencies: deps,
|
|
c_args: daemon_c_flags,
|
|
)
|
|
|
|
sources = files(
|
|
'devices/nm-acd-manager.c',
|
|
'devices/nm-device-6lowpan.c',
|
|
'devices/nm-device-bond.c',
|
|
'devices/nm-device-bridge.c',
|
|
'devices/nm-device.c',
|
|
'devices/nm-device-dummy.c',
|
|
'devices/nm-device-ethernet.c',
|
|
'devices/nm-device-ethernet-utils.c',
|
|
'devices/nm-device-factory.c',
|
|
'devices/nm-device-generic.c',
|
|
'devices/nm-device-infiniband.c',
|
|
'devices/nm-device-ip-tunnel.c',
|
|
'devices/nm-device-macsec.c',
|
|
'devices/nm-device-macvlan.c',
|
|
'devices/nm-device-ppp.c',
|
|
'devices/nm-device-tun.c',
|
|
'devices/nm-device-veth.c',
|
|
'devices/nm-device-vlan.c',
|
|
'devices/nm-device-vrf.c',
|
|
'devices/nm-device-vxlan.c',
|
|
'devices/nm-device-wireguard.c',
|
|
'devices/nm-device-wpan.c',
|
|
'devices/nm-lldp-listener.c',
|
|
'dhcp/nm-dhcp-dhclient.c',
|
|
'dhcp/nm-dhcp-dhclient-utils.c',
|
|
'dhcp/nm-dhcp-dhcpcanon.c',
|
|
'dhcp/nm-dhcp-dhcpcd.c',
|
|
'dhcp/nm-dhcp-listener.c',
|
|
'dns/nm-dns-dnsmasq.c',
|
|
'dns/nm-dns-manager.c',
|
|
'dns/nm-dns-plugin.c',
|
|
'dns/nm-dns-systemd-resolved.c',
|
|
'dns/nm-dns-unbound.c',
|
|
'dnsmasq/nm-dnsmasq-manager.c',
|
|
'dnsmasq/nm-dnsmasq-utils.c',
|
|
'ppp/nm-ppp-manager-call.c',
|
|
'settings/plugins/keyfile/nms-keyfile-storage.c',
|
|
'settings/plugins/keyfile/nms-keyfile-plugin.c',
|
|
'settings/plugins/keyfile/nms-keyfile-reader.c',
|
|
'settings/plugins/keyfile/nms-keyfile-utils.c',
|
|
'settings/plugins/keyfile/nms-keyfile-writer.c',
|
|
'settings/nm-agent-manager.c',
|
|
'settings/nm-secret-agent.c',
|
|
'settings/nm-settings.c',
|
|
'settings/nm-settings-connection.c',
|
|
'settings/nm-settings-plugin.c',
|
|
'settings/nm-settings-storage.c',
|
|
'settings/nm-settings-utils.c',
|
|
'supplicant/nm-supplicant-config.c',
|
|
'supplicant/nm-supplicant-interface.c',
|
|
'supplicant/nm-supplicant-manager.c',
|
|
'supplicant/nm-supplicant-settings-verify.c',
|
|
'vpn/nm-vpn-connection.c',
|
|
'vpn/nm-vpn-manager.c',
|
|
'nm-active-connection.c',
|
|
'nm-act-request.c',
|
|
'nm-audit-manager.c',
|
|
'nm-auth-manager.c',
|
|
'nm-auth-utils.c',
|
|
'nm-dbus-manager.c',
|
|
'nm-checkpoint.c',
|
|
'nm-checkpoint-manager.c',
|
|
'nm-config.c',
|
|
'nm-config-data.c',
|
|
'nm-connectivity.c',
|
|
'nm-dcb.c',
|
|
'nm-dhcp-config.c',
|
|
'nm-dispatcher.c',
|
|
'nm-firewall-manager.c',
|
|
'nm-hostname-manager.c',
|
|
'nm-keep-alive.c',
|
|
'nm-manager.c',
|
|
'nm-pacrunner-manager.c',
|
|
'nm-policy.c',
|
|
'nm-proxy-config.c',
|
|
'nm-rfkill-manager.c',
|
|
'nm-session-monitor.c',
|
|
'nm-sleep-monitor.c',
|
|
)
|
|
|
|
nm_deps = [
|
|
daemon_nm_default_dep,
|
|
dl_dep,
|
|
libn_acd_dep,
|
|
libndp_dep,
|
|
libudev_dep,
|
|
logind_dep,
|
|
]
|
|
|
|
nm_links = [
|
|
libnetwork_manager_base,
|
|
libnm_systemd_core,
|
|
libnm_systemd_shared,
|
|
]
|
|
|
|
if enable_concheck
|
|
nm_deps += libcurl_dep
|
|
endif
|
|
|
|
if enable_libaudit
|
|
nm_deps += libaudit_dep
|
|
endif
|
|
|
|
if enable_libpsl
|
|
nm_deps += libpsl_dep
|
|
endif
|
|
|
|
if enable_selinux
|
|
nm_deps += selinux_dep
|
|
endif
|
|
|
|
libnetwork_manager = static_library(
|
|
nm_name,
|
|
sources: sources,
|
|
dependencies: nm_deps,
|
|
c_args: daemon_c_flags,
|
|
link_with: nm_links,
|
|
)
|
|
|
|
executable(
|
|
'nm-iface-helper',
|
|
'nm-iface-helper.c',
|
|
dependencies: [
|
|
daemon_nm_default_dep,
|
|
dl_dep,
|
|
libndp_dep,
|
|
libudev_dep,
|
|
libn_acd_dep,
|
|
],
|
|
c_args: daemon_c_flags,
|
|
link_with: nm_links,
|
|
link_args: ldflags_linker_script_binary,
|
|
link_depends: linker_script_binary,
|
|
install: true,
|
|
install_dir: nm_libexecdir,
|
|
)
|
|
|
|
if enable_tests
|
|
test_c_flags = daemon_c_flags + ['-DNETWORKMANAGER_COMPILATION_TEST']
|
|
if require_root_tests
|
|
test_c_flags += ['-DREQUIRE_ROOT_TESTS=1']
|
|
endif
|
|
|
|
sources = files(
|
|
'ndisc/nm-fake-ndisc.c',
|
|
'platform/tests/test-common.c',
|
|
'platform/nm-fake-platform.c',
|
|
)
|
|
|
|
libnetwork_manager_test = static_library(
|
|
nm_name + 'Test',
|
|
sources: sources,
|
|
dependencies: daemon_nm_default_dep,
|
|
c_args: test_c_flags,
|
|
link_with: libnetwork_manager,
|
|
)
|
|
|
|
libnetwork_manager_test_dep = declare_dependency(
|
|
dependencies: daemon_nm_default_dep,
|
|
link_with: libnetwork_manager_test,
|
|
)
|
|
|
|
subdir('dnsmasq/tests')
|
|
subdir('ndisc/tests')
|
|
subdir('platform/tests')
|
|
subdir('supplicant/tests')
|
|
subdir('tests')
|
|
endif
|
|
|
|
subdir('dhcp')
|
|
|
|
if enable_ppp
|
|
subdir('ppp')
|
|
endif
|
|
|
|
subdir('devices')
|
|
subdir('initrd')
|
|
subdir('settings/plugins')
|
|
|
|
# NetworkManager binary
|
|
|
|
create_exports_networkmanager = join_paths(source_root, 'tools', 'create-exports-NetworkManager.sh')
|
|
symbol_map_name = 'NetworkManager.ver'
|
|
|
|
# libNetworkManager.a, as built by meson doesn't contain all symbols
|
|
# from libNetworkManagerBase.a and other static libraries, unless we
|
|
# add dependencies with link_whole, only supported in meson >= 0.46.
|
|
# Create an executable with full symbols that we use in place of the
|
|
# library to enumerate the symbols.
|
|
network_manager_all_sym = executable(
|
|
'NetworkManager-all-sym',
|
|
'main.c',
|
|
dependencies: nm_deps,
|
|
c_args: daemon_c_flags,
|
|
link_args: '-Wl,--no-gc-sections',
|
|
link_whole: [libnetwork_manager, libnetwork_manager_base, libnm_core],
|
|
)
|
|
|
|
# this uses symbols from nm-full-symbols instead of libNetworkManager.a
|
|
ver_script = custom_target(
|
|
symbol_map_name,
|
|
output: symbol_map_name,
|
|
depends: [network_manager_all_sym, core_plugins],
|
|
command: [create_exports_networkmanager, '--called-from-build', source_root],
|
|
)
|
|
|
|
ldflags = [
|
|
'-rdynamic',
|
|
'-Wl,--version-script,@0@'.format(ver_script.full_path()),
|
|
]
|
|
|
|
network_manager = executable(
|
|
nm_name,
|
|
'main.c',
|
|
dependencies: nm_deps,
|
|
c_args: daemon_c_flags,
|
|
link_with: libnetwork_manager,
|
|
link_args: ldflags,
|
|
link_depends: ver_script,
|
|
install: true,
|
|
install_dir: nm_sbindir,
|
|
)
|
|
|
|
if enable_tests
|
|
foreach plugin: core_plugins
|
|
plugin_path = plugin.full_path()
|
|
|
|
test(
|
|
'sym/' + plugin_path.split('/')[-1],
|
|
network_manager,
|
|
args: '--version',
|
|
env: ['LD_BIND_NOW=1', 'LD_PRELOAD=' + plugin_path],
|
|
)
|
|
endforeach
|
|
endif
|
|
|
|
test(
|
|
'check-config-options',
|
|
find_program(join_paths(source_root, 'tools', 'check-config-options.sh')),
|
|
args: source_root,
|
|
)
|