"Advanced" network configuration

I wired my OSMC ethernet straight to another Raspberry with Volumio. Installed isc-dhcp-server on OSMC Raspi and use it to provide an address to Volumio.
The issue is that if I restart OSMC while Volumio is not switched on connman sees the link down, does not configure the interface and dhcp server fails to start.

Is there a way to force connman to configure the interface anyway, or can I simply get rid of connman and set up the classic linux set of scripts to configure the interface?

The issue is not with connman, but with your dhcp server configuration and use of a direct crossover connection to another device instead of a switch.

You can’t configure an IP address on an Ethernet interface which is down at the link layer. A better solution would be to modify the dhcp server’s service to wait until eth0 is up before starting.

One way to do this would be to put a while loop with a sleep in it’s startup script, checking the output of connmanctl state, see how we do this in the connman-wait-for-network.service as an example:

In our code we have a 60 second timeout, in your case you probably want an infinite loop waiting until the network is up. Something like this:

while true; do
    if connmanctl state | grep -iq 'ready\|online'; then break; fi
    sleep 5
done

Or configure the dhcp server in a way that it will start even if eth0 is down (maybe add a dummy interface) and then automatically refresh it’s config when eth0 comes up. (It’s a long time since I used bind so I’m not sure off hand whether that’s possible)

Why I can’t configure an address to an interface which has no link?
Just try, disconnect the cable and:

root@osmc:~# mii-tool
eth0: no link
root@osmc:~# ifconfig eth0
eth0 Link encap:Ethernet HWaddr b8:27:eb:71:f1:81
UP BROADCAST MULTICAST DYNAMIC MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

root@osmc:~# ifconfig eth0 192.168.3.1
root@osmc:~# mii-tool
eth0: no link
root@osmc:~# ifconfig eth0
eth0 Link encap:Ethernet HWaddr b8:27:eb:71:f1:81
inet addr:192.168.3.1 Bcast:192.168.3.255 Mask:255.255.255.0
UP BROADCAST MULTICAST DYNAMIC MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

ifconfig returns the address associated to the interface and isc-dhcp-server will start happily

connman doesn’t work that way.

So your choices are either configure your service to wait for the network to come up or replace connman entirely. (This is likely to break some functionality in OSMC and will definitely break the networking GUI)