Commit a29a194a authored by Patrick McHardy's avatar Patrick McHardy Committed by David S. Miller

tipc: add InfiniBand media type

Add InfiniBand media type based on the ethernet media type.

The only real difference is that in case of InfiniBand, we need the entire
20 bytes of space reserved for media addresses, so the TIPC media type ID is
not explicitly stored in the packet payload.

Sample output of tipc-config:

# tipc-config -v -addr -netid -nt=all -p -m -b -n -ls

node address: <10.1.4>
current network id: 4711
Type       Lower      Upper      Port Identity              Publication Scope
0          167776257  167776257  <10.1.1:1855512577>        1855512578  cluster
           167776260  167776260  <10.1.4:1216454657>        1216454658  zone
1          1          1          <10.1.4:1216479235>        1216479236  node
Ports:
1216479235: bound to {1,1}
1216454657: bound to {0,167776260}
Media:
eth
ib
Bearers:
ib:ib0
Nodes known:
<10.1.1>: up
Link <broadcast-link>
  Window:20 packets
  RX packets:0 fragments:0/0 bundles:0/0
  TX packets:0 fragments:0/0 bundles:0/0
  RX naks:0 defs:0 dups:0
  TX naks:0 acks:0 dups:0
  Congestion bearer:0 link:0  Send queue max:0 avg:0

Link <10.1.4:ib0-10.1.1:ib0>
  ACTIVE  MTU:2044  Priority:10  Tolerance:1500 ms  Window:50 packets
  RX packets:80 fragments:0/0 bundles:0/0
  TX packets:40 fragments:0/0 bundles:0/0
  TX profile sample:22 packets  average:54 octets
  0-64:100% -256:0% -1024:0% -4096:0% -16384:0% -32768:0% -66000:0%
  RX states:410 probes:213 naks:0 defs:0 dups:0
  TX states:410 probes:197 naks:0 acks:0 dups:0
  Congestion bearer:0 link:0  Send queue max:1 avg:0
Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 76f5c6f3
...@@ -31,3 +31,10 @@ config TIPC_PORTS ...@@ -31,3 +31,10 @@ config TIPC_PORTS
Setting this to a smaller value saves some memory, Setting this to a smaller value saves some memory,
setting it to higher allows for more ports. setting it to higher allows for more ports.
config TIPC_MEDIA_IB
bool "InfiniBand media type support"
depends on TIPC && INFINIBAND_IPOIB
help
Saying Y here will enable support for running TIPC on
IP-over-InfiniBand devices.
...@@ -9,3 +9,5 @@ tipc-y += addr.o bcast.o bearer.o config.o \ ...@@ -9,3 +9,5 @@ tipc-y += addr.o bcast.o bearer.o config.o \
name_distr.o subscr.o name_table.o net.o \ name_distr.o subscr.o name_table.o net.o \
netlink.o node.o node_subscr.o port.o ref.o \ netlink.o node.o node_subscr.o port.o ref.o \
socket.o log.o eth_media.o socket.o log.o eth_media.o
tipc-$(CONFIG_TIPC_MEDIA_IB) += ib_media.o
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
#include "bearer.h" #include "bearer.h"
#include "discover.h" #include "discover.h"
#define MAX_ADDR_STR 32 #define MAX_ADDR_STR 60
static struct tipc_media *media_list[MAX_MEDIA]; static struct tipc_media *media_list[MAX_MEDIA];
static u32 media_count; static u32 media_count;
......
...@@ -56,6 +56,7 @@ ...@@ -56,6 +56,7 @@
* Identifiers of supported TIPC media types * Identifiers of supported TIPC media types
*/ */
#define TIPC_MEDIA_TYPE_ETH 1 #define TIPC_MEDIA_TYPE_ETH 1
#define TIPC_MEDIA_TYPE_IB 2
/** /**
* struct tipc_media_addr - destination address used by TIPC bearers * struct tipc_media_addr - destination address used by TIPC bearers
...@@ -174,6 +175,14 @@ int tipc_disable_bearer(const char *name); ...@@ -174,6 +175,14 @@ int tipc_disable_bearer(const char *name);
int tipc_eth_media_start(void); int tipc_eth_media_start(void);
void tipc_eth_media_stop(void); void tipc_eth_media_stop(void);
#ifdef CONFIG_TIPC_MEDIA_IB
int tipc_ib_media_start(void);
void tipc_ib_media_stop(void);
#else
static inline int tipc_ib_media_start(void) { return 0; }
static inline void tipc_ib_media_stop(void) { return; }
#endif
int tipc_media_set_priority(const char *name, u32 new_value); int tipc_media_set_priority(const char *name, u32 new_value);
int tipc_media_set_window(const char *name, u32 new_value); int tipc_media_set_window(const char *name, u32 new_value);
void tipc_media_addr_printf(char *buf, int len, struct tipc_media_addr *a); void tipc_media_addr_printf(char *buf, int len, struct tipc_media_addr *a);
......
...@@ -82,6 +82,7 @@ static void tipc_core_stop_net(void) ...@@ -82,6 +82,7 @@ static void tipc_core_stop_net(void)
{ {
tipc_net_stop(); tipc_net_stop();
tipc_eth_media_stop(); tipc_eth_media_stop();
tipc_ib_media_stop();
} }
/** /**
...@@ -93,8 +94,15 @@ int tipc_core_start_net(unsigned long addr) ...@@ -93,8 +94,15 @@ int tipc_core_start_net(unsigned long addr)
tipc_net_start(addr); tipc_net_start(addr);
res = tipc_eth_media_start(); res = tipc_eth_media_start();
if (res) if (res < 0)
tipc_core_stop_net(); goto err;
res = tipc_ib_media_start();
if (res < 0)
goto err;
return res;
err:
tipc_core_stop_net();
return res; return res;
} }
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment