"recv" only works for sockets, but tap devices aren't sockets.
Makes the userspace switch work again.
Reported-by: Ravi Kerur <Ravi.Kerur@telekom.com>
Reported-by: 胡靖飞 <hujingfei914@msn.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
Paul Fazzone pfazzone@nicira.com
Philippe Jung phil.jung@free.fr
Pravin B Shelar pshelar@nicira.com
Paul Fazzone pfazzone@nicira.com
Philippe Jung phil.jung@free.fr
Pravin B Shelar pshelar@nicira.com
+Ravi Kerur Ravi.Kerur@telekom.com
Reid Price reid@nicira.com
Rob Hoes rob.hoes@citrix.com
Romain Lenglet romain.lenglet@berabera.info
Reid Price reid@nicira.com
Rob Hoes rob.hoes@citrix.com
Romain Lenglet romain.lenglet@berabera.info
kk yap yapkke@stanford.edu
likunyun kunyunli@hotmail.com
冯全树(Crab) fqs888@126.com
kk yap yapkke@stanford.edu
likunyun kunyunli@hotmail.com
冯全树(Crab) fqs888@126.com
+胡靖飞 hujingfei914@msn.com
Thanks to all Open vSwitch contributors. If you are not listed above
but believe that you should be, please write to dev@openvswitch.org.
Thanks to all Open vSwitch contributors. If you are not listed above
but believe that you should be, please write to dev@openvswitch.org.
- 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) {
if (retval >= 0) {
return retval <= size ? retval : -EMSGSIZE;
} else if (errno != EINTR) {