[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference netcad::hub_mgnt

Title:DEChub/HUBwatch/PROBEwatch CONFERENCE
Notice:Firmware -2, Doc -3, Power -4, HW kits -5, firm load -6&7
Moderator:NETCAD::COLELLADT
Created:Wed Nov 13 1991
Last Modified:Fri Jun 06 1997
Last Successful Update:Fri Jun 06 1997
Number of topics:4455
Total number of notes:16761

6.0. "VMS command file to load hub devices" by ROGER::GAUDET (Because the Earth is 2/3 water) Wed Jun 01 1994 17:11

Since there have been several notes written in this conference indicating
problems when loading hub devices via DECndu (omitting required switches to the
DOWNLOAD command, etc. etc.) I decided to put together a VMS command file that
will load all the devices.  The next reply contains the command file.

You should extract it and name it HUB_LOAD.COM.  Check out the comments at the
top of the file for details on what parameters are required, or execute it and
answer the queries.  Note that this command file will do direct loads of all
devices except the DECconcentrator 900MX, which requires a MAM-assisted load. 
There is a way to do direct loads of the DECconcentrator 900MX, but it requires
the presence of another device which has a fiber connection (like the DECbridge
900MX) so I opted for the MAM-assisted method.

You should consult the release notes and/or user's guide for a particular device
to find out how to configure the device (and possibly the MAM or IP services
module) for upgrading.

Yes, the file has been tested on all the devices and it works.

No, I have not written one for DOS platform.  Yet.

Thanks and kudos to Tim Gordon of our System Test group for creating the initial
command file with all the right DECndu switches and for testing out the final
version.  I added the bells and whistles for prompting the user and displaying
status information.

Comments, suggestions and, of course, praise and honors all graciously accepted.
I'll be sure to forward all complaints to Tim.  :-)

...Roger...
T.RTitleUserPersonal
Name
DateLines
6.1HUB_LOAD.COMROGER::GAUDETBecause the Earth is 2/3 waterWed Jun 01 1994 17:11170
$!
$! HUB_LOAD.COM
$!
$! VMS command procedure for loading various DEChub device firmware using
$! DECndu Plus.
$!
$! Authors: Tim Gordon (LEVERS::GORDON) and Roger Gaudet (ROGER::GAUDET).
$!
$! Arguments:  P1 = Device address of the device to be loaded.
$!
$!                  Notes:
$!
$!                  1) When loading the DECbridge 90 or 90FL, specify the
$!                     MAC address of the bridge.
$!                  2) When loading the DECconcentrator 900MX, specify the
$!                     in-band IP address of the DEChub 900 Multiswitch.
$!
$!             P2 = Firmware image name (include directory spec if the file is
$!                  not in your default directory)
$!
$!             P3 = Optional read_write community string to gain SNMP
$!                  read-write access to the device (if not "public").
$!                  To preserve lowercase, enclose this string in double
$!                  quotes ("").
$!
$!             P4 = Optional slot number of the device (some devices need this
$!                  parameter for a successful load).  The procedure will
$!                  prompt for this argument when needed.
$!
$! Invoke this command procedure as follows:
$!
$! $ @HUB_LOAD <device_address> <firmware_image> [<community_string>] [<slot>]
$!
$! If you omit required parameters, you will be prompted for them.
$!
$ on control_y then goto really_done
$ on warning then goto really_done
$ bell[0,8] = 7
$!
$show_selection:
$ type sys$input

Select the device to be loaded:

        [1]  DECagent 90                [6]  DECrepeater 90FS
        [2]  DECbridge 90, 90FL         [7]  DECrepeater 900FP
        [3]  DECbridge 900MX            [8]  DECrepeater 900GM
        [4]  DECconcentrator 900MX      [9]  DECrepeater 900TM
        [5]  DEChub 900 MultiSwitch     [10] Exit

