diff options
author | Karsten Hopp <karsten@redhat.de> | 2004-08-02 13:09:35 +0000 |
---|---|---|
committer | Karsten Hopp <karsten@redhat.de> | 2004-08-02 13:09:35 +0000 |
commit | fa6d46fe60f199bfad4e7d53e3c07c280d7d4466 (patch) | |
tree | f9d4a67b70522048e6659e78240031ae2ce75a77 /zfcp.py | |
parent | a4c6e2315ffd2a97dee34526ee5ab129d7475023 (diff) | |
download | anaconda-fa6d46fe60f199bfad4e7d53e3c07c280d7d4466.tar.gz anaconda-fa6d46fe60f199bfad4e7d53e3c07c280d7d4466.tar.xz anaconda-fa6d46fe60f199bfad4e7d53e3c07c280d7d4466.zip |
The main zfcp stuff, initial versions
Diffstat (limited to 'zfcp.py')
-rw-r--r-- | zfcp.py | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/zfcp.py b/zfcp.py new file mode 100644 index 000000000..8f0501b39 --- /dev/null +++ b/zfcp.py @@ -0,0 +1,150 @@ +# +# zfcp.py - mainframe zfcp configuration install data +# +# Karsten Hopp <karsten@redhat.com> +# +# Copyright 2001-2004 Red Hat, Inc. +# +# This software may be freely redistributed under the terms of the GNU +# library public license. +# +# You should have received a copy of the GNU Library Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# + +import string +import os +import iutil + +from rhpl.translate import _, N_ +from rhpl.log import log + + +class ZFCP: + def __init__(self): + self.readConfig() + + # remove the configuration from sysfs, required when the user + # steps backward from the partitioning screen and changes fcp configuration + def cleanFcpSysfs(self, fcpdevices): + if not len(fcpdevices): + return + on = "/sys/bus/ccw/drivers/zfcp/%s/online" + pr = "/sys/bus/ccw/drivers/zfcp/%s/port_remove" + ur = "/sys/bus/ccw/drivers/zfcp/%s/%s/unit_remove" + for i in range(len(fcpdevices)): + fno = on % (fcpdevices[i][0],) + fnp = pr % (fcpdevices[i][0],) + fnu = ur % (fcpdevices[i][0],fcpdevices[i][2],) + try: + fo = open(fno, "w") + log("echo %s > %s" % (0, fno)) + fo.write("0") + fo.close() + try: + fu = open(fnu, "w") + log("echo %s > %s" % (fcpdevices[i][4], fnu)) + fu.write("%s\n" % (fcpdevices[i][4],)) + fu.close() + try: + fp = open(fnp, "w") + log("echo %s > %s" % (fcpdevices[i][2], fnp)) + fp.write("%s\n" % (fcpdevices[i][2],)) + fp.close() + except: + continue + except: + continue + except: + continue + + # initialize devices via sysfs + def writeFcpSysfs(self,fcpdevices): + if not len(fcpdevices): + return + on = "/sys/bus/ccw/drivers/zfcp/%s/online" + pa = "/sys/bus/ccw/drivers/zfcp/%s/port_add" + ua = "/sys/bus/ccw/drivers/zfcp/%s/%s/unit_add" + for i in range(len(fcpdevices)): + fno = on % (fcpdevices[i][0],) + fnp = pa % (fcpdevices[i][0],) + fnu = ua % (fcpdevices[i][0],fcpdevices[i][2],) + try: + fp = open(fnp, "w") + log("echo %s > %s" % (fcpdevices[i][2], fnp)) + fp.write("%s\n" % (fcpdevices[i][2],)) + fp.close() + try: + fu = open(fnu, "w") + log("echo %s > %s" % (fcpdevices[i][4], fnu)) + fu.write("%s\n" % (fcpdevices[i][4],)) + fu.close() + try: + fo = open(fno, "w") + log("echo %s > %s" % (1, fno)) + fo.write("1") + fo.close() + except: + continue + except: + continue + except: + continue + + def write(self, instPath): + if not len(self.fcpdevices): + return + if not os.path.isdir("%s/etc/" %(instPath,)): + iutil.mkdirChain("%s/etc/" %(instPath,)) + + fn = "%s/etc/zfcp.conf" % (instPath,) + f = open(fn, "w") + os.chmod(fn, 0644) + for dev in self.fcpdevices: + f.write("%s %s %s %s %s\n" % (dev[0], dev[1], dev[2], dev[3], dev[4],)) + f.close() + + def writeKS(self,fcpdevices): + # FIXME KH not implemented yet + return + + def readConfig(self): + self.fcpdevices = [] + try: + f = open("/tmp/fcpconfig", "r") + except: + pass + else: + lines = f.readlines() + f.close() + for line in lines: + line = string.strip(line) + fcpconf = string.split(line) + if len(line) > 0 and (len(fcpconf) != 5 or fcpconf[0][:1] == "#"): # nonempty but invalid line or comment + continue + for i in range(1,5): + if fcpconf[i][:2] != "0x": + fcpconf[i] = "0x" + fcpconf[i] + fcpconf[4] = self.expandLun(fcpconf[4]) + self.fcpdevices.append(fcpconf) + + def sanityCheckHexValue(self, length, value): + # FIXME: do a real checking if this is a valid hex value + if len(value) == length: + return None + else: + return _("Invalid input. Entered string must have %d characters") % length + + # ZFCP LUNs are usually entered as 16 bit, sysfs accepts only 64 bit + # (#125632), expand with zeroes if necessary + def expandLun(self, lun): + if lun[:2] == "0x": + lun = lun[2:] + lun = "0x" + "0" * (4 - len(lun)) + lun + length = len(lun) - 2 + lun = lun + "0" * (16 - len(lun) + 2) + return lun + + +# vim:tw=78:ts=4:et:sw=4 |