Cannot send MMS messages with combined contexts with WiFi connected

Bug #1454625 reported by Alfonso Sanchez-Beato
16
This bug affects 2 people
Affects Status Importance Assigned to Milestone
Canonical System Image
Fix Released
Critical
Unassigned
network-manager (Ubuntu)
Fix Released
High
Alfonso Sanchez-Beato

Bug Description

Cannot send MMS messages with combined contexts in case the WiFi is connected, for some operators. Combined contexts are able to handle internet data and MMS data. For the operator for which I've seen the bug, the data is:

$ /usr/share/ofono/scripts/list-contexts
[ /ril_0 ]
    [ /ril_0/context1 ]
        Password =
        MessageCenter = http://www.pepephone.com
        Name = MMS Pepephone
        Username =
        Protocol = ip
        Preferred = 0
        IPv6.Settings = { }
        Settings = { }
        MessageProxy = 10.138.255.43:8080
        Type = internet
        AccessPointName = gprs.pepephone.com
        Active = 0

Sending an MMS with cellular data and WiFi enabled fails for this operator when using a combined context. Disabling WiFi I was able to send the MMS.

The error I see in ~/.cache/upstart/dbus.log is:

E0513 09:55:03.254148 4565 file_upload.cpp:345] Upload ID{ d0e5da6eb7664d908ab49b810ff55e01 } http://www.pepephone.com ERROR::Network error UnknownNetworkError: an unknown network-related error was detected

The interface that were up when the failure happened were:

$ ifconfig
rmnet_usb0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.60.155.62 Mask:255.255.255.0
          inet6 addr: fe80::8159:5668:797f:eed7/64 Scope:Link
          UP RUNNING MTU:1500 Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:829 (829.0 B) TX bytes:1052 (1.0 KB)

wlan0 Link encap:Ethernet HWaddr 10:68:3f:7a:92:d5
          inet addr:192.168.1.40 Bcast:192.168.1.255 Mask:255.255.255.0
          inet6 addr: fe80::1268:3fff:fe7a:92d5/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
          RX packets:355 errors:0 dropped:0 overruns:0 frame:0
          TX packets:186 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:51241 (51.2 KB) TX bytes:18951 (18.9 KB)

See attached the tcpdump of the packets sent when this happened. Some quick analysis shows that the uploader is sending through the WiFi (192.168.1.40) instead of using 10.60.155.62, so it is clearly a routing problem. The MMS proxy has private address 10.138.255.43 so it is not reachable from WiFi.

Reproduced in:
mako vivid-proposed image #195
arale vivid-proposed image #38
krillin vivid-proposed image #205

Tags: connectivity
Revision history for this message
Alfonso Sanchez-Beato (alfonsosanchezbeato) wrote :
description: updated
summary: - Cannot send MMS messages with combined contexts with WiFi enabled
+ Cannot send MMS messages with combined contexts with WiFi connected
description: updated
Revision history for this message
Alfonso Sanchez-Beato (alfonsosanchezbeato) wrote :

This is a regression: in the same situation MMS are being sent in RTM.

$ system-image-cli -i
current build number: 276
device name: krillin
channel: ubuntu-touch/ubuntu-rtm/14.09-proposed
last update: 2015-05-13 16:13:32
version version: 276
version ubuntu: 20150508
version device: 20150505-db7b5bd
version custom: 20150507-685-29-216

$ ip route
default via 192.168.1.1 dev wlan0 proto static
10.138.255.43 dev ccmni0 proto static scope link
192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.39 metric 9

The difference might be related to the changes in routing that the newer NM version in vivid incorporated.

Same situation in vivid shows this routing table:

$ ip route
default via 192.168.1.1 dev wlan0 proto static metric 1024
192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.34

with

$ ifconfig
ccmni0 Link encap:Ethernet HWaddr 92:bc:7a:76:db:51
          inet addr:10.56.254.68 Mask:255.0.0.0
          UP RUNNING NOARP MTU:1500 Metric:1
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:168 (168.0 B) TX bytes:0 (0.0 B)

lo ...

wlan0 Link encap:Ethernet HWaddr 38:bc:1a:18:b5:83
          inet addr:192.168.1.34 Bcast:192.168.1.255 Mask:255.255.255.0
          inet6 addr: fe80::3abc:1aff:fe18:b583/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
          RX packets:233 errors:0 dropped:0 overruns:0 frame:0
          TX packets:250 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:87882 (87.8 KB) TX bytes:27411 (27.4 KB)