$ inquire select "Enter your selection"
$ if select .eq. 10 then goto really_done
$ if select .ge. 1 .and. select .le. 9 then goto select_ok
$ write sys$output "''bell'"
$ write sys$output "*** Invalid selection.  Please try again."
$ goto show_selection
$!
$select_ok:
$ if p1 .eqs. "" then inquire p1 "Device address"
$ if p1 .eqs. "" then goto done
$!
$get_firmware:
$ if p2 .eqs. "" then inquire p2 "Firmware image"
$ if p2 .eqs. "" then goto done
$!
$ if f$search(p2) .eqs. ""
$ then
$   write sys$output "''bell'"
$   write sys$output "*** Firmware image ''p2' not found!  Please try again."
$   write sys$output ""
$   p2 = ""
$   goto get_firmware
$ endif
$!
$! Don't need to ask for the community string if it's a DECbridge 90 or 90FL
$!
$ if p3 .eqs. "" .and. select .ne. 2
$ then
$   inquire p3 "Community String [public]"
$   if p3 .eqs. "" then p3 = "public"
$ endif
$ pass = "/pass=""''p3'"""
$!
$! Need slot number for DECconcentrator 900MX (MAM-assisted load)
$!
$get_slot:
$ if select .eq. 4 .and. p4 .eqs. ""
$ then
$   inquire p4 "Slot number"
$   if p4 .eqs. "" then goto done
$ endif
$ if p4 .eqs. "" then goto do_load
$ if f$integer(p4) .lt. 1 .or. f$integer(p4) .gt. 8
$ then
$   write sys$output "''bell'"
$   write sys$output "*** Slot ''p4' is out of range (1-8).  Please try again."
$   write sys$output ""
$   p4 = ""
$   goto get_slot
$ endif
$!
$do_load:
$ download show version
$ download show device 'p1' 
$ goto load_'select'
$!
$! DECagent 90
$!
$load_1:
$ download load 'p1' 'p2' /force=DECagent 'pass'
$ goto done
$!
$! DECbridge 90, 90FL
$!
$load_2:
$ download load 'p1' 'p2' /nomanagement
$ goto done
$!
$! DECbridge 900MX
$!
$load_3:
$ download load 'p1' 'p2' /force=pcommon 'pass'
$ goto done
$!
$! DECconcentrator 900MX
$!
$load_4:
$ download load 'p1' 'p2' /module='p4' /force=hubmodule 'pass'
$ goto done
$!
$! DEChub 900 MultiSwitch
$!
$load_5:
$ download load 'p1' 'p2' /module=9 /force=hubmanv2 'pass'
$ goto done
$!
$! DECrepeater 90FS
$!
$load_6:
$ download load 'p1' 'p2' /force=pcommon 'pass'
$ goto done
$!
$! DECrepeater 900FP
$!
$load_7:
$ download load 'p1' 'p2' /force=pcommon 'pass'
$ goto done
$!
$! DECrepeater 900GM
$!
$load_8:
$ download load 'p1' 'p2' /force=pcommon 'pass'
$ goto done
$!
$! DECrepeater 900TM
$!
$load_9:
$ download load 'p1' 'p2' /force=pcommon 'pass'
$ goto done
$!
$done:
$ p1 = ""
$ p2 = ""
$ p3 = ""
$ p4 = ""
$ write sys$output ""
$ inquire /nopunct load_again "Load another device? [Y/<N>] "
$ if load_again then goto show_selection
$really_done:
$ exit
6.3TENNIS::KAMKam USDS (714)261-4133 (DTN 535) IVOWed Nov 30 1994 15:1518
    Am I missing something in running this command procedure?
    
TENNIS$ @hub_load

Select the device to be loaded:

     1.) DECagent 90                    7.) DECrepeater 90TS
     2.) DECbridge 90, 90FL             8.) DECrepeater 900FP
     3.) DECbridge 900MX                9.) DECrepeater 900GM
     4.) DECconcentrator 900MX          10.) DECrepeater 900TM
     5.) DEChub 900 MultiSwitch         11.) Exit
     6.) DECrepeater 90FS

Enter your selection: 1
Device TCP/IP address: 16.62.64.113
%DCL-W-INSFPRM, missing command parameters - supply all required parameters

    
6.2Updated HUB_LOAD.COMROGER::GAUDETBecause the Earth is 2/3 waterWed Nov 30 1994 17:19241
$!
$! HUB_LOAD.COM
$!
$! VMS command procedure for loading various DEChub device firmware using
$! DECndu Plus.
$!
$! Authors: Tim Gordon (LEVERS::GORDON) and Roger Gaudet (ROGER::GAUDET).
$!
$! Modified: Jon J. Danzak (PTOJJD::DANZAK) 
$!  (Added parameter driven lists, default images and some minimal error
$!   checks)
$!
$! Modified: Roger Gaudet
$!  (Add 'start' label so when user says "Yes" to "Load another device" the
$!   procedure will display the entire device menu)
$!
$! Arguments:  P1 = Device address of the device to be loaded.
$!
$!                  Notes:
$!
$!                  1) When loading the DECbridge 90 or 90FL, specify the
$!                     MAC address of the bridge.
$!                  2) When loading the DECconcentrator 900MX, specify the
$!                     in-band IP address of the DEChub 900 Multiswitch.
$!
$!             P2 = Firmware image name (include directory spec if the file is
$!                  not in your default directory)
$!
$!             P3 = Optional read_write community string to gain SNMP
$!                  read-write access to the device (if not "public").
$!                  To preserve lowercase, enclose this string in double
$!                  quotes ("").
$!
$!             P4 = Optional slot number of the device (some devices need this
$!                  parameter for a successful load).  The procedure will
$!                  prompt for this argument when needed.
$!
$! Invoke this command procedure as follows:
$!
$! $ @HUB_LOAD <device_address> <firmware_image> [<community_string>] [<slot>]
$!
$! If you omit required parameters, you will be prompted for them.
$!
$ on control_y then goto really_done
$ on warning then goto really_done
$ bell[0,8] = 7
$!
$start:
$!
$! List of images, corresponds to list of names
$!
$defs="DENMA021.SYS;DEWGB310.SYS;DEFBA140.BIN;DEF6X280.BIN;DMHUB310.BIN;"
$defs=defs+"DEFMI110.BIN;DETMI110.BIN;DEFMM110.BIN;DETTM110.BIN;"
$defs=defs+"DETMM110.BIN;Exit"
$!
$! List of names, corresponds to images, ends with Exit
$!
$names="DECagent 90;DECbridge 90, 90FL;DECbridge 900MX;DECconcentrator 900MX;"
$names=names+"DEChub 900 MultiSwitch;DECrepeater 90FS;DECrepeater 90TS;"
$names=names+"DECrepeater 900FP;DECrepeater 900GM;DECrepeater 900TM;Exit"
$!
$!
$! Specify Internet or Ethernet
$!
$addrs="I;E;I;I;I;I;I;I;I;I;Exit"
$
$!
$! Build a list of default images...
$!
$count=0
$def_loop:
$count=count+1
$def'count'=f$extract(0,f$locate(";",defs),defs)	!extract up to semi
$defs=defs-def'count'-";"				!remove from list
$if defs.nes."" then $goto def_loop			!until null
$!
$max=count						!save as max...
$!
$count=0
$name_loop:
$count=count+1
$name'count'=f$extract(0,f$locate(";",names),names)	!extract up to semi
$names=names-name'count'-";"				!remove from list
$if names.nes."" then $goto name_loop			!until null
$!
$count=0
$addr_loop:
$count=count+1
$addr'count'=f$extract(0,f$locate(";",addrs),addrs)	!extract up to semi
$addrs=addrs-addr'count'-";"				!remove from list
$if addrs.nes."" then $goto addr_loop			!until null
$!
$temp=max+1	!zap to pretty print if dangling last on right
$name'temp'=""
$addr'temp'=""
$def'temp'=""
$!
$! Compute maximum line
$!
$temp=max/2
$if (max/2).ne.(max/2)*2 then $temp=(max+1)/2
$!
$! Say hello to the world and list stuff
$!
$show_selection:
$ type sys$input

