DHCP relay unicast behavior

Dear fellow Mikrotik users,

I am running an RB5009 with 7.8 stable. (Firmware also upgraded.)

There is a long standing problem with unicast addressing of DHCP requests when a relay is used, fixed according to the changelog:
*) dhcpv4-client - send DHCPv4 unicast requests to DHCPv4 relay, instead of server when it is being used;

Apperently it is not fixed.

First I obtain an IP address according to the following reply:

Mar/01/2023 23:56:07 dhcp,debug,packet debug: dhcp-client on vlan1000-wan received ack with id 3593833787 from 89.133.164.82
Mar/01/2023 23:56:07 dhcp,debug,packet debug:     hops = 2
Mar/01/2023 23:56:07 dhcp,debug,packet debug:     flags = broadcast
Mar/01/2023 23:56:07 dhcp,debug,packet debug:     ciaddr = xxx
Mar/01/2023 23:56:07 dhcp,debug,packet debug:     yiaddr = xxx
Mar/01/2023 23:56:07 dhcp,debug,packet debug:     siaddr = 80.244.108.182
Mar/01/2023 23:56:07 dhcp,debug,packet debug:     giaddr = 89.133.164.82
Mar/01/2023 23:56:07 dhcp,debug,packet debug:     chaddr = DC:2C:6E:48:95:18
Mar/01/2023 23:56:07 dhcp,debug,packet debug:     Subnet-Mask = 255.255.255.0
Mar/01/2023 23:56:07 dhcp,debug,packet debug:     Unknown(2) = 00-00-0E-10
Mar/01/2023 23:56:07 dhcp,debug,packet debug:     Router = 178.48.233.254
Mar/01/2023 23:56:07 dhcp,debug,packet debug:     Unknown(4) = 50-F4-6C-B6
Mar/01/2023 23:56:07 dhcp,debug,packet debug:     Domain-Server = 80.244.99.37,80.244.99.36
Mar/01/2023 23:56:07 dhcp,debug,packet debug:     Domain-Name = "chello.hu"
Mar/01/2023 23:56:07 dhcp,debug,packet debug:     Address-Time = 86400
Mar/01/2023 23:56:07 dhcp,debug,packet debug:     Msg-Type = ack
Mar/01/2023 23:56:07 dhcp,debug,packet debug:     Server-Id = 80.244.108.182
Mar/01/2023 23:56:07 dhcp,debug,state debug: dhcp-client on vlan1000-wan entering <bound> state

Clearly, server address (siaddr) is 80.244.108.182 and relay address (giaddr) is 89.133.164.82.

When I manually instruct the device to renew this address, the following is logged:

