Commit graph

144 commits

Author SHA1 Message Date
Jiří Klimeš
82fb1978a4 all: use G_VALUE_INIT to initialize GValue variables
It makes the initializations more explicit.
G_VALUE_INIT is available since glib 2.30, and NM now require glib >= 2.32
2013-03-25 08:41:18 +01:00
Dan Winship
1cc367711d core: simplify nm_device_get_best_auto_connection()
As with the other connection-matching methods, move the loop and the
device-independent bits into NMDevice. By reusing
nm_device_check_connection_compatible(), this means that most device
types now no longer need any type-specific code for this.

https://bugzilla.gnome.org/show_bug.cgi?id=693684
2013-03-13 13:21:59 -04:00
Pavel Šimerda
b4954be855 modem: it is not a problem to flush IPv6 global routes
Whether they are supported or not. We already remove all addressess.
2013-03-12 18:48:34 +01:00
Dan Winship
6f44b7f3c6 all: remove redundant return-if-fail checks
NM_IS_FOO(x) returns FALSE if x is NULL, so we don't need a separate
(x != NULL) check before it.
2013-03-07 07:32:27 -05:00
Dan Winship
ed9e2d8377 build: avoid GValueArray deprecation warnings
Avoid warnings about GValueArray being deprecated by adding macros
that wrap G_GNUC_BEGIN_IGNORE_DEPRECATIONS /
G_GNUC_END_IGNORE_DEPRECATIONS around the GValueArray calls.
2013-02-26 13:07:33 +01:00
Dan Williams
39e48f730d modem: preserve data_iface over PPP connections
data_iface is the serial port over which PPP should be run, so
we need to preserve that and not overwrite it with the PPP interface
name.  When reconnecting, pppd wants the TTY to run PPP over (eg the
ModemManager data_port like ttyUSB0) but if we overwrote that with
ppp0 on the last connection, that's extremely unhelpful and pppd will
fail to start.
2013-02-20 14:01:39 -06:00
Aleksander Morgado
fb8ebc2a97 modem-manager: workaround issue in 'GDBusObjectManagerClient'
The 'GDBusObjectManagerClient' won't signal added or removed objects when it
was created but no name owner was available in the bus. We can still use it for
name-owner changes, but in order to have added/removed object signals, we'll
need to re-create the whole 'MMManager' when we know the service came alive in
the bus.

See GLib/GIO/GDBus bug:
   https://bugzilla.gnome.org/show_bug.cgi?id=693285
2013-02-08 18:03:42 -06:00
Aleksander Morgado
03c1e40e66 modem-manager: keep track of the signals added to the 'GDBusObjectManagerClient'
Make sure we cleanup all the signals when we remove our internal reference to
the 'MMManager' object.
2013-02-08 18:03:39 -06:00
Aleksander Morgado
3b2556ae38 modem-manager: properly follow name-owner changes
We avoid requesting to auto-start the service when the 'MMManager' is created,
so that we can use it to follow name-owner changes (when auto-starting
requested the 'MMManager' creation may fail).

We still handle the periodic poking to the service, but instead of re-creating
the 'MMManager', we just call org.freedesktop.DBus.Peer.Ping().
2013-02-07 12:17:32 -06:00
Aleksander Morgado
1bbcd696a4 modem-manager: plug memleak 2013-02-06 12:06:10 -06:00
Dan Winship
0b57fe0c56 core: simplify nm_device_get_best_auto_connection() implementations
Filter out non-autoconnect connections in the generic NMDevice method
rather than requiring each subclass to do it.

