Passing Operator to NetworkManager
Colin Helliwell
colin.helliwell at ln-systems.com
Tue May 9 12:54:35 UTC 2017
> On 08 May 2017 at 16:49 Dan Williams <dcbw at redhat.com> wrote:
>
> On Mon, 2017-05-08 at 10:17 +0100, colin.helliwell at ln-systems.com
> wrote:
>
> > I'm hooking together ModemManager and NetworkManager (without
> > systemd) and
> > would like to grab the Operator determined by MM when it enables the
> > modem
> > and use it to set the apn setting in the NM connection. Basically -
> > the NM
> > setting needs to get configured automatically based on the SIM that's
> > present.
> > Is it possible to get a point in the interractions between the two
> > where
> > this can be done, or has, e.g. NM already parsed the connection
> > settings by
> > the time the modem registers?
> > (To cater for the case of the registration failing, I guess I could
> > pull the
> > info from the SIM instead).
> > And is there some sort of pre/post 'hook' which could be used to fire
> > off a
> > script?
>
> This is easily possible with a little scripting, as long as you don't
> use autoconnect by default (since that would start connecting before
> you knew the operator). Something like:
>
> 1) pre-create an NM connection file in /etc/NetworkManager/system-
> connections with a well-known connection ID and set it autoconnect=no
> so it doesn't get autoconnected before its ready. Say that ID is
> "cellular".
>
> 2) write a small script and run it at bootup or something:
>
> # turn off autoconnect for this connection profile and make
> # sure it's deactivated
> nmcli con mod cellular connection.autoconnect=false
> nmcli con down cellular
>
> # enable the modem
> MODEM_PATH=mmcli -L | grep "ModemManager1" | cut -d' ' -f1
> mmcli -m ${MODEM_PATH} -e
>
> # Wait 60 seconds for registration and then pull the MCC/MNC
> # and figure out what APN to use
> for i in seq 60; do
> STATE=mmcli -m ${MODEM_PATH} | grep " state:" | cut -d"'" -f 2
> if [[ "${STATE}" == "registered" ]]; then
> OPERATOR=mmcli -m ${MODEM_PATH} | grep "operator id:" | cut -d"'" -f 2
> APN=
>
> # modify the connection and let NM autoconnect it from now on
> nmcli con mod cellular gsm.apn=${APN}
> nmcli con mod cellular connection.autoconnect=true
> exit 0
> fi
> done
> exit 1
>
> or something along those lines using whatever scripting language you
> want. This can all be done through D-Bus too, but it would be somewhat
> more involved (though more flexible and less error prone).
>
Thanks for the confirmation, Dan.
I was planning on probably using autoconnect [it's either that or putting together a means to detect Eth failure and bring up the GSM on demand], but it would be equally fine to leave it off and have the script bring up the connection at the end instead.
More information about the ModemManager-devel
mailing list