Select the device to be loaded:

$
$line=0
$line_loop:
$line=line+1
$test=temp+line		!parallel line
$out="                                                       "
$temp1=name'line'
$temp1="''line'.) ''temp1'"
$out[5,f$len(temp1)+5]:="''temp1'"
$temp2=""
$if name'test'.eqs."" then $goto print
$temp2=name'test'
$temp2="''test'.) ''temp2'"
$out[40,f$len(temp1)+40]:="''temp2'"
$print:
$write sys$output out
$if line.lt.temp then $goto line_loop
$!
$write sys$Output " "
$ inquire select "Enter your selection"
$ if select .eqs. "" .or. select .eq. max then goto really_done
$ if select .ge. 1 .and. select .le. max-1 then goto select_ok
$ write sys$output "''bell'"
$ write sys$output "*** Invalid selection.  Please try again."
$ goto show_selection
$!
$select_ok:
$!
$if addr'select'.eqs."E" then temp="Ethernet"
$if addr'select'.eqs."I" then temp="TCP/IP"
$ if p1 .eqs. "" then inquire p1 "Device ''temp' address"
$ if p1 .eqs. "" then goto done
$!
$! Check for a "-" in Ethernet address or "." in Internet address
$! Enet address is also 17 characters long
$!
$if (addr'select'.eqs."E").and.-
    (f$len(p1).eq.17).and.-
    (f$locate("-",p1).ne.f$len(p1)) then $goto get_firmware
$if addr'select'.eqs."I".and.(f$locate(".",p1).ne.f$len(p1)) then $goto get_firmware
$ write sys$output "''bell'"
$ write sys$output "*** Invalid selection.  Please try again."
$p1=""
$goto select_ok
$
$!
$get_firmware:
$def="MOM$LOAD:"+def'select'
$ if p2 .eqs. "" then inquire p2 "Firmware image (''def')"
$if p2.eqs."" then $p2=def
$write sys$Output "Image will be ''p2'
$ if p2 .eqs. "" then goto done
$!
$ if f$search(p2) .eqs. ""
$ then
$   write sys$output "''bell'"
$   write sys$output "*** Firmware image ''p2' not found!  Please try again."
$   write sys$output ""
$   p2 = ""
$   goto get_firmware
$ endif
$!
$! Don't need to ask for the community string if it's a DECbridge 90 or 90FL
$!
$ if p3 .eqs. "" .and. select .ne. 2
$ then
$   inquire p3 "Community String [public]"
$   if p3 .eqs. "" then p3 = "public"
$ endif
$ pass = "/pass=""''p3'"""
$!
$! Need slot number for DECconcentrator 900MX (MAM-assisted load)
$!
$get_slot:
$ if select .eq. 4 .and. p4 .eqs. ""
$ then
$   inquire p4 "Slot number"
$   if p4 .eqs. "" then goto done
$ endif
$ if p4 .eqs. "" then goto do_load
$ if f$integer(p4) .lt. 1 .or. f$integer(p4) .gt. 8
$ then
$   write sys$output "''bell'"
$   write sys$output "*** Slot ''p4' is out of range (1-8).  Please try again."
$   write sys$output ""
$   p4 = ""
$   goto get_slot
$ endif
$!
$do_load:
$ goto load_'select'
$!
$load_1:	! DECagent 90
$!
$ download load 'p1' 'p2' /force=DECagent 'pass'
$ goto done
$!
$load_2:	! DECbridge 90, 90FL
$!
$ download load 'p1' 'p2' /nomanagement
$ goto done
$!
$load_4:	! DECconcentrator 900MX
$!
$ download load 'p1' 'p2' /module='p4' /force=hubmodule 'pass'
$ goto done
$!
$load_5:	! DEChub 900 MultiSwitch
$!
$ download load 'p1' 'p2' /module=9 /force=hubmanv2 'pass'
$ goto done
$!
$load_3:	! DECbridge 900MX
$load_6:	! DECrepeater 90FS
$load_7:	! DECrepeater 90TS
$load_8:	! DECrepeater 900FP
$load_9:	! DECrepeater 900GM
$load_10:	! DECrepeater 900TM
$!
$ download load 'p1' 'p2' /force=pcommon 'pass'
$ goto done
$!
$done:
$ p1 = ""
$ p2 = ""
$ p3 = ""
$ p4 = ""
$ write sys$output ""
$ inquire /nopunct load_again "Load another device? [Y/<N>] "
$ if load_again then goto start
$really_done:
$ exit
6.4Bitten by the DECwindows Notes editor!ROGER::GAUDETBecause the Earth is 2/3 waterWed Nov 30 1994 17:256
No, you're not missing anything.  When I originally entered the command procedure one
of the lines got truncated and wrapped, causing it to become an incomplete DCL command
line.  Line 149 is the culprit.  I have modified note 6.2 so that "wrap" is eliminated.
Extract the note and try again.  Sorry about that.

