Commit graph

5024 commits

Author SHA1 Message Date
Dan Williams
27f91d054c core: simplify hardware address reading
We no longer need a class method for reading the hardware address
length, for a couple reasons:

1) Using the IP interface hardware address for IP operations now makes
NMDevice's priv->hw_addr_len constant.  So there's no reason to re-read
it all the time.

2) get_hw_address_length() is now only used for determining whether the
hardware address is permanent, and that only mattered for Bluetooth.
Since Bluetooth interfaces have a bogus interface name, they will never
have a valid ifindex, and thus nm_platform_link_get_address() would be
useless.  So instead of using the 'permanent' stuff, just don't bother
updating the hardware address if the NMDevice's ifindex isn't valid,
and let subclasses pass the initial hardware address at device creation.

This also works correctly for NMDevice classes that previously
implemented get_hw_address_length() like ADSL and WWAN, since those
too will never have a valid ifindex or a valid hardware address.

3) Reading the device's hardware address length just ended up calling
nm_platform_link_get_address() for most devices anyway, so
nm_device_update_hw_address() would effectively read the link address
twice (once to read the length, the second time to read the actual
address).  Let's just read the address once.
2014-07-23 12:53:55 -05:00
Thomas Haller
ac4fafe7a4 platform: assert against the maximum length of link_get_address()
Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-07-23 12:42:45 -05:00
Dan Williams
7f771d0a05 core: use IP interface hardware address for IP-level operations
The IP interface may have its own hardware address (like the net
port for WWAN devices) and that's the hardware address that must be
used for DHCP and IPv6 SLAAC, not the hardware address (if any) of
the NMDevice itself.

This patch does change the NMDevice hardware address property to
always be the Device's hardware address, instead of the IP interface
hardware address.  This means that ADSL and WWAN will no longer
change their hardware address to the hardware address of their
IP interface.  But in all these cases, the hardware address is
non-existent (PPP) or transient and meaningless (WWAN/ADSL).
2014-07-23 12:42:45 -05:00
Colin Walters
15734a4ba5 config: avoid segfault if there's no ignore_carrier
Just return false.
2014-07-23 12:21:46 -05:00
Dan Winship
7da97fc6fe config: drop NMConfigDevice, use NMDevice directly
NMConfigDevice was added because in the 0.9.8 days, when each subdir
of src/ was compiled separately, it was impossible to make src/config/
depend on src/devices/ because of circular dependencies.

