Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:42.1
fcoe-utils
0018-support-multiple-connections.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0018-support-multiple-connections.patch of Package fcoe-utils
lib/sysfs_hba.c: Allow support for multiple FCoE connections sysfs_hba.c had the 1st controller number hardcoded, so it was impossible to have more than one FCoE connection on a system. This patch also reads the controller number for a given net device from sysfs. Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de> --- lib/sysfs_hba.c | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) --- a/lib/sysfs_hba.c +++ b/lib/sysfs_hba.c @@ -531,6 +531,37 @@ char *get_rport_by_fcid(uint32_t fcid) return rport; } +static int get_ctlr_num(const char *netdev) +{ + struct dirent *dp; + int ctlr_num = -1; + char path[1024]; + char *ctlr; + DIR *dir; + + sprintf(path, "%s/%s", SYSFS_NET_DIR, netdev); + + dir = opendir(path); + if (!dir) + return -1; + + for (dp = readdir(dir); dp != NULL; dp = readdir(dir)) { + if (dp->d_name[0] == '.' && dp->d_name[1] == '\0') continue; + if (dp->d_name[1] == '.' && dp->d_name[2] == '\0') continue; + + ctlr = strstr(dp->d_name, "ctlr_"); + if (!ctlr) + continue; + + ctlr_num = atoi(&ctlr[strlen(ctlr) - 1]); + break; + } + + closedir(dir); + + return ctlr_num; +} + char *get_host_from_netdev(const char *netdev) { struct dirent *dp; @@ -538,8 +569,13 @@ char *get_host_from_netdev(const char *n char *path = NULL; DIR *dir; int ret; + int ctlr_num; + + ctlr_num = get_ctlr_num(netdev); + if (ctlr_num == -1) + return NULL; - ret = asprintf(&path, "%s/%s/ctlr_0/", SYSFS_NET_DIR, netdev); + ret = asprintf(&path, "%s/%s/ctlr_%d/", SYSFS_NET_DIR, netdev, ctlr_num); if(ret == -1) return NULL; @@ -558,8 +594,8 @@ char *get_host_from_netdev(const char *n if (host) { struct stat sb; - ret = asprintf(&path, "%s/%s/ctlr_0/%s/fc_host/%s", - SYSFS_NET_DIR, netdev, host, host); + ret = asprintf(&path, "%s/%s/ctlr_%d/%s/fc_host/%s", + SYSFS_NET_DIR, netdev, ctlr_num, host, host); if (ret == -1) goto out_closedir;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor