[PATCH] IB: User MAD ABI changes to support RMPP
User MAD ABI changes to support RMPP Signed-off-by: Hal Rosenstock <halr@voltaire.com> Cc: Roland Dreier <rolandd@cisco.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
a977049dac
commit
3f75daddb4
2 changed files with 61 additions and 18 deletions
|
@ -28,13 +28,37 @@ Creating MAD agents
|
||||||
|
|
||||||
Receiving MADs
|
Receiving MADs
|
||||||
|
|
||||||
MADs are received using read(). The buffer passed to read() must be
|
MADs are received using read(). The receive side now supports
|
||||||
large enough to hold at least one struct ib_user_mad. For example:
|
RMPP. The buffer passed to read() must be at least one
|
||||||
|
struct ib_user_mad + 256 bytes. For example:
|
||||||
|
|
||||||
struct ib_user_mad mad;
|
If the buffer passed is not large enough to hold the received
|
||||||
ret = read(fd, &mad, sizeof mad);
|
MAD (RMPP), the errno is set to ENOSPC and the length of the
|
||||||
if (ret != sizeof mad)
|
buffer needed is set in mad.length.
|
||||||
|
|
||||||
|
Example for normal MAD (non RMPP) reads:
|
||||||
|
struct ib_user_mad *mad;
|
||||||
|
mad = malloc(sizeof *mad + 256);
|
||||||
|
ret = read(fd, mad, sizeof *mad + 256);
|
||||||
|
if (ret != sizeof mad + 256) {
|
||||||
perror("read");
|
perror("read");
|
||||||
|
free(mad);
|
||||||
|
}
|
||||||
|
|
||||||
|
Example for RMPP reads:
|
||||||
|
struct ib_user_mad *mad;
|
||||||
|
mad = malloc(sizeof *mad + 256);
|
||||||
|
ret = read(fd, mad, sizeof *mad + 256);
|
||||||
|
if (ret == -ENOSPC)) {
|
||||||
|
length = mad.length;
|
||||||
|
free(mad);
|
||||||
|
mad = malloc(sizeof *mad + length);
|
||||||
|
ret = read(fd, mad, sizeof *mad + length);
|
||||||
|
}
|
||||||
|
if (ret < 0) {
|
||||||
|
perror("read");
|
||||||
|
free(mad);
|
||||||
|
}
|
||||||
|
|
||||||
In addition to the actual MAD contents, the other struct ib_user_mad
|
In addition to the actual MAD contents, the other struct ib_user_mad
|
||||||
fields will be filled in with information on the received MAD. For
|
fields will be filled in with information on the received MAD. For
|
||||||
|
@ -50,18 +74,21 @@ Sending MADs
|
||||||
|
|
||||||
MADs are sent using write(). The agent ID for sending should be
|
MADs are sent using write(). The agent ID for sending should be
|
||||||
filled into the id field of the MAD, the destination LID should be
|
filled into the id field of the MAD, the destination LID should be
|
||||||
filled into the lid field, and so on. For example:
|
filled into the lid field, and so on. The send side does support
|
||||||
|
RMPP so arbitrary length MAD can be sent. For example:
|
||||||
|
|
||||||
struct ib_user_mad mad;
|
struct ib_user_mad *mad;
|
||||||
|
|
||||||
/* fill in mad.data */
|
mad = malloc(sizeof *mad + mad_length);
|
||||||
|
|
||||||
mad.id = my_agent; /* req.id from agent registration */
|
/* fill in mad->data */
|
||||||
mad.lid = my_dest; /* in network byte order... */
|
|
||||||
|
mad->hdr.id = my_agent; /* req.id from agent registration */
|
||||||
|
mad->hdr.lid = my_dest; /* in network byte order... */
|
||||||
/* etc. */
|
/* etc. */
|
||||||
|
|
||||||
ret = write(fd, &mad, sizeof mad);
|
ret = write(fd, &mad, sizeof *mad + mad_length);
|
||||||
if (ret != sizeof mad)
|
if (ret != sizeof *mad + mad_length)
|
||||||
perror("write");
|
perror("write");
|
||||||
|
|
||||||
Setting IsSM Capability Bit
|
Setting IsSM Capability Bit
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2004 Topspin Communications. All rights reserved.
|
* Copyright (c) 2004 Topspin Communications. All rights reserved.
|
||||||
|
* Copyright (c) 2005 Voltaire, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This software is available to you under a choice of one of two
|
* This software is available to you under a choice of one of two
|
||||||
* licenses. You may choose to be licensed under the terms of the GNU
|
* licenses. You may choose to be licensed under the terms of the GNU
|
||||||
|
@ -29,7 +30,7 @@
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
* SOFTWARE.
|
* SOFTWARE.
|
||||||
*
|
*
|
||||||
* $Id: ib_user_mad.h 1389 2004-12-27 22:56:47Z roland $
|
* $Id: ib_user_mad.h 2814 2005-07-06 19:14:09Z halr $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IB_USER_MAD_H
|
#ifndef IB_USER_MAD_H
|
||||||
|
@ -42,7 +43,7 @@
|
||||||
* Increment this value if any changes that break userspace ABI
|
* Increment this value if any changes that break userspace ABI
|
||||||
* compatibility are made.
|
* compatibility are made.
|
||||||
*/
|
*/
|
||||||
#define IB_USER_MAD_ABI_VERSION 2
|
#define IB_USER_MAD_ABI_VERSION 5
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Make sure that all structs defined in this file remain laid out so
|
* Make sure that all structs defined in this file remain laid out so
|
||||||
|
@ -51,13 +52,13 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ib_user_mad - MAD packet
|
* ib_user_mad_hdr - MAD packet header
|
||||||
* @data - Contents of MAD
|
|
||||||
* @id - ID of agent MAD received with/to be sent with
|
* @id - ID of agent MAD received with/to be sent with
|
||||||
* @status - 0 on successful receive, ETIMEDOUT if no response
|
* @status - 0 on successful receive, ETIMEDOUT if no response
|
||||||
* received (transaction ID in data[] will be set to TID of original
|
* received (transaction ID in data[] will be set to TID of original
|
||||||
* request) (ignored on send)
|
* request) (ignored on send)
|
||||||
* @timeout_ms - Milliseconds to wait for response (unset on receive)
|
* @timeout_ms - Milliseconds to wait for response (unset on receive)
|
||||||
|
* @retries - Number of automatic retries to attempt
|
||||||
* @qpn - Remote QP number received from/to be sent to
|
* @qpn - Remote QP number received from/to be sent to
|
||||||
* @qkey - Remote Q_Key to be sent with (unset on receive)
|
* @qkey - Remote Q_Key to be sent with (unset on receive)
|
||||||
* @lid - Remote lid received from/to be sent to
|
* @lid - Remote lid received from/to be sent to
|
||||||
|
@ -72,11 +73,12 @@
|
||||||
*
|
*
|
||||||
* All multi-byte quantities are stored in network (big endian) byte order.
|
* All multi-byte quantities are stored in network (big endian) byte order.
|
||||||
*/
|
*/
|
||||||
struct ib_user_mad {
|
struct ib_user_mad_hdr {
|
||||||
__u8 data[256];
|
|
||||||
__u32 id;
|
__u32 id;
|
||||||
__u32 status;
|
__u32 status;
|
||||||
__u32 timeout_ms;
|
__u32 timeout_ms;
|
||||||
|
__u32 retries;
|
||||||
|
__u32 length;
|
||||||
__u32 qpn;
|
__u32 qpn;
|
||||||
__u32 qkey;
|
__u32 qkey;
|
||||||
__u16 lid;
|
__u16 lid;
|
||||||
|
@ -90,6 +92,17 @@ struct ib_user_mad {
|
||||||
__u32 flow_label;
|
__u32 flow_label;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ib_user_mad - MAD packet
|
||||||
|
* @hdr - MAD packet header
|
||||||
|
* @data - Contents of MAD
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
struct ib_user_mad {
|
||||||
|
struct ib_user_mad_hdr hdr;
|
||||||
|
__u8 data[0];
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ib_user_mad_reg_req - MAD registration request
|
* ib_user_mad_reg_req - MAD registration request
|
||||||
* @id - Set by the kernel; used to identify agent in future requests.
|
* @id - Set by the kernel; used to identify agent in future requests.
|
||||||
|
@ -103,6 +116,8 @@ struct ib_user_mad {
|
||||||
* management class to receive.
|
* management class to receive.
|
||||||
* @oui: Indicates IEEE OUI when mgmt_class is a vendor class
|
* @oui: Indicates IEEE OUI when mgmt_class is a vendor class
|
||||||
* in the range from 0x30 to 0x4f. Otherwise not used.
|
* in the range from 0x30 to 0x4f. Otherwise not used.
|
||||||
|
* @rmpp_version: If set, indicates the RMPP version used.
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
struct ib_user_mad_reg_req {
|
struct ib_user_mad_reg_req {
|
||||||
__u32 id;
|
__u32 id;
|
||||||
|
@ -111,6 +126,7 @@ struct ib_user_mad_reg_req {
|
||||||
__u8 mgmt_class;
|
__u8 mgmt_class;
|
||||||
__u8 mgmt_class_version;
|
__u8 mgmt_class_version;
|
||||||
__u8 oui[3];
|
__u8 oui[3];
|
||||||
|
__u8 rmpp_version;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define IB_IOCTL_MAGIC 0x1b
|
#define IB_IOCTL_MAGIC 0x1b
|
||||||
|
|
Loading…
Reference in a new issue