https://bugzilla.gnome.org/show_bug.cgi?id=688284
2013-01-29 10:14:19 -05:00
Dan Williams
9c839d3417 mobile: fix handling of CDMA username/password for ModemManager1
The new MM1 bits only looked at the GSM setting, which CDMA connections
don't necessarily have.
2013-01-09 18:14:37 -06:00
Aleksander Morgado
6c16796119 modem-manager: avoid assertion when exposed modem has no 3GPP/3GPP2 capabilities
If, for any reason, MM exposes a modem object without 3GPP or 3GPP2
capabilities, just return an error instead of assert()-ing.
2012-12-19 10:29:13 -06:00
Dan Williams
56550a984f modem-manager: don't log so often about trying to start modem-manager
Reduce the log level to a debug log.  If you're not running MM for
whatever reason, don't spam the logs.
2012-11-21 11:48:26 -06:00
Aleksander Morgado
8e4f6a5a55 modem-manager,broadband: use the primary port as unique ID
Instead of a 'modem#' identifier, use the primary port of the modem as unique
identifier. The modem UID will be set afterwards as the Device Iface, which is
then used by libnm-glib to gather vendor/product string from the udev device
associated with the Device Iface; so it really needs to be a real port.
2012-11-21 11:48:26 -06:00
Dan Williams
d3e4930177 mobile: assume IFF_NOARP when given a /32 prefix
Trying to ARP with no other machines in the broadcast domain
is pretty pointless, and in many cases doesn't work (ZTE MF691
/T-Mobile Rocket 2), so turn it off.
2012-11-21 11:48:26 -06:00
Aleksander Morgado
998b9295c9 modem-manager: don't report the data interface along with the IPv4 configuration
The only case where this was being used was in PPP-based connections, as the
ppp0 interface was reported by pppd once the IP setup was done. Instead, just
update the 'NM_MODEM_DATA_PORT' property, as the NMDevices already listen for
changes in that property.
2012-11-21 11:48:25 -06:00
Aleksander Morgado
6463904bff modem-manager, manager: avoid calling G_TYPE_INSTANCE_GET_PRIVATE() often
G_TYPE_INSTANCE_GET_PRIVATE() is known to be slow, so just call it once when
the private data is created, and keep a 'priv' pointer around for easy access.
2012-11-21 11:48:25 -06:00
Aleksander Morgado
2e74fc8cf4 modem-manager, manager: integrate the new `ModemManager1' interface support
The new `MMManager' object takes care of notifying modems added or removed from
the ModemManager1 interface.

We will listen to both the old and new ModemManager implementations, but as soon
as the first ModemManager implementation is found, the other one gets cleared,
so that we don't wait forever to appear.
2012-11-21 11:48:25 -06:00
Aleksander Morgado
a9032724cb modem-manager: new `NMModemBroadband'
This new object, which is a subclass of `NMModem', implements the basic support
of the new ModemManager1 interface.
2012-11-21 11:48:25 -06:00
Aleksander Morgado
469e1a7164 modem-manager: rename old interface symbols
The new ModemManager comes with its own headers, and defines its own symbols to
name e.g. each interface. In order not to collide with the new ones, rename the
existing ones with a 'MM_OLD_DBUS' prefix instead of just 'MM_DBUS'.
2012-11-21 11:48:25 -06:00
Aleksander Morgado
fb9ece78c4 modem-manager: fix several code alignment issues 2012-10-30 18:34:26 -05:00
Aleksander Morgado
6e8b3dadea modem-manager, gsm, cdma: remove 'signal_quality' callback definitions
They are nowhere used.
2012-10-30 18:34:26 -05:00
Aleksander Morgado
7314e37061 modem-manager, gsm: keep the "Connect" DBus call handler around
So that the call gets properly cancelled when deactivating.
2012-10-30 18:34:26 -05:00
Aleksander Morgado
a8f7a45e3f modem-manager: rework interface related properties in `NMModem'
The logic behind the `iface' property (which actually is removed) gets split
into three new properties, as follows::

 * `uid': Just defines a new string property which must contain a unique ID of
    the modem, mainly for logging.

 * `control-port': a string property defining which is the control port the
    modem uses. This property is actually optional and may be specified as NULL.
    The main purpose of this property is to allow the easy integration of the
    new ModemManager into the `NMDeviceBt' object. The bluetooth device needs
    to know the port used by the modem; and we cannot use the Data port
    information as that is only available until the bearer is created. Instead,
    for the new ModemManager we will use the control port information exposed.

 * `data-port': a string property defining which is the data port to use in the
    connection. This property is always defined in the `NMModemGsm' and
    `NMModemCdma' objects.
