1*1cfa752fSRamaswamy Tummala#!/sbin/sh 2*1cfa752fSRamaswamy Tummala# 3*1cfa752fSRamaswamy Tummala# CDDL HEADER START 4*1cfa752fSRamaswamy Tummala# 5*1cfa752fSRamaswamy Tummala# The contents of this file are subject to the terms of the 6*1cfa752fSRamaswamy Tummala# Common Development and Distribution License (the "License"). 7*1cfa752fSRamaswamy Tummala# You may not use this file except in compliance with the License. 8*1cfa752fSRamaswamy Tummala# 9*1cfa752fSRamaswamy Tummala# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10*1cfa752fSRamaswamy Tummala# or http://www.opensolaris.org/os/licensing. 11*1cfa752fSRamaswamy Tummala# See the License for the specific language governing permissions 12*1cfa752fSRamaswamy Tummala# and limitations under the License. 13*1cfa752fSRamaswamy Tummala# 14*1cfa752fSRamaswamy Tummala# When distributing Covered Code, include this CDDL HEADER in each 15*1cfa752fSRamaswamy Tummala# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16*1cfa752fSRamaswamy Tummala# If applicable, add the following below this CDDL HEADER, with the 17*1cfa752fSRamaswamy Tummala# fields enclosed by brackets "[]" replaced with your own identifying 18*1cfa752fSRamaswamy Tummala# information: Portions Copyright [yyyy] [name of copyright owner] 19*1cfa752fSRamaswamy Tummala# 20*1cfa752fSRamaswamy Tummala# CDDL HEADER END 21*1cfa752fSRamaswamy Tummala# 22*1cfa752fSRamaswamy Tummala# 23*1cfa752fSRamaswamy Tummala# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. 24*1cfa752fSRamaswamy Tummala# 25*1cfa752fSRamaswamy Tummala# 26*1cfa752fSRamaswamy Tummala 27*1cfa752fSRamaswamy TummalaPATH=/sbin:/bin 28*1cfa752fSRamaswamy TummalaORIGIFS="${IFS}" 29*1cfa752fSRamaswamy TummalaUSAGE="Usage: ibd_upgrade [-v]" 30*1cfa752fSRamaswamy TummalaDRVCONF=/kernel/drv/ibp.conf.old 31*1cfa752fSRamaswamy Tummala 32*1cfa752fSRamaswamy Tummala# 33*1cfa752fSRamaswamy Tummala# split device path into path components 34*1cfa752fSRamaswamy Tummala# 35*1cfa752fSRamaswamy Tummalasplit_path_components() 36*1cfa752fSRamaswamy Tummala{ 37*1cfa752fSRamaswamy Tummala hca_path= 38*1cfa752fSRamaswamy Tummala node_name= 39*1cfa752fSRamaswamy Tummala port= 40*1cfa752fSRamaswamy Tummala pkey= 41*1cfa752fSRamaswamy Tummala service= 42*1cfa752fSRamaswamy Tummala partition_name= 43*1cfa752fSRamaswamy Tummala 44*1cfa752fSRamaswamy Tummala hca_path="/dev/`dirname $device_path`" 45*1cfa752fSRamaswamy Tummala bname=`basename $device_path` 46*1cfa752fSRamaswamy Tummala IFS=":" 47*1cfa752fSRamaswamy Tummala set -- $bname 48*1cfa752fSRamaswamy Tummala node_at_addr=$1 49*1cfa752fSRamaswamy Tummala partition_name=$2 50*1cfa752fSRamaswamy Tummala IFS="@" 51*1cfa752fSRamaswamy Tummala set -- $node_at_addr 52*1cfa752fSRamaswamy Tummala node_name=$1 53*1cfa752fSRamaswamy Tummala IFS="," 54*1cfa752fSRamaswamy Tummala set -- $2 55*1cfa752fSRamaswamy Tummala port=$1 56*1cfa752fSRamaswamy Tummala pkey=0x$2 57*1cfa752fSRamaswamy Tummala service=$3 58*1cfa752fSRamaswamy Tummala 59*1cfa752fSRamaswamy Tummala IFS="${ORIGIFS}" 60*1cfa752fSRamaswamy Tummala} 61*1cfa752fSRamaswamy Tummala 62*1cfa752fSRamaswamy Tummalado_cmd() 63*1cfa752fSRamaswamy Tummala{ 64*1cfa752fSRamaswamy Tummala if [ $verbose -eq 1 ]; then 65*1cfa752fSRamaswamy Tummala echo "$1" 66*1cfa752fSRamaswamy Tummala fi 67*1cfa752fSRamaswamy Tummala $1 68*1cfa752fSRamaswamy Tummala} 69*1cfa752fSRamaswamy Tummala 70*1cfa752fSRamaswamy Tummalaprocess_rc_mode() 71*1cfa752fSRamaswamy Tummala{ 72*1cfa752fSRamaswamy Tummala device=$1 73*1cfa752fSRamaswamy Tummala 74*1cfa752fSRamaswamy Tummala # 75*1cfa752fSRamaswamy Tummala # Get the instance number of ibd 76*1cfa752fSRamaswamy Tummala # Device name format would be ibd#, 77*1cfa752fSRamaswamy Tummala # 78*1cfa752fSRamaswamy Tummala IFS="d" 79*1cfa752fSRamaswamy Tummala set -- ${device} 80*1cfa752fSRamaswamy Tummala IFS="${ORIGIFS}" 81*1cfa752fSRamaswamy Tummala 82*1cfa752fSRamaswamy Tummala if [ "$1" != "ib" ]; then 83*1cfa752fSRamaswamy Tummala return 84*1cfa752fSRamaswamy Tummala fi 85*1cfa752fSRamaswamy Tummala 86*1cfa752fSRamaswamy Tummala inst=$2 87*1cfa752fSRamaswamy Tummala 88*1cfa752fSRamaswamy Tummala IFS="," 89*1cfa752fSRamaswamy Tummala set -- ${enable_rc} 90*1cfa752fSRamaswamy Tummala IFS="${ORIGIFS}" 91*1cfa752fSRamaswamy Tummala 92*1cfa752fSRamaswamy Tummala if [ ${inst} -lt $# ]; then 93*1cfa752fSRamaswamy Tummala (( inst = $inst + 1 )) 94*1cfa752fSRamaswamy Tummala eval "linkmode=\$${inst}" 95*1cfa752fSRamaswamy Tummala else 96*1cfa752fSRamaswamy Tummala linkmode=0 97*1cfa752fSRamaswamy Tummala fi 98*1cfa752fSRamaswamy Tummala 99*1cfa752fSRamaswamy Tummala if [ "$linkmode" = "0" ]; then 100*1cfa752fSRamaswamy Tummala do_cmd "dladm set-linkprop -p linkmode=ud ${device}" 101*1cfa752fSRamaswamy Tummala fi 102*1cfa752fSRamaswamy Tummala} 103*1cfa752fSRamaswamy Tummala 104*1cfa752fSRamaswamy Tummalaverbose=0 105*1cfa752fSRamaswamy Tummalawhile getopts v c 106*1cfa752fSRamaswamy Tummalado 107*1cfa752fSRamaswamy Tummala case $c in 108*1cfa752fSRamaswamy Tummala v) verbose=1;; 109*1cfa752fSRamaswamy Tummala \?) echo "$USAGE" 1>&2 110*1cfa752fSRamaswamy Tummala exit 2;; 111*1cfa752fSRamaswamy Tummala esac 112*1cfa752fSRamaswamy Tummaladone 113*1cfa752fSRamaswamy Tummala 114*1cfa752fSRamaswamy Tummalaenable_rc= 115*1cfa752fSRamaswamy Tummalaif [ -f ${DRVCONF} ]; then 116*1cfa752fSRamaswamy Tummala enable_rc=`egrep "^[ ]*enable_rc[ ]*=" ${DRVCONF} | sed -e "s/[ ]*//g" -e "s/enable_rc=//" -e "s/;$//" 2>/dev/null` 117*1cfa752fSRamaswamy Tummalafi 118*1cfa752fSRamaswamy Tummala 119*1cfa752fSRamaswamy Tummala# 120*1cfa752fSRamaswamy Tummala# Loop through all ibd devices based on the old model (i.e., one ibd instance 121*1cfa752fSRamaswamy Tummala# per partition; consequently device names have non zero pkey) 122*1cfa752fSRamaswamy Tummala# and create data links with the same names as in the old model under the 123*1cfa752fSRamaswamy Tummala# new model. 124*1cfa752fSRamaswamy Tummala# 125*1cfa752fSRamaswamy Tummalals -l /dev/ibd* 2> /dev/null \ 126*1cfa752fSRamaswamy Tummala | while read x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 device_path 127*1cfa752fSRamaswamy Tummalado 128*1cfa752fSRamaswamy Tummala split_path_components 129*1cfa752fSRamaswamy Tummala 130*1cfa752fSRamaswamy Tummala if [ "$node_name" != "ibport" -o "$service" != "ipib" \ 131*1cfa752fSRamaswamy Tummala -o "$pkey" = "0x0" -o "$pkey" = "0x" ]; then 132*1cfa752fSRamaswamy Tummala continue 133*1cfa752fSRamaswamy Tummala fi 134*1cfa752fSRamaswamy Tummala 135*1cfa752fSRamaswamy Tummala # verify that the hca path exists 136*1cfa752fSRamaswamy Tummala cd $hca_path 2> /dev/null 137*1cfa752fSRamaswamy Tummala if [ $? -ne 0 ]; then 138*1cfa752fSRamaswamy Tummala continue 139*1cfa752fSRamaswamy Tummala fi 140*1cfa752fSRamaswamy Tummala 141*1cfa752fSRamaswamy Tummala fn=`echo ibport@${port},0,ipib:ibp*[0-9]` 142*1cfa752fSRamaswamy Tummala if [ -c "$fn" ]; then 143*1cfa752fSRamaswamy Tummala IFS=":" 144*1cfa752fSRamaswamy Tummala set -- $fn 145*1cfa752fSRamaswamy Tummala IFS="${ORIGIFS}" 146*1cfa752fSRamaswamy Tummala 147*1cfa752fSRamaswamy Tummala do_cmd "dladm delete-phys $partition_name" 2>/dev/null 148*1cfa752fSRamaswamy Tummala if [ $? -ne 0 ]; then 149*1cfa752fSRamaswamy Tummala do_cmd "ibd_delete_link $partition_name" 150*1cfa752fSRamaswamy Tummala fi 151*1cfa752fSRamaswamy Tummala do_cmd "dladm create-part -f -l $2 -P $pkey $partition_name" 152*1cfa752fSRamaswamy Tummala 153*1cfa752fSRamaswamy Tummala if [ "$enable_rc" != "" ]; then 154*1cfa752fSRamaswamy Tummala process_rc_mode $partition_name 155*1cfa752fSRamaswamy Tummala fi 156*1cfa752fSRamaswamy Tummala fi 157*1cfa752fSRamaswamy Tummaladone 158*1cfa752fSRamaswamy Tummala 159*1cfa752fSRamaswamy Tummalaexit 0 160