Since now everything gets compiled into a single libNetworkManager.la,
this is no longer a problem, and so NMConfigDevice is just an
unnecessary complication.
2014-07-23 10:56:26 -04:00
Dan Winship
2b2faf9c28 config: move some spec-match-list handling from config to core
NMConfig accepted no-auto-default and ignore-carrier lists with
untagged specs (ie, interface names not prefixed with
"interface-name:" and hardware addresses not prefixed with "mac:").
Move that handling into nm_match_spec_interface_name() and
nm_match_spec_hwaddr() instead.
2014-07-23 10:56:26 -04:00
Dan Winship
4308a8305a core: fix libndp linking
We were linking libndp into the NetworkManager binary, but it ought to
be marked as a dependency of libNetworkManager, in case a test
exercises that code.
2014-07-23 10:56:26 -04:00
Dan Winship
b28f6526c2 core: fill in nm-types.h, clean out other headers
Clean up some of the cross-includes between headers (which made it so
that, eg, if you included NetworkManagerUtils.h in a test program, you
would need to build the test with -I$(top_srcdir)/src/platform, and if
you included nm-device.h you'd need $(POLKIT_CFLAGS)) by moving all
GObject struct definitions for src/ and src/settings/ into nm-types.h
(which already existed to solve the NMDevice/NMActRequest circular
references).

Update various .c files to explicitly include the headers they used to
get implicitly, and remove some now-unnecessary -I options from
Makefiles.
2014-07-23 10:56:26 -04:00
Dan Winship
b7c7832ae8 settings: remove libnm-glib references
Several plugins were using -I$(top_srcdir)/libnm-glib, which is bad
since libnm-glib has its own nm-types.h which is different from src's.
Worse yet, some were actually linking against libnm-glib (which
presumably only worked at all because they weren't calling any
functions in it and so the linker just ignored the request). Fix both
problems.
2014-07-23 10:56:25 -04:00
Dan Winship
b25a237fd6 dhcp: remove a stray reference to test-dhcp-options
5b4be27f moved test-dhcp-options from src/tests/ to
src/dhcp-manager/tests/, but src/tests/Makefile.am still included it
in "TESTS" (which would still work until you tried to build from a
clean tree...)
2014-07-23 10:04:18 -04:00
Dan Williams
7ef4e3fd01 dhcp: add client hardware address and priority accessors 2014-07-22 14:39:20 -05:00
Dan Williams
e40322f572 dhcp: allow clients to retrieve DUID after DHCPv6 start 2014-07-22 14:39:20 -05:00
Dan Williams
2c982d877e dhcp: make DUID-to-string function available to subclasses 2014-07-22 14:39:20 -05:00
Dan Williams
a1c86a9a27 dhcp: pass IPv6 privacy preference to client class 2014-07-22 14:39:20 -05:00
Dan Williams
24c1523b51 dhcp: pass individual options to DHCP instead of NMSettingIPxConfig 2014-07-22 14:39:19 -05:00
Dan Williams
d7b3ae8c10 dhcp: consolidate more state logic in nm_dhcp_client_set_state()
The goal is to remove generic logic from nm_dhcp_client_new_options(),
since library-ized DHCP clients won't ever call that function since
their native data format isn't a hash table of strings.
2014-07-22 14:39:19 -05:00
Dan Williams
3ffb25ddce dhcp: trivial: move state table and state string functions earlier 2014-07-22 14:39:19 -05:00
Dan Williams
6ffcde08dd dhcp: pass DHCP options with BOUND state change
The options hash is never used except for BOUND events, so don't
bother caching it in the DHCP client object.  Just pass it along
with the BOUND state change, like the IP configuration object.
2014-07-22 14:39:19 -05:00
Dan Williams
aff6a70c52 dhcp: convert options testcases to g_assert() 2014-07-22 14:39:19 -05:00
Dan Williams
31d19f51d1 dhcp: filter DHCP options when setting them
Don't bother storing all the options, only store the ones we care
about and ones we export through the NMDHCP4Config and NMDHCP6Config
objects.
2014-07-22 14:39:19 -05:00
Dan Williams
4ce6e39a8f dhcp: pass IP config in state signal
Just pass it in the state change signal.
2014-07-22 14:39:19 -05:00
Dan Williams
5b4be27f4a dhcp: consolidate and simplify DHCP options tests
Previously the tests required that a NMDHCPClient object was
created, but all that's really being tested is the DHCP option
parsing and that doesn't need a client object now that the
option parsing has been split out.

Also, the options test wasn't in src/dhcp-manager/, so put it there.

Lastly, the test ran for both dhclient and dhcpcd, but the code
executed for both cases was the same, so there's no reason to keep
running the test for both clients.
2014-07-22 14:39:19 -05:00
Dan Williams
f275a66105 dhcp: split out DHCP options processing
No code changed except passing what used to use "priv->" as
function parameters.
2014-07-22 14:39:19 -05:00
Dan Williams
5b5801f268 dhcp: find existing clients by ifindex, not interface name
More robust against ifname changes, plus we save some strcmps().
For the most part, the interface name should be informational
only and unused for actual control logic.
2014-07-22 14:39:18 -05:00
Dan Williams
fec121fd9d dhcp: remove the client REMOVE signal
Instead of using a separate signal for it, just drop and release
the client object when it reaches terminate states like TIMEOUT,
FAIL, and DONE.  The 5 second removal signal timeout appears to
no longer be necessary, since the running child process is killed
synchronously.
2014-07-22 14:39:18 -05:00
Dan Williams
7262e606c4 dhcp: always signal state changes
Modify code so that listeners remove state change signal handlers
before stopping the client.  Which means we can remove the 'emit_state'
argument from nm_dhcp_client_set_state().
2014-07-22 14:39:18 -05:00
Dan Williams
180d298dea dhcp: make nm_dhcp_client_set_state() available to subclasses
Not all state changes will be done in the base NMDHCPClient class
anymore, especially with non-subprocess DHCP clients.
2014-07-22 14:39:18 -05:00
Dan Williams
a7a84d7f76 core: consolidate DHCP client termination in dhcp[4|6]_fail()
DHCP failure should just clean up the client in all cases.  This
also has the benefit of removing the signal handler for the DHCP
client's state-change signal before telling the client to terminate,
which will simplify some DHCP code later.
2014-07-22 14:39:18 -05:00
Dan Williams
9568ae52e4 dhcp: merge TIMEOUT signal with DHCP_STATE_TIMEOUT
No reason to have two signals for the same thing. Previously, the
TIMEOUT signal was used for the internal overall DHCP transaction
bound, while DHCP_STATE_TIMEOUT/DHC_TIMEOUT was a signal from
the DHCP client itself that something had timed out.  But in both
cases the results should be the same, so just collapse the
stand-alone TIMEOUT signal into the DHCP_STATE_TIMEOUT state.
2014-07-22 14:39:18 -05:00
Dan Williams
9e75e2ad0d dhcp: simplify DHCP states
The existing DHC_* states are pretty specific to dhclient, and aren't
useful for more generalized DHCP.  NetworkManager wasn't using many
of the states anyway, and doesn't need to differentiate between
states like REBOOT/REBIND/RENEW anyway.  So simplify the DHCP states
into the ones we really care about.
2014-07-22 14:39:18 -05:00
Dan Williams
30cdd1248c dhcp: handle DHCP clients that aren't subprocesses
Make the base class mostly ignorant of process IDs, except for a
few utility functions.
2014-07-22 14:39:17 -05:00
Dan Williams
37b6fc1c85 dhcp: pass ifindex to DHCP clients 2014-07-22 14:33:39 -05:00
Jiří Klimeš
3ff1477349 device: add a new D-Bus 'Delete' method for removing software devices 2014-07-22 14:24:42 +02:00
Jiří Klimeš
bbf13002d3 device: indicate software devices in NMDeviceCapabilities
It is visible by clients in 'capabilities' property.
2014-07-22 14:24:42 +02:00
Dan Williams
d8d0b37adc platform: fix uninitialized variable usage after fdf78b3d
'address' was not initialized, so using address.ifindex was not
going to work.

==6777== Conditional jump or move depends on uninitialised value(s)
==6777==    at 0x44A6DB: check_cache_items (nm-linux-platform.c:1510)
==6777==    by 0x44AA4F: announce_object (nm-linux-platform.c:1586)
==6777==    by 0x44A59A: refresh_object (nm-linux-platform.c:1666)
==6777==    by 0x44A676: check_cache_items (nm-linux-platform.c:1517)
==6777==    by 0x44A812: announce_object (nm-linux-platform.c:1566)
==6777==    by 0x44D957: handle_udev_event (nm-linux-platform.c:3964)
==6777==    by 0x3BAFC125A7: g_closure_invoke (gclosure.c:777)
==6777==    by 0x3BAFC2465C: signal_emit_unlocked_R (gsignal.c:3586)
==6777==    by 0x3BAFC2C3E1: g_signal_emit_valist (gsignal.c:3330)
==6777==    by 0x3BAFC2C69E: g_signal_emit (gsignal.c:3386)
==6777==    by 0x3D93A03BE3: ??? (in /usr/lib64/libgudev-1.0.so.0.1.3)
==6777==    by 0x3BAF8521D5: g_main_context_dispatch (gmain.c:3066)
2014-07-21 13:09:47 -05:00
Dan Williams
02a5b972e6 trivial: simplify some code 2014-07-20 12:00:21 -05:00
Thomas Schäfer
bcd554724e dhcp: let dhclient handle requesting the 'server-id' option
Always requesting this appears to cause some devices to ignore
DHCP requests, like the ZTE 823D, ZTEMF93E, Alcatel W800Z.
dhclient probably knows better than NM when to request the
server's ID, so leave that up to dhclient.  We don't do anything
interesting with it anyway.
2014-07-17 15:53:04 -05:00
Thomas Haller
6cf9724f7d platform: use gs_free (instead of own define auto_g_free)
Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-07-15 22:50:36 +02:00
Thomas Haller
37f08bc848 core: use gs_free_slist in NMManager
Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-07-15 22:50:36 +02:00
Thomas Haller
39fce7371a libgsystem: remove submodule libgsystem
Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-07-15 22:50:36 +02:00
Thomas Haller
7a5af89f0b core: #include gsystem-local-alloc.h instead of libgsystem.h
Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-07-15 22:47:43 +02:00
Dan Winship
30c74c6007 build: more srcdir!=builddir fixes
nm-version.h was getting disted, making srcdir!=builddir work for
tarball builds, but not for git builds.

Also, remove "-I${top_builddir}/include" from all Makefile.ams, since
there's nothing generated in include/ any more.
2014-07-15 11:37:19 -04:00
Dan Winship
c9e2c34029 build: fix srcdir!=builddir build after previous merge 2014-07-15 10:52:50 -04:00
Dan Winship
7eb0288aa0 libnm-util: move NetworkManager.h, etc, from include/ to here
NetworkManager.h, NetworkManagerVPN.h, and nm-version.h are part of
the libnm-util API, so move them to libnm-util.

include/ still contains headers that are strictly NM-internal (eg,
nm-glib-compat.h).
2014-07-15 09:44:54 -04:00
Jiří Klimeš
0105fb884a core: use nm_utils_is_specific_hostname() instead of hardcoded "localhost" 2014-07-14 17:36:07 +02:00
Jiří Klimeš
bf1231d02a policy: don't use default hostname as configured hostname (rh #1110436)
Even if administrator-configured hostname (/etc/hostname) takes precedence
over other hostname configurations, we don't take "localhost", "localhost6",
"localhost.localdomain", "localhost6.localdomain6" as such. These values might
be set by some tools (like installer). But that's not right and we compensate
for that. It doesn't make much sense that an admimistrator would set these
values manually (intentionally), because leaving /etc/hostname empty will
result in "localhost" hostname anyway (set by systemd).

https://bugzilla.redhat.com/show_bug.cgi?id=1110436
2014-07-14 17:36:07 +02:00
Jiří Klimeš
70e930bc0e utils: add nm_utils_is_specific_hostname()
The function detects whether the hostname is a specific hostname diferrent
from default hostnames like localhost, localhost[6].localdomain[6].
2014-07-14 17:36:07 +02:00
Dan Williams
66d1f2f53c platform: ignore RTM_F_CLONED (eg, cache) routes
The kernel adds these for various operations; they are short-lived,
added often, and not useful to NetworkManager.  Ignore them.  This
prevents NetworkManager from continuously updating the IPv6 config
and emitting state changes to clients via D-Bus for useless changes.
2014-07-11 14:51:12 -05:00
Thomas Haller
98bc1c8cf9 config: replace g_warning() by nm_log_warn()
Quite possibly these logging lines hit before we setup nm-logging
initially and before NM main() calls nm_logging_syslog_openlog().
This is because NM first needs to read the configuration, before setting
up logging.

Note however, that nm-logging is robust against both.

If nm_logging_setup() was not yet called, it will automatically setup
"DEFAULT","INFO".

If nm_logging_syslog_openlog() was not yet called, it will redirect
logging to g_log() -- which basically ends up at g_warning() again.

Still this is useful in case when hitting those lines *afterwards*.
Especially, later when we support reloading of configuration.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-07-11 13:13:15 +02:00
Thomas Haller
a218199eb6 config: fix leaked GError when no default config file exists
Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-07-11 13:13:15 +02:00