}
for (;;) {
- ssize_t retval = recv(netdev->fd, data, size, MSG_TRUNC);
+ ssize_t retval;
+
+ retval = (netdev_->netdev_dev->netdev_class == &netdev_tap_class
+ ? read(netdev->fd, data, size)
+ : recv(netdev->fd, data, size, MSG_TRUNC));
if (retval >= 0) {
return retval <= size ? retval : -EMSGSIZE;
} else if (errno != EINTR) {
}
/* Current settings. */
- speed = (ecmd.speed_hi << 16) | ecmd.speed;
+ speed = ecmd.speed;
if (speed == SPEED_10) {
*current = ecmd.duplex ? NETDEV_F_10MB_FD : NETDEV_F_10MB_HD;
} else if (speed == SPEED_100) {