Mar/01/2023 23:56:12 dhcp,debug,state debug: dhcp-client on vlan1000-wan entering <renewing...> state
Mar/01/2023 23:56:12 dhcp,debug,packet debug: dhcp-client on vlan1000-wan sending request with id 3593833787 to 80.244.108.182
Mar/01/2023 23:56:12 dhcp,debug,packet debug:     ciaddr = xxx
Mar/01/2023 23:56:12 dhcp,debug,packet debug:     chaddr = DC:2C:6E:48:95:18
Mar/01/2023 23:56:12 dhcp,debug,packet debug:     Host-Name = "xxx"
Mar/01/2023 23:56:12 dhcp,debug,packet debug:     Msg-Type = request
Mar/01/2023 23:56:12 dhcp,debug,packet debug:     Parameter-List = Subnet-Mask,Classless-Route,Router,Static-Route,Domain-Server,NTP-Server,CAPWAP-Server,Vendor-Specific
Mar/01/2023 23:56:12 dhcp,debug,packet debug:     Client-Id = 01-DC-2C-6E-48-95-18
Mar/01/2023 23:56:14 dhcp,debug,packet debug: dhcp-client on vlan1000-wan sending request with id 3593833787 to 80.244.108.182
Mar/01/2023 23:56:14 dhcp,debug,packet debug:     secs = 2
Mar/01/2023 23:56:14 dhcp,debug,packet debug:     ciaddr = xxx
Mar/01/2023 23:56:14 dhcp,debug,packet debug:     chaddr = DC:2C:6E:48:95:18
Mar/01/2023 23:56:14 dhcp,debug,packet debug:     Host-Name = "xxx"
Mar/01/2023 23:56:14 dhcp,debug,packet debug:     Msg-Type = request
Mar/01/2023 23:56:14 dhcp,debug,packet debug:     Parameter-List = Subnet-Mask,Classless-Route,Router,Static-Route,Domain-Server,NTP-Server,CAPWAP-Server,Vendor-Specific
Mar/01/2023 23:56:14 dhcp,debug,packet debug:     Client-Id = 01-DC-2C-6E-48-95-18
Mar/01/2023 23:56:18 dhcp,debug,state debug: dhcp-client on vlan1000-wan entering <rebinding...> state
Mar/01/2023 23:56:18 dhcp,debug,packet debug: dhcp-client on vlan1000-wan sending request with id 3593833787 to 255.255.255.255
Mar/01/2023 23:56:18 dhcp,debug,packet debug:     flags = broadcast
Mar/01/2023 23:56:18 dhcp,debug,packet debug:     ciaddr = xxx
Mar/01/2023 23:56:18 dhcp,debug,packet debug:     chaddr = DC:2C:6E:48:95:18
Mar/01/2023 23:56:18 dhcp,debug,packet debug:     Host-Name = "xxx"
Mar/01/2023 23:56:18 dhcp,debug,packet debug:     Msg-Type = request
Mar/01/2023 23:56:18 dhcp,debug,packet debug:     Parameter-List = Subnet-Mask,Classless-Route,Router,Static-Route,Domain-Server,NTP-Server,CAPWAP-Server,Vendor-Specific
Mar/01/2023 23:56:18 dhcp,debug,packet debug:     Client-Id = 01-DC-2C-6E-48-95-18
Mar/01/2023 23:56:18 dhcp,debug,packet debug: dhcp-client on vlan1000-wan received ack with id 3593833787 from 89.133.164.82
Mar/01/2023 23:56:18 dhcp,debug,packet debug:     hops = 2
Mar/01/2023 23:56:18 dhcp,debug,packet debug:     flags = broadcast
Mar/01/2023 23:56:18 dhcp,debug,packet debug:     ciaddr = xxx
Mar/01/2023 23:56:18 dhcp,debug,packet debug:     yiaddr = xxx
Mar/01/2023 23:56:18 dhcp,debug,packet debug:     siaddr = 80.244.108.182
Mar/01/2023 23:56:18 dhcp,debug,packet debug:     giaddr = 89.133.164.82
Mar/01/2023 23:56:18 dhcp,debug,packet debug:     chaddr = DC:2C:6E:48:95:18
Mar/01/2023 23:56:18 dhcp,debug,packet debug:     Subnet-Mask = 255.255.255.0
Mar/01/2023 23:56:18 dhcp,debug,packet debug:     Unknown(2) = 00-00-0E-10
Mar/01/2023 23:56:18 dhcp,debug,packet debug:     Router = 178.48.233.254
Mar/01/2023 23:56:18 dhcp,debug,packet debug:     Unknown(4) = 50-F4-6C-B6
Mar/01/2023 23:56:18 dhcp,debug,packet debug:     Domain-Server = 80.244.99.37,80.244.99.36
Mar/01/2023 23:56:18 dhcp,debug,packet debug:     Domain-Name = "chello.hu"
Mar/01/2023 23:56:18 dhcp,debug,packet debug:     Address-Time = 86400
Mar/01/2023 23:56:18 dhcp,debug,packet debug:     Msg-Type = ack
Mar/01/2023 23:56:18 dhcp,debug,packet debug:     Server-Id = 80.244.1,08.182
Mar/01/2023 23:56:18 dhcp,debug,state debug: dhcp-client on vlan1000-wan entering <bound> state

Clearly, the wrong unicast address 80.244.108.182 is tried two times, then the device reverts to broadcast, which succeeds.

Now, this may seem only a cosmetic problem, because it only delays acquiring the address by approximately 5 seconds. What makes the problem MUCH worse, is that when an automatic renewal is done at 0.5 * lease time, 0.75 * lease time etc., ONLY unicast is attempted (to the wrong address,) unsuccessfully of course, and broadcast is only attempted after the lease time has fully elapsed and the IP address is lost. This means that a device acquiring an address via DHCP loses its IP address for 5-10 seconds every lease-time interval. This is a big problem.

I would suggest to implement the fix as per the changelog, and also to attempt broadcast even on automatic renewals.

Best regards.