[openib-general] [PATCH][RFC] Add node_type / transport_type to struct ibv_device

Steve Wise swise at opengridcomputing.com
Tue Oct 3 14:01:53 PDT 2006


looks good to me.

Steve.

On Tue, 2006-10-03 at 13:48 -0700, Roland Dreier wrote:
> err, here's the patch:
> 
> Index: libibverbs/include/infiniband/verbs.h
> ===================================================================
> --- libibverbs/include/infiniband/verbs.h	(revision 9680)
> +++ libibverbs/include/infiniband/verbs.h	(working copy)
> @@ -66,9 +66,17 @@ union ibv_gid {
>  };
>  
>  enum ibv_node_type {
> -	IBV_NODE_CA 	= 1,
> +	IBV_NODE_UNKNOWN	= -1,
> +	IBV_NODE_CA 		= 1,
>  	IBV_NODE_SWITCH,
> -	IBV_NODE_ROUTER
> +	IBV_NODE_ROUTER,
> +	IBV_NODE_RNIC
> +};
> +
> +enum ibv_transport_type {
> +	IBV_TRANSPORT_UNKNOWN	= -1,
> +	IBV_TRANSPORT_IB	= 0,
> +	IBV_TRANSPORT_IWARP
>  };
>  
>  enum ibv_device_cap_flags {
> @@ -577,6 +585,8 @@ enum {
>  struct ibv_device {
>  	struct ibv_driver      *driver;
>  	struct ibv_device_ops	ops;
> +	enum ibv_node_type	node_type;
> +	enum ibv_transport_type	transport_type;
>  	/* Name of underlying kernel IB device, eg "mthca0" */
>  	char			name[IBV_SYSFS_NAME_MAX];
>  	/* Name of uverbs device, eg "uverbs0" */
> Index: libibverbs/ChangeLog
> ===================================================================
> --- libibverbs/ChangeLog	(revision 9680)
> +++ libibverbs/ChangeLog	(working copy)
> @@ -1,3 +1,12 @@
> +2006-10-03  Roland Dreier  <rdreier at cisco.com>
> +
> +	* src/init.c (init_drivers): Set node_type and transport_type
> +	values of device being created.
> +
> +	* include/infiniband/verbs.h: Add ibv_node_type enum value
> +	IBV_NODE_RNIC, and add enum ibv_transport_type.  Add node_type and
> +	transport_type fields to struct ibv_device.
> +
>  2006-09-12  Roland Dreier  <rdreier at cisco.com>
>  
>  	* include/infiniband/verbs.h: Swap wr_id and next members of
> Index: libibverbs/src/init.c
> ===================================================================
> --- libibverbs/src/init.c	(revision 9680)
> +++ libibverbs/src/init.c	(working copy)
> @@ -130,7 +130,9 @@ static struct ibv_device *init_drivers(c
>  	int abi_ver = 0;
>  	char sys_path[IBV_SYSFS_PATH_MAX];
>  	char ibdev_name[IBV_SYSFS_NAME_MAX];
> +	char ibdev_path[IBV_SYSFS_PATH_MAX];
>  	char value[8];
> +	enum ibv_node_type node_type;
>  
>  	snprintf(sys_path, sizeof sys_path, "%s/%s",
>  		 class_path, dev_name);
> @@ -144,17 +146,44 @@ static struct ibv_device *init_drivers(c
>  		return NULL;
>  	}
>  
> +	snprintf(ibdev_path, IBV_SYSFS_PATH_MAX, "%s/class/infiniband/%s",
> +		 ibv_get_sysfs_path(), ibdev_name);
> +
> +	if (ibv_read_sysfs_file(ibdev_path, "node_type", value, sizeof value) < 0) {
> +		fprintf(stderr, PFX "Warning: no node_type attr for %s\n",
> +			ibdev_path);
> +		return NULL;
> +	}
> +	node_type = strtol(value, NULL, 10);
> +	if (node_type < IBV_NODE_CA || node_type > IBV_NODE_RNIC)
> +		node_type = IBV_NODE_UNKNOWN;
> +
>  	for (driver = driver_list; driver; driver = driver->next) {
>  		dev = driver->init_func(sys_path, abi_ver);
>  		if (!dev)
>  			continue;
>  
>  		dev->driver = driver;
> +		dev->node_type = node_type;
> +
> +		switch (node_type) {
> +		case IBV_NODE_CA:
> +		case IBV_NODE_SWITCH:
> +		case IBV_NODE_ROUTER:
> +			dev->transport_type = IBV_TRANSPORT_IB;
> +			break;
> +		case IBV_NODE_RNIC:
> +			dev->transport_type = IBV_TRANSPORT_IWARP;
> +			break;
> +		default:
> +			dev->transport_type = IBV_TRANSPORT_UNKNOWN;
> +			break;
> +		}
> +
>  		strcpy(dev->dev_path, sys_path);
> -		snprintf(dev->ibdev_path, IBV_SYSFS_PATH_MAX, "%s/class/infiniband/%s",
> -			 ibv_get_sysfs_path(), ibdev_name);
>  		strcpy(dev->dev_name, dev_name);
>  		strcpy(dev->name, ibdev_name);
> +		strcpy(dev->ibdev_path, ibdev_path);
>  
>  		return dev;
>  	}





More information about the general mailing list