diff --git a/redhat/ibdev2netdev b/redhat/ibdev2netdev
new file mode 100644
index 00000000..3fbc04cb
--- /dev/null
+++ b/redhat/ibdev2netdev
@@ -0,0 +1,197 @@
+#! /bin/bash
+
+usage()
+{
+  echo "$(basename $0) <options>"
+  echo "-h, --help                print help message"
+  echo "-v, --verbose             print more info"
+}
+
+case $1 in
+  "-h" | "--help")
+    usage
+    exit 0
+    ;;
+esac
+
+if (( $# > 1 )); then
+  usage
+  exit -1
+fi
+
+if (( $# == 1 )) && [ "$1" != "-v" ]; then
+  usage
+  exit -1
+fi
+
+ibdevs=$(ls /sys/class/infiniband/)
+
+devs=$(ls /sys/class/net/ | grep ^[ei])
+if [ "x$devs" == "x" ]; then
+  # no relevant devices - quit immediately
+  exit
+fi
+
+for d in $devs; do
+  if [ -f /sys/class/net/$d/dev_id ]; then
+    oldstyle=n
+    break
+  fi
+done
+
+function print_line()
+{
+  echo "$1 port $2 <===> $3"
+}
+
+function find_guid()
+{
+  ibdevs=$(ls /sys/class/infiniband/)
+  for ibdev in $ibdevs; do
+    ports=$(ls /sys/class/infiniband/$ibdev/ports/)
+    for port in $ports; do
+      gids=$(ls /sys/class/infiniband/$ibdev/ports/$port/gids)
+      for gid in $gids; do
+        pguid=$(cat /sys/class/infiniband/$ibdev/ports/$port/gids/$gid | cut -b 21- | sed -e 's/://g')
+        if [ x$pguid == x$1 ]; then
+          print_line $ibdev $port $2
+        fi
+      done
+    done
+  done
+}
+
+function find_mac()
+{
+  ibdevs=$(ls /sys/class/infiniband/)
+  for ibdev in $ibdevs; do
+    type=$(cat /sys/class/infiniband/$ibdev/node_type|cut -d ' ' -f 2)
+    ports=$(ls /sys/class/infiniband/$ibdev/ports/)
+    for port in $ports; do
+      gids=$(ls /sys/class/infiniband/$ibdev/ports/$port/gids)
+      for gid in $gids; do
+        if [[ "$type" = "RNIC" ]]; then
+          pmac=$(cat /sys/class/infiniband/$ibdev/ports/$port/gids/$gid | cut -b 1-14|sed -e 's/://g')
+        else
+          first=$(cat /sys/class/infiniband/$ibdev/ports/$port/gids/$gid | cut -b 21-22)
+          first=$(( first ^ 2 ))
+          first=$(printf "%02x" $first)
+          second=$(cat /sys/class/infiniband/$ibdev/ports/$port/gids/$gid | cut -b 21- | sed -e 's/://g' | cut -b 3-6)
+          third=$(cat /sys/class/infiniband/$ibdev/ports/$port/gids/$gid | cut -b 21- | sed -e 's/://g' | cut -b 11-)
+          pmac=$first$second$third
+        fi
+        if [ x$pmac == x$1 ]; then
+          print_line $ibdev $port $2
+        fi
+      done
+    done
+  done
+}
+
+if [ "x$oldstyle" == "xn" ]; then
+  for d in $ibdevs; do
+    ibrsc=$(cat /sys/class/infiniband/$d/device/resource)
+    eths=$(ls /sys/class/net/)
+    for eth in $eths; do
+      filepath_resource=/sys/class/net/$eth/device/resource
+
+      if [ -f $filepath_resource ]; then
+        ethrsc=$(cat $filepath_resource)
+        if [ "x$ethrsc" == "x$ibrsc" ]; then
+          filepath_devid=/sys/class/net/$eth/dev_id
+          filepath_devport=/sys/class/net/$eth/dev_port
+          if [ -f $filepath_devid ]; then
+            port1=0
+            if [ -f $filepath_devport ]; then
+              port1=$(cat $filepath_devport)
+              port1=$(printf "%d" $port1)
+            fi
+
+            port=$(cat $filepath_devid)
+            port=$(printf "%d" $port)
+            if [ $port1 -gt $port ]; then
+              port=$port1
+            fi
+
+            port=$(( port + 1 ))
+
+            filepath_carrier=/sys/class/net/$eth/carrier
+
+            if [ -f $filepath_carrier ]; then
+              link_state=$(cat $filepath_carrier 2> /dev/null)
+              if (( link_state == 1 )); then
+                link_state="Up"
+              else
+                link_state="Down"
+              fi
+            else
+              link_state="NA"
+            fi
+
+            if [ "$1" == "-v" ]; then
+              filepath_portstate=/sys/class/infiniband/$d/ports/$port/state
+              filepath_deviceid=/sys/class/infiniband/$d/device/device
+              filepath_fwver=/sys/class/infiniband/$d/fw_ver
+              filepath_vpd=/sys/class/infiniband/$d/device/vpd
+
+              # read port state
+              if [ -f $filepath_portstate ]; then
+                ibstate=$(printf "%-6s" $(cat $filepath_portstate | gawk '{print $2}'))
+              else
+                ibstate="na"
+              fi
+
+              # read device
+              if [ -f $filepath_deviceid ]; then
+                devid=$(printf "mt%d" $(cat $filepath_deviceid))
+              else
+                devid="na"
+              fi
+
+              # read fw version
+              if [ -f $filepath_fwver ]; then
+                fwver=$(cat $filepath_fwver)
+              else
+                fwver="na"
+              fi
+
+              # read device description and part id from the vpd
+              if [ -f $filepath_vpd ]; then
+                tmp=$ifs
+                ifs=":"
+                vpd_content=`cat $filepath_vpd`
+                devdesc=$(printf "%-15s" $(echo $vpd_content | strings | head -1))
+                partid=$(printf "%-11s" $(echo $vpd_content | strings | head -4 | tail -1 | gawk '{print $1}'))
+                ifs=$tmp
+              else
+                devdesc=""
+                partid="na"
+              fi
+
+              echo "$d ($devid - $partid) $devdesc fw $fwver port $port ($ibstate) ==> $eth ($link_state)"
+            else
+              echo "$d port $port ==> $eth ($link_state)"
+            fi
+          fi
+        fi
+      fi
+    done
+  done
+else
+##########################
+### old style
+##########################
+  ifcs=$(ifconfig -a | egrep '^eth|^ib' | gawk '{print $1}')
+
+  for ifc in $ifcs; do
+    len=$(cat /sys/class/net/$ifc/addr_len)
+    if (( len == 20 )); then
+      guid=$(cat /sys/class/net/$ifc/address | cut -b 37- | sed -e 's/://g')
+      find_guid $guid $ifc
+    elif (( len == 6)); then
+      mac=$(cat /sys/class/net/$ifc/address | sed -e 's/://g')
+      find_mac $mac $ifc
+    fi
+  done
+fi
+
