diff --git a/arch/sim/src/sim/posix/sim_tapdev.c b/arch/sim/src/sim/posix/sim_tapdev.c index 569a7a9e3fa..9c11880780f 100644 --- a/arch/sim/src/sim/posix/sim_tapdev.c +++ b/arch/sim/src/sim/posix/sim_tapdev.c @@ -65,6 +65,7 @@ #include #include +#include #include #include #include @@ -359,14 +360,19 @@ void sim_tapdev_send(int devidx, unsigned char *buf, unsigned int buflen) } #endif + /* A failed write drops the frame, like a NIC without carrier: the host + * fails every write with EIO while the TAP interface is down. + */ + ret = write(gtapdevfd[devidx], buf, buflen); if (ret < 0) { - syslog(LOG_ERR, "TAPDEV: write failed: %d\n", -ret); - exit(1); + syslog(LOG_ERR, "TAPDEV: write failed: %d\n", errno); + } + else + { + dump_ethhdr("write", buf, buflen); } - - dump_ethhdr("write", buf, buflen); /* Emulate TX done interrupt */