@robert-hh Thanks I agree busy-waiting is bad, my understanding was that machine.idle() would give other threads/interrupts the opportunity to run. That code was added to aid the debugging, to see activity while waiting for the network layer to configure itself.
I've substituted your code but unfortunately it hasn't changed the networking behaviour - still no IP layer connectivity.