From 07e34f90e77e4491e6d02f4849040578cde9dc1a Mon Sep 17 00:00:00 2001
From: Noam Angel <noama@mellanox.com>
Date: Sun, 4 Sep 2016 10:12:35 +0300
Subject: [PATCH] Fix mellanox element required kernel modules and user space
 packages

This fix add need kernel module for Infiniband and ConnectX-4+ network
cards.
Also install by default required user space packages.
Change-Id: Ia2e7b1820f197778138a23fafaccb5a4fb44369a
---
 elements/mellanox/element-deps                |  2 +
 elements/mellanox/init.d/01-mellanox          |  6 +-
 elements/mellanox/install.d/65-mellanox       |  8 +++
 .../mellanox/install.d/mellanox-rules.udev    |  5 ++
 elements/mellanox/package-installs.yaml       | 26 +++++++
 elements/mellanox/pkg-map                     | 67 +++++++++++++++++++
 .../mellanox/udev.d/81-mellanox-drivers.rules |  5 ++
 7 files changed, 118 insertions(+), 1 deletion(-)
 create mode 100644 elements/mellanox/element-deps
 create mode 100644 elements/mellanox/package-installs.yaml
 create mode 100644 elements/mellanox/pkg-map

diff --git a/elements/mellanox/element-deps b/elements/mellanox/element-deps
new file mode 100644
index 000000000..73015c249
--- /dev/null
+++ b/elements/mellanox/element-deps
@@ -0,0 +1,2 @@
+package-installs
+pkg-map
diff --git a/elements/mellanox/init.d/01-mellanox b/elements/mellanox/init.d/01-mellanox
index 2608ca22c..106e29a51 100644
--- a/elements/mellanox/init.d/01-mellanox
+++ b/elements/mellanox/init.d/01-mellanox
@@ -1,3 +1,7 @@
 # extra load for mellanox
 modprobe mlx4_en
-
+modprobe mlx4_ib
+modprobe ib_ipoib
+modprobe mlx5_ib
+modprobe ib_umad
+modprobe ib_uverbs
diff --git a/elements/mellanox/install.d/65-mellanox b/elements/mellanox/install.d/65-mellanox
index ddf0c6206..0ece9b6dd 100755
--- a/elements/mellanox/install.d/65-mellanox
+++ b/elements/mellanox/install.d/65-mellanox
@@ -10,4 +10,12 @@ set -o pipefail
 home=$(dirname $0)
 
 install -m 0644 -o root -g root $home/mellanox-rules.udev /etc/udev/rules.d/81-mellanox.rules
+
+# needed kernel modules; mlx4_en mlx4_ib ib_ipoib mlx5_ib ib_umad ib_uverbs
+# mlx5_core loaded by mlx5_ib
 echo "mlx4_en" >>/etc/modules
+echo "mlx4_ib" >>/etc/modules
+echo "ib_ipoib" >>/etc/modules
+echo "mlx5_ib" >>/etc/modules
+echo "ib_umad" >>/etc/modules
+echo "ib_uverbs" >>/etc/modules
diff --git a/elements/mellanox/install.d/mellanox-rules.udev b/elements/mellanox/install.d/mellanox-rules.udev
index eda32596e..ba444ac4a 100644
--- a/elements/mellanox/install.d/mellanox-rules.udev
+++ b/elements/mellanox/install.d/mellanox-rules.udev
@@ -1,6 +1,11 @@
 ACTION!="add", GOTO="drivers_end"
 
 SUBSYSTEM=="net", RUN+="/sbin/modprobe mlx4_en"
+SUBSYSTEM=="net", RUN+="/sbin/modprobe mlx4_ib"
+SUBSYSTEM=="net", RUN+="/sbin/modprobe ib_ipoib"
+SUBSYSTEM=="net", RUN+="/sbin/modprobe mlx5_ib"
+SUBSYSTEM=="net", RUN+="/sbin/modprobe ib_umad"
+SUBSYSTEM=="net", RUN+="/sbin/modprobe ib_uverbs"
 
 LABEL="drivers_end"
 