2012-10-30 18:34:26 -05:00
Aleksander Morgado
1f0dbd6790 modem-manager: let the `NMDeviceModem' handle hw_is_up() and hw_bring_up()
These actions don't require anything from the `NMModem' object, so just move
them back to `NMDeviceModem'.
2012-10-30 18:24:28 -05:00
Aleksander Morgado
24b6fc9e62 modem-manager: switch the state' property from NMModem' into just `connected'
We don't want to depend in the `NMModem' interface on an enumeration which is
very specific to the old ModemManager interface, so we'll just skip exposing it
and instead we'll just give a new boolean property which tells whether the modem
is connected or not (which was at the end the whole purpose of the `state'
property).
2012-10-30 18:24:25 -05:00
Aleksander Morgado
f98ef0fdc4 modem-manager: remove the device' property from NMModem'
This property is not really used anywhere; so pointless to have it around.

Also, we already make sure in `NMModemManager' that the so called 'master'
device is valid and exists.
2012-10-30 18:24:21 -05:00
Aleksander Morgado
1eca1b2648 modem-manager: split the `NMModem' object
The `NMModem' object is split into two objects now:

 * The new `NMModemGeneric' object contains all the implementation specific to
   the old ModemManager interface.

 * The `NMModem' object keeps all the generic stuff; e.g. it doesn't even depend
   on dbus-glib for anything. Several properties in `NMModem' are also now set
   as non-construct-only, as we know that the new ModemManager only knows some
   of the stuff once a bearer has been created, not once a modem is available.

See src/modem-manager/README for more information.
2012-10-30 18:24:17 -05:00
Dan Williams
8bbd7f207e modem: reduce "starting the modem manager" to a debug message 2012-10-02 17:02:31 -05:00
Dan Winship
565c43e91d core: remove "real_" prefix from method implementation names
The idea was copied from gtk, but it's only used there in cases where
the method's wrapper function and default implementation would
otherwise have the same name, which never happens in NM because our
method implementations aren't prefixed with the type name, so it's
just noise here.
2012-10-02 15:43:24 -04:00
Marius B. Kotsbak
c4a85acf80 core: add settings for 4G (LTE) network modes
NM_SETTING_GSM_NETWORK_TYPE_PREFER_4G and NM_SETTING_GSM_NETWORK_TYPE_4G added.
2012-09-11 11:47:22 -05:00
Dan Williams
0111d4dbd7 modem: fix DNS configuration with static IP modems
The MM API defines the GetIP4Config method return as (uuuu) which
is [ IP, DNS1, DNS2, DNS3 ].  Unfortunately the for() loop in the
static_stage3_done() function started at index 0, which is the IP
address.  This caused the IP address to be added to the DNS list.
It should start at index 1 instead.
2012-08-28 19:58:22 -05:00
Dan Williams
ae544fe435 modem: log IPv4 configuration 2012-08-28 11:35:28 -05:00
Dan Williams
052a24343e modem: track modem state and fail device if modem disconnects
This worked fine with PPP because PPP terminates, and NM watches
for that and handles it fine.  But modems with pseudo-ethernet ports
don't have anything like that, so we have to watch the modem's state
property instead.  This works only with MM 0.5.4 and later (including
0.6).
2012-08-24 13:24:16 -05:00
Dan Williams
1d7949e66c build: fix up includes; prefer builddir over srcdir
WiMAX failed distcheck if the iwmxsdk devel files were installed but
--enable-wimax=no was used, since the distcheck configure bits found
the iwmxsdk headers, defaulted WiMAX support to 'on', and then proceeded
to use the generated headers from the top srcdir, where of course
wimax was turned off (due to --enable-wimax=no).  Instead, everything
should use the headers from the builddir, which reflects the options
that 'make distcheck' actually selects.

At the same time, re-order various includes everywhere to ensure that
the builddir paths come before the srcdir paths to prevent this from
happening in the future.
2012-08-06 17:27:17 -05:00
Dan Williams
5751a7909b modem: don't warn if disconnect fails when the modem already failed
The disconnect request gets sent just as a precaution, but usually when
the device fails the modem is already gone from ModemManager and the
Disconnect() method will fail.  Just don't log the failure.
2012-06-04 15:55:18 -05:00
Dan Williams
4dc5e6c92a core: fix ifindex value checks
Kernel ifindexes are always greater than zero (see dev_new_index()
in net/core/dev.c).  Also don't bother warning about ifindex
lookup failures for devices we know aren't kernel network interfaces.
2012-05-17 13:23:39 -05:00
Dan Williams
6b9511f6e9 core: treat missing IPv6 setting as AUTO
Like IPv4, if the connection contains no IPv6 setting, perform
IPv6 addressing.  Since may-fail defaults to TRUE for IPv6, failure
should have no consequence.
2012-03-16 09:43:16 -05:00
Andrew Bird
34aef8aaaa gsm: pass the PPP auth preferences for STATIC and DHCP device use
When using the either DHCP or STATIC IpMethods the modem manager
or device itself negotiates the PPP session so we need to pass
the authentication preferences through to MM.

Notes:
        1/ Using a bitfield now that happens to match the Ericsson
in the lower orders so that it's far more tidy.
        2/ Devices that wish to utilise this should observe the
following:
        If the bitfield doesn't exist in the dict, then MM uses the
modem default, if it does, MM tries to fulfill the request. If the
modem can only accept one value (Qualcomm-type devices accept only
None, PAP or CHAP with AT$QCPDPP) then MM picks the appropriate one
from the dict if only one of PAP or CHAP was given, otherwise we
default to PAP.

(dcbw: make enum a bitfield instead of the bit position)
2012-03-15 16:19:43 -05:00
Dan Winship
54ef8f3224 Fix names of error enum values
When NM was registering all of its enum types by hand, it was using
NamesLikeThis rather than the default names-like-this for the "nick"
values. When we switched to using glib-mkenums, this resulted in
dbus-glib using different strings for the D-Bus error names, causing
compatibility problems.

Fix this by using glib-mkenums annotations to manually fix all the
enum values back to what they were before. (This can't be done in a
more automated way, because the old names aren't 100% consistent. Eg,
"UNKNOWN" frequently becomes "UnknownError" rather than just
"Unknown".)
2012-03-12 15:29:52 -04:00
Colin Walters
74ec56d956 build: fix srcdir != builddir for new generated headers 2012-02-22 16:27:28 -06:00
Dan Williams
0e6de5d2cf modem: get ip-timeout during modem creation
Grab it from the GetAll call where it'll already be instead
of asking for it separately.
2012-02-17 15:32:27 -06:00
Dan Williams
002155fb09 modem: get modem properties using GetAll
More efficient and less error-prone; get all the properties
in one call instead of individually.
2012-02-17 15:32:27 -06:00
Aleksander Morgado
b574524da4 modem: query desired IP timeout value
Different modem implementations in ModemManager are now able to specify specific
maximum durations of the IP configuration setup. This is useful when specific
modems need durations greater than the default 20s (for example, for Satellite
network based modems, where delays are pretty high).
2012-02-17 15:32:22 -06:00
Dan Winship
839eab5564 Use glib-mkenums to generate enum types
Rather than generating enum classes by hand (and complaining in each
file that "this should really be standard"), use glib-mkenums.

Unfortunately, we need a very new version of glib-mkenums in order to
deal with NM's naming conventions and to fix a few other bugs, so just
import that into the source tree temporarily.

Also, to simplify the use of glib-mkenums, import Makefile.glib from
https://bugzilla.gnome.org/654395.

To avoid having to run glib-mkenums for every subdirectory of src/,
add a new "generated" directory, and put the generated enums files
there.

Finally, use Makefile.glib for marshallers too, and generate separate
ones for libnm-glib and NetworkManager.
2012-02-15 11:42:15 -05:00
Dan Williams
d501b6a9f6 modem: delay connect a bit after sending the PIN
Modems take a bit of time, and ModemManager may not quite be
ready for immediate connect after sending the PIN since the
modem isn't enabled.  The specific issue was that MM is still
closing serial ports, so if we try to enable too soon we'll
get an error about serial ports being closed.
2012-02-07 23:00:23 -06:00
Jiří Klimeš
aed37465be ppp: change handling of lcp-echo-failure and lcp-echo-interval (bgo #663970)
Don't set default values for the properties, which didn't allow users to
switch off sending echo-request packets. Rather set defaults in editor
or while completing connection for modems.
2012-01-16 09:52:48 +01:00
Colin Walters
dab7dfaf35 build: fix srcdir != builddir
nm-version.h is in ${top_builddir}/include.
2012-01-09 14:20:36 -06:00
Dan Williams
a868fd5a98 core: don't flush routes/addresses on invalid interface indexes
The NM 'iface' isn't always the IP iface (like for modems) so
to avoid a warning, only flush routes and addresses on deactivate
when the iface can actually handle it.
2011-12-12 14:01:21 -06:00