summaryrefslogtreecommitdiff
path: root/contrib/bmclanconf
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/bmclanconf')
-rwxr-xr-xcontrib/bmclanconf308
1 files changed, 308 insertions, 0 deletions
diff --git a/contrib/bmclanconf b/contrib/bmclanconf
new file mode 100755
index 0000000..253afd4
--- /dev/null
+++ b/contrib/bmclanconf
@@ -0,0 +1,308 @@
+#!/bin/bash
+#
+# Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# Redistribution of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# Redistribution in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# Neither the name of Sun Microsystems, Inc. or the names of
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# This software is provided "AS IS," without a warranty of any kind.
+# ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
+# INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
+# PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
+# SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE
+# FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
+# OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
+# SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
+# OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
+# PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
+# LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
+# EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+
+# This script is designed for Sun Fire LX50, V60x and V65x systems.
+# It may work with other setups as long as you use the correct channel
+# and interface settings. It can be used on the V20z as long as you
+# specify network settings on the command line.
+#
+# If the wrong channel is used you could lose network access to the
+# box because your BMC will be sending out bad Gratuitous ARP packets
+# with the wrong MAC address. You will need to use a console or
+# override your local ARP cache with the correct addr.
+
+usage ()
+{
+ echo "
+usage: $0 -c <chan> -i <interface> [options]
+ $0 -c <chan> [-v|w|x|y|z address] [options]
+
+ -c channel Which BMC channel to configure [-c help for more info]
+ -i interface Auto-configure BMC based on interface network settings
+ -v address Use specified IP address
+ -w address Use specified Netmask address
+ -x address Use specified MAC address
+ -y address Use specified Gateway IP address
+ -z address Use specified Gateway MAC address
+ -m interface Which IPMI interface to use [default linux=open solaris=lipmi]
+ -p password Set BMC channel password
+ -s string Set SNMP community string
+ -a interval Set Gratuitous ARP interval, off=0, default=4
+ -r Reset BMC channel, zero all network settings, disable
+ -d Debug mode, does not make any changes
+"
+ exit 0;
+}
+
+channel_usage ()
+{
+ echo "
+ Sun Fire V60x and V65x - Linux 2.4
+ eth0 = channel 6, top
+ eth1 = channel 7, bottom
+
+ Sun Fire V60x and V65x - Linux 2.6
+ eth0 = channel 7, bottom
+ eth1 = channel 6, top
+
+ Sun Fire V60x and V65x - Solaris x86
+ e1000g0 = channel 7, bottom
+ e1000g1 = channel 6, top
+
+ Sun LX50 - Linux
+ eth0 = channel 7, bottom
+ eth1 = channel 6, top
+
+ Sun LX50 - Solaris x86
+ le0 = channel 7, bottom
+ le1 = channel 6, top
+
+ Sun Fire V20z (-i option does not apply)
+ channel 1
+"
+ exit 0
+}
+
+hex_to_ip ()
+{
+ test $# -ge 1 || return;
+ local HEX B1 B2 B3 B4;
+ HEX=`echo $1 | tr '[:lower:]' '[:upper:]'`;
+ H1=`echo $HEX | cut -c1-2`
+ H2=`echo $HEX | cut -c3-4`
+ H3=`echo $HEX | cut -c5-6`
+ H4=`echo $HEX | cut -c7-8`
+ B1=`echo 10 o 16 i $H1 p | dc`
+ B2=`echo 10 o 16 i $H2 p | dc`
+ B3=`echo 10 o 16 i $H3 p | dc`
+ B4=`echo 10 o 16 i $H4 p | dc`
+ echo "$B1.$B2.$B3.$B4"
+}
+
+ipmitool_lan_set ()
+{
+ [ $# -lt 1 ] && return
+ local PARAM=$1
+ local VALUE=
+ [ $# -ge 2 ] && VALUE=$2
+
+ if [ $DEBUG -gt 0 ]; then
+ echo "Setting LAN parameter $PARAM $VALUE"
+ echo "$IPMITOOL -I $IPMIINTF lan set $CHANNEL $PARAM $VALUE"
+ return
+ fi
+
+ $IPMITOOL -I $IPMIINTF lan set $CHANNEL $PARAM $VALUE
+}
+
+ipmitool_lan_reset ()
+{
+ ipmitool_lan_set "ipsrc" "static"
+ ipmitool_lan_set "ipaddr" "0.0.0.0"
+ ipmitool_lan_set "netmask" "0.0.0.0"
+ ipmitool_lan_set "macaddr" "00:00:00:00:00:00"
+ ipmitool_lan_set "defgw ipaddr" "0.0.0.0"
+ ipmitool_lan_set "defgw macaddr" "00:00:00:00:00:00"
+ ipmitool_lan_set "password"
+ ipmitool_lan_set "snmp" "public"
+ ipmitool_lan_set "arp generate" "off"
+ ipmitool_lan_set "access" "off"
+ exit 0
+}
+
+DEBUG=0
+LINUX=0
+SOLARIS=0
+CHANNEL=0
+IFACE=
+PASSWORD=
+SNMP=
+GRATARP=8
+PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin
+
+case `uname -s` in
+ Linux)
+ IPMIINTF=open
+ IPMITOOL=ipmitool
+ PING=ping
+ IFCONFIG=ifconfig
+ ARP=arp
+ ROUTE=route
+ ;;
+ SunOS)
+ IPMIINTF=lipmi
+ IPMITOOL=ipmiadm
+ PING=ping
+ IFCONFIG=ifconfig
+ ARP=arp
+ ROUTE=route
+ ;;
+ *)
+ echo "Invalid OS!"
+ exit 1
+esac
+
+while getopts "dhri:c:m:p:s:a:v:w:x:y:z:" OPTION ; do
+ case "$OPTION" in
+ i) IFACE=$OPTARG ;;
+ c) CHANNEL=$OPTARG ; test X$CHANNEL = Xhelp && channel_usage ;;
+ m) IPMIINTF=$OPTARG ;;
+ p) PASSWORD=$OPTARG ;;
+ s) SNMP=$OPTARG ;;
+ a) GRATARP=$OPTARG ;;
+ d) DEBUG=1 ;;
+ v) IP_ADDRESS=$OPTARG ;;
+ w) IP_NETMASK=$OPTARG ;;
+ x) MAC_ADDRESS=$OPTARG ;;
+ y) GATEWAY_IP=$OPTARG ;;
+ z) GATEWAY_MAC=$OPTARG ;;
+ r) ipmitool_lan_reset ;;
+ h) usage ;;
+ *) echo "Ignoring invalid option : -$OPTARG" ;;
+ esac
+done
+
+if [ ! -x `which $IPMITOOL` ]; then
+ echo "Error: unable to find $IPMITOOL"
+ exit 1
+fi
+
+if [ $CHANNEL -eq 0 ]; then
+ echo
+ echo "Error: you must specify a channel with -c"
+ echo
+ exit 1
+fi
+
+if [ "$IFACE" ]; then
+ if ! $IFCONFIG $IFACE 2>/dev/null | grep "inet " >/dev/null 2>&1 ; then
+ echo
+ echo "Error: unable to find interface $IFACE"
+ echo
+ exit 1
+ fi
+ echo "Auto-configuring $IFACE (channel $CHANNEL)"
+fi
+
+case `uname -s` in
+ SunOS)
+ if [ X$IFACE != X ]; then
+ if [ X$IP_ADDRESS = X ]; then
+ IP_ADDRESS=`$IFCONFIG $IFACE | grep inet | awk '{print $2}'`
+ fi
+ if [ X$IP_NETMASK = X ]; then
+ HEX_NETMASK=`$IFCONFIG $IFACE | grep netmask | awk '{print $4}'`
+ IP_NETMASK=`hex_to_ip $HEX_NETMASK`
+ fi
+ if [ X$MAC_ADDRESS = X ]; then
+ MAC_ADDRESS=`$IFCONFIG $IFACE | grep ether | awk '{print $2}'`
+ fi
+ if [ X$GATEWAY_IP = X ]; then
+ GATEWAY_IP=`$ROUTE -n get default | grep gateway: | awk '{print $2}'`
+ fi
+ if [ X$GATEWAY_MAC = X ]; then
+ $PING -i $IFACE $GATEWAY_IP 1 >/dev/null 2>&1
+ GATEWAY_MAC=`$ARP $GATEWAY_IP | awk '{print $4}'`
+ if [ X$GATEWAY_MAC = Xno ]; then
+ GATEWAY_MAC=
+ fi
+ fi
+ fi
+ ;;
+
+ Linux)
+ if [ X$IFACE != X ]; then
+ if [ X$IP_ADDRESS = X ]; then
+ IP_ADDRESS=`$IFCONFIG $IFACE | grep "inet addr" | awk -F"[:[:space:]]+" '{print $4}'`
+ fi
+ if [ X$IP_NETMASK = X ]; then
+ IP_NETMASK=`$IFCONFIG $IFACE | grep Bcast | awk -F"[:[:space:]]+" '{print $8}'`
+ fi
+ if [ X$MAC_ADDRESS = X ]; then
+ MAC_ADDRESS=`$IFCONFIG $IFACE | grep HWaddr | awk '{print $5}'`
+ fi
+ if [ X$GATEWAY_IP = X ]; then
+ GATEWAY_IP=`$ROUTE -n | awk '/^0.0.0.0/ {print $2}'`
+ fi
+ if [ X$GATEWAY_MAC = X ]; then
+ $PING -q -c1 $GATEWAY_IP >/dev/null 2>&1
+ GATEWAY_MAC=`$ARP -an | grep "$GATEWAY_IP[^0-9]" | awk '{print $4}'`
+ fi
+ fi
+ ;;
+esac
+
+if [ X$IP_ADDRESS != X ]; then
+ ipmitool_lan_set "ipsrc" "static"
+ ipmitool_lan_set "ipaddr" "$IP_ADDRESS"
+fi
+
+if [ X$IP_NETMASK != X ]; then
+ ipmitool_lan_set "netmask" "$IP_NETMASK"
+fi
+
+if [ X$MAC_ADDRESS != X ]; then
+ ipmitool_lan_set "macaddr" "$MAC_ADDRESS"
+fi
+
+if [ X$GATEWAY_IP != X ]; then
+ ipmitool_lan_set "defgw ipaddr" "$GATEWAY_IP"
+fi
+
+if [ X$GATEWAY_MAC != X ]; then
+ ipmitool_lan_set "defgw macaddr" "$GATEWAY_MAC"
+fi
+
+if [ X$PASSWORD != X ]; then
+ ipmitool_lan_set "password" "$PASSWORD"
+fi
+
+if [ X$SNMP != X ]; then
+ ipmitool_lan_set "snmp" "$SNMP"
+fi
+
+if [ "$GRATARP" -ne 0 ]; then
+ ipmitool_lan_set "arp generate" "on"
+ ipmitool_lan_set "arp interval" "$GRATARP"
+else
+ ipmitool_lan_set "arp generate" "off"
+fi
+
+echo "Setting channel authentication capabilities"
+ipmitool_lan_set "auth callback,user,operator,admin" "md2,md5"
+
+echo "Enabling channel $CHANNEL"
+ipmitool_lan_set "access" "on"
+ipmitool_lan_set "user"
+
+exit 0