On Thu, May 21, 2015 at 07:52:36AM -0600, Wan, Kaike wrote:
> 
> The general format of the request and response will be the same:
> 
>   ------------------
>   | netlink header |
>   ------------------
>   |  Data header   |
>   ------------------
>   |      Data      |
>   ------------------
> 
> The data header contains information about the type of request/response, the 
> status (for response),
> the type (format) of the data, the total length of the data header + data, 
> and a flags field about
> the request/response or data.
> 
> Based on the type of the data, the data section may be in different format: a 
> string about the host
> name to resolve, an IP4/IP6 address, a pathrecord, a user pathrecord (struct 
> ib_user_path_rec),
> or simply a MAD (like our posted patches), etc.

I think given the new plans this is not really necessary.

>
> Essentially it can be of any format based on the 
> data type. The key is to document the format so that the kernel and user 
> space can communicate 
> correctly.
> 
> The details are described below:
> 
> #define IB_NL_VERSION         0x01

Change all "IB" to "RDMA"

> 
> #define IB_NL_OP_MASK         0x0F
> #define IB_NL_OP_RESOLVE      0x01
> #define IB_NL_OP_QUERY_PATH   0x02
> #define IB_NL_OP_SET_TIMEOUT  0x03
> #define IB_NL_OP_ACK          0x80
> 
> #define IB_NL_STATUS_SUCCESS  0x0000
> #define IB_NL_STATUS_ENODATA  0x0001

If we do what Doug suggested should we just make OP 16bits with the high bit
ACK/NACK?

Then use the other u8 as a detailed status if needed.

> 
> #define IB_NL_DATA_TYPE_INVALID                       0x0000
> #define IB_NL_DATA_TYPE_NAME                  0x0001
> #define IB_NL_DATA_TYPE_ADDRESS_IP            0x0002
> #define IB_NL_DATA_TYPE_ADDRESS_IP6           0x0003
> #define IB_NL_DATA_TYPE_PATH_RECORD           0x0004
> #define IB_NL_DATA_TYPE_USER_PATH_REC         0x0005

Do we need both PATH_RECORD and USER_PATH_REC?

I'm having trouble determining when the OP == QUERY_PATH and the DATA_TYPE !=
PATH_RECORD.

Why don't we remove "QUERY_PATH" above and allow OP == RESOLVE and DATA_TYPE ==
PATH_RECORD be a "query for path record"?

> #define IB_NL_DATA_TYPE_MAD                   0x0006

I would drop this for now.

> 
> #define IB_NL_FLAGS_PATH_GMP                  1
> #define IB_NL_FLAGS_PATH_PRIMARY              (1<<1)
> #define IB_NL_FLAGS_PATH_ALTERNATE            (1<<2)
> #define IB_NL_FLAGS_PATH_OUTBOUND             (1<<3)
> #define IB_NL_FLAGS_PATH_INBOUND              (1<<4)
> #define IB_NL_FLAGS_PATH_INBOUND_REVERSE      (1<<5)
> #define IB_NL_FLAGS_PATH_BIDIRECTIONAL                (IB_PATH_OUTBOUND | 
> IB_PATH_INBOUND_REVERSE)
> #define IB_NL_FLAGS_QUERY_SA                  (1<<31)
> #define IB_NL_FLAGS_NODELAY                   (1<<30)
> 
> struct ib_nl_data_hdr {
>       __u8    version;
>       __u8    opcode;
>       __u16   status;
>       __u16   type;
>       __u16   reserved;
>       __u32   flags;
>       __u32   length;

The overall message length is in the netlink header.  So keeping in mind Jasons
comments regarding returning multiple data records.

I think this should be the length of individual records with a "num records"
also specified.  I would much prefer this over the yucky IBTA RMPP method of
implicit record sizes needing to be divided into the overall message size.

> };

Should we have a "class" value in the header somewhere?  With multiple user
space listeners it could be easier to mux messages with such a value.  The
class/seq would then differentiate the message.

> 
> struct ib_nl_data {
>       struct ib_nl_data_hdr           hdr;
>       __u8                            data[0];
> };
> 
> 
> These defines and structures can be added to file 
> include/upai/rdma/rdma_netlink.h (replace with
> RDMA_NL prefix) or contained in a seperate file 
> (include/upai/rdma/ib_netlink.h ???). 

This is not as important as getting the protocol down.

Ira

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to