Hi Todd,

On 06:48 Tue 06 Jul     , Todd Rimmer wrote:
> I recently discovered that 3rd party applications built for OFED 1.5 will not 
> run on OFED 1.5.2rc2.
> 
> The issue I found was that libibumad had changed from version 2 to version 3. 
>  Can you provide insight as to why this change was made?
> 
> In reviewing the source code and change logs there do not seem to be any 
> changes which would impact the application API nor application ABI.
> 
> 
> 
> I diffed the code and the main change seems to be:
> diff -r --exclude CVS ./src/src/umad.c-orig ./src/src/umad.c
> 161a162,166
> >   if (sys_read_string(port_dir, SYS_PORT_LINK_LAYER,
> >       port->link_layer, UMAD_CA_NAME_LEN) < 0)
> >       /* assume IB by default */
> >       sprintf(port->link_layer, "IB");
> >
> The above change might imply an update to an rpm dependency on ib-kernel 
> versions, but should not result in a new library version.  If the library 
> version remained at 2, then applications built for OFED 1.5 would also run on 
> OFED 1.5.2rc2 without recompile.

This is not an only change. The whole commit is:


commit 99d0901f3702e22c178352524af18ec567781d51
Author: Yevgeny Kliteynik <klit...@dev.mellanox.co.il>
Date:   Tue Mar 9 12:39:40 2010 +0200

    libibumad: added link_layer for RoCEE support and updated umad version
    
    Added link_layer field to umad_port_t.
    The field is implemented as char[].
    If the relevant file doesn't exist in sysfs, the link layer
    is "IB". Otherwise, the content of link_layer file is used.
    
    The libibumad version is promoted.
    
    Signed-off-by: Yevgeny Kliteynik <klit...@dev.mellanox.co.il>
    Signed-off-by: Sasha Khapyorsky <sas...@voltaire.com>

diff --git a/libibumad/include/infiniband/umad.h 
b/libibumad/include/infiniband/umad.h
index 1f82183..f9da204 100644
--- a/libibumad/include/infiniband/umad.h
+++ b/libibumad/include/infiniband/umad.h
@@ -116,6 +116,7 @@ typedef struct ib_user_mad {
 #define SYS_PORT_RATE          "rate"
 #define SYS_PORT_GUID          "port_guid"
 #define SYS_PORT_GID           "gids/0"
+#define SYS_PORT_LINK_LAYER    "link_layer"
 
 typedef struct umad_port {
        char ca_name[UMAD_CA_NAME_LEN];
@@ -132,6 +133,7 @@ typedef struct umad_port {
        uint64_t port_guid;
        unsigned pkeys_size;
        uint16_t *pkeys;
+       char link_layer[UMAD_CA_NAME_LEN];
 } umad_port_t;
 
 typedef struct umad_ca {
diff --git a/libibumad/libibumad.ver b/libibumad/libibumad.ver
index 57cddbd..d36fbbc 100644
--- a/libibumad/libibumad.ver
+++ b/libibumad/libibumad.ver
@@ -6,4 +6,4 @@
 # API_REV - advance on any added API
 # RUNNING_REV - advance any change to the vendor files
 # AGE - number of backward versions the API still supports
-LIBVERSION=2:1:0
+LIBVERSION=2:2:0
diff --git a/libibumad/src/umad.c b/libibumad/src/umad.c
index 277ae6b..d16e750 100644
--- a/libibumad/src/umad.c
+++ b/libibumad/src/umad.c
@@ -159,6 +159,11 @@ static int get_port(char *ca_name, char *dir, int portnum, 
umad_port_t * port)
        if (sys_read_uint(port_dir, SYS_PORT_CAPMASK, &port->capmask) < 0)
                goto clean;
 
+       if (sys_read_string(port_dir, SYS_PORT_LINK_LAYER,
+           port->link_layer, UMAD_CA_NAME_LEN) < 0)
+               /* assume IB by default */
+               sprintf(port->link_layer, "IB");
+
        port->capmask = htonl(port->capmask);
 
        if (sys_read_gid(port_dir, SYS_PORT_GID, gid) < 0)


Altering 'struct umad_port' effectively breaks ABI.

Sasha
_______________________________________________
ewg mailing list
ewg@lists.openfabrics.org
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg

Reply via email to