[PLUG] [Dev] Adding BSNL EVDO detection to NetworkManager

Chetan S cshring at gmail.com
Tue Dec 9 01:57:13 PST 2008


Hi All,

I know this belongs to Network Manager, however I thought I'll
generate some buzz here before I put it in there.

Issue :
------------
BSNL EVDO modem was not detected by NetworkManager  on Ubuntu Intrepid
( 8.10 ) though its automatically recognized by hal.

Here's what I did.

1. hal-device | less
Searched for Qual [ From what's been posted on net, its a Qualcomm device ].
Three entries listed  - http://pastebin.com/f718a05cb

2. There's nothing of great use to me other than the following lines -
         a.  Its a CDMA device ( i should've searched for CDMA !! )
         b.  the driver is moto-modem
Funnily the  /dev/ttyUSB0 is missing in the three listings.

3. I searched for CDMA this time...

tada !

Here's what listed  -  http://pastebin.com/f70d1f630

4. Well what to do now ?   I went ahead and sourced the code from
http://svn.gnome.org/svn/NetworkManager/trunk
Loaded into cscope and searched for the string cdma  and here's what --

f nm-hal-manager.c        320 type_cdma = TRUE;

opening it up found it was a function that identifies a cdma device by
various means, mainly by listing the capabilities variable from hal
object.
Here in BSNL EVDO / moto-modem case its sad since the hal listing show
that, capabilities don't list cdma , as its capability at all !!!

[snippet]
capabilities = libhal_device_get_property_strlist (priv->hal_ctx, udi,
"modem.command_sets", NULL);
        /* 'capabilites' may be NULL */
        for (iter = capabilities; iter && *iter; iter++) {
                if (!strcmp (*iter, "GSM-07.07")) {
                        type_gsm = TRUE;
                        break;
                }
                if (!strcmp (*iter, "IS-707-A")) {
                        type_cdma = TRUE;
                        break;
                }
        }
        g_strfreev (capabilities);

        /* Compatiblity with the pre-specification bits */
        if (!type_gsm && !type_cdma) {
                capabilities = libhal_device_get_property_strlist
(priv->hal_ctx, udi, "info.capabilities", NULL);
                for (iter = capabilities; *iter; iter++) {
                        if (!strcmp (*iter, "gsm")) {
                                type_gsm = TRUE;
                                break;
                        }
                        if (!strcmp (*iter, "cdma")) {
                                type_cdma = TRUE;
                                break;
                        }
                }
                g_strfreev (capabilities);
        }

[/snippet ]

Now my surmise - adding a check condition for bsnl evdo modem based on
the hal listing will do the trick. NM's ppp infrastructure will then
use the pppd to bring it up.
The question - which string from the hal listing will make most sense ?

If anyone familiar with D-Bus , Hal programming, NetworkManager can
they step in and explain if the line of reasoning is fine.
Others are free to pitch in too !!



regards,
C
P.S :  Sorry for the badly formatted post



More information about the plug-mail mailing list