W6100 IPCONF is set by other device's ARP Probe

Hi @tom3

Sorry for the information about setting IP during DHCP process.

Could you check DHCP application WIZnet offers as official library?

I know you can program DHCP client examples. If you want to refer other DHCP process, like recovering, reassigning, or releasing,… , it will be helpful example.

Thank you for the advice.

I have tested this before and again tested setting the leased IP address to SIPR.

The results were good, except that the W6100 did not output an ARP Probe and could not detect a conflict when receiving another device’s ARP Probe.

This ARP announcement is described in section 2.3 of the RFC, which I also implemented after processing the ARP Probe.
I wanted to do the probing before setting the IP address in SIPR, as described in the beginning of section 2.1 of the RFC, but the IPCONF bit was set, which I did not expect, so I asked in this forum.
This is to make myself safer to boot if the same IP address is leased (e.g. power failure recovery) to multiple devices at the same time due to multiple DHCP servers running or a misconfiguration of the DHCP server.


1 Like

Thanks for the code example.

I was referring to a slightly older version of this code.
It seems that the following sendto() call in the check_DHCP_leasedIP() function in dhcp.c sends the ARP Probe.

	// IP conflict detection : ARP request - ARP reply
	// Broadcasting ARP Request for check the IP conflict using UDP sendto() function
	ret = sendto(DHCP_SOCKET, (uint8_t *)"CHECK_IP_CONFLICT", 17, DHCP_allocated_ip, 5000);

The code is able to detect a conflict by receiving an ARP “Response” from the other device after the W6100 sends the ARP Probe.
Unfortunately, however, this code does not receive the ARP “Probe” sent by the other device after the W6100 sends the ARP Probe.

If someone’s ARP Probe is received after the sendto() run, the W6100’s IPCONF bit is set, but there seems to be no processing of this bit.
Furthermore, the W6100 also sets the IPCONF bit when it receives a probing packet to another IP address. Because of this, I am unable to determine if there is an IP address conflict.
This is the same behavior as in my previous tests.
Please let me know if there is any workaround for this issue.

I digress
After executing this sendto(), if there is a conflicting device, a packet with a payload containing “CHECK_IP_CONFLICT” bytes will be sent. Is this a W6100 specific phenomenon (W5100 does not send)?
I want to prevent strange packets from being sent out to the LAN, so I thought it would be more appropriate to run setSLCR(SLCR_ARP4) instead of sendto().