Bootpd under 2.0.28 and 2.1.25 (a problem)

Jakub Saternus (skuba@hum.amu.edu.pl)
Fri, 7 Feb 1997 20:52:11 +0100 (MET)


Hello,
This is a more or less detailed description of my problem with 2.1.25 and
bootpd. Well to cut it short---it does not work. If you're interested in
solving the problem (probably not only for me) then read on.

Part I %%%%%%%%%%%%%%%%%%%%

`uname -a`:
Linux saturnus 2.1.25 #3 Mon Feb 3 15:35:05 MET 1997 i586

`netstat -r`:
Kernel routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
pla-net.pl * 255.255.255.0 U 0 0 0 eth0
default * 0.0.0.0 U 0 0 0 eth0

`arp -a`:
Address HW type HW address Flags Mask
192.168.1.1 UNSPEC 00:00:00:00:00:00 MP *

(Trying to alter the arp table with `arp -s ...` is a waste of time.)

==== BOOTPC run on the server ====
Running `bootpc' under 2.1.25 with the following server mask specified gives
the same (correct) result:
# bootpc --debug --server 192.168.1.255 --hwaddr 00409522AFAF
# bootpc --debug --server 192.168.255.255 --hwaddr 00409522AFAF
# bootpc --debug --server 192.255.255.255 --hwaddr 00409522AFAF

>>>>
Got family=1 (Ether=1)
hardware addr is :00 40 95 22 AF AF
plen = 300 plen - sizeof(struct bootp) = 0

00 : 0x63 0x82 0x53 0x63 0x01 0x04 0xFF 0xFF
08 : 0xFF 0x00 0x02 0x04 0xFF 0xFF 0xF1 0xF0
16 : 0x06 0x04 0xC0 0xA8 0x01 0x01 0xFF 0x00
24 : 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
32 : 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
40 : 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
48 : 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
56 : 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
Size = 300
SERVER=192.168.1.1
IPADDR=192.168.1.2
BOOTFILE='/export/root/jupiter/vmlinuz'
NETMASK=255.255.255.0
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
TIMEOFFSET=-3600
DNSSRVS='192.168.1.1'
<<<<

At the same time `in.bootpd' (version 2.4.3 compiled under 2.1.23)
reports via syslogd:
>>>>
Feb 7 18:05:34 saturnus in.bootpd[712]: ioctl SIOCSARP: Invalid argument
Feb 7 18:10:12 saturnus last message repeated 7 times
<<<<

But the following command fails completely, though as I understand it should
not as the diskless client is not oblidged to know the netmask.
# bootpc --debug --server 255.255.255.255 --hwaddr 00409522AFAF

>>>>
Got family=1 (Ether=1)
hardware addr is :00 40 95 22 AF AF

No response from BOOTP server
In FatalError(), errno was 2
Unable to locate an IP address for this host.
***Please report this problem**

[Unable to continue]

Will now loop forerver, break out of this to fix
<<<<

One more note: tcpdump running all the time on anoter console did not show any
activity on udp level apart from `whod' and `sunrpc' daemons but see the next
section about a diskless client talking via the ehternet cable.

==== Bootrom code run from a floppy on another machine ====
The code has been taken from `netboot' package v0.3.
At the server console I see this dump of toxic load:

tcpdump: listening on eth0
19:34:08.764025 0.0.0.0.bootpc > 255.255.255.255..bootps: xid:0xb4fe1200 S:255.255.255.255 [|bootp]
19:34:09.714217 0.0.0.0.bootpc > 255.255.255.255.bootps: xid:0x86511300 S:255.255.255.255 [|bootp]
19:34:10.702901 0.0.0.0.bootpc > 255.255.255.255.bootps: xid:0x584e1300 S:255.255.255.255 [|bootp]
19:34:11.691528 0.0.0.0.bootpc > 255.255.255.255.bootps: xid:0x2a251300 S:255.255.255.255 [|bootp]
19:34:12.680257 0.0.0.0.bootpc > 255.255.255.255.bootps: xid:0xfc051300 S:255.255.255.255 [|bootp]
(snip)
19:34:34.430904 0.0.0.0.bootpc > 255.255.255.255.bootps: xid:0x83a1300 S:255.255.255.255 [|bootp]
19:34:35.419513 0.0.0.0.bootpc > 255.255.255.255.bootps: xid:0xda401300 S:255.255.255.255 [|bootp]
19:34:36.408196 0.0.0.0.bootpc > 255.255.255.255.bootps: xid:0xac511300 S:255.255.255.255 [|bootp]
19:34:37.396831 0.0.0.0.bootpc > 255.255.255.255.bootps: xid:0x7e1c1300 S:255.255.255.255 [|bootp]
19:34:38.385520 0.0.0.0.bootpc > 255.255.255.255.bootps: xid:0x50511300 S:255.255.255.255 [|bootp]

31 packets received by filter
0 packets dropped by kernel

Part II %%%%%%%%%%%%%%%%%%%%%%

Now let me reboot and do the same thing again under 2.0.28.

`uname -a`:
Linux saturnus 2.0.28 #12 Mon Jan 20 22:35:52 MET 1997 i586

`netstat -r`:
Kernel routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
localhost * 255.255.255.255 UH 0 0 2 lo
pla-net.pl * 255.255.255.0 U 0 0 2 eth0
default * 0.0.0.0 U 0 0 1 lo

`arp -a`:
(no output)

And now the final surprise: Everything works great under 2.0.28. I get to the
later stages of tftp and all. The same programs,
the same libs, the same machine, even I am the same. But the kernel seems
to be not quite the same. And so do the network services.

I just start off from my diskless client and all is OK:

tcpdump: listening on eth0
19:56:02.789309 0.0.0.0.bootpc > 255.255.255.255.bootps: xid:0x377b1300 S:255.255.255.255 [|bootp]
19:56:03.739309 0.0.0..0.bootpc > 255.255.255.255.bootps: xid:0x9d61300 S:255.255.255.255 [|bootp]
19:56:03.749309 saturnus.bootps > jupiter.bootpc: xid:0x377b1300 Y:jupiter S:saturnus [|bootp]
19:56:03.759309 0.0.0.0.bootpc > 255.255.255.255.bootps: xid:0xc99a1300 S:255.255.255.255 [|bootp]
(snip)
19:56:03.809309 saturnus.bootps > jupiter.bootpc: xid:0xa7f1300 Y:jupiter S:saturnus [|bootp]
19:56:03.809309 saturnus.bootps > jupiter.bootpc: xid:0xca7b1300 Y:jupiter S:saturnus [|bootp]
19:56:07.969309 jupiter.1024 > saturnus.tftp: 37 RRQ "/export/root/jupiter/vml"[|tftp]
19:56:08.489309 saturnus.1039 > jupiter.1024: udp 516
19:56:08.489309 jupiter.1024 > saturnus.1039: udp 4
(snip)

1957 packets received by filter
0 packets dropped by kernel

During the whole process of bootp'ing `in.bootpd` reports no error messages.

Epilog %%%%%%%%%%%%%%%

I have read some posts about the built-in loopback interface and some arp
changes that probably cause the whole mess but it just as well could be
one of Murphy's Laws.
I hope there is someone out there who can explain all this to me.

Thank you,
Jakob.

$a
__o
_(\<._ Jakob Saternus IFA UAM <skuba@hum.amu.edu.pl>
(_)/ (_) PGP Public Key via 'finger'; `ed' rulez
.