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

Tom Tucker tom at opengridcomputing.com
Tue Oct 3 20:31:15 PDT 2006


Yeah, this is better.


On 10/3/06 3:48 PM, "Roland Dreier" <rdreier at cisco.com> 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