ioctl(FIONREAD) failed to return correct length in SRIOV environment for IPv6
Issue
- ioctl(FIONREAD) failed to return correct length in SRIOV environment for IPv6
- An application runs in a VM with Intel 82599 SR-IOV VF (
ixgbevf
). This application opens asocket(AF_INET6, SOCK_RAW, IPPROTO_SCTP);
and enters that socket into aselect()
read set, then whenFD_ISSET()
fires, checks the data to be received withioctl(FIONREAD)
then receives the data withrecvfrom()
. However, with RHEL 6.8 or 6.9, theioctl()
returns zero bytes ready forever.
Environment
- Red Hat Enterprise Linux 6.8 (
2.6.32-642.3.1
) and 6.9 (2.6.32-696
) - KVM guest
- SR-IOV Virtual Function using Intel
ixgbevf
driver - IPv6 raw socket
- Socket polling with
select()
orpoll()
orepoll()
ioctl(FIONREAD)
orioctl(SIOCINQ)
to check bytes available on notified socket
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.