1[PATCHv7 1/4] libibverbs: Add link layer field to ibv_port_attr 2 3This field can have one of the values - IBV_LINK_LAYER_UNSPECIFIED, 4IBV_LINK_LAYER_INFINIBAND, IBV_LINK_LAYER_ETHERNET. It can be used by 5applications to know the link layer used by the port, which can be either 6Infiniband or Ethernet. The addition of the new field does not change the size 7of struct ibv_port_attr due to alignment of the preceding field. Binary 8compatibility is not compromised either since new apps with old libraries will 9determine the link layer as IB while old applications with new a new library do 10not read this field. 11 12Solution suggested by: 13 Roland Dreier <rolandd@cisco.com> 14 Jason Gunthorpe <jgunthorpe@obsidianresearch.com> 15Signed-off-by: Eli Cohen <eli@mellanox.co.il> 16--- 17 include/infiniband/verbs.h | 21 +++++++++++++++++++++ 18 1 files changed, 21 insertions(+), 0 deletions(-) 19 20Index: libibverbs/include/infiniband/verbs.h 21=================================================================== 22--- libibverbs.orig/include/infiniband/verbs.h 2010-06-08 11:00:05.575721000 +0300 23+++ libibverbs/include/infiniband/verbs.h 2010-06-08 11:00:39.442737000 +0300 24@@ -162,6 +162,12 @@ enum ibv_port_state { 25 IBV_PORT_ACTIVE_DEFER = 5 26 }; 27 28+enum { 29+ IBV_LINK_LAYER_UNSPECIFIED, 30+ IBV_LINK_LAYER_INFINIBAND, 31+ IBV_LINK_LAYER_ETHERNET, 32+}; 33+ 34 struct ibv_port_attr { 35 enum ibv_port_state state; 36 enum ibv_mtu max_mtu; 37@@ -182,6 +188,8 @@ struct ibv_port_attr { 38 uint8_t active_width; 39 uint8_t active_speed; 40 uint8_t phys_state; 41+ uint8_t link_layer; 42+ uint8_t pad; 43 }; 44 45 enum ibv_event_type { 46@@ -743,6 +751,16 @@ struct ibv_context { 47 struct ibv_more_ops *more_ops; 48 }; 49 50+static inline int ___ibv_query_port(struct ibv_context *context, 51+ uint8_t port_num, 52+ struct ibv_port_attr *port_attr) 53+{ 54+ port_attr->link_layer = IBV_LINK_LAYER_UNSPECIFIED; 55+ port_attr->pad = 0; 56+ 57+ return context->ops.query_port(context, port_num, port_attr); 58+} 59+ 60 /** 61 * ibv_get_device_list - Get list of IB devices currently available 62 * @num_devices: optional. if non-NULL, set to the number of devices 63@@ -1304,4 +1322,7 @@ END_C_DECLS 64 65 # undef __attribute_const 66 67+#define ibv_query_port(context, port_num, port_attr) \ 68+ ___ibv_query_port(context, port_num, port_attr) 69+ 70 #endif /* INFINIBAND_VERBS_H */ 71