...Roger...
6.5New HUB_LOAD.COM for OpenVMS VAX ... thanks to Jon DanzakROGER::GAUDETBecause the Earth is 2/3 waterFri Jun 30 1995 18:12285
$!
$! HUB_LOAD.COM
$!
$! VMS command procedure for loading various DEChub device firmware using
$! DECndu Plus.
$!
$! Authors: Tim Gordon (LEVERS::GORDON) and Roger Gaudet (ROGER::GAUDET).
$!
$! Modified: Jon J. Danzak (PTOJJD::DANZAK) 
$!  (Added parameter driven lists, default images and some minimal error
$!   checks)
$!
$! Modified: Roger Gaudet
$!  (Add 'start' label so when user says "Yes" to "Load another device" the
$!   procedure will display the entire device menu)
$!
$! Modified: Jon J. Danzak (PTOJJD::DANZAK)
$!  Added version 4 images *AND* will search for most RECENT image in
$!  MOM$LOAD
$!
$! Arguments:  P1 = Device address of the device to be loaded.
$!
$!                  Notes:
$!
$!                  1) When loading the DECbridge 90 or 90FL, specify the
$!                     MAC address of the bridge.
$!                  2) When loading the DECconcentrator 900MX, specify the
$!                     in-band IP address of the DEChub 900 Multiswitch.
$!
$!             P2 = Firmware image name (include directory spec if the file is
$!                  not in your default directory)
$!
$!             P3 = Optional read_write community string to gain SNMP
$!                  read-write access to the device (if not "public").
$!                  To preserve lowercase, enclose this string in double
$!                  quotes ("").
$!
$!             P4 = Optional slot number of the device (some devices need this
$!                  parameter for a successful load).  The procedure will
$!                  prompt for this argument when needed.
$!
$! Invoke this command procedure as follows:
$!
$! $ @HUB_LOAD <device_address> <firmware_image> [<community_string>] [<slot>]
$!
$! If you omit required parameters, you will be prompted for them.
$!
$ on control_y then goto really_done
$ on warning then goto really_done
$ bell[0,8] = 7
$!
$type sys$Input

Please be sure to DISABLE any TFTP or BOOTP service running
on your system before proceeding.  If UCX (or equivalent) TFTP
or BOOTP services are running NDU will *NOT* be able to upgrade.

Use the UCX commands:
     SET SERVICE BOOTP/DISABLE
     SET SERVICE TFTP/DISABLE

And, do a SHOW SYSTEM and STOP/ID any BOOTP or TFTP processes.

$
$inquire/nopun x "Push RETURN to continue..."    
$!
$start:
$!
$! List of images, corresponds to list of names
$!
$defs=     "denma*.sys;dewgb*.sys;def6x*.bin;"
$defs=defs+"defhu*.bin;dmhub*.bin;dtmxm*.bin;"
$defs=defs+"defmi*.bin;detmi*.bin;dettm*.bin;"
$defs=defs+"detmm*.bin;debmp*.bin;defba*.bin;"
$defs=defs+"desbf*.bin;decpm*.bin;defmm*.bin;"
$defs=defs+"detpj*.bin;EXIT"
$!
$! List of names, corresponds to images, ends with Exit
$!
$names=      "DECagent 90;DECbridge 90, 90FL;DECconcentrator 900MX;
$names=names+"DECconcentrator 900TH;DEChub 900 MultiSwitch;DECmau 900TH;"
$names=names+"DECrepeater 90FS;DECrepeater 90TS;DECrepeater 900GM;"
$names=names+"DECrepeater 900TM;DECswitch 900EE;DECswitch 900EF;"
$names=names+"PEswitch 900TX;PORTswitch 900CP;PORTswitch 900FP;"
$names=names+"PORTswitch 900TP;EXIT"
$!
$! Specify Internet or Ethernet
$!
$addrs="I;E;I;I;I;I;I;I;I;I;I;I;I;I;I;I;Exit"
$
$!
$! Build a list of default images...
$!
$count=0
$def_loop:
$count=count+1
$def'count'=f$extract(0,f$locate(";",defs),defs)	!extract up to semi
$defs=defs-def'count'-";"				!remove from list
$temp="mom$load:"+def'count'
$old=""
$search:
$x=f$search(temp)
$if x.eqs."" then $goto sdone
$if f$parse(x,,,"name").les.f$parse(old,,,"name") then $goto search
$old=x
$goto search
$sdone:
$!
$def'count'=f$parse(old,,,"name")+f$parse(old,,,"type")
$if defs.nes."" then $goto def_loop			!until null
$!
$max=count						!save as max...
$!
$count=0
$name_loop:
$count=count+1
$name'count'=f$extract(0,f$locate(";",names),names)	!extract up to semi
$names=names-name'count'-";"				!remove from list
$if names.nes."" then $goto name_loop			!until null
$!
$count=0
$addr_loop:
$count=count+1
$addr'count'=f$extract(0,f$locate(";",addrs),addrs)	!extract up to semi
$addrs=addrs-addr'count'-";"				!remove from list
$if addrs.nes."" then $goto addr_loop			!until null
$!
$temp=max+1	!zap to pretty print if dangling last on right
$name'temp'=""
$addr'temp'=""
$def'temp'=""
$!
$! Compute maximum line
$!
$temp=max/2
$if (max/2).ne.(max/2)*2 then $temp=(max+1)/2
$!
$! Say hello to the world and list stuff
$!
$show_selection:
$ type sys$input



