[Lunar-commits] CVS: moonbase/zbeta/openafs-devel/etc openafs-CellServDB, NONE, 1.1 openafs-SuidCells, NONE, 1.1 openafs-afsmodname, NONE, 1.1 openafs-cacheinfo, NONE, 1.1

Jerry Lundström prox at lunar-linux.org
Wed Nov 17 15:41:00 UTC 2004


Update of /var/cvs/lunar/moonbase/zbeta/openafs-devel/etc
In directory espresso.foo-projects.org:/tmp/cvs-serv19518/openafs-devel/etc

Added Files:
	openafs-CellServDB openafs-SuidCells openafs-afsmodname 
	openafs-cacheinfo 
Log Message:
added developer version of openafs, this works on both 2.4 and 2.6

--- NEW FILE: openafs-CellServDB ---
>grand.central.org      #GCO Public CellServDB 26 Feb 2003
18.7.14.88                      #grand-opening.mit.edu
128.2.191.224                   #penn.central.org
>wu-wien.ac.at          #University of Economics, Vienna, Austria
137.208.3.33                    #afsdb1.wu-wien.ac.at
137.208.7.4                     #afsdb2.wu-wien.ac.at
137.208.7.7                     #afsdb3.wu-wien.ac.at
>cern.ch                #European Laboratory for Particle Physics, Geneva
137.138.128.148                 #afsdb1.cern.ch
137.138.246.50                  #afsdb3.cern.ch
137.138.246.51                  #afsdb2.cern.ch
>ams.cern.ch            #AMS Experiment
137.138.206.77                  #pcamsf2.cern.ch
137.138.206.123                 #pcamsf4.cern.ch
>ethz.ch                #Swiss Federal Inst. of Tech. - Zurich, Switzerland
129.132.97.19                   #amalthea.ethz.ch
129.132.97.27                   #nethzafs-001.ethz.ch
129.132.115.3                   #himalia.ethz.ch
129.132.115.37                  #nethzafs-005.ethz.ch
129.132.115.38                  #nethzafs-006.ethz.ch
>psi.ch                 #Paul Scherrer Institut - Villigen, Switzerland
129.129.16.10                   #afs1.psi.ch
129.129.16.11                   #afs2.psi.ch
>extundo.com            #Simon Josefsson's cell
195.42.214.241                  #slipsten.extundo.com
>mekinok.com            #Mekinok, Inc.
4.36.43.98                      #loggerhead.mekinok.com
>sodre.cx               #Sodre.cx
128.8.140.165                   #greed.sodre.cx
>desy.de                #Deutsches Elektronen-Synchrotron
131.169.40.62                   #vayu.desy.de
131.169.244.60                  #solar00.desy.de
>gppc.de                #GPP Chemnitz mbH
213.187.92.33                   #gpp1.gppc.de
213.187.92.34                   #paulchen.gppc.de
213.187.92.35                   #lotus.gppc.de
>ifh.de                 #DESY Zeuthen
141.34.22.10                    #romulus.ifh.de
141.34.22.11                    #remus.ifh.de
141.34.22.29                    #hekate.ifh.de
>lrz-muenchen.de        #Leibniz-Rechenzentrum Muenchen
129.187.10.36                   #afs1.lrz-muenchen.de
129.187.14.10                   #afs3.lrz-muenchen.de
129.187.14.12                   #afs2.lrz-muenchen.de
>ipp-garching.mpg.de    #Institut fuer Plasmaphysik
130.183.9.5                     #afs-db1.rzg.mpg.de
130.183.100.10                  #afs-db2.aug.ipp-garching.mpg.de
130.183.100.23                  #afs-db3.aug.ipp-garching.mpg.de
>tu-chemnitz.de         #Technische Universitaet Chemnitz, Germany
134.109.2.1                     #zuse.hrz.tu-chemnitz.de
134.109.2.15                    #phoenix.hrz.tu-chemnitz.de
134.109.200.7                   #aetius.hrz.tu-chemnitz.de
>uni-bonn.de            #Cell name
131.220.14.198                  #work15-eth.rhrz.uni-bonn.de
131.220.14.203                  #node03-en2.rhrz.uni-bonn.de
131.220.14.205                  #node05.rhrz.uni-bonn.de
>uni-freiburg.de        #Albert-Ludwigs-Universitat Freiburg
132.230.6.235                   #sv6.ruf.uni-freiburg.de
132.230.6.236                   #sv7.ruf.uni-freiburg.de
132.230.6.237                   #sv8.ruf.uni-freiburg.de
>uni-hohenheim.de       #University of Hohenheim
144.41.2.2                      #rs13.serv.uni-hohenheim.de
144.41.2.3                      #rs14.serv.uni-hohenheim.de
144.41.2.4                      #rs15.serv.uni-hohenheim.de
>meteo.uni-koeln.de     #Univ. of Cologne - Inst. for Geophysics & Meteorology
134.95.144.22                   #afs1.meteo.uni-koeln.de
134.95.144.24                   #afs2.meteo.uni-koeln.de
>rrz.uni-koeln.de       #University of Cologne - Reg Comp Center
134.95.19.3                     #afsdb1.rrz.uni-koeln.de
134.95.19.30                    #fileserv3.rrz.uni-koeln.de
134.95.67.97                    #afs.thp.uni-koeln.de
134.95.140.190                  #rzkbserv.rrz.uni-koeln.de
>physik.uni-mainz.de    #institute of physics, university Mainz, Germany
134.93.130.93                   #hardy.physik.uni-mainz.de
>uni-mannheim.de        #Uni Mannheim (Rechenzentrum)
134.155.50.165                  #afsdbx.uni-mannheim.de
134.155.50.166                  #afsdby.uni-mannheim.de
134.155.50.167                  #afsdbz.uni-mannheim.de
>andrew.cmu.edu         #Carnegie Mellon University - Computing Services
128.2.10.2                      #vice2.fs.andrew.cmu.edu
128.2.10.7                      #vice7.fs.andrew.cmu.edu
128.2.10.11                     #vice11.fs.andrew.cmu.edu
128.2.10.12                     #vice12.fs.andrew.cmu.edu
128.2.10.28                     #vice28.fs.andrew.cmu.edu
>club.cc.cmu.edu        #Carnegie Mellon University Computer Club
128.2.4.131                     #yttrium.club.cc.cmu.edu
128.2.4.132                     #zirconium.club.cc.cmu.edu
>chem.cmu.edu           #Carnegie Mellon University - Chemistry Dept.
128.2.40.134                    #afs.chem.cmu.edu
>cs.cmu.edu             #Carnegie Mellon University - School of Comp. Sci.
128.2.206.130                   #cucumber.srv.cs.cmu.edu
128.2.222.199                   #papaya.srv.cs.cmu.edu
128.2.242.86                    #lemon.srv.cs.cmu.edu
>ece.cmu.edu            #Carnegie Mellon University - Elec. Comp. Eng. Dept.
128.2.129.7                     #porok.ece.cmu.edu
128.2.129.8                     #vicio.ece.cmu.edu
128.2.129.9                     #e-xing.ece.cmu.edu
128.2.136.109                   #last.ece.cmu.edu
>msc.cornell.edu        #Cornell University Materials Science Center
128.84.231.242                  #miranda.ccmr.cornell.edu
128.84.241.35                   #co.ccmr.cornell.edu
128.84.249.78                   #dax.ccmr.cornell.edu
>iastate.edu            #Iowa State University
129.186.1.243                   #afsdb-1.iastate.edu
129.186.6.243                   #afsdb-2.iastate.edu
129.186.142.243                 #afsdb-3.iastate.edu
>athena.mit.edu         #MIT/Athena cell
18.7.1.66                       #paris.mit.edu.
18.145.0.25                     #agamemnon.mit.edu.
18.158.0.37                     #prill.mit.edu.
>dev.mit.edu            #MIT/IS Development cell
18.7.1.70                       #wham.mit.edu.
18.7.15.89                      #rattle.mit.edu.
18.7.15.93                      #hum.mit.edu.
>net.mit.edu            #MIT/Network Group cell
18.7.7.73                       #gracie.mit.edu
18.7.21.95                      #george.mit.edu
>sipb.mit.edu           #MIT/SIPB cell
18.181.0.19                     #reynelda.mit.edu.
18.181.0.22                     #rosebud.mit.edu.
18.181.0.23                     #ronald-ann.mit.edu.
>msu.edu                #Michigan State University Main Cell
35.9.7.10                       #afsdb0.cl.msu.edu
>nd.edu                 #University of Notre Dame
129.74.223.17                   #john.helios.nd.edu
129.74.223.33                   #lizardo.helios.nd.edu
129.74.223.65                   #buckaroo.helios.nd.edu
>pitt.edu               #University of Pittsburgh
136.142.8.15                    #afs09.srv.cis.pitt.edu
136.142.8.20                    #afs10.srv.cis.pitt.edu
136.142.8.21                    #afs11.srv.cis.pitt.edu
>psc.edu                #PSC (Pittsburgh Supercomputing Center)
128.182.59.182                  #shaggy.psc.edu
128.182.66.184                  #velma.psc.edu
128.182.66.185                  #daphne.psc.edu
>rose-hulman.edu        #Rose-Hulman Institute of Technology
137.112.7.11                    #afs1.rose-hulman.edu
137.112.7.12                    #afs2.rose-hulman.edu
137.112.7.13                    #afs3.rose-hulman.edu
>cs.rose-hulman.edu     #Rose-Hulman CS Department
137.112.40.10                   #galaxy.cs.rose-hulman.edu
>rpi.edu                #Rensselaer Polytechnic Institute
128.113.22.11                   #saul.server.rpi.edu
128.113.22.12                   #joab.server.rpi.edu
128.113.22.13                   #korah.server.rpi.edu
128.113.22.14                   #achan.server.rpi.edu
>hep.sc.edu             #University of South Carolina, Dept. of Physics
129.252.78.77                   #cpeven.physics.sc.edu
>ir.stanford.edu        #Stanford University
171.64.7.222                    #afsdb1.stanford.edu
171.64.7.234                    #afsdb2.stanford.edu
171.64.7.246                    #afsdb3.stanford.edu
>slac.stanford.edu      #Stanford Linear Accelerator Center
134.79.18.25                    #afsdb1.slac.stanford.edu
134.79.18.26                    #afsdb2.slac.stanford.edu
134.79.18.27                    #afsdb3.slac.stanford.edu
>cats.ucsc.edu          #UC Santa Cruz, Comm. and Tech. Services, California U.S.A
128.114.129.14                  #elan.ucsc.edu
128.114.129.15                  #ichabod.ucsc.edu
128.114.129.18                  #maneki.ucsc.edu
>ncsa.uiuc.edu          #University of Illinois
141.142.3.5                     #congo.ncsa.uiuc.edu
141.142.3.8                     #nile.ncsa.uiuc.edu
141.142.230.19                  #jinx.ncsa.uiuc.edu
>umbc.edu               #University of Maryland, Baltimore County
130.85.1.13                     #db2.afs.umbc.edu
130.85.6.33                     #db1.afs.umbc.edu
130.85.60.12                    #db3.afs.umbc.edu
>glue.umd.edu           #University of Maryland - Project Glue
128.8.10.44                     #tin.umd.edu
128.8.10.126                    #iron.umd.edu
128.8.70.10                     #copper.umd.edu
>wam.umd.edu            #University of Maryland Network WAM Project
128.8.70.9                      #csc-srv.wam.umd.edu
128.8.73.9                      #pg2-srv.wam.umd.edu
129.2.128.54                    #avw-srv.wam.umd.edu
>umich.edu              #University of Michigan - Campus
141.211.1.32                    #fear.ifs.umich.edu
141.211.1.33                    #surprise.ifs.umich.edu
141.211.1.34                    #ruthless.ifs.umich.edu
>atlas.umich.edu        #ATLAS group cell in physics at University of Michigan
141.211.43.102                  #linat02.grid.umich.edu
141.211.43.106                  #linat06.grid.umich.edu
141.211.43.109                  #atgrid.grid.umich.edu
>citi.umich.edu         #University of Michigan - CITI
141.211.92.144                  #babble.citi.umich.edu
>lsa.umich.edu          #University of Michigan - College of LS&A
141.211.54.132                  #curtis.admin.lsa.umich.edu
141.211.61.23                   #zee.admin.lsa.umich.edu
141.211.68.15                   #marshall.lsa.umich.edu
>math.lsa.umich.edu     #University of Michigan - Math Department
141.211.61.40                   #ike.math.lsa.umich.edu
141.211.61.41                   #clark.math.lsa.umich.edu
141.211.61.42                   #nimitz.math.lsa.umich.edu
>umr.edu                #University of Missouri - Rolla
131.151.1.59                    #afsdb1.umr.edu
131.151.1.70                    #afsdb3.umr.edu
131.151.1.146                   #afsdb2.umr.edu
>eng.utah.edu           #University of Utah - Engineering
155.99.222.40                   #afs1.eng.utah.edu
155.99.222.41                   #afs2.eng.utah.edu
>cs.uwm.edu             #University of Wisconsin--Milwaukee
129.89.38.124                   #solomons.cs.uwm.edu
>cs.wisc.edu            #Univ. of Wisconsin-Madison, Computer Sciences Dept.
128.105.132.14                  #timon.cs.wisc.edu
128.105.132.15                  #pumbaa.cs.wisc.edu
128.105.132.16                  #zazu.cs.wisc.edu
>hep.wisc.edu           #University of Wisconsin -- High Energy Physics
128.104.28.219                  #anise.physics.wisc.edu
>ifca.unican.es         #Instituto de Fisica de Cantabria (IFCA), Santander, Spain
193.144.209.20                  #gridwall.ifca.unican.es
>biocenter.helsinki.fi  #University of Helsinki, Institute of Biotechnology
128.214.58.174                  #afsdb1.biocenter.helsinki.fi
128.214.88.114                  #afsdb2.biocenter.helsinki.fi
>dapnia.saclay.cea.fr   #CEA DAPNIA
132.166.32.7                    #dphrsg.saclay.cea.fr
132.166.32.12                   #dphrsl.saclay.cea.fr
>in2p3.fr               #IN2P3 production cell
134.158.232.11                  #ccafsdb1.in2p3.fr
134.158.232.12                  #ccafsdb2.in2p3.fr
134.158.232.13                  #ccafsdb3.in2p3.fr
>anl.gov                #Argonne National Laboratory
146.137.96.33                   #arteus.ctd.anl.gov
146.137.162.88                  #agamemnon.ctd.anl.gov
146.137.194.80                  #antenor.ctd.anl.gov
>usatlas.bnl.gov        #US Atlas Tier 1 Facility at BNL
130.199.48.32                   #aafs01.usatlas.bnl.gov
130.199.48.33                   #aafs02.usatlas.bnl.gov
130.199.48.34                   #aafs03.usatlas.bnl.gov
>fnal.gov               #Fermi National Acclerator Laboratory
131.225.68.1                    #fsus01.fnal.gov
131.225.68.4                    #fsus03.fnal.gov
131.225.68.14                   #fsus04.fnal.gov
>nersc.gov              #National Energy Research Supercomputer Center
128.55.128.250                  #mars.nersc.gov
128.55.128.252                  #alfred.nersc.gov
128.55.128.254                  #lurch.nersc.gov
>caspur.it              #CASPUR Inter-University Computing Consortium, Rome
193.204.5.45                    #pomodoro.caspur.it
193.204.5.46                    #banana.caspur.it
193.204.5.50                    #maslo.caspur.it
>fusione.it             #Assoz. FUSIONE/Euratom, ENEA, Frascati-Italy
192.107.90.2                    #fusafs1.frascati.enea.it
192.107.90.3                    #fusafs2.frascati.enea.it
192.107.90.4                    #fusafs3.frascati.enea.it
>infn.it                #Istituto Nazionale di Fisica Nucleare (INFN), Italia
131.154.1.7                     #afscnaf.infn.it
141.108.3.252                   #afsrm1.roma1.infn.it
192.84.134.75                   #afsna.na.infn.it
>kloe.infn.it           #INFN, KLOE experiment at Laboratori di Frascati
192.135.25.111                  #kloeafs1.lnf.infn.it
192.135.25.112                  #kloeafs2.lnf.infn.it
>le.infn.it             #INFN, Sezione di Lecce
192.84.152.40                   #afs01.le.infn.it
192.84.152.148                  #afs02.le.infn.it
>lnf.infn.it            #INFN, Laboratori Nazionali di Frascati
193.206.84.121                  #afs1.lnf.infn.it
193.206.84.123                  #afs3.lnf.infn.it
>lngs.infn.it           #INFN, Laboratori Nazionali di Gran Sasso
192.84.135.21                   #rsgs05.lngs.infn.it
>pi.infn.it             #INFN, Sezione di Pisa
192.84.133.7                    #aix.pi.infn.it
192.84.133.50                   #aix1.pi.infn.it
>psm.it                 #Progetto San Marco, Universita' di Roma-1
151.100.1.65                    #atlante.psm.uniroma1.it
>ictp.trieste.it        #The Abdus Salam International Centre for Theoretical Physics (IC
140.105.16.8                    #fs1.ictp.trieste.it
140.105.16.9                    #fs2.ictp.trieste.it
>dis.uniroma1.it        #Universita' La Sapienza, Dept. of Inf. and Sys.
151.100.5.21                    #peano.dis.uniroma1.it
>dsi.uniroma1.it        #Universita' La Sapienza, Dept. of Computer Science
151.100.17.2                    #afscinfo.dsi.uniroma1.it
>ing.uniroma1.it        #Universita' La Sapienza, Fac. Ingeneria
151.100.39.30                   #delta.ing.uniroma1.it
151.100.85.209                  #beta.ing.uniroma1.it
>vn.uniroma3.it         #University of Rome 3, Area Vasca Navale
193.204.161.136                 #alfa.dia.uniroma3.it
193.204.161.137                 #beta.dia.uniroma3.it
193.204.161.138                 #gamma.dia.uniroma3.it
>italia                 #Italian Public AFS Cell
193.204.5.9                     #afs.caspur.it
>cmf.nrl.navy.mil       #Naval Research Lab - CCS
134.207.10.68                   #picard.cmf.nrl.navy.mil
134.207.10.69                   #riker.cmf.nrl.navy.mil
134.207.10.70                   #kirk.cmf.nrl.navy.mil
>lcp.nrl.navy.mil       #Naval Research Lab - Lab for Computational Physics
132.250.114.2                   #afs1.lcp.nrl.navy.mil
132.250.114.4                   #afs2.lcp.nrl.navy.mil
132.250.114.6                   #afs3.lcp.nrl.navy.mil
>es.net                 #Energy Sciences Net
198.128.3.21                    #fs1.es.net
198.128.3.22                    #fs2.es.net
198.128.3.23                    #fs3.es.net
>slackers.net           #The Slackers' Network
63.201.48.27                    #alexandria.slackers.net
>nikhef.nl              #The Dutch National Institute for High Energy Physics
192.16.185.26                   #afs1.nikhef.nl
192.16.185.27                   #afs2.nikhef.nl
>1ts.org                #KCR/private Karl Ramm, Cambridge, MA
4.36.43.102                     #dol-guldur.1ts.org
>bazquux.org            #Baz Quux Organization
66.207.142.196                  #baxquux.org
>coed.org               #Adam Pennington's Cell
66.93.61.184                    #vice1.coed.org
128.2.121.5                     #vice3.coed.org
>dementia.org           #Dementia Unlimited
128.2.12.45                     #alycia.dementia.org
128.2.120.216                   #meredith.dementia.org
>nimlabs.org            #Nimlabs, Ink. Cell.
18.238.1.103                    #olfin.nimlabs.org
18.238.1.105                    #caerbanog.nimlabs.org
>nomh.org               #nomh.org
205.201.8.44                    #gamma.nomh.org
>oc7.org                #The OC7 Project
128.2.6.107                     #vice3.oc7.org
128.2.122.140                   #vice2.oc7.org
>openafs.org            #OpenAFS Project
128.2.13.199                    #new-virtue.openafs.org
128.2.121.218                   #virtue.openafs.org
130.237.48.87                   #andrew.e.kth.se
130.237.48.107                  #onyx.e.kth.se
>rhic                   #Relativistic Heavy Ion Collider
130.199.6.51                    #rafs03.rcf.bnl.gov
130.199.6.52                    #rafs02.rcf.bnl.gov
130.199.6.69                    #rafs01.rcf.bnl.gov
>e.kth.se               #Royal Institute of Technology, Elektro
130.237.48.7                    #anden.e.kth.se
130.237.48.8                    #sonen.e.kth.se
130.237.48.244                  #fadern.e.kth.se
>hallf.kth.se           #Royal Institute of Technology, HALLF
130.237.24.141                  #rasmus13.hallf.kth.se
130.237.24.152                  #rasmus3.hallf.kth.se
>isk.kth.se             #Royal Institute of Technology, ISK
130.237.202.12                  #afsdb2.isk.kth.se
130.237.206.13                  #afsdb1.isk.kth.se
130.237.209.141                 #afsdb3.isk.kth.se
>it.kth.se              #Royal Institute of Technology, IT
130.237.212.15                  #ptah.it.kth.se
130.237.212.16                  #toth.it.kth.se
130.237.215.7                   #isis.it.kth.se
>md.kth.se              #Royal Institute of Technology, MMK
130.237.57.68                   #trinity.md.kth.se
130.237.57.72                   #morpheus.md.kth.se
130.237.67.230                  #neo.speech.kth.se
>mech.kth.se            #Royal Institute of Technology, MECH
130.237.233.142                 #matterhorn.mech.kth.se
130.237.233.143                 #castor.mech.kth.se
130.237.233.144                 #pollux.mech.kth.se
>nada.kth.se            #Royal Institute of Technology, NADA
130.237.222.20                  #kosmos.nada.kth.se
130.237.223.12                  #sputnik.nada.kth.se
130.237.224.78                  #mir.nada.kth.se
130.237.227.23                  #gagarin.nada.kth.se
130.237.228.28                  #laika.nada.kth.se
>pdc.kth.se             #Royal Institute of Technology, PDC
130.237.232.29                  #crab.pdc.kth.se
130.237.232.112                 #anna.pdc.kth.se
130.237.232.114                 #hokkigai.pdc.kth.se
>stacken.kth.se         #Stacken Computer Club
130.237.234.3                   #milko.stacken.kth.se
130.237.234.43                  #hot.stacken.kth.se
130.237.237.230                 #fishburger.stacken.kth.se
>physto.se              #Physics department Stockholm University
130.237.205.36                  #sysafs1.physto.se
130.237.205.72                  #sysafs2.physto.se
>sanchin.se             #Sanchin Consulting AB, Sweden
192.195.148.10                  #sesan.sanchin.se
>su.se                  #Stockholm University
130.237.162.81                  #afsdb1.su.se
130.237.162.82                  #afsdb2.su.se
>phy.bris.ac.uk         #Bristol University - phyics
137.222.58.9                    #afs1.phy.bris.ac.uk
>hep.man.ac.uk          #Manchester HEP
194.36.2.3                      #afs1.hep.man.ac.uk
>rl.ac.uk               #Rutherford Appleton Lab, England
130.246.12.45                   #isabel.cc.rl.ac.uk
130.246.15.135                  #tinkerbel.cc.rl.ac.uk
130.246.183.164                 #wallace.cc.rl.ac.uk

