Hello Marty, [Sorry if this appears twice, I had a problem with my mailaccounts!]
I have exactly the same problems as Brian (as posted on etherboot-users), also with the 3c905 (tested 3c905 and 3c90b). In short I have tested all kinds of solutions for burning the rom/flash; bromutils vortex-diag and a regular EPROM programmer, so I'm pretty sure that the ROM are fine. (verified by reading back to file and comparing lzrom image among others. I have some errors coming out vortex-diag (saying there's no ROM installed, and that vortex format checksum is incorrect), but apart from that I begin to suspect that there is a incompatibility of the motherboard (Abit KX333, KT333 chipset, award BIOS). Used 3com util to make sure the ROM is enabled. Booting with ROM gives me nothing, it does not detect the etherboot code. If I enable LAN boot in BIOS, the computer restarts every 10-15 seconds without any messages. I guess "LAN" is when there's a built in ethernet? Yes, I have double checked the PCI ID's. ;-) I post the output of the vortex-diag below again.. If you guys have any hint on what's not happening here .. thanks, Micael ./vortex-diag -e vortex-diag.c:v2.14 12/28/2002 Donald Becker ([EMAIL PROTECTED]) http://www.scyld.com/diag/index.html Index #1: Found a 3c905B Cyclone 100baseTx adapter at 0xd000. Station address 00:10:5a:4c:c9:55. Receive mode is 0x07: Normal unicast and all multicast. Saved EEPROM settings of a 3Com Vortex/Boomerang: 3Com Node Address 00:10:5A:4C:C9:55 (used as a unique ID only). OEM Station address 00:10:5A:4C:C9:55 (used as the ethernet address). Device ID 9055, Manufacturer ID 6d50. Manufacture date (MM/DD/YYYY) 9/22/1998, division 6, product QR. No BIOS ROM is present. Transceiver selection: Autonegotiate. Options: force full duplex, link beat required. PCI Subsystem IDs: Vendor 10b7 Device 9055. 100baseTx 10baseT. Vortex format checksum is incorrect (c0 vs. 10b7). Cyclone format checksum is correct (0xa8 vs. 0xa8). Hurricane format checksum is correct (0xa8 vs. 0xa8). Tuesday, July 22, 2003, 4:25:49 PM, you wrote: MC> On Tuesday, July 22, 2003, at 07:29 AM, Brian Delaney wrote: >> ok, I am a newbie with this stuff. >> I am using thinstation to connect to a citrix server using the ica >> protocol. >> This works great with a rom-o-matic floppy disk. I have setup the tftp >> and dhcp server and the thinstation.nbi image works fine. >> I would like some simple plain english help on how to convert from the >> floppy disk to using the rom on the 3c905c NIC. >> I have tried several things and get errors from "file to image to >> large" >> to incorrect file format to nothing happpening once i hit the tftp >> server..... >> any help will be appreciated....thanks MC> Brian, MC> I have collected several methods that may allow you to reach your goal. MC> I think you may not understand the difference between Etherboot and MC> PXE, and may not realize that the code burned into the flash of your MC> NIC is not Etherboot, but some 3Com code that implements various MC> booting methods, such as RPL, TCP/IP and PXE. They call their code MBA MC> (for Managed Boot Agent), and it _implements_ various booting MC> protocols, none of which is Etherboot. MC> You can either replace their code with Etherboot using a flashing MC> utility, use their code directly directly (that is use one of the MC> protocols they support, like PXE), or use their PXE support to load MC> Etherboot, and let Etherboot load your kernel. Any of the three can MC> very probably be made to work. But it will require some understanding MC> in any of the three cases. How much understanding, I cannot say. MC> I will describe several options, and I will put them all in this one MC> message, since this might be of more general usefulness. Someday I'll MC> get around to writing a docbook document that is more accessible, but MC> hopefully this message will help people succeed (and it _can_ be done!) MC> I'll help as I am able, but the strength of Free Software is the MC> strength of the community, of which I am but a single member. So MC> someone(s) will help you, you can be sure. MC> -- Marty MC> P.S. If you're going to reflash your 3Com card, you have to know what MC> the PCI IDs for the card are. If you're using rom-o-matic.net you can MC> go to the menu and (in your case) you probably want a 3c905c-TPO with MC> IDs 0x10b7 and 0x9200. The IDs *must* match the card you want to boot MC> from, or the ROM code will not be run by the BIOS. The Etherboot MC> documentation describes how to find the IDs using the 'lspci' utility MC> (available in a linux distribution near you), or doing 'cat MC> /proc/bus/pci/devices' and looking for the correct 2nd column entry. MC> Booting from floppy is less picky because the BIOS loads whatever is on MC> the floppy, and the 3Com driver can support many cards. The BIOS does MC> some extra checking when loading from ROM space. MC> OK. Here we go. Good luck, and let us know how you eventually get it to MC> work. MC> ========= Door Number 1 ========== MC> - You can reprogram the Flash EEPROM on the 3C905C using cromutil MC> (modified) README file for cromutil, available in the contrib MC> subdirectory of etherboot distributions: MC> This utility was apparently writen by John Finlay and came to me MC> via Richard Schroeder who got it from Greg Beeley. John, if you want MC> to be credited with your full address or whatever in the Etherboot MC> documentation, please contact me (Etherboot maintainer). MC> 1/18/2000 Marty Connor ([EMAIL PROTECTED]) added code for the 3C905C MC> with AT49BV512 Flash memory, and created cromutil and bromutil to MC> differentiate the versions. cromutil is for 3C905C and bromutil is MC> for 3C905B. MC> Be careful. You can easily erase your Flash memory using these MC> utilities. Make *sure* to back them up first using the "read" MC> command. You must "erase" before using "prog" to program the chip with MC> Etherboot code. This code comes with NO WARRANTY, and you take sole MC> responsibility and liability for whatever it does. Read the MC> "romutil.txt" file for more information on commands. MC> That being said, if you are programming a 3C905C-TXM (for example) MC> you would do something like this: MC> First, goto rom-o-matic.net and get a .lzrom file for the 3C905C-TPO MC> and put it somewhere convenient. MC> you might want to name it something easy like: MC> $ mv eb-5.0.10-3c905c-tpo.lzrom 3c905.lzrom MC> or not. MC> Then go untar etherboot and go the contrib directory MC> $ cd etherboot-x.x.x/contrib MC> $ make MC> The key point is that the IO address needs to be entered - Grab it MC> from the dmesg output: MC> 01:0b.0: 3Com PCI 3c905C Tornado at 0xcc00. Vers LK1.1.18-ac MC> 00:01:02:59:03:73, IRQ 10 MC> or "cat /proc/pci" to find the "I/O at XXXXXX" for your 3Com Card. MC> # replace 0xcc00 with whatever the IO Addr for your card is!!!! MC> $ ./cromutil 0xcc00 read > 905cbackup.bin MC> $ ./cromutil 0xcc00 erase MC> $ ./cromutil 0xcc00 prog < 3c90x.lzrom MC> You should now have an Etherboot-enabled 3c905C-TXM. MC> =============== end of Door Number 1 ================== MC> ================ Door Number 1A =============== MC> - You can also reprogram the Flash EEPROM on the 3C905C using Don MC> Becker's ether-diag tools. Here is part of a message Ken forwarded to MC> the list a little while ago (it's for the 3C905B, and it's a bit more MC> advanced, since you have to download ether-diag code and link MC> libraries, but it is a really nice tool): MC> [Reposted from comp.os.linux.networking. Replies to original author MC> whose URL is at the bottom of the page, not me.] MC> (I'm posting this for people to find later with google, since I MC> found precious little on this when I searched) MC> Finally, after dreading building that EPROM burner for months, MC> I succeeded in using Linux and a network card to program a EEPROM. MC> I tried about a year ago to find a cheap source of MC> NIC-programmable EEPROMs, and despite having ATMEL in town, MC> didn't find one. Then, about a week ago, I remembered I had some MC> just laying around: the BIOS chips in my stack of old motherboards! MC> A few minutes of scrounging, and then I had two 32-pin AMI BIOS MC> chips: an ATMEL AT29C010A and an SST 29EE010 (32 pin chips, won't MC> fit in most of my NICs, anybody got a cheap source of 28-pin EEPROMs?) MC> I downloaded and compiled the diag-ether tool from: MC> ftp://www.scyld.com/pub/diag/diag-ether-2.3.tgz MC> After trying to program these EEPROMs via a Linksys LNE100TX and MC> failing, I tried them in my workstation's NIC, a 3Com 3c905B, MC> which has a 32 pin socket. Happily, the EEPROMs were recognized MC> by this card and the vortex-diag utility. MC> One of the first things I learned while using this tool to MC> program the EEPROM, was to first shut down the interface: MC> ifconfig eth0 down MC> before programming the EEPROM (i.e. before using -B, -L or -S) MC> I viewed the EEPROM contents with "vortex-diag -B|less", MC> then saved the original EERPOM contents (in case I needed MC> to use the old motherboard again) with MC> vortex-diag -S filename.bin MC> Next, I went to www.rom-o-matic.com and downloaded a 5.0.8 MC> Etherboot ROM image for my Linksys LNE100TX card (which has MC> a 32 pin socket also). I then wrote the image to the EEPROM: MC> vortex-diag -L eb-5.0.8-centaur-p.lzrom MC> I shut down my box, and moved the programmed EEPROM into the MC> Linksys socket, put that card in a test PC, and booted it. MC> Came right up into booting off the network! I had previously MC> installed LTSP, and have been using floppies to boot my X MC> terminals for awhile. MC> I tried and failed to get bootable EEPROMs with a couple of MC> 3c595-TX cards I had laying around. They may have been too MC> old to be able to read the EEPROMs, or maybe I was using the MC> wrong boot image (although I tried all 3 that were available MC> on romomatic). MC> I did the programming while running the 2.4.20 kernel, on a MC> Mandrake 8.2 PC (haven't got around to upgrading to gentoo MC> yet). This is the NIC I used for programming: MC> Ethernet controller: 3Com Corporation 3c905B 100BaseTX [Cyclone] (rev MC> 30) MC> Subsystem: 3Com Corporation 3C905B Fast Etherlink XL 10/100 MC> Flags: bus master, medium devsel, latency 32, IRQ 11 MC> I/O ports at ec00 [size=128] MC> Memory at d9000000 (32-bit, non-prefetchable) [size=128] MC> Expansion ROM at <unassigned> [disabled] [size=128K] MC> Capabilities: [dc] Power Management version 1 MC> Class 0200: 10b7:9055 (rev 30) MC> So far, I've only been able to test this with the 128K EEPROMs MC> in the 29XXXXX series, which is a waste since the Etherboot MC> image is only 16K. I really need some 28-pin EEPROMs that MC> are flash-programming compatible with my 3c905b, but I'm MC> not certain if the smaller sizes are compatible, although MC> I assume they are: MC> AT29C256 (32K, 28 pin) MC> AT29C512 (64K, 32 pin) MC> Of course, even if I can find the AT29C256 chips in a DIP MC> form factor, I still don't know if they will work in my MC> generic, cheap RTL8139 NICs...? MC> -- MC> http://www.pcisys.net/~brihall MC> Linux Consultant MC> =============== end of Door Number 1A ================== MC> ================ Door Number 2 =============== MC> - Or, you could use PXELINUX instead of Etherboot to load a kernel MC> with the PXE code that is already on your card. Here is a piece of a MC> message that I wrote recently to help someone to do that: (you can MC> ignore all the USB mouse and keyboard stuff unless you really feel you MC> need it, and obviously the most interesting part is the server part for MC> you): MC> CONFIGURING THE XXXXXX BIOS MC> Go into the BIOS of the XXXXXX by hitting F10 upon power up. MC> On the "Advanced BIOS Features" screen, Enter "Network" for the "First MC> Boot Device" and "Disabled" for the other two. MC> On the "Integrated Peripherals" screen, Enable the Network Controller, MC> USB Controller, USB Keyboard and USB Mouse support. MC> Exit, saving the BIOS settings changes. MC> CONFIGURING THE LTSP SERVER MC> I am assuming your client already has configured an LTSP setup, and MC> only needs to add PXELINUX support for one or more thin clients, so I MC> will refer to directories normally created and existing during LTSP MC> operation. MC> First download the pxestuff package at: MC> http://prdownloads.sourceforge.net/ltsp/pxestuff-3.0.5-i386.tgz?download MC> unpack it into a convenient directory with: MC> tar -zxvf pxestuff-3.0.5-i386.tgz MC> This will create a pxestuff directory. MC> Become root, then move some files around: MC> su MC> cd pxestuff MC> cp bzImage-2.4.19-ltsp-1 initrd-2.4.19-ltsp-1.gz /tftpboot/lts MC> cp pxelinux.0 /tftpboot/lts MC> mkdir /tftpboot/lts/pxelinux.cfg MC> cp pxelinux.cfg/default /tftpboot/lts/pxelinux.cfg/ MC> Edit your /etc/dhcp.conf file to add your XXXXX host (modify this host MC> section for your own particular situation): MC> # XXXXXXXX using PXELINUX MC> host ws136 { MC> hardware ethernet 00:0B:CD:6D:80:67; MC> fixed-address 192.168.2.136; MC> filename "/lts/pxelinux.0"; MC> } MC> Restart your dhcpd daemon with something like: MC> /etc/init.d/dhcpd restart MC> Make sure there is a line in your /etc/hosts file with the IP address MC> for ws136: MC> 192.168.2.136 ws136.in.myveryown.net ws136 MC> You will need to edit your /opt/ltsp/i386/etc/lts.conf file to add some MC> modules for the XXXXX client(s). MC> This is because the XXXXX requires a USB keyboard and mouse, and so the MC> kernel modules for USB must be loaded in order for these devices to be MC> recognized. Here is an example entry for the XXXXX client ws136 MC> mentioned above: MC> [ws136] MC> MODULE_01 = MC> /opt/ltsp/i386/lib/modules/2.4.19-ltsp-1/kernel/drivers/usb/usbcore.o MC> MODULE_02 = MC> /opt/ltsp/i386/lib/modules/2.4.19-ltsp-1/kernel/drivers/usb/uhci.o MC> MODULE_03 = MC> /opt/ltsp/i386/lib/modules/2.4.19-ltsp-1/kernel/drivers/input/input.o MC> MODULE_04 = MC> /opt/ltsp/i386/lib/modules/2.4.19-ltsp-1/kernel/drivers/input/mousedev.o MC> MODULE_05 = MC> /opt/ltsp/i386/lib/modules/2.4.19-ltsp-1/kernel/drivers/usb/usbmouse.o MC> MODULE_06 = MC> /opt/ltsp/i386/lib/modules/2.4.19-ltsp-1/kernel/drivers/input/keybdev.o MC> MODULE_07 = MC> /opt/ltsp/i386/lib/modules/2.4.19-ltsp-1/kernel/drivers/usb/usbkbd.o MC> X_MOUSE_PROTOCOL = "IMPS/2" MC> X_MOUSE_DEVICE = "/dev/input/mice" MC> Restart your thin client, and you should be up and running! MC> ================ End of Door Number 2 ================== MC> Or you could use the PXE->Etherboot chaining method, which uses MC> /etc/dhcpd.conf entries and Etherboot's .lzpxe format to allow a two MC> stage boot. First PXE loads Etherboot, then Etherboot loads the kernel MC> (using whatever Etherboot options you may wish to specify). MC> Here's a message I sent a couple years ago on the subject: MC> ================= Door Number 3 =================== MC> From: Marty Connor <[EMAIL PROTECTED]> MC> Date: Sun Jul 8, 2001 5:54:00 PM US/Eastern MC> To: "Etherboot Users" <[EMAIL PROTECTED]> MC> Cc: "Etherboot Developers" MC> <[EMAIL PROTECTED]>, "LTSP Discussion List" MC> <[EMAIL PROTECTED]>, <[EMAIL PROTECTED]> MC> Subject: Adventures with Etherboot, DHCP, PXE, and LTSP MC> Write a driver or play with the PXE stuff... Write a driver or play with MC> the PXE stuff... MC> I was deciding what to do this weekend when in came a message about MC> someone trying to use the Etherboot/PXE feature, so I decided I'd look MC> at MC> that. MC> What follows is a description of that process. MC> Executive Summary: MC> I got it to work. Two PXE cards (a 3COM and an Intel) with PXE built in MC> were able to boot by loading Etherboot and the letting Etherboot do the MC> kernel load. Sweet. MC> If you want to hear the tale, read on. You're probably used to my MC> messages by now ;-) MC> Background: MC> Etherboot and PXE are two pieces of software that allow one to boot a MC> workstation over a network. Some other ways exist like Netboot and RPL. MC> I mostly understand Etherboot because I like to work with Free Software. MC> I've got two pristine, fancy, expensive ethernet cards that I use for MC> testing: MC> - 3COM 3C905C-TXM MC> - Intel EEPRO100+ MC> These cards have flash memory on them, with code that will boot the MC> workstation connected to them. They both have PXE as a boot method. MC> Now, a while back, we in the Etherboot project had developed the MC> technology to reprogram the flash memory on the cards with Etherboot. MC> For the 3COM card, see: MC> http://www.rom-o-matic.net/5.0.2/contrib/3c90xutil/ MC> and for the Intel EEPRO100 see: MC> http://www.rom-o-matic.net/5.0.2/contrib/eepro100notes/ MC> There are also motherboards that have PXE flashed in them, like the MC> ThinkNIC computer. Perhaps someday they will have Etherboot as well. MC> Reflashing cards and BIOSes is not possible sometimes, either for MC> technical reasons, or because people want to be able to the original PXE MC> code. It also requires some work inside the case of the computer, and MC> we MC> don't have tools to reflash all BIOSes. MC> So, to create a way to use PXE cards and BIOSes without reprogramming MC> them, Peter Lister and Vasil Vasilev recently asked the question "Why MC> can't PXE code load Etherboot and let Etherboot take over?". They then MC> wrote the code to make it happen, and so now you can build a ".lzpxe" MC> image and when your PXE ROM or BIOS loads the file, it will actually be MC> starting Etherboot, and you can use your Etherboot environment. MC> Peter and Vasil rock. MC> The Goal: MC> I wanted to boot both cards (3C905C-TXM and EEPRO100) using PXE to load MC> Etherboot, and have Etherboot load the kernel and start it. From there, MC> it is up to LTSP or whatever software is handling the session. Once the MC> kernel loads and starts, Etherboot has done its job. MC> "DHCP for people of reasonable intelligence... MC> who can't read the documentation" ;-) : MC> When PXE and Etherboot start running, they are both looking for the same MC> thing: A DHCP server. They need some information, like their IP MC> address, MC> a name server, the server where they should load a boot file, and the MC> path to that file, and various other things. MC> The thing is, that the DHCP server needs to be able to know if it is PXE MC> asking for information, or if it is Etherboot asking. MC> If it is PXE calling, we should hand it a file name to a ".lzpxe" file, MC> which is an Etherboot image wrapped in a form PXE can load. If however MC> it is Etherboot calling, we want to hand it a ".nbi" or network bootable MC> image, a linux kernel that has been wrapped using mknbi-linux, or a DOS MC> image made with mknbi-dos. mknbi is available for download on the MC> Etherboot download page at: MC> http://etherboot.sourceforge.net/distribution.html MC> Alright, so let's look at the parts we need: MC> - DHCP Server MC> - TFTP Server MC> - PXE Ethernet cards MC> - mknbi package MC> - Tagged kernel (prepared with mknbi-linux) MC> - .lzpxe image (from rom-o-matic.net or made with Etherboot v5.0.2 + MC> Patches) MC> The DHCP Server needs to be able to differentiate between PXE Clients MC> and MC> Etherboot Clients. I want to keep things simple. I want to be able to MC> say: MC> host ws137 { MC> hardware ethernet 00:02:B3:25:45:56; MC> fixed-address 192.168.2.137; MC> if substring (option vendor-class-identifier, 0, 9) = MC> "PXEClient" { MC> filename "/tftpboot/eepro100.lzpxe"; MC> } else if substring (option vendor-class-identifier, 0, 9) = MC> "Etherboot" { MC> filename "/tftpboot/lts/vmlinuz-test.nbi"; MC> option vendor-encapsulated-options MC> 3c:09:45:74:68:65:72:62:6f:6f:74:ff; MC> } MC> } MC> It turns out that ISC DHCPD version 3 MC> (http://www.isc.org/products/DHCP/dhcp-v3.html) can do this. Version 2, MC> which is what I had on my Progeny Debian machine cannot (at least not MC> this way. If someone knows how to do something like this in v2.x, MC> please MC> let us know). MC> So I had to upgrade my DHCPD to v3.0. I downloaded the package from: MC> ftp://ftp.isc.org/isc/dhcp/dhcp-latest.tar.gz MC> I then enabled root privs and moved the file to /usr/src/local and did: MC> mv dhcp-latest.tar.gz dhcp-3.0rc10.tar.gz MC> I then did: MC> tar -zxvf dhcp-3.0rc10.tar.gz MC> to unpack it. This gave me a directory called dhcp-3.0rc10 so I did: MC> cd dhcp-3.0rc10 MC> more README MC> ./configure MC> make MC> make install MC> This gave me new version of /usr/sbin/dhcpd . I then did MC> touch /var/state/dhcp/dhcpd.leases MC> and MC> /etc/init.d/dhcp restart MC> to start up my new DHCP daemon. I checked MC> /var/log/daemon.log MC> to make sure everything was alright with the DHCP startup: MC> Jul 8 15:05:42 ll dhcpd: Internet Software Consortium DHCP Server MC> V3.0rc10 MC> Jul 8 15:05:42 ll dhcpd: Copyright 1995-2001 Internet Software MC> Consortium. MC> Jul 8 15:05:42 ll dhcpd: All rights reserved. MC> Jul 8 15:05:42 ll dhcpd: For info, please visit MC> http://www.isc.org/products/DHCP MC> Jul 8 15:05:42 ll dhcpd: Wrote 0 deleted host decls to leases file. MC> Jul 8 15:05:42 ll dhcpd: Wrote 0 new dynamic host decls to leases file. MC> Jul 8 15:05:42 ll dhcpd: Wrote 0 leases to leases file. MC> Jul 8 15:05:42 ll dhcpd: Listening on MC> LPF/eth0/00:50:ba:77:1d:9f/testingnet MC> Jul 8 15:05:42 ll dhcpd: Sending on MC> LPF/eth0/00:50:ba:77:1d:9f/testingnet MC> Jul 8 15:05:42 ll dhcpd: Sending on Socket/fallback/fallback-net MC> Now I needed a new /etc/dhcpd.conf file. I wanted to make the simplest MC> file I could, and not use all the whizzy new features of v3.0. If I MC> could have used v2.x I would have, but I couldn't figure out how to MC> cleanly do the conditional (the "if" statement) that I wanted to use. MC> So MC> I made a very simple /etc/dhcpd.conf file. Heck, I don't even claim to MC> know very much about DHCP. (why are you reading this? :-) MC> Here is what my /etc/dhcpd.conf file looks like: MC> # Configuration file for ISC dhcpd v3.0 MC> not authoritative; MC> ddns-update-style none; # required for ISC v3.0 MC> shared-network testingnet { MC> subnet 192.168.2.0 netmask 255.255.255.0 { MC> } MC> } MC> group { MC> default-lease-time 21600; MC> max-lease-time 21600; MC> use-host-decl-names on; MC> option domain-name "thinguin.net"; MC> option subnet-mask 255.255.255.0; MC> option broadcast-address 192.168.2.255; MC> option routers 192.168.2.1; MC> option domain-name-servers 192.168.2.56; MC> option log-servers 192.168.2.56; MC> option root-path "/tftpboot/lts/ltsroot"; MC> host ws121 { MC> hardware ethernet 00:80:C6:F8:AB:2A; MC> fixed-address 192.168.2.121; MC> filename "/tftpboot/lts/vmlinuz.all"; MC> } MC> host ws136 { MC> hardware ethernet 00:01:02:c1:79:c7; MC> fixed-address 192.168.2.136; MC> if substring (option vendor-class-identifier, 0, 9) = MC> "PXEClient" { MC> filename MC> "/tftpboot/eb-5.0.2-mc1-3c905c-tpo.lzpxe"; MC> } else if substring (option vendor-class-identifier, 0, 9) = MC> "Etherboot" { MC> filename "/tftpboot/lts/vmlinuz-test.nbi"; MC> option vendor-encapsulated-options MC> 3c:09:45:74:68:65:72:62:6f:6f:74:ff; MC> } MC> } MC> host ws137 { MC> hardware ethernet 00:02:B3:25:45:56; MC> fixed-address 192.168.2.137; MC> if substring (option vendor-class-identifier, 0, 9) = MC> "PXEClient" { MC> filename "/tftpboot/eepro100.lzpxe"; MC> } else if substring (option vendor-class-identifier, 0, 9) = MC> "Etherboot" { MC> filename "/tftpboot/lts/vmlinuz-test.nbi"; MC> option vendor-encapsulated-options MC> 3c:09:45:74:68:65:72:62:6f:6f:74:ff; MC> } MC> } MC> } # group MC> Let's walk through this, a piece at a time. This is all explained in MC> the MC> DHCP documentation, but I'll try to break it down even more for people MC> who can't hack that. MC> # Configuration file for ISC dhcpd v3.0 MC> not authoritative; MC> The "not authoritative;" line is there because I don't want my DHCP MC> server to be giving out information to hosts on my network that it MC> doesn't have information for. Some DHCP clients get confused when a MC> DHCP MC> server NAKs (say NO!). If you're setting up a server to serve Etherboot MC> clients, and you don't want to interfere with another DHCP server, you MC> need to say "not authoritative;" (even with version 2.x of ISC DHCPD). MC> You'll be glad you did. MC> ddns-update-style none; # required for ISC MC> v3.0 MC> This is required for ISC DHCPD v3.0. It has to do with dynamic DNS MC> updates. If you really care, you can read the documentation. ddns lets MC> you tell your DNS server what a host's address is or what host is at an MC> address. Since my hosts have fixed addresses, I don't worry about this. MC> You have to say something, however. MC> shared-network testingnet { MC> subnet 192.168.2.0 netmask 255.255.255.0 { MC> } MC> } MC> This defines the subnet that I'm interested in serving information MC> about. MC> group { MC> The "group" tag just says that I'm going to be talking about some hosts MC> who are related in some way. MC> default-lease-time 21600; MC> max-lease-time 21600; MC> These two lines set some parameters for DHCP leases. MC> use-host-decl-names on; MC> This says to send to the client the name defined by the "host" statement MC> as the host's name. If I didn't include it, I'd have to explicitly put MC> a MC> statement naming each host in its "host" entry. MC> option domain-name "thinguin.net"; MC> option subnet-mask 255.255.255.0; MC> option broadcast-address 192.168.2.255; MC> option routers 192.168.2.1; MC> option domain-name-servers 192.168.2.56; MC> option log-servers 192.168.2.56; MC> option root-path "/tftpboot/lts/ltsroot"; MC> These are pretty self-explanatory, or you can check the DHCPD doc. MC> Now the good stuff: MC> host ws135 { MC> hardware ethernet 00:a0:cc:a0:e6:5b; MC> fixed-address 192.168.2.135; MC> filename "/tftpboot/lts/vmlinuz.all"; MC> } MC> This is for a normal ethernet card. It's a Netgear FA312. It has no MC> PXE, and Etherboot is the only thing that would be asking the DHCP MC> server MC> about it. Since everything else it needs to know has been defined above MC> just under the "group" tag, we just add the three things it needs and MC> away it goes. MC> host ws136 { MC> hardware ethernet 00:01:02:c1:79:c7; MC> fixed-address 192.168.2.136; MC> if substring (option vendor-class-identifier, 0, 9) = MC> "PXEClient" { MC> filename MC> "/tftpboot/eb-5.0.2-mc1-3c905c-tpo.lzpxe"; MC> } else if substring (option vendor-class-identifier, 0, 9) = MC> "Etherboot" { MC> filename "/tftpboot/lts/vmlinuz-test.nbi"; MC> option vendor-encapsulated-options MC> 3c:09:45:74:68:65:72:62:6f:6f:74:ff; MC> } MC> } MC> OK, this is what you've been waiting for. This is for the 3C905C-TXM MC> card. It's like the card above, except that it starts up with PXE. So, MC> what we do is to check to see who is calling from this hardware address MC> (00:01:02:c1:79:c7). You see, when PXE starts up, it sends "PXEClient" MC> in its DHCP message. So if we see that, we send back a file name of MC> "/tftpboot/eb-5.0.2-mc1-3c905c-tpo.lzpxe", which is an Etherboot image MC> that PXE can load. PXE loads it, and it promptly unloads PXE and gives MC> control to Etherboot. (so much of life is bootstrapping, after all :-). MC> Now, Etherboot starts up, and the first thing it does is to send a DHCP MC> request. In this case, the "else if" part of the conditional gets run, MC> and we hand back (among other things): MC> filename "/tftpboot/lts/vmlinuz-test.nbi"; MC> option vendor-encapsulated-options MC> 3c:09:45:74:68:65:72:62:6f:6f:74:ff; MC> The "filename" part is obvious. That's a Linux kernel. The next part: MC> option vendor-encapsulated-options MC> 3c:09:45:74:68:65:72:62:6f:6f:74:ff; MC> is not so obvious. MC> Here's the problem. What if you have two DHCP servers on the network, MC> and you want to make sure that your server is the one that your MC> Etherboot MC> clients choose. How do you guarantee that it will reject replies from MC> the other DHCP server? MC> Well, you first set the option: REQUIRE_VCI_ETHERBOOT when you make your MC> ".lzpxe" image (or Configure it at rom-o-matic.net). This tells MC> Etherboot to ignore any reply that doesn't contain the VCI (vendor class MC> identifier) "Etherboot". Then you add the line: MC> option vendor-encapsulated-options MC> 3c:09:45:74:68:65:72:62:6f:6f:74:ff; MC> to your "host" entry. This says "send the VCI 'Etherboot' back to the MC> requesting client". So now you can be pretty sure your client will be MC> talking to the right DHCP server. MC> Put it all together and you get: MC> host ws136 { MC> hardware ethernet 00:01:02:c1:79:c7; MC> fixed-address 192.168.2.136; MC> if substring (option vendor-class-identifier, 0, 9) = MC> "PXEClient" { MC> filename MC> "/tftpboot/eb-5.0.2-mc1-3c905c-tpo.lzpxe"; MC> } else if substring (option vendor-class-identifier, 0, 9) = MC> "Etherboot" { MC> filename "/tftpboot/lts/vmlinuz-test.nbi"; MC> option vendor-encapsulated-options MC> 3c:09:45:74:68:65:72:62:6f:6f:74:ff; MC> } MC> } MC> Smoke test: MC> I put in the 3COM card, set it to do PXE. Did "/etc/init.d/dhcp MC> restart" MC> to restart my DHCPD. and rebooted my workstation. MC> Here's what I get [fake screen shot, yes i typed it all in by hand]: MC> Managed PC Boot Agent (MBA) v4.00 MC> (C) Copyright 1999 Lanworks Technologies Co. a subsidiary of 3Com MC> Corporation MC> All rights reserved. MC> Pre-boot eXecution Environment (PXE) v2.00 MC> (C) Copyright 1999 Intel Corporation. MC> (C) Copyright 1999 Lanworks Technologies Co. a subsidiary of 3Com MC> Corporation MC> All rights reserved. MC> DHCP MAC ADDR: 00 01 02 C1 79 C7 MC> DHCP.... MC> CLIENT IP: 192.168.2.136 MASK: 255.255.255.0 DHCP IP: 192.168.2.56 MC> GATEWAY IP: 192.168.2.1 MC> PXE loader for etherboot(with ZLOADER) MC> PXENV+ unloaded MC> ROM segment 0x07C0 length 0x3000 reloc 0x9400 MC> Etherboot 5.0.2 (GPL) Tagged ELF for [3C90X] MC> Boot from (N)etwork or from (L)ocal? N MC> Found 3Com905C-TXM at 0xDC00, ROM address 0xE300 MC> Probing...[3C90X] MC> 3C90X Driver 2.00 Copyright 1999 LightSys Technology Services, Inc. MC> Portions Copyright 1999 Steve Smith MC> Provided with ABSOLUTELY NO WARRANTY. MC> ------------------------------------------------------------------------ MC> --- MC> ------- MC> MAC Address - 00:01:02:C1:79:C7 MC> Connectors present: 10Base-T / 100Base-TX. MC> Searching for server (DHCP)... MC> Me: 192.168.2.136, Server: 192.168.2.56, Gateway 192.168.2.1 MC> Loading 192.168.2.56:/tftpboot/lts/vmlinuz-test.nbi (NBI)... done MC> Linux Net Boot Image Loader Version 0.8.1 (netboot) MC> Copyright (C) 1996,1997 G. Kuhlmann and M. Gutschke MC> Copyright (C) 1995-1998 G. Kuhlmann MC> Not enough memory MC> <abort> MC> Hmmmmmm, now what could be going on here. We were doing so well. PXE MC> had started, loaded Etherboot. Etherboot had taken over. Etherboot had MC> loaded the kernel. And failed to execute. MC> Whoa. It looks like we've got a tagged-image that was tagged with an MC> old MC> version of mknbi-linux. It's a tagged-kernel I got from the LTSP site. MC> Under normal circumstances Etherboot doesn't seem to care, but MC> apparently MC> after PXE has been in memory life is more complicated... MC> What would happen if I took a kernel and tagged it with mknbi-1.2? MC> This: MC> Searching for server (DHCP)... MC> Me: 192.168.2.136, Server: 192.168.2.56, Gateway 192.168.2.1 MC> Loading 192.168.2.56:/tftpboot/lts/vmlinuz-test.nbi (NBI)... done MC> mknbi-1.2-2/first32.c (GPL) MC> 129792k total memory MC> Uncompressing Linux... Ok, booting the kernel MC> Linux version 2.2.19 ([EMAIL PROTECTED]) (gcc version 2.95.2 20000220 MC> (Debian GNU/Linux)) #1 Thu Apr 5 15:18:02 EST 2001 MC> BIOS-provided physical RAM map: MC> BIOS-e820: 00090000 @ 00000000 (usable) MC> BIOS-e820: 07dc0000 @ 00100000 (usable) MC> Detected 564845 kHz processor. MC> Console: colour VGA+ 80x25 MC> Calibrating delay loop... 1127.21 BogoMIPS MC> Memory: 126600k/129792k available (1124 kernel code, 472k reserved, MC> 1524k MC> data, 72k init) MC> ........ MC> Sweet. The Intel EEPRO100+ card worked similarly, which means their PXE MC> implementation of PXE seems compatible. I hope some other people will MC> try this and let us know how it works for them. The DHCP server and the MC> mknbi-1.2 requirement seem to be the only tricky parts. Maybe someone MC> will come up with a clever way to do this in v2 of the DHCP server. MC> So there's one way to use PXE to load Etherboot. I hope this helps some MC> people who want to try this. Maybe we should put this message in the MC> contrib directory for people who need some help getting started with MC> this, or maybe we can work it into the documentation for Etherboot. MC> Marty MC> =================== End of Door Number 3 =================== MC> So there you go. Hopefully, this will help you get going. It may also MC> help others help you. MC> Someday I'll get around to writing it down more coherently, but for MC> now, this is what I can do. MC> Marty -- Best regards, Micael mailto:[EMAIL PROTECTED] ------------------------------------------------------- This SF.net email is sponsored by: VM Ware With VMware you can run multiple operating systems on a single machine. WITHOUT REBOOTING! Mix Linux / Windows / Novell virtual machines at the same time. Free trial click here: http://www.vmware.com/wl/offer/345/0 _____________________________________________________________________ Ltsp-discuss mailing list. To un-subscribe, or change prefs, goto: https://lists.sourceforge.net/lists/listinfo/ltsp-discuss For additional LTSP help, try #ltsp channel on irc.freenode.net