If I want to configure manual binding that doesn't working with hardware address. Instead, if I specify the client identifies, it works.
ip dhcp pool cat
host 10.20.30.40 255.255.255.0
The snippet below, claims that hardware address can be used with bootp requests only. Logically, I feel that should be the case because bootp request doesn't have options field. In the case of DHCP request, the option 61 is used to carry client identifier. Hence, it seems, the IOS expect client identifies to be configured, if it a dhcp request.
Router(dhcp-config)# client-identifier unique-identifier
Specifies the unique identifier for DHCP clients. This command is used for DHCP requests.
Router(dhcp-config)# hardware-address hardware-address type
(Optional) Specifies a hardware address for the client. This command is used for BOOTP requests.