Fwd: [PATCH 2/2] connman-wait-online.service.in: systemd service that waits for network
Hi Patrik, 2014-10-22 15:14 GMT+02:00 Patrik Flykt : > Here (or in the previous patch, actually), I really prefer writing a > connmand-wait-ready binary in C and installing it in a proper location. > This because using connmand, connman-vpnd and connmanctl so far demands > only the required C libraries being present. Would that fit as a "connmanctl wait" command? ___ connman mailing list connman@connman.net https://lists.connman.net/mailman/listinfo/connman
[PATCH 2/2] connman-wait-online.service.in: systemd service that waits for network
Create a systemd service that uses test/wait-for-ready to wait for any interface to be in the 'ready' or 'online' state. This service will be pulled by network-online.target. This is similar to NetworkManager-wait-online.service as provided by network manager and systemd-networkd-wait-online.service as provided by networkd. --- Makefile.am| 2 +- configure.ac | 3 ++- src/connman-wait-online.service.in | 12 3 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 src/connman-wait-online.service.in diff --git a/Makefile.am b/Makefile.am index af14dcc..3e216bf 100644 --- a/Makefile.am +++ b/Makefile.am @@ -64,7 +64,7 @@ endif if SYSTEMD systemdunitdir = @SYSTEMD_UNITDIR@ -systemdunit_DATA = src/connman.service +systemdunit_DATA = src/connman.service src/connman-wait-online.service if VPN systemdunit_DATA += vpn/connman-vpn.service diff --git a/configure.ac b/configure.ac index 6f35c78..b4c1601 100644 --- a/configure.ac +++ b/configure.ac @@ -386,4 +386,5 @@ AM_CONDITIONAL(VPN, test "${enable_openconnect}" != "no" -o \ AC_OUTPUT(Makefile include/version.h src/connman.service vpn/connman-vpn.service vpn/net.connman.vpn.service - scripts/connman connman.pc src/net.connman.service) + scripts/connman connman.pc src/net.connman.service + src/connman-wait-online.service) diff --git a/src/connman-wait-online.service.in b/src/connman-wait-online.service.in new file mode 100644 index 000..ff31496 --- /dev/null +++ b/src/connman-wait-online.service.in @@ -0,0 +1,12 @@ +[Unit] +Description=Wait for connman to have an interface ready +Requires=connman.service +After=connman.service +Before=network-online.target + +[Service] +Type=oneshot +ExecStart=@prefix@/lib/connman/test/wait-for-ready + +[Install] +WantedBy=network-online.target -- 2.1.1 ___ connman mailing list connman@connman.net https://lists.connman.net/mailman/listinfo/connman
[PATCH 1/2] test/wait-for-ready: wait for an interface to be ready
Adds a script that exits with success when state changes to "ready" --- Makefile.am | 2 +- test/wait-for-ready | 41 + 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100755 test/wait-for-ready diff --git a/Makefile.am b/Makefile.am index a574170..af14dcc 100644 --- a/Makefile.am +++ b/Makefile.am @@ -354,7 +354,7 @@ test_scripts = test/get-state test/list-services \ test/test-new-supplicant test/service-move-before \ test/set-global-timeservers test/get-global-timeservers \ test/set-nameservers test/set-domains test/set-timeservers \ - test/set-clock + test/set-clock test/wait-for-ready test_scripts += test/vpn-connect test/vpn-disconnect test/vpn-get \ test/monitor-vpn test/vpn-property diff --git a/test/wait-for-ready b/test/wait-for-ready new file mode 100755 index 000..797317d --- /dev/null +++ b/test/wait-for-ready @@ -0,0 +1,41 @@ +#!/usr/bin/python +import gobject + +import sys +import dbus +import dbus.mainloop.glib +from functools import partial + +bus_name = "net.connman" +iface = "net.connman.Manager" +path = "/" +prop_name = "State" + +def check_state(state): + return state == 'ready' or state == 'online' + +def state_changed(mainloop, name, value): + if check_state(value): + mainloop.quit(); + +if __name__ == '__main__': + dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) + + bus = dbus.SystemBus() + + mainloop = gobject.MainLoop() + + bus.add_signal_receiver( + partial(state_changed, mainloop), + bus_name=bus_name, + dbus_interface=iface, + path=path, + signal_name="PropertyChanged", + arg0=prop_name) + + dev = bus.get_object(bus_name, path) + manager = dbus.Interface(dev, iface) + props = manager.GetProperties() + + if not check_state(props[prop_name]): + mainloop.run() -- 2.1.1 ___ connman mailing list connman@connman.net https://lists.connman.net/mailman/listinfo/connman