diff --git a/elements/mellanox/package-installs.yaml b/elements/mellanox/package-installs.yaml
new file mode 100644
index 000000000..dacc65416
--- /dev/null
+++ b/elements/mellanox/package-installs.yaml
@@ -0,0 +1,26 @@
+dkms:
+ibacm:
+ibutils:
+ibverbs-utils:
+infiniband-diags:
+libibcm:
+libibcommon:
+libibmad:
+libibumad:
+libibverbs:
+libibverbs-runtime:
+libmlx4:
+libmlx4-dev:
+libmlx5:
+librdmacm:
+librdmacm-dev:
+librdmacm-runtime:
+mstflint:
+opensm:
+pciutils:
+perftest:
+qperf:
+rdma:
+rpm-build:
+srptools:
+vlan:
diff --git a/elements/mellanox/pkg-map b/elements/mellanox/pkg-map
new file mode 100644
index 000000000..48c2b5f6b
--- /dev/null
+++ b/elements/mellanox/pkg-map
@@ -0,0 +1,67 @@
+{
+    "family": {
+        "debian":{
+            "dkms": "dkms",
+            "libibverbs": "libibverbs*",
+            "ibacm": "ibacm",
+            "librdmacm": "librdmacm*",
+            "libmlx4": "libmlx4*",
+            "libmlx5": "libmlx5*",
+            "libibcm": "libibcm.*",
+            "libibmad": "libibmad.*",
+            "libibumad": "libibumad*",
+            "libmlx4-dev": "libmlx4-dev",
+            "librdmacm-dev": "librdmacm-dev",
+            "rdma": "rdmacm-utils",
+            "vlan": "vlan",
+            "ibverbs-utils": "ibverbs-utils"
+        },
+        "redhat": {
+            "libibverbs": "libibverbs.*",
+            "librdmacm": "librdmacm.*",
+            "libmlx4": "libmlx4.*",
+            "libmlx5": "libmlx5.*",
+            "libibcm": "libibcm.*",
+            "libibmad": "libibmad.*",
+            "libibumad": "libibumad.*",
+            "rdma": "rdma",
+            "qperf": "qperf",
+            "pciutils": "pciutils"
+        },
+        "suse":{
+            "libibverbs": "libibverbs",
+            "librdmacm": "librdmacm",
+            "libmlx4": "libmlx4",
+            "libmlx5": "libmlx5",
+            "libibcm": "libibcm",
+            "libibmad": "libibmad",
+            "libibumad": "libibumad",
+            "rdma": "rdma",
+            "qperf": "qperf",
+            "rpm-build": "rpm-build",
+            "libibverbs-runtime": "libibverbs-runtime",
+            "librdmacm-runtime": "librdmacm-runtime",
+            "libibcommon": "libibcommon"
+        }
+    },
+    "default": {
+        "infiniband-diags": "infiniband-diags",
+        "mstflint": "mstflint",
+        "opensm": "opensm",
+        "srptools": "srptools",
+        "libmlx4-dev": "",
+        "librdmacm-dev": "",
+        "ibutils": "ibutils",
+        "perftest": "perftest",
+        "vlan": "",
+        "pciutils": "",
+        "ibverbs-utils": "",
+        "rpm-build": "",
+        "libibverbs-runtime": "",
+        "librdmacm-runtime": "",
+        "ibacm": "",
+        "qperf": "",
+        "dkms": "",
+        "libibcommon": ""
+    }
+}
diff --git a/elements/mellanox/udev.d/81-mellanox-drivers.rules b/elements/mellanox/udev.d/81-mellanox-drivers.rules
index eda32596e..ba444ac4a 100644
--- a/elements/mellanox/udev.d/81-mellanox-drivers.rules
+++ b/elements/mellanox/udev.d/81-mellanox-drivers.rules
@@ -1,6 +1,11 @@
 ACTION!="add", GOTO="drivers_end"
 
 SUBSYSTEM=="net", RUN+="/sbin/modprobe mlx4_en"
+SUBSYSTEM=="net", RUN+="/sbin/modprobe mlx4_ib"
+SUBSYSTEM=="net", RUN+="/sbin/modprobe ib_ipoib"
+SUBSYSTEM=="net", RUN+="/sbin/modprobe mlx5_ib"
+SUBSYSTEM=="net", RUN+="/sbin/modprobe ib_umad"
+SUBSYSTEM=="net", RUN+="/sbin/modprobe ib_uverbs"
 
 LABEL="drivers_end"