Fwd: [PATCH 2/2] connman-wait-online.service.in: systemd service that waits for network

2014-10-23 Thread Noé RUBINSTEIN
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

2014-10-22 Thread Noé Rubinstein
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

2014-10-22 Thread Noé Rubinstein
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