--- NEW FILE: openafs-SuidCells ---

--- NEW FILE: openafs-afsmodname ---
#!/usr/bin/perl
# afsmodname - return the name of the AFS module to load
# usage: afsmodname [path]
# THIS SCRIPT IS UNDER SOURCE CONTROL!
# The master copy is /afs/cs/misc/openafs/src/client-support/afsmodname

use Getopt::Std;

use strict;
use vars qw($modbase $VERSION @TrySyms @AddSyms $Prefix);
use vars qw($DEBUG $Mode $OutFile %SymCache);

$VERSION = '$Revision: 1.1 $';
$VERSION =~ s/^\$[a-z]*:?\s*(\S*)\s*\$$/$1/i;
$VERSION = 'testing' unless $VERSION;
$modbase = '/usr/vice/etc/modload';
@TrySyms = qw(__iget iget __iget4 iget4);
@AddSyms = qw(sock_create);
$Prefix = 'libafs';


sub vcmp {
  my (@a, @b, @aa, @bb);
  my ($i, $ii);

  @a = split /-/, $a;
  @b = split /-/, $b;
  foreach $i (0 .. ((@a > @b) ? $#b : $#a)) {
    @aa = split /\./, $a[$i];
    @bb = split /\./, $b[$i];  
    foreach $ii (0 .. ((@aa > @bb) ? $#bb : $#aa)) {
      return $aa[$ii] <=> $bb[$ii] if $aa[$ii] <=> $bb[$ii]
                                   && $aa[$ii] =~ /^\d+$/
                                   && $bb[$ii] =~ /^\d+$/;
      return $aa[$ii] cmp $bb[$ii] if $aa[$ii] cmp $bb[$ii];
    }
    return @aa <=> @bb if @aa <=> @bb;
  }
  return @a <=> @b;
}


sub parse_symbol ($) {
  my($symbol) = @_;

  if ($symbol =~ /^(.*)_R((?:smp)?(?:2gig)?_?[0-9a-f]{8})$/) {
    ($1, $2);
  } else {
    ($symbol, '--none--');
  }
}


sub get_ksym ($) {
  my($req_sym) = @_;
  my($addr, $symbol, $module, $version, @answer);


  if (exists($SymCache{$req_sym})) {
    print STDERR "get_ksym($req_sym) [cached]\n" if $DEBUG > 1;
    return $SymCache{$req_sym};
  }

  print STDERR "get_ksym($req_sym)" if $DEBUG;
  $SymCache{$req_sym} = undef;
  open(KSYMS, '/proc/ksyms') or die "open /proc/ksyms: $!\n";
  while (<KSYMS>) {
    if (/^(\w+)\s+(\w+)\s+\[(.*)\]/) {
      ($addr, $symbol, $module) = ($1, $2, $3)
    } elsif (/^(\w+)\s+(\w+)/) {
      ($addr, $symbol, $module) = ($1, $2, 'KERNEL')
    } else { next }

    ($symbol, $version) = parse_symbol($symbol);

    if ($symbol eq $req_sym) {
      $SymCache{$req_sym} = [$addr, $version, $module];
      print STDERR " => [addr=$addr, vers=$version, mod=$module]\n" if $DEBUG;
      last;
    }
  }
  close(KSYMS);

  print STDERR " => not found\n" if $DEBUG && !defined($SymCache{$req_sym});
  $SymCache{$req_sym};
}


sub get_modsyms ($) {
  my($modpath) = @_;
  my($symbol, $version, $V);

  $V = {};
  open(NM, "nm $modpath|") or die "nm $modpath: $!\n";
  while (<NM>) {
    chomp;
    next unless /^\s+U\s+/;
    ($symbol, $version) = parse_symbol($');
    $$V{$symbol} = $version unless $version eq '--none--';
  }
  close(NM);
  $V;
}


sub get_hdrsyms ($) {
  my($srcpath) = @_;
  my($moddir, @hdrs, $h);
  my($symbol, $version, $V);


  $moddir = "$srcpath/include/linux/modules";
  opendir(HDRS, $moddir) or die "$moddir: $!\n";
  @hdrs = readdir(HDRS);
  closedir(HDRS);

  $V = {};
  foreach $h (@hdrs) {
    next unless $h =~ /\.ver$/;
    open(HDR, "$moddir/$h") or die "$moddir/$h: $!\n";
    while (<HDR>) {
      chomp;
      next unless /#define __ver_(\S+)\s+(\S+)/;
      $$V{$1} = $2;
    }
    close(HDR);
  }
  $V;
}


sub get_cputype () {
  my($cputype, $family, $vendor, $model);

  open(CPUINFO, '/proc/cpuinfo') or die "open /proc/cpuinfo: $!\n";
  while (<CPUINFO>) {
    if    (/^cpu\s*\:\s*(\S+)/)       { $cputype = $1 }
    elsif (/^cpu family\s*:\s*(\S+)/) { $family  = $1 }
    elsif (/^vendor_id\s*:\s*(\S+)/)  { $vendor  = $1 }
    elsif (/^model\s*:\s*(\S+)/)      { $model   = $1 }
  }
  close(CPUINFO);
  if    ($vendor eq 'GenuineIntel') { $vendor = 'intel' }
  elsif ($vendor eq 'AuthenticAMD') { $vendor = 'amd'   }
  $cputype = "${family}86" if !defined($cputype);
  [$cputype, $vendor, $model];
}


sub table_lookup ($@) {
  my($cpu, @paths) = @_;
  my($path, $symbol, $version, $mincpu, @mincpu, $module, $info, @supp);
  my($prev_module);     # last module line we saw
  my($match_module);    # last matching module
  my($prev_match);      # true if last module matches so far

  foreach $path (@paths) {
    next unless -f $path;
    $prev_match = 0;
    open(TABLE, $path) or die "open $path: $!\n";
    while (<TABLE>) {
      # Skip comments
      next if (/^\#/ || /^\s*$/);

      # Check supplemental requirements
      if (/^\s*\>/) {
        @supp = split;
        foreach (@supp) {
          if (/([^=]*)=([^=]*)/) {
            ($symbol, $version) = ($1, $2);
            $info = get_ksym($symbol);
            $prev_match = 0 if !$info || $version ne $$info[1];
          }
        }
        next;
      }

      # This is a new module, so all supplemental requirements for the
      # previous module have been processed.  If they all passed, then
      # the previous module is a matching module.
      $match_module = $prev_module if $prev_match;

      # Parse the line and remember the module name
      ($symbol, $version, $mincpu, $module) = split;
      $prev_module = $module;
      $prev_match  = 0;
      if ($DEBUG) {
        print STDERR "Try $module ($symbol=$version)",
                     ($mincpu ne '-') ?  " mincpu = $mincpu" : "",
                     "\n";
      }

      # Check mincpu requirement
      if ($mincpu ne '-') {
        @mincpu = split(/\./, $mincpu);
        if ($mincpu[0] ne '' && $mincpu[0] >  $$cpu[0]) {  # min family
          print STDERR " mincpu failed: $mincpu[0] > $$cpu[0]\n" if $DEBUG;
          next;
        }
        if ($mincpu[1] ne '' && $mincpu[1] ne $$cpu[1]) {  # exact vendor
          print STDERR " mincpu failed: $mincpu[1] != $$cpu[1]\n" if $DEBUG;
          next;
        }
        if ($mincpu[2] ne '' && $mincpu[2] >  $$cpu[2]) {  # min model
          print STDERR " mincpu failed: $mincpu[2] > $$cpu[2]\n" if $DEBUG;
          next;
        }
      }

      # Check primary symbol requirement
      $info = get_ksym($symbol);
      next unless $info;
      next unless $version eq $$info[1];

      # OK; it's a match so far.  There may still be some supplemental
      # requirements that we need to check.
      $prev_match = 1;
    }
    close(TABLE);
    $match_module = $prev_module if $prev_match;
  }
  $match_module;
}


sub dump_versions ($) {
  my($cpu) = @_;
  my($version);

  print STDERR "CPU Type:       ", join('.', @$cpu), "\n";

  chomp($version = `uname -rv`);
  print STDERR "Linux version:  $version\n";

  if (open(RHR, "/etc/redhat-release")) {
    chomp($version = <RHR>);
     print STDERR "RedHat release: $version\n";
  }
}


sub dump_syms (@) {
  my(@syms) = @_;
  my($sym, $info);

  print STDERR "Symbol versions:\n";
  foreach $sym (@syms) {
    $info = get_ksym($sym);
    printf STDERR "  %-10s %s\n", $sym, $$info[1] if $info;
  }
}


sub gen_table (@) {
  my(@modules) = @_;
  my($module, $modname, $V, $sym, $count, @add);

  print <<'EOF';
# This file describes the available AFS kernel modules and what kernel
# versions they work with.  Each line matches against some kernel symbol
# version, and specifies a module which may be used with kernels containing
# that version of the specified symbol.  Only lines which match the
# currently-running kernel are considered.
#
# In addition, each line may specify a minimum CPU model on which the module
# will work.  If this value is present, the actual CPU model must be greater
# than or equal to the version specified; otherwise, the module is assumed
# to work on any CPU.
#
# The last match found will be used.
#
# Symbol  Version       MinCPU  Module
#=======  ============  ======  ====================
EOF
  foreach $module (sort vcmp @modules) {
    ($modname = $module) =~ s/.*\///;
    $modname =~ s/^$Prefix[-.](.*)\.o$/$1/;
    $V = get_modsyms($module);
    $count = 0;
    foreach $sym (@TrySyms) {
      next unless exists $$V{$sym};
      $count++;
      printf "%-8s  %-12s  %-6s  %s\n", $sym, $$V{$sym}, '-', $modname;
      last;
    }
    if (!$count) {
      print STDERR "Unable to find a suitable symbol reference in $modname!\n";
      next;
    }
    @add = ();
    foreach $sym (@AddSyms) {
      next unless exists $$V{$sym};
      push(@add, "$sym=$$V{$sym}");
    }
    print "> ", join(' ', @add), "\n" if @add;
  }
}


sub scan_kernels (@) {
  my(@kernels) = @_;
  my($kernel, $kpath, $kname, $V);

eval <<"EOF";
format =
@<<<<<<<<<<<<<<<<<<<<<<<< @{[' @<<<<<<<<<<<' x scalar(@TrySyms)]}
\$kname, @{[join(',', map(q/$$V{'/ . $_ . q/'}/, @TrySyms))]}
.
EOF

  $kname = 'Kernel';
  $V = { map(($_ => $_), @TrySyms) };
  write;

  $kname = '=========================';
  $V = { map(($_ => '============'), @TrySyms) };
  write;

  foreach $kernel (@kernels) {
    if    (-d "$kernel/src/include/linux/modules") { $kpath = "$kernel/src" }
    elsif (-d "$kernel/include/linux/modules")     { $kpath = $kernel       }
    else { next }
    ($kname = $kpath) =~ s#/src$##;
    $kname =~ s/.*\///;

    $V = get_hdrsyms($kpath);
    write;
  }
}


sub symcompare ($$) {
  my($module, $kernel) = @_;
  my($ksyms, $msyms, $sym, $kvers, $mvers, $info);

eval <<'EOF';
format =
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  @<<<<<<<<<<<  @<<<<<<<<<<<
$sym, $kvers, $mvers
.
EOF

  if (defined($kernel)) { $ksyms = get_hdrsyms($kernel) }
  $msyms = get_modsyms($module);

  print "Symbol                          Kernel        Module\n";
  print "==============================  ============  ============\n";
  foreach (keys %$msyms) {
    $sym = $_;
    $mvers = $$msyms{$sym};
    if (defined($kernel)) {
      $kvers = $$ksyms{$sym};
    } else {
      $info = get_ksym($sym);
      $kvers = $$info[1];
    }
    next if $kvers eq $mvers;
    write;
  }
}


sub usage (;@) {

  print STDERR "$00: ", @_, "\n" if @_;
  print STDERR <<"EOF";
usage: $00 [opts] [modbase]                      (find module)
       $00 [opts] -g modules ...                 (make table)
       $00 [opts] -k kernels ...                 (scan kernels)
       $00 [opts] -c module [kernel]             (check module)
       $00 -h                                    (print help)
       $00 -v                                    (print version)

options:
  -d          enable debugging output
  -f outfile  set output file (default stdout)
  -P prefix   set module name prefix (default $Prefix)
  -S syms...  symbols to try for -x, -k (default @TrySyms)
  -A syms...  additional symbols to check for -x (default @AddSyms)

  Module lists for -S and -A may be space- or comma-separated.
  For backward-compatibility, -g is a synonym for -x.
EOF
    exit(0);
}

sub parse_opts () {
  my(%opts);

  ($00 = $0) =~ s/.*\///;
  getopts('dckgxf:hvP:S:A:', \%opts) or usage('invalid option(s)');
  usage() if $opts{'h'};

  if ($opts{'v'}) {
    print "afsmodname $VERSION\n";
    exit(0);
  }

  $opts{'g'} = 1 if $opts{'x'};
  if ($opts{'g'} + $opts{'k'} + $opts{'c'} > 1) {
    usage("At most one of -g, -k, -c can be used\n");
  }

  $DEBUG++                              if exists $opts{'d'};
  $Mode = 'g'                           if exists $opts{'g'};
  $Mode = 'k'                           if exists $opts{'k'};
  $Mode = 'c'                           if exists $opts{'c'};

  usage("Too many arguments")   if !$Mode && @ARGV > 1;
  usage("Too many arguments")   if $Mode eq 'c' && @ARGV > 2;
  usage("Module name required") if $Mode eq 'c' && !@ARGV;

  $OutFile = $opts{'f'}                 if exists $opts{'f'};
  $Prefix  = $opts{'p'}                 if exists $opts{'P'};
  @TrySyms = split(/[, ]+/, $opts{'S'}) if exists $opts{'S'};
  @AddSyms = split(/[, ]+/, $opts{'A'}) if exists $opts{'A'};
}


## MAIN PROGRAM

my($cpu, $module);

parse_opts();
if ($Mode) {
  if ($OutFile) {
    open(STDOUT, ">$OutFile") or die "$OutFile: $!\n";
  }
  if ($Mode eq 'g') { gen_table(@ARGV)               }
  if ($Mode eq 'k') { scan_kernels(@ARGV)            }
  if ($Mode eq 'c') { symcompare($ARGV[0], $ARGV[1]) }
  exit(0);
}

$modbase = $ARGV[0] if @ARGV;

$cpu = get_cputype();

$module = table_lookup($cpu, "$modbase/SymTable", "$modbase/SymTable.local");

if ($module) {
  print "$Prefix-$module.o";
  exit(0);
}

print STDERR <<'EOF';
Hmm...  I can't seem to find an AFS kernel module suitable for your Linux
kernel.  That means you will need to build or obtain a suitable module.
The following information may be of some use in obtaining assistance:
EOF

dump_versions($cpu);
dump_syms(sort (@TrySyms, keys %SymCache));

exit(1);

--- NEW FILE: openafs-cacheinfo ---
/afs:/usr/vice/cache:100000



More information about the Lunar-commits mailing list