Tony Espy (awe)
Changed in network-manager (Ubuntu):
status: New → Confirmed
importance: Undecided → High
Revision history for this message
Tony Espy (awe) wrote :

NetworkManager is supposed to handle adding a specific host route for a MessageProxy present in a combined APN. This doesn't appear to be happening anymore in vivid.

I checked krillin/rtm #22/sim1=ATT sim2=empty.

With WiFi off, the routing table looks like this:

default via 10.186.165.219 dev ccmni0 proto static
66.209.11.32 dev ccmni0 proto static scope link

Note, the MessageProxy from the active APN is 'wireless.cingular.com', which is publicly resolvable to...66.209.11.32.

With WiFi on, the routing table looks like this:

default via 192.168.1.1 dev wlan0 proto static
66.209.11.32 dev ccmni0 proto static scope link
192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.8 metric 9

So, when the download manager connects through the proxy, it's data flows over the mobile data interface ( ccmni0 ).

When I flash vivid-devel, on the same device, with the same SIM configuration. When WiFi is off, the routing table looks like this:

default via 10.177.125.140 dev ccmni0 proto static metric 1024

When WiFi is enabled, it looks like this:

default via 192.168.1.1 dev wlan0 proto static metric 1024
192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.8

...which means all traffic goes over the WiFi interface.

I've produced similar results on mako/rtm #19/ATT SIM. I haven't yet retried mako/vivid, but I suspect the same problem as with krillin.

Revision history for this message
Tony Espy (awe) wrote :

Attached is the NetworkManager dispatch script which is supposed to add the MMS Proxy route. This script is part of the lxc-android-config package. I've verified that it exists in our vivid images. For some reason it appears to be broken.

The script is passed the modem_path ( env:DEVICE_IPATH ) and connection ( env:CONNECTION_ID). If either is 'None', the script silently fails. Next it validates both to ensure that they start with "/", if they don't it again silently fails.

Next it does a synchronous DBus call to ConnectionContext.GetProperties() in order to grab 'Settings', and in turn 'Gateway' ( for logging ).

If 'MessageProxy' is found, it's used for new route, else if 'MessageCenter' is found, it's used instead.

The script then attempts to resolve the hostname using socket.gethostbyname(). I *think* this is a no-op if the MessageProxy is specified as dotted network address instead of a hostname.

The script then uses subprocess.call() to add the route. No error checking is done for the "ip route" command.

The bulk of the logic is surrounding by a try/catch block, which does log a "failed to add route" message, however I'm not seeing this in my syslog, so I believe the failure is earlier in the script itself, or maybe the dispatch mechanism isn't properly triggering the script?

I think with some additional logging we should be able to pinpoint the failure...

Changed in ubuntu-download-manager (Ubuntu):
status: New → Incomplete
Changed in network-manager (Ubuntu):
assignee: nobody → Alfonso Sanchez-Beato (alfonsosanchezbeato)
Changed in network-manager (Ubuntu):
status: Confirmed → In Progress
Revision history for this message
Alfonso Sanchez-Beato (alfonsosanchezbeato) wrote :

The regression is due to NM setting DEVICE_IFACE to "ril_0" in version 0.9.10.0 instead of "/ril_0" as in 0.9.8.8.

There has been a change in nm-modem-ofono.c:nm_modem_ofono_new that explains this (MODEM_UID is skipping the slash in the latest version). The patch that creates nm_modem_ofono_new is "add_ofono_support.patch".

It is probable better to keep the change in MODEM_UID for consistency inside NM, so I have changed the script to handle this change. See attached.

Changed in canonical-devices-system-image:
importance: Undecided → Critical
milestone: none → ww22-2015
status: New → Confirmed
no longer affects: ubuntu-download-manager (Ubuntu)
tags: added: connectiivity
tags: added: connectivity
removed: connectiivity
Revision history for this message
Tony Espy (awe) wrote :

@Alfonso

Updated version of the script in comment #5 looks good to me...

Changed in canonical-devices-system-image:
status: Confirmed → Fix Released
Changed in network-manager (Ubuntu):
status: In Progress → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.