Select the device to be loaded:

$
$line=0
$line_loop:
$line=line+1
$test=temp+line		!parallel line
$out="                                                       "
$temp1=name'line'
$temp1="''line'.) ''temp1'"
$out[5,f$len(temp1)+5]:="''temp1'"
$temp2=""
$if name'test'.eqs."" then $goto print
$temp2=name'test'
$temp2="''test'.) ''temp2'"
$out[40,f$len(temp1)+40]:="''temp2'"
$print:
$write sys$output out
$if line.lt.temp then $goto line_loop
$!
$write sys$Output " "
$ inquire select "Enter your selection"
$ if select .eqs. "" .or. select .eq. max then goto really_done
$ if select .ge. 1 .and. select .le. max-1 then goto select_ok
$ write sys$output "''bell'"
$ write sys$output "*** Invalid selection.  Please try again."
$ goto show_selection
$!
$select_ok:
$!
$if addr'select'.eqs."E" then temp="Ethernet"
$if addr'select'.eqs."I" then temp="TCP/IP"
$ if p1 .eqs. "" then inquire p1 "Device ''temp' address"
$ if p1 .eqs. "" then goto done
$!
$! Check for a "-" in Ethernet address or "." in Internet address
$! Enet address is also 17 characters long
$!
$if (addr'select'.eqs."E").and.-
    (f$len(p1).eq.17).and.-
    (f$locate("-",p1).ne.f$len(p1)) then $goto get_firmware
$if addr'select'.eqs."I".and.(f$locate(".",p1).ne.f$len(p1)) then $goto
get_firmware
$ write sys$output "''bell'"
$ write sys$output "*** Invalid selection.  Please try again."
$p1=""
$goto select_ok
$
$!
$get_firmware:
$def="MOM$LOAD:"+def'select'
$ if p2 .eqs. "" then inquire p2 "Firmware image (''def')"
$if p2.eqs."" then $p2=def
$write sys$Output "Image will be ''p2'
$ if p2 .eqs. "" then goto done
$!
$ if f$search(p2) .eqs. ""
$ then
$   write sys$output "''bell'"
$   write sys$output "*** Firmware image ''p2' not found!  Please try again."
$   write sys$output ""
$   p2 = ""
$   goto get_firmware
$ endif
$!
$! Don't need to ask for the community string if it's a DECbridge 90 or 90FL
$!
$ if p3 .eqs. "" .and. select .ne. 2
$ then
$   inquire p3 "Community String [public]"
$   if p3 .eqs. "" then p3 = "public"
$ endif
$ pass = "/pass=""''p3'"""
$!
$! Need slot number for DECconcentrator 900MX (MAM-assisted load)
$!
$get_slot:
$ if select .eq. 4 .and. p4 .eqs. ""
$ then
$   inquire p4 "Slot number"
$   if p4 .eqs. "" then goto done
$ endif
$ if p4 .eqs. "" then goto do_load
$ if f$integer(p4) .lt. 1 .or. f$integer(p4) .gt. 8
$ then
$   write sys$output "''bell'"
$   write sys$output "*** Slot ''p4' is out of range (1-8).  Please try again."
$   write sys$output ""
$   p4 = ""
$   goto get_slot
$ endif
$!
$do_load:
$ goto load_'select'
$!
$load_1:	! DECagent 90
$!
$ download load 'p1' 'p2' /force=DECagent 'pass'
$ goto done
$!
$load_2:	! DECbridge 90, 90FL
$!
$ download load 'p1' 'p2' /nomanagement
$ goto done
$!
$load_4:	! DECconcentrator 900MX
$!
$ download load 'p1' 'p2' /module='p4' /force=hubmodule 'pass'
$ goto done
$!
$load_5:	! DEChub 900 MultiSwitch
$!
$ download load 'p1' 'p2' /module=9 /force=hubmanv2 'pass'
$ goto done
$!
$load_3:	! DECbridge 900MX
$load_6:	! DECrepeater 90FS
$load_7:	! DECrepeater 90TS
$load_8:	! DECrepeater 900FP
$load_9:	! DECrepeater 900GM
$load_10:	! DECrepeater 900TM
$load_11:
$load_12:
$load_13:
$load_14:
$load_15:
$load_16:
$!
$ download load 'p1' 'p2' /force=pcommon 'pass'
$ goto done
$!
$done:
$ p1 = ""
$ p2 = ""
$ p3 = ""
$ p4 = ""
$ write sys$output ""
$ inquire /nopunct load_again "Load another device? [Y/<N>] "
$ if load_again then goto start
$really_done:
$ exit
6.6HUB_LOAD file won't upgrade anythingRDGENG::GREIDHail,Hail,Hail and Kill!Wed Jul 05 1995 15:4696
    Roger,
    
    	I seem to be having trouble with this command procedure. I have
    run it on two systems running NDUPLUS and DCF V4 and have UCX correctly
    configured but with TFTP and BOOTP disabled as instructed. 
    
    I get the following errors :-
    
    RDGDNS..>@Hub_load.com
    
    Please be sure to DISABLE any TFTP or BOOTP service running
    on your system before proceeding.  If UCX (or equivalent) TFTP
    or BOOTP services are running NDU will *NOT* be able to upgrade.
    
    Use the UCX commands:
         SET SERVICE BOOTP/DISABLE
         SET SERVICE TFTP/DISABLE
    
    And, do a SHOW SYSTEM and STOP/ID any BOOTP or TFTP processes.
    
    Push RETURN to continue...
    
    
                                  
    Select the device to be loaded:
    
         1.) DECagent 90                    10.) DECrepeater 900TM
    
         2.) DECbridge 90, 90FL             11.) DECswitch 900EE
    
         3.) DECconcentrator 900MX          12.) DECswitch 900EF
    
         4.) DECconcentrator 900TH          13.) PEswitch 900TX
    
         5.) DEChub 900 MultiSwitch         14.) PORTswitch 900CP
    
         6.) DECmau 900TH                   15.) PORTswitch 900FP
    
         7.) DECrepeater 90FS               16.) PORTswitch 900TP
    
         8.) DECrepeater 90TS               17.) EXIT
    
         9.) DECrepeater 900GM
    
    Enter your selection: 5
    Device TCP/IP address: 16.36.0.75
    %DCL-W-INSFPRM, missing command parameters - supply all required
    parameters
    RDGDNS..>@hub_load.com
    
    Please be sure to DISABLE any TFTP or BOOTP service running
    on your system before proceeding.  If UCX (or equivalent) TFTP
    or BOOTP services are running NDU will *NOT* be able to upgrade.
    
    Use the UCX commands:
         SET SERVICE BOOTP/DISABLE
         SET SERVICE TFTP/DISABLE
    
    And, do a SHOW SYSTEM and STOP/ID any BOOTP or TFTP processes.
    
    Push RETURN to continue...
    
    Select the device to be loaded:
    
         1.) DECagent 90                    10.) DECrepeater 900TM
    
         2.) DECbridge 90, 90FL             11.) DECswitch 900EE
    
         3.) DECconcentrator 900MX          12.) DECswitch 900EF
    
         4.) DECconcentrator 900TH          13.) PEswitch 900TX
    
         5.) DEChub 900 MultiSwitch         14.) PORTswitch 900CP
    
         6.) DECmau 900TH                   15.) PORTswitch 900FP
    
         7.) DECrepeater 90FS               16.) PORTswitch 900TP
    
         8.) DECrepeater 90TS               17.) EXIT
    
         9.) DECrepeater 900GM
    
    Enter your selection:2
    Device Ethernet address: 08-00-2b-92-27-37
    Firmware image (MOM$LOAD:DEWGB390.SYS):
    Image will be MOM$LOAD:DEWGB390.SYS
    
    (c) Digital Equipment Corporation. 1993. All Rights Reserved.
    %NDU-E-OTHER_USER, protocol being used by other user
    %SYSTEM-F-BADPARAM, bad parameter value
    RDGDNS..>
    
    On the second example there are no UCX$TFTP or BOOTP processes running,
    yet It still complains.
    
    Giles.
