diff --git a/package/gluon-core/files/usr/bin/gluon-list-mesh-interfaces b/package/gluon-core/files/usr/bin/gluon-list-mesh-interfaces
new file mode 100755
index 0000000000000000000000000000000000000000..9b450f900e55f039f821275ea04d9ea6cf94d885
--- /dev/null
+++ b/package/gluon-core/files/usr/bin/gluon-list-mesh-interfaces
@@ -0,0 +1,2 @@
+#!/bin/sh
+ubus call network.interface dump | jsonfilter -e "@.interface[@.proto='gluon_mesh' && @.up=true].device"
diff --git a/package/gluon-l3roamd/files/etc/init.d/gluon-l3roamd b/package/gluon-l3roamd/files/etc/init.d/gluon-l3roamd
index 0a51bde94b2b3c3547299b1ccf2b5317278e6408..9fe597b99181790dd3e7678e8895eebd8b12e895 100755
--- a/package/gluon-l3roamd/files/etc/init.d/gluon-l3roamd
+++ b/package/gluon-l3roamd/files/etc/init.d/gluon-l3roamd
@@ -10,7 +10,7 @@ start_service () {
 	procd_set_param stdout 1
 	procd_set_param stderr 1
 	procd_set_param respawn ${respawn_threshold:-3660} ${respawn_timeout:-5} ${respawn_retry:-0}
-	interfaces=$(for dev in $( ubus call network.interface dump | jsonfilter -e "@.interface[@.proto='gluon_mesh' && @.up=true].device");do echo " -m $dev"; done;
+	interfaces=$(for dev in $(gluon-list-mesh-interfaces);do echo " -m $dev"; done;
 	[ "$(ifstatus client | jsonfilter -e "@.up")" = "true" ] && echo " -i local-node")
 	procd_set_param command "$PROG" -s /var/run/l3roamd.sock -p $(lua -e 'print(require("gluon.site").prefix6())') $interfaces -t 254 -a $(uci get network.loopback.ip6addr | cut -d/ -f1) -4 0:0:0:0:0:ffff::/96 -b br-client
 	procd_close_instance