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