6.7MOP console is busy?ROGER::GAUDETBecause the Earth is 2/3 waterWed Jul 05 1995 21:4112
Giles,

I do not have an answer for your first problem (I was unable to reproduce it
here) but for the second problem, do you by chance have a MOP connection to
bridge?  If you (or someone else) is NCP CONNECTed to the bridge then NDU cannot
load it (the MOP console carrier is busy).  This will cause this error.  To
check this out, try an NCP CONNECT to the bridge's MAC address.  It you cannot
connect that way then NDU will not be able to load it.

Maybe Jon Danzak has a suggestion about the first problem?  Jon?

...Roger...
6.8No MOP connection at the time of HUB_LOADRDGENG::GREIDHail,Hail,Hail and Kill!Thu Jul 06 1995 08:028
    Roger,
    
    	Thats the strange thing about the second problem, I can MOP connect
    to the Bridge ok, and wasn't connected to it when I was trying to load
    it. I can still connect the same way to the Bridge but HUB_LOAD won't
    party at all with it.
    
    Giles.
6.9Verify set on RDGENG::GREIDHail,Hail,Hail and Kill!Thu Jul 06 1995 10:4935
    Roger,
    
    	Here is the output from a set verify session, the same error I 
    can regenerate on four different systems (3 running DECnet/OSI and 1
    Phase IV).
    
    $ inquire select "Enter your selection"
    Enter your selection: 1
    1
    $ if select .eqs. "" .or. select .eq. max then goto really_done
    $ if select .ge. 1 .and. select .le. max-1 then goto select_ok
    $select_ok:
    $!
    $if addr1.eqs."E" then temp="Ethernet"
    $if addr1.eqs."I" then temp="TCP/IP"
    $ if p1 .eqs. "" then inquire p1 "Device TCP/IP address"
    Device TCP/IP address: 16.36.0.202
    16.36.0.202
    $ if p1 .eqs. "" then goto done
    $!
    $! Check for a "-" in Ethernet address or "." in Internet address
    $! Enet address is also 17 characters long
    $!
    $if (addr1.eqs."E").and.-
        (f$len(p1).eq.17).and.-
        (f$locate("-",p1).ne.f$len(p1)) then $goto get_firmware
    $if addr1.eqs."I".and.(f$locate(".",p1).ne.f$len(p1)) then $goto
    %DCL-W-INSFPRM, missing command parameters - supply all required
    parameters
    $really_done:
    $ exit
    
    Hope this helps ?
    
    Giles.
