Using rpld for linux to remote boot Novell RPL boot workstations.


rpld CAN remote boot Novell RPL workstations, but currently you have to calculate the image load and execute address manually for a particular boot rom type.


Explanation:
In short, the boot process works like this under Novell/RPL (RiPL)
1)booting WS queries boot server
2)server replies with its data
3)Booting WS asks specific server - specifying the boot eprom's load data area, let's say: 0x0250 [kblocks]
4) Novell RPL server multiplies 0x0250 by 0x400 = 0x94000 and adds 0xFFFFE070 = 0x92070. This will be the load address and the execute address is offset +0 to it, so it will be the same. The the "result" (0x92070 for load and for execute address) is passed to the client which will load and execute the image for that address.


The problem is with the current implementation of rpld is that it can't do this calculation automatically, but you can make it work, if you're manually calculate the load and execution address once for booting one or several same WS-s. Since this is booteprom dependent, it won't work for different computer with a different boot eprom (as it would work with a NetWare server) but you can calculate this value for all of your different configuration groups.



Howto:
On the linux server which is doing the rpld , do a tcpdump -xi eth0 >somefile
Start the boot procedure, and find similar packets to these.
You can look for 03:00:02:00:00:00. This is the RPL functional/multicast address on Ethernet.
(It is C0:00:40:00:00:00 for Token-Ring and FDDI).
So, these are the first four packets of an RPL query and reply ceremony:
23:41:16.622610  [BootingWorkstation's MAC] > 03:00:02:00:00:00 sap fc ui/C len=83
	0x0000:  fcfc 0300 5300 0100 0840 0300 0000 0000  ....S....@......
	0x0010:  1000 0800 0640 0905 ea00 0640 0a00 0100  .....@.....@....
	0x0020:  0a40 0600 00e8 d41f a200 0540 07fc 0028  .@.........@...(
	0x0030:  0004 0024 c005 0800 fc01 0070 0000 4423  ...$.......p..D#
	0x0040:  0251 0100 0000 0000 0000 5342 4e57 4d4c  .Q........SBNWML
	0x0050:  4944                                     ID
Translation: Hi, I'm a poor diskless workstation, is there anyone able to provide me RPL booting possibilities?

23:41:16.622757  [RPLD server's MAC] > [BootingWorkstation's MAC] sap fc ui/C len=58
	0x0000:  fcfc 0300 3a00 0200 0840 034e 6574 5700  ....:....@.NetW.
	0x0010:  0540 0b00 000a 400c 0000 0000 0000 000a  .@....@.........
	0x0020:  4006 0008 5a23 9a58 0010 0008 0006 4009  @...Z#.X......@.
	0x0030:  05ea 0006 400a 0001 0005 4007 fc         ....@.....@..
Translation: Hello fellow, I'm a (NetW) RPL server at your service. How may I help you?

23:41:17.539636  [BootingWorkstation's MAC] > [RPLD server's MAC] sap fc ui/C len=83
	0x0000:  fcfc 0300 5300 1000 0840 1100 0000 0000  ....S....@......
	0x0010:  1000 0800 0640 0905 ea00 0640 0a00 0100  .....@.....@....
	0x0020:  0a40 0600 00e8 d41f a200 0540 07fc 0028  .@.........@...(
	0x0030:  0004 0024 c005 0800 fc01 0070 0000 4423  ...$.......p..D#
	0x0040:  0251 0100 0000 0000 0000 5342 4e57 4d4c  .Q........SBNWML
	0x0050:  4944                                     ID
Translation: Gee, thanks! I'm an idiot and can't calculate what is the result of (0x0251 * 0x400) - 0x1F90. Can you help?

23:41:17.541078  [RPLD server's MAC] > [BootingWorkstation's MAC] sap fc ui/C len=1496
	0x0000:  fcfc 0305 d800 2000 0840 1100 0000 0000  .........@......
	0x0010:  0dc0 1400 0924 7000 0924 7030 05bf 4018  .....$p..$p0..@.
	0x0020:  fae9 961c 4e65 7477 2e52 704c 0505 c700  ....Netw.RpL....
	0x0030:  0000 0002 9000 5342 0504 0000 0000 0200  ......SB........
	0x0040:  0000 0000 ffff ffff ffff ffff ffff ffff  ................
	0x0050:  ffff                                     ..
Translation: Certainly, stupid one. That would be 0x00092470, I repeat 0x00092470...


So, you need to see what stands for 0251 in your trace, you can calculate the load/exec value using one of the following:
-on linux, using bc: echo "obase=16; ibase=16; 251*400-1F90" | bc
- on Windows, start calc, change to scientific mode, change to HEX mode, type:
251 * 400 - 1F90 =



Todo:
The goal would be to have rpld work with for example a specific keyword, let's say "novell" which would stay instead of the load and execute parameters, and would provide the "floating" load and exec address for the RPL-ing workstation.
If any developer interested in this, don't hesitate to contact me for further information. Official rpld development seems to be stalled.



Technical details:
ftp://ftp.microsoft.com/developr/drg/RPL - Not just MS, IBM and Novell RPL too. Worth to see sections:
-DOC: A.4.3 Dynamic Memory Allocation
-ZIP:/DLC/RIPL.INC
SEND.FILE.REQUEST Frame Format Structure (see: packet 3)
SFR_MemSize DB ?, ? ; Memory Size (see: red highlights, for example: 0x0250)
File.Data.Response Frame Format Structure (see: packet 4)
The above RPL communication, detailed with the MS RPL document



Sample rpld configuration file for booting a Novell RPL station:
// The following example shows how to load the RBOOT.RPL for
// a Novell NetWare RPL (not for the older RPL) booting card.
// From then on, "standard" (old) RPL procedure follows, looking
// for SYS:LOGIN/BOOTCONF.SYS and the appropriate boot file, or
// SYS:LOGIN/NET$DOS.SYS if one is not specified for a MAC address.
//
// BOOTCONF.SYS can contain lines like:
//   0x????????,000D873?????=VIA.SYS
//   0x80230001,0000E8D41D5C=HUNET.SYS


HOST {
	ethernet = 00:0d:87:38:14:b3;

	// Load RBOOT.RPL from the beginning to 0x8E070
	FILE {
		path="/mnt/md2/sys/login/rboot.rpl";
		offset=0x0;
		load=0x8E070;
	};	

	// Jump into the start
	execute=0x8E070;

};


Useful links and downloadables:

- http://bullard.esc.cam.ac.uk/~james/rpld - rpld homepage
- http://www.compu-art.de/mars_nwe - mars_nwe homepage
- http://people.debian.org/~pm/pool/main/mars-nwe - mars_nwe debian package download
- http://www.burtonsys.com/mars_ncpfs-HOWTO.html - collection on useful information on mars_nwe and linux
- Novell Client 4.91SP3 - FULL CLIENT
- Post 4.91SP3 patches:

rboot.rpl Novell's rplboot.rpl file
via.sys (a net$dos.sys image for VIA Rhino [fetodi])
rtsodi.sys (a net$dos.sys image for Realtek RTL 8139x/810x)
dosgen.exe to create Novell like net$dos.sys
extract.exe to extract files from net$dos.sys (or any other diskimage) under DOS. (extract -x net$dos.sys)
rplfix.com for old RPL boot eproms. For more, see: rplfix.txt
rplodi.com you probably don't need this, but if booting fails after ipxodi.com, put this before it.




Comments, suggestions about this web page, to:

version - yyyy.mm.dd note...
v1.00 - 2004.06.07 First version
v1.01 - 2004.06.23 Beta NWFS.SYS download link
v1.02 - 2004.07.02 Removed beta NWFS.SYS, added 49SP2 info
v1.03 - 2005.02.08 Added 4.91 link
v1.04 - 2005.09.20 Added 4.91SP1 links
v1.05 - 2006.07.04 Added 4.91SP2 links, create "old links" section
v1.05 - 2006.07.28 Added 4.91SP2 Full client link, remark "old links" section

BACK to the main page