Understanding Modem Manager

Aleksander Morgado aleksander at lanedo.com
Mon Dec 9 03:35:06 PST 2013


Hey Marc,

> I have a platform that has no GUI so I am trying to initialize a couple of 3G modems (Huawei EM820W and Sierra Wireless MC8705) to use as data connections when away from the local network.
> 
> I have downloaded and compiled ModemManager and it seems to be working well with the daemon, the cards can be detected and various parameters can be extracted using the mmcli app.
> 
> I am having some trouble in actually getting a useable connection.
> Previously with one of the cards  (Sierra Wireless MC8705) I could manually setup with the AT commands, connect and get a valid IP address with all the dns and routing being setup with dhclient.
> 
> I would like to have the same result but using ModemManager, if it is possible.  Here is some debug about what I am attempting to do:
> 
> # mmcli -m 0 --list-bearers
> 
> No bearers were found
> # mmcli -m 0
> 
> /org/freedesktop/ModemManager1/Modem/0 (device id '61d98ebe0deeb14a83d951229303f0e8a245cd35')
>  -------------------------
>  Hardware |   manufacturer: 'huawei'
>           |          model: 'EM820W'
>           |       revision: '11.809.05.80.00'
>           |   capabilities: 'gsm-umts'
>           |        current: 'gsm-umts'
>           |   equipment id: '3542830400XXXXX'
>  -------------------------
>  System   |         device: '/sys/devices/platform/usbhs_omap/ehci-omap.0/usb1/1-1/1-1.1'
>           |        drivers: 'option1'
>           |         plugin: 'Huawei'
>           |   primary port: 'ttyUSB3'
>  -------------------------
>  Numbers  |           own : '+4475398XXXXX'
>  -------------------------
>  Status   |           lock: 'none'
>           | unlock retries: 'sim-pin (3), sim-pin2 (3), sim-puk (10), sim-puk2 (10)'
>           |          state: 'disabled'
>           |    access tech: 'unknown'
>           | signal quality: '0' (cached)
>  -------------------------
>  Modes    |      supported: '2g, 3g'
>           |        allowed: '2g, 3g'
>           |      preferred: 'none'
>  -------------------------
>  Bands    |      supported: 'unknown'
>           |        current: 'unknown'
>  -------------------------
>  3GPP     |           imei: '3542830400XXXXX'
>           |  enabled locks: 'none'
>           |    operator id: 'unknown'
>           |  operator name: 'unknown'
>           |   registration: 'unknown'
>  -------------------------
>  SIM      |           path: '/org/freedesktop/ModemManager1/SIM/0'
> 
> So it looks like the modem is detected.  I then tried to connect by creating the bearer info (I'm using tmobile in the UK);
> # mmcli -m 0 --create-bearer="apn=general.t-mobile.uk,user=t-mobile,password=tm,
> number=*99#"
> Successfully created new bearer in modem:
>        /org/freedesktop/ModemManager1/Bearer/2

No need to pass the "number" parameter there; won't be used.

> 
> # mmcli -m 0 -c -b /org/freedesktop/ModemManager1/Bearer/2


You shouldn't pass "-m 0" and then "-b /.../"; just "mmcli -b 2 -c"
should do it (i.e. only specify the bearer).


> ModemManager[805]: <info>  Modem /org/freedesktop/ModemManager1/Modem/0: state changed (registered -> connecting)
> ModemManager[805]: <info>  (ttyUSB0) opening serial port...
> ModemManager[805]: <warn>  (ttyUSB0): port attributes not fully set
> ModemManager[805]: <warn>  Couldn't initialize PDP context with our APN: 'Serial command timed out'
> ModemManager[805]: <info>  (ttyUSB0) closing serial port...
> ModemManager[805]: <info>  (ttyUSB0) serial port closed
> ModemManager[805]: <info>  Modem /org/freedesktop/ModemManager1/Modem/0: state changed (connecting -> registered)
> error: couldn't connect the bearer: 'GDBus.Error:org.freedesktop.ModemManager1.Error.Serial.ResponseTimeout: Serial command timed out'
> 

Oh well;.... Care to run ModemManager with --debug to see what is really
happening?



> Which looked like it failed but the status shows
> 
> # mmcli -m 0 --simple-status
> 
> /org/freedesktop/ModemManager1/Modem/0
>  -------------------------
>  Status |          state: 'registered'
>         | signal quality: '6' (cached)
>         |          bands: 'unknown'
>         |    access tech: 'umts'
>  -------------------------
> 3GPP    |   registration: 'home'
>         |  operator code: '23433'
>         |  operator name: 'Orange'
> 

Yeah, it failed. It's only registered, not connected.


> So then decided to try the example with simple-connect
> 
> # mmcli -m 0 --simple-connect="pin=1234,apn=internet"
> ModemManager[805]: <info>  Simple connect started...
> ModemManager[805]: <info>  Simple connect state (4/10): Wait to get fully enabled
> ModemManager[805]: <info>  Simple connect state (5/10): Allowed mode
> ModemManager[805]: <info>  Simple connect state (6/10): Bands
> ModemManager[805]: <info>  Simple connect state (7/10): Register
> ModemManager[805]: <info>  Simple connect state (8/10): Bearer
> ModemManager[805]: <info>  Simple connect state (9/10): Connect
> ModemManager[805]: <info>  Modem /org/freedesktop/ModemManager1/Modem/0: state changed (registered -> connecting)
> ModemManager[805]: <info>  (ttyUSB0) opening serial port...
> ModemManager[805]: <warn>  (ttyUSB0): port attributes not fully set
> ModemManager[805]: <info>  Modem /org/freedesktop/ModemManager1/Modem/0: state changed (connecting -> connected)
> ModemManager[805]: <info>  Simple connect state (10/10): All done
> successfully connected the modem
> 
> That seemed to work ???


Yeah, it worked.


> # mmcli -m 0 --simple-status
> 
> /org/freedesktop/ModemManager1/Modem/0
>  -------------------------
>  Status |          state: 'registered'
>         | signal quality: '6' (cached)
>         |          bands: 'unknown'
>         |    access tech: 'umts'
>  -------------------------
> 3GPP    |   registration: 'home'
>         |  operator code: '23433'
>         |  operator name: 'Orange'
> 

Hum... "state" should have said "connected" there.


> So how do I reliably get to connect and then generate a wwan0 network interface ?  Do I need to use NetworkManager to obtain an IP interface to allow for routing ?
> 


ModemManager will get the interface connected. Once it is connected, the
modem will expose in the "bearer info" (e.g. mmcli -b 2) the "IP setup"
needed in the 'data' interface. This may be DHCP, or static or PPP. If
DHCP is required in the net interface, you'll need to bring the
interface up (e.g. ifup) and then run a DHCP client in the interface
(e.g. dhclient). If you are using NetworkManager, it will handle all
that for you, including the case where the needed setup is PPP or a
static IP config.



> As you can guess I am in the early learning stages with this.  Once I get the IP connection sorted I would like to look at the gps.  This also isn't working when I try....
> 
> # mmcli -m 0 --location-status
> 
> /org/freedesktop/ModemManager1/Modem/0
>  ----------------------------
>  Location | capabilities: '3gpp-lac-ci'
>           |      enabled: '3gpp-lac-ci'
>           |      signals: 'no'
> 
> # mmcli -m 0 --location-get-3gpp
> error: couldn't get 3GPP-based location from the modem: 'not available'
> 
> # mmcli -m 0 --location-enable-gps-nmea
> error: couldn't setup location gathering: 'GDBus.Error:org.freedesktop.ModemManager1.Error.Core.Unsupported: Cannot enable unsupported location sources: 'gps-nmea''
> 
> But the specs for the modem state that it can do NMEA gps?? Confusing.
> 

No GPS location capabilities shown means that ModemManager doesn't know
how to manage them. In your case, the Huawei plugin in ModemManager
knows nothing about GPS.

-- 
Aleksander


More information about the ModemManager-devel mailing list