6.10Missing a little "-" MSDOA::REEDJohn Reed @CBO = Network ServicesThu Jul 06 1995 13:4021
    This is the same error as .3 suggests.  Line 149 is STILL the 
    culprit.  Ensure that a continuation dash is at the end of this line:
    
    $if addr'select'.eqs."I".and.(f$locate(".",p1).ne.f$len(p1)) then $goto
    get_firmware
    $
    
    as it appears, it will not work.
    Try to compact the line so that it fits into your view, and be sure
    that a DASH is at the end of any continued line...
    
    
    $if addr'select'.eqs."I" -	
    	.and.(f$locate(".",p1).ne.f$len(p1)) -
    	then $goto get_firmware
    $
    
    
    
    JR
    
6.11Bitten by the truncating line problem ... again!ROGER::GAUDETBecause the Earth is 2/3 waterThu Jul 06 1995 13:4114
AhhhhhhhHH!  DECwindows NOTES did it to me again!!!

One of the lines in the command file got truncated when I imported it into
NOTES.  That's why you're getting the DCL error.  I'll repost an updated command
file in the next reply.  You can also fix this problem very easily by making
sure your copy of the command file has the label "get_firmware" after the "goto"
statement on the failing line.

As for the MOP connect problem, that's very strange.  As long as you disconnect
the NCP session you should be able to get to the bridge with NDU.  Can you do a
$ DOWNLOAD SHOW DEVICE 08-00-2b-92-27-37 to see if NDU can talk to the bridge at
all?

...Roger...
6.12HUB_LOAD.COM ... 80 columnsROGER::GAUDETBecause the Earth is 2/3 waterThu Jul 06 1995 13:42285
$!
$! HUB_LOAD.COM
$!
$! VMS command procedure for loading various DEChub device firmware using
$! DECndu Plus.
$!
$! Authors: Tim Gordon (LEVERS::GORDON) and Roger Gaudet (ROGER::GAUDET).
$!
$! Modified: Jon J. Danzak (PTOJJD::DANZAK) 
$!  (Added parameter driven lists, default images and some minimal error
$!   checks)
$!
$! Modified: Roger Gaudet
$!  (Add 'start' label so when user says "Yes" to "Load another device" the
$!   procedure will display the entire device menu)
$!
$! Modified: Jon J. Danzak (PTOJJD::DANZAK)
$!  Added version 4 images *AND* will search for most RECENT image in
$!  MOM$LOAD
$!
$! Arguments:  P1 = Device address of the device to be loaded.
$!
$!                  Notes:
$!
$!                  1) When loading the DECbridge 90 or 90FL, specify the
$!                     MAC address of the bridge.
$!                  2) When loading the DECconcentrator 900MX, specify the
$!                     in-band IP address of the DEChub 900 Multiswitch.
$!
$!             P2 = Firmware image name (include directory spec if the file is
$!                  not in your default directory)
$!
$!             P3 = Optional read_write community string to gain SNMP
$!                  read-write access to the device (if not "public").
$!                  To preserve lowercase, enclose this string in double
$!                  quotes ("").
$!
$!             P4 = Optional slot number of the device (some devices need this
$!                  parameter for a successful load).  The procedure will
$!                  prompt for this argument when needed.
$!
$! Invoke this command procedure as follows:
$!
$! $ @HUB_LOAD <device_address> <firmware_image> [<community_string>] [<slot>]
$!
$! If you omit required parameters, you will be prompted for them.
$!
$ on control_y then goto really_done
$ on warning then goto really_done
$ bell[0,8] = 7
$!
$type sys$Input

Please be sure to DISABLE any TFTP or BOOTP service running
on your system before proceeding.  If UCX (or equivalent) TFTP
or BOOTP services are running NDU will *NOT* be able to upgrade.

Use the UCX commands:
     SET SERVICE BOOTP/DISABLE
     SET SERVICE TFTP/DISABLE

And, do a SHOW SYSTEM and STOP/ID any BOOTP or TFTP processes.

$
$inquire/nopun x "Push RETURN to continue..."    
$!
$start:
$!
$! List of images, corresponds to list of names
$!
$defs=     "denma*.sys;dewgb*.sys;def6x*.bin;"
$defs=defs+"defhu*.bin;dmhub*.bin;dtmxm*.bin;"
$defs=defs+"defmi*.bin;detmi*.bin;dettm*.bin;"
$defs=defs+"detmm*.bin;debmp*.bin;defba*.bin;"
$defs=defs+"desbf*.bin;decpm*.bin;defmm*.bin;"
$defs=defs+"detpj*.bin;EXIT"
$!
$! List of names, corresponds to images, ends with Exit
$!
$names=      "DECagent 90;DECbridge 90, 90FL;DECconcentrator 900MX;
$names=names+"DECconcentrator 900TH;DEChub 900 MultiSwitch;DECmau 900TH;"
$names=names+"DECrepeater 90FS;DECrepeater 90TS;DECrepeater 900GM;"
$names=names+"DECrepeater 900TM;DECswitch 900EE;DECswitch 900EF;"
$names=names+"PEswitch 900TX;PORTswitch 900CP;PORTswitch 900FP;"
$names=names+"PORTswitch 900TP;EXIT"
$!
$! Specify Internet or Ethernet
$!
$addrs="I;E;I;I;I;I;I;I;I;I;I;I;I;I;I;I;Exit"
$
$!
$! Build a list of default images...
$!
$count=0
$def_loop:
$count=count+1
$def'count'=f$extract(0,f$locate(";",defs),defs)	!extract up to semi
$defs=defs-def'count'-";"				!remove from list
$temp="mom$load:"+def'count'
$old=""
$search:
$x=f$search(temp)
$if x.eqs."" then $goto sdone
$if f$parse(x,,,"name").les.f$parse(old,,,"name") then $goto search
$old=x
$goto search
$sdone:
$!
$def'count'=f$parse(old,,,"name")+f$parse(old,,,"type")
$if defs.nes."" then $goto def_loop			!until null
$!
$max=count						!save as max...
$!
$count=0
$name_loop:
$count=count+1
$name'count'=f$extract(0,f$locate(";",names),names)	!extract up to semi
$names=names-name'count'-";"				!remove from list
$if names.nes."" then $goto name_loop			!until null
$!
$count=0
$addr_loop:
$count=count+1
$addr'count'=f$extract(0,f$locate(";",addrs),addrs)	!extract up to semi
$addrs=addrs-addr'count'-";"				!remove from list
$if addrs.nes."" then $goto addr_loop			!until null
$!
$temp=max+1	!zap to pretty print if dangling last on right
$name'temp'=""
$addr'temp'=""
$def'temp'=""
$!
$! Compute maximum line
$!
$temp=max/2
$if (max/2).ne.(max/2)*2 then $temp=(max+1)/2
$!
$! Say hello to the world and list stuff
$!
$show_selection:
$ type sys$input



Select the device to be loaded:

$
$line=0
$line_loop:
$line=line+1
$test=temp+line		!parallel line
$out="                                                       "
$temp1=name'line'
$temp1="''line'.) ''temp1'"
$out[5,f$len(temp1)+5]:="''temp1'"
$temp2=""
$if name'test'.eqs."" then $goto print
$temp2=name'test'
$temp2="''test'.) ''temp2'"
$out[40,f$len(temp1)+40]:="''temp2'"
$print:
$write sys$output out
$if line.lt.temp then $goto line_loop
$!
$write sys$Output " "
$ inquire select "Enter your selection"
$ if select .eqs. "" .or. select .eq. max then goto really_done
$ if select .ge. 1 .and. select .le. max-1 then goto select_ok
$ write sys$output "''bell'"
$ write sys$output "*** Invalid selection.  Please try again."
$ goto show_selection
$!
$select_ok:
$!
$if addr'select'.eqs."E" then temp="Ethernet"
$if addr'select'.eqs."I" then temp="TCP/IP"
$ if p1 .eqs. "" then inquire p1 "Device ''temp' address"
$ if p1 .eqs. "" then goto done
$!
$! Check for a "-" in Ethernet address or "." in Internet address
$! Enet address is also 17 characters long
$!
$if (addr'select'.eqs."E").and.-
    (f$len(p1).eq.17).and.-
    (f$locate("-",p1).ne.f$len(p1)) then $goto get_firmware
$if addr'select'.eqs."I".and.(f$locate(".",p1).ne.f$len(p1)) then -
  goto get_firmware
$ write sys$output "''bell'"
$ write sys$output "*** Invalid selection.  Please try again."
$p1=""
$goto select_ok
$
$!
$get_firmware:
$def="MOM$LOAD:"+def'select'
$ if p2 .eqs. "" then inquire p2 "Firmware image (''def')"
$if p2.eqs."" then $p2=def
$write sys$Output "Image will be ''p2'
$ if p2 .eqs. "" then goto done
$!
$ if f$search(p2) .eqs. ""
$ then
$   write sys$output "''bell'"
$   write sys$output "*** Firmware image ''p2' not found!  Please try again."
$   write sys$output ""
$   p2 = ""
$   goto get_firmware
$ endif
$!
$! Don't need to ask for the community string if it's a DECbridge 90 or 90FL
$!
$ if p3 .eqs. "" .and. select .ne. 2
$ then
$   inquire p3 "Community String [public]"
$   if p3 .eqs. "" then p3 = "public"
$ endif
$ pass = "/pass=""''p3'"""
$!
$! Need slot number for DECconcentrator 900MX (MAM-assisted load)
$!
$get_slot:
$ if select .eq. 4 .and. p4 .eqs. ""
$ then
$   inquire p4 "Slot number"
$   if p4 .eqs. "" then goto done
$ endif
$ if p4 .eqs. "" then goto do_load
$ if f$integer(p4) .lt. 1 .or. f$integer(p4) .gt. 8
$ then
$   write sys$output "''bell'"
$   write sys$output "*** Slot ''p4' is out of range (1-8).  Please try again."
$   write sys$output ""
$   p4 = ""
$   goto get_slot
$ endif
$!
$do_load:
$ goto load_'select'
$!
$load_1:	! DECagent 90
$!
$ download load 'p1' 'p2' /force=DECagent 'pass'
$ goto done
$!
$load_2:	! DECbridge 90, 90FL
$!
$ download load 'p1' 'p2' /nomanagement
$ goto done
$!
$load_4:	! DECconcentrator 900MX
$!
$ download load 'p1' 'p2' /module='p4' /force=hubmodule 'pass'
$ goto done
$!
$load_5:	! DEChub 900 MultiSwitch
$!
$ download load 'p1' 'p2' /module=9 /force=hubmanv2 'pass'
$ goto done
$!
$load_3:	! DECbridge 900MX
$load_6:	! DECrepeater 90FS
$load_7:	! DECrepeater 90TS
$load_8:	! DECrepeater 900FP
$load_9:	! DECrepeater 900GM
$load_10:	! DECrepeater 900TM
$load_11:
$load_12:
$load_13:
$load_14:
$load_15:
$load_16:
$!
$ download load 'p1' 'p2' /force=pcommon 'pass'
$ goto done
$!
$done:
$ p1 = ""
$ p2 = ""
$ p3 = ""
$ p4 = ""
$ write sys$output ""
$ inquire /nopunct load_again "Load another device? [Y/<N>] "
$ if load_again then goto start
$really_done:
$ exit