An update. There is a bug in the raw socket code I posted. It does not
try hard enough to make sure that the packet is for us. So it can,
and will, end up thinking a different ack is ours. I found this trying
to connect to Rogers.
If you go to the github (
https://github.com/smaclennan/sdhcp) and look
at udprecv, I now check the transaction id and the mac address. There
are other changes, but this is the only one that really matters.
I think it is fixed, but it will take another day before I know for
sure. It seems that Rogers does not reply to renewals. They make you go
to the rebind state and then ack. Since I have a 48 hour lease, it will
take 7/8 of 48 or 42 hours to get a result :(
But, I did send a renew and got back an ack for a different computer
and successfully ignored it. I also have sdhcp running on the laptop I
am using right now and with a 2 hour lease it has been running since
Saturday with all renewals working. So I believe the checks are correct.
This is one of the few times I wish I had a windows box. It would be
interesting to see if Rogers will renew a windows request. I have seen
in the past where windows dhcp servers interacted badly with Linux
clients.
Cheers,
Sean
Received on Sun Feb 17 2019 - 18:37:51 CET