-
Notifications
You must be signed in to change notification settings - Fork 82
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
exanic_find_port_by_interface_name fails for X100 on RHEL8/9 #67
Comments
I'm facing the exact same issue on Rocky 9.1 OS. I'm using ExaNIC X25 card with version 2.7.3 and with the latest firmware (firmware date is 20220210). @Alexxstud Please reply if you were able to resolve this issue |
Hello, @sudeep30m The only solution I have found so far is to go through the library calls, edit exanic_find_port_by_interface_name function and reinstall the driver. |
@Alexxstud what to edit in the |
See attached fix, gets the job done for me - the |
Hello, if somebody is monitoring the issues here.
The problem:
When the application runs with exasock and an accelerated TCP socket calls connect() it passes through exa_socket_update_interfaces then to exanic_ip_acquire, correctly determines the interface from the dst IP, but fails to map the network interface to ExaNIC port. More specifically, the problem is with libexanic - exanic_find_port_by_interface_name fails to provide device:port for the interface
despite this interface surely belongs to ExaNIC card and exanic-config lists it correctly. In other words, the mapping of
ports to the network interfaces in exanic_t if_index is 100% correct, but the reverse mapping of the interface to the port fails due to
ioctl(fd, EXAIOCGIFINFO, &ifr) call returning -1 (ioctl there actually seems to be the OS one with some wrappers). This problem arises on two different machines each with the same ExaNIC X100 card and under both RHEL8 and RHEL9 OS. The version
of exanic-software under consideration is the lastest: release 2.7.3, 13 Oct. 2022.
Calling bind() to INADDR_ANY or to the interface IP doesn't help. Is there any subtlety with exasock? Or some specific function must be called after a socket creation and before connect()? The application uses usual AF_INET sockets, exasock is called as a wrapper as written in the documentation.
The text was updated successfully, but these errors were encountered: