Yes, that's where I'd like to start (and I sort of did, but the approach I took was nowhere near good enough). Like you say, it does take time to build the harness. Kind of a hard sell with our client..
I'd need to mock hardware I don't have, possibly mock some kernel interfaces, set up a physical test endpoint that can observe things on the wire (as in raw ethernet packets, but also application level protocols..). And well, really capturing timing issues and such is kinda important because things like flow control, multipath routing & failover are critical features of the software.
Of course some of the things you want to test are inherently timing related issues. Like, a certain signal must be asserted if a particular message isn't received within a specified (possibly configurable or not) time window after some event.
The core of the software is a heavily asynchronous & multithreaded mess..
Getting all the scaffolding in place and then automating everything is going to require lots and lots of time. And reverse engineering.
I tried playing with bash scripts and docker based virtual deployments but it completely misses the hardware side of things and really doesn't get me far.