W6100 IPCONF is set by other device's ARP Probe

Hello,

I’m using W6100.
As written in section 2.1.1 of RFC5227, I am sending an ARP Probe from the W6100 to check for address conflicts.
When I receive an ARP Probe from another device while checking for conflicts (waiting for timeout), the IPCONF bit in the IR register is set even though the TargetIpAddress is different.
Each device should set SenderIpAddress to 0.0.0.0 when sending ARP Probe. Is the IPCONF bit set when the SenderIpAddress is the same (0.0.0.0)?
Is it possible to determine whether or not an ARP Probe with the same TargetIpAddress is received, as described in RFC5227 section 2.1.1, “In addition, …”?

Thanks,

Post contents of the packets being exchanged on the network - either binary or as a Wireshark pictures.

Hi,
The image is a wireshark capture with two devices and a DHCP server.
The firmware is designed to send a DHCP Decline when IPCONF is set.
In the image, the TargetDevice is sending a DHCP Decline due to the IPCONF being set by the OtherDevice issuing an ARPProbe.
The desired behavior is to send a DHCP Decline only when an ARPProbe with an IP address equal to the W6100’s own IP address is received.

Thanks,

Should it send ARP response saying that IP address is occupied? Sending DHCP decline, at least as on the picture you provided, is broken process, because DHCP ACK was already sent and received in previous packet, and DHCP process has completed.

When in this packet exchange you have IPCONF bit set? In the packet 11 - someone else (12:00:07) asking if anyone on the network is having 192.168.2.206? What is your (W6100) IP address at the time when packet 11 is received?

Thank you for your reply.

For the DHCP sequence, we check for IP address conflicts by sending ARPProbes according to Sections 3.1 clause 5 of RFC2131.
In addition, according to section 2.1.1 of RFC5227, we check for ARP Probe or ARPResponse reception from other devices for 1 second after sending ARPProbe.
If there is no reception for 1 second, the probe is repeated three times in total, and if there is no reception, it is determined that there is no conflict.

I will explain the packet of the image.
In packets 1 through 4, W6100 (12:00:06) is leased an IP address of 192.168.2.204 from the DHCP server.
In packets 5-6, the W6100 just sent an ARPProbe twice to see if anyone on the network has 192.168.2.204.
The other device (12:00:07) gets IP address 192.168.2.206 in packets 7-10.
In packets 11 and 13-14, 12:00:07 is asking if someone on the network has 192.168.2.206.
The W6100 sets the IPCONF bit when it receives packet 11.

Thanks,

Sounds really strange. The next step would be - as soon as you get this interrupt from conflicting IP addresses (and before doing anything else), perform dump of all the common and all the socket registers and post here. Let’s see what regs have at the time of event.

Thank you for your help.

The first thing I want to know is the conditions under which the IPCONF bit is set. It doesn’t seem to be written in the datasheet.

All ARP Probe packets have a Sender IP address field of 0.0.0.0, so both packets sent by the W6100 (12:00:07) and received from other devices (12:00:06) will be 0.0.0.0. .
The IP address you want to search for is indicated in the Target IP Address field.

If IPCONF is set only by matching the Sender IP address field of the packet sent by the W6100 and received by the W6100, IPCONF will be set even if the target IP address fields are different.
In section 2.1.1 of RFC5227 it says:
“In addition, if during this period the host receives any ARP Probe where the packet’s ‘target IP address’ is the address being probed for, and the packet’s ‘sender hardware address’ is not the hardware address of any of the host’s interfaces, then the host SHOULD similarly treat this as an address conflict and signal an error to the configuring agent as above.”

Therefore, once again, when detecting conflicts with ARPProbe, it is necessary to determine if the Target IP address matches and the Sender MAC address does not match for received ARP packets.
If the IPCONF bit do not meet this condition, it seems necessary to check in firmware using a register that can obtain the value of each field of the received ARP packet.

thanks,

Sorry. There was a typo.

*W6100(12:00:07) → (12:00:06)
*Other device(12:00:06) → (12:00:07)

You can edit your earlier posts.

Manual states “IPCONF: 1 : IPv4 Address Conflict occurred”.

If you do not provide data for consideration, no one will be able to help. First of all we must prove that your W6100 is in proper state when “issue” happens. For this I asked for register dump.

Thank you for your advice.

Manual states “IPCONF: 1 : IPv4 Address Conflict occurred”.

I would like to know how the W6100 chip determines when an IPv4 address conflict occurs.

If you do not provide data for consideration, no one will be able to help. First of all we must prove that your W6100 is in proper state when “issue” happens. For this I asked for register dump.

I got a dump of the registers after IPCONF was 1 as below.

–W6100 Dump common Registers.
CIDR =0x6100
VER =0x4661
SYSR =0xE1
SYCR1 =0x80
TCNTR =0x52C9
IR =0x04
SIR =0x10
SLIR =0x00
IMR =0x02
SIMR =0x00
SLIMR =0x00
SLPSR =0x00
SLCR =0x00
PHYSR =0x05
PHYRAR =0x00
PHYDOR =0x0000
PHYACR =0x00
PHYDIVR=0x01
PHYCR1 =0x40
NET4MR =0x00
NET6MR =0x00
NETMR =0x02
NETMR2 =0x00
PTMR =0x28
PMNR =0x00
PHAR =0x000000000000
PSIDR =0x0000
PMRUR =0xFFFF
SHAR =0x000000120006
GAR =0x00000000
SUBR =0x00000000
SIPR =0x00000000
LLAR =0xFE80000000000000040000FFFE120006
GUAR =0x20000000000000000000000000000000
SUB6R =0x00000000000000000000000000000000
GA6R =0x00000000000000000000000000000000
SLDIP6R=0x000000000000000000000000C0A802C9
SLDIPR =0xC0A802C9
SLDHAR =0x000000000000
PINGIDR =0x6100
PINGSEQR=0x0000
UIPR =0x00000000
UPORTR =0x0000
UIP6R =0x00000000000000000000000000000000
UPORT6R=0x0000
INTPTMR=0x0000
PLR =0x00
PFR =0x00
VLTR =0x00000000
PLTR =0x00000000
PAR =0x00000000000000000000000000000000
ICMP6BLKR=0x00
RTR =0x07D0
RCR =0x07
SLRTR =0x2710
SLRCR =0x02
SLHOPR =0x80
–W6100 Dump Socket 0 Registers–
Sn_MR =0x00
Sn_PSR =0x00
Sn_CR =0x00
Sn_IR =0x00
Sn_IMR =0xFF
Sn_SR =0x00
Sn_ESR =0x00
Sn_PNR =0x00
Sn_TOSR =0x00
Sn_TTLR =0x80
Sn_FRGR =0x4000
Sn_MSSR =0x0000
Sn_PORTR =0x0000
Sn_DHAR =0xFFFFFFFFFFFF
Sn_DIPR =0x00000000
Sn_DIP6R =0x00000000000000000000000000000000
Sn_DPORTR =0x0000
Sn_MR2 =0x00
Sn_RTR =0x0000
Sn_RCR =0x00
Sn_KPALVTR=0x00
Sn_TX_BSR =0x02
Sn_TX_FSR =0x0800
Sn_TX_RD =0x0000
Sn_TX_WR =0x0000
Sn_RX_BSR =0x02
Sn_RX_RSR =0x0000
Sn_RX_RD =0x0000
Sn_RX_WR =0x0000
–W6100 Dump Socket 1 Registers–
Sn_MR =0x00
Sn_PSR =0x00
Sn_CR =0x00
Sn_IR =0x00
Sn_IMR =0xFF
Sn_SR =0x00
Sn_ESR =0x00
Sn_PNR =0x00
Sn_TOSR =0x00
Sn_TTLR =0x80
Sn_FRGR =0x4000
Sn_MSSR =0x0000
Sn_PORTR =0x0000
Sn_DHAR =0xFFFFFFFFFFFF
Sn_DIPR =0x00000000
Sn_DIP6R =0x00000000000000000000000000000000
Sn_DPORTR =0x0000
Sn_MR2 =0x00
Sn_RTR =0x0000
Sn_RCR =0x00
Sn_KPALVTR=0x00
Sn_TX_BSR =0x02
Sn_TX_FSR =0x0800
Sn_TX_RD =0x0000
Sn_TX_WR =0x0000
Sn_RX_BSR =0x02
Sn_RX_RSR =0x0000
Sn_RX_RD =0x0000
Sn_RX_WR =0x0000
–W6100 Dump Socket 2 Registers–
Sn_MR =0x00
Sn_PSR =0x00
Sn_CR =0x00
Sn_IR =0x00
Sn_IMR =0xFF
Sn_SR =0x00
Sn_ESR =0x00
Sn_PNR =0x00
Sn_TOSR =0x00
Sn_TTLR =0x80
Sn_FRGR =0x4000
Sn_MSSR =0x0000
Sn_PORTR =0x0000
Sn_DHAR =0xFFFFFFFFFFFF
Sn_DIPR =0x00000000
Sn_DIP6R =0x00000000000000000000000000000000
Sn_DPORTR =0x0000
Sn_MR2 =0x00
Sn_RTR =0x0000
Sn_RCR =0x00
Sn_KPALVTR=0x00
Sn_TX_BSR =0x02
Sn_TX_FSR =0x0800
Sn_TX_RD =0x0000
Sn_TX_WR =0x0000
Sn_RX_BSR =0x02
Sn_RX_RSR =0x0000
Sn_RX_RD =0x0000
Sn_RX_WR =0x0000
–W6100 Dump Socket 3 Registers–
Sn_MR =0x00
Sn_PSR =0x00
Sn_CR =0x00
Sn_IR =0x00
Sn_IMR =0xFF
Sn_SR =0x00
Sn_ESR =0x00
Sn_PNR =0x00
Sn_TOSR =0x00
Sn_TTLR =0x80
Sn_FRGR =0x4000
Sn_MSSR =0x0000
Sn_PORTR =0x0000
Sn_DHAR =0xFFFFFFFFFFFF
Sn_DIPR =0x00000000
Sn_DIP6R =0x00000000000000000000000000000000
Sn_DPORTR =0x0000
Sn_MR2 =0x00
Sn_RTR =0x0000
Sn_RCR =0x00
Sn_KPALVTR=0x00
Sn_TX_BSR =0x02
Sn_TX_FSR =0x0800
Sn_TX_RD =0x0000
Sn_TX_WR =0x0000
Sn_RX_BSR =0x02
Sn_RX_RSR =0x0000
Sn_RX_RD =0x0000
Sn_RX_WR =0x0000
–W6100 Dump Socket 4 Registers–
Sn_MR =0x02
Sn_PSR =0x00
Sn_CR =0x00
Sn_IR =0x04
Sn_IMR =0xFF
Sn_SR =0x22
Sn_ESR =0x00
Sn_PNR =0x00
Sn_TOSR =0x00
Sn_TTLR =0x80
Sn_FRGR =0x4000
Sn_MSSR =0x05C0
Sn_PORTR =0x0044
Sn_DHAR =0xFFFFFFFFFFFF
Sn_DIPR =0xFFFFFFFF
Sn_DIP6R =0x00000000000000000000000000000000
Sn_DPORTR =0x0043
Sn_MR2 =0x00
Sn_RTR =0x07D0
Sn_RCR =0x07
Sn_KPALVTR=0x00
Sn_TX_BSR =0x02
Sn_TX_FSR =0x0800
Sn_TX_RD =0x0258
Sn_TX_WR =0x0258
Sn_RX_BSR =0x02
Sn_RX_RSR =0x0000
Sn_RX_RD =0x0458
Sn_RX_WR =0x0458
–W6100 Dump Socket 5 Registers–
Sn_MR =0x00
Sn_PSR =0x00
Sn_CR =0x00
Sn_IR =0x00
Sn_IMR =0xFF
Sn_SR =0x00
Sn_ESR =0x00
Sn_PNR =0x00
Sn_TOSR =0x00
Sn_TTLR =0x80
Sn_FRGR =0x4000
Sn_MSSR =0x0000
Sn_PORTR =0x0000
Sn_DHAR =0xFFFFFFFFFFFF
Sn_DIPR =0x00000000
Sn_DIP6R =0x00000000000000000000000000000000
Sn_DPORTR =0x0000
Sn_MR2 =0x00
Sn_RTR =0x0000
Sn_RCR =0x00
Sn_KPALVTR=0x00
Sn_TX_BSR =0x02
Sn_TX_FSR =0x0800
Sn_TX_RD =0x0000
Sn_TX_WR =0x0000
Sn_RX_BSR =0x02
Sn_RX_RSR =0x0000
Sn_RX_RD =0x0000
Sn_RX_WR =0x0000
–W6100 Dump Socket 6 Registers–
Sn_MR =0x00
Sn_PSR =0x00
Sn_CR =0x00
Sn_IR =0x00
Sn_IMR =0xFF
Sn_SR =0x00
Sn_ESR =0x00
Sn_PNR =0x00
Sn_TOSR =0x00
Sn_TTLR =0x80
Sn_FRGR =0x4000
Sn_MSSR =0x0000
Sn_PORTR =0x0000
Sn_DHAR =0xFFFFFFFFFFFF
Sn_DIPR =0x00000000
Sn_DIP6R =0x00000000000000000000000000000000
Sn_DPORTR =0x0000
Sn_MR2 =0x00
Sn_RTR =0x0000
Sn_RCR =0x00
Sn_KPALVTR=0x00
Sn_TX_BSR =0x02
Sn_TX_FSR =0x0800
Sn_TX_RD =0x0000
Sn_TX_WR =0x0000
Sn_RX_BSR =0x02
Sn_RX_RSR =0x0000
Sn_RX_RD =0x0000
Sn_RX_WR =0x0000
–W6100 Dump Socket 7 Registers–
Sn_MR =0x00
Sn_PSR =0x00
Sn_CR =0x00
Sn_IR =0x00
Sn_IMR =0xFF
Sn_SR =0x00
Sn_ESR =0x00
Sn_PNR =0x00
Sn_TOSR =0x00
Sn_TTLR =0x80
Sn_FRGR =0x4000
Sn_MSSR =0x0000
Sn_PORTR =0x0000
Sn_DHAR =0xFFFFFFFFFFFF
Sn_DIPR =0x00000000
Sn_DIP6R =0x00000000000000000000000000000000
Sn_DPORTR =0x0000
Sn_MR2 =0x00
Sn_RTR =0x0000
Sn_RCR =0x00
Sn_KPALVTR=0x00
Sn_TX_BSR =0x02
Sn_TX_FSR =0x0800
Sn_TX_RD =0x0000
Sn_TX_WR =0x0000
Sn_RX_BSR =0x02
Sn_RX_RSR =0x0000
Sn_RX_RD =0x0000
Sn_RX_WR =0x0000

Please tell me if there is anything strange.

Thanks,

So what we see here:

IR=0x04 -> IPv4 address conflict
IMR=0x02 -> IPCONF bit is 0! (only port unreachable interrut is enabled)

SIR=0x010 -> socket 4 interrupt occured
SIMR=0x00 -> no socket interrupts are enabled!

SLDIPR =0xC0A802C9 -> destination IP address set to 192.1698.2.201
SLDHAR =0x000000000000 -> destination hardware address, not set

Socket4:
UDP4 mode
received data
max MSS=0x5c0
source port=0x44
detstination hardware reg =0xffffffffffff
destination IP address=0xffffffff
destination oprt reg=0x43
TX_WR macthes TX_RD
RX_WR matched RX_RD

You have IP address conflict bit set, but you have only port unreachable interrupt enable bit set.
You have socket 4 interrupt pending. At the same time socket interrupts are not enabled, must not cause hardware interrupt.
Socket4 is in UDP mode, having source port 0x44 and source MAC address 00:00:00:12:00:06, destination port 0x43, and destination MAC address and IP address unresolved. No new data to be sent, all data read.

Source of interrupt for socket4 is clear: something was received on the socket. RD and WR pointers are same means you have read the data, but most probably forgot to clear the interrupt flag. As soon as SENDOK bit is not set, assume you did not send anything onto the socket4 yet (or you cleared the flag).

Now let’s again look at the picture you provided at the beginning.
W6100 asks for IP address, sending from 0.0.0.0 to broadcast ff.ff.ff.ff. Server replies to c0.a8.02.cc, however the response must have been given to ff.ff.ff.ff (broadcast) with W6100 MAC address in the payload. IMHO DHCP server does wrong assuming 192.169.2.204 before DHCP process completes. Maybe because this address has already been leased to the W6100 before.
Then, after accepting DHCP leased IP address, W6100 asks two times if someone has the same IP address.
Shortly another device starts DHCP process, obtains 192.168.2.206, and after completion of DHCP process sends request if anyone else ahs this IP address.
And you say when this packet is received by the W6100, it raises IP address conflict bit.
And you set W6100 to send DHCP decline as soon as this bit gets set.

Right?

You have IPCONF-related interrupt disabled, this means you perform polling of this bit and not (almost immediately) reacting its state change. Are you sure that this IPCONF status bit is being polled regularly and that your W6100 driver notices the change promptly? May be this bit being set earlier than reception of that ARP packet from 12:00:07? Are you sure you see all the packets being transferred on the network in the capture?

Thank you for your detailed analysis.

As you posted, I am sending the ARPProbe using a socket-less command.
This is based on the W6100 datasheet section 6.6.1.
After transmission, we poll the IPCONF bit in the IR register in addition to the ARP4 and TOUT bits in the socketless interrupt register SLIR.
The software flow is shown below.
//-----------------------------
setIRCLR(IR_IPCONF);
setSLRCR(2);// max 3 times
setSLRTR(10000);// timeout=1 second
setSLDIP4R(OfferedIp);
setSLCR(SLCR_ARP4);// send ARP Probe
while(getSLCR()){
osDelay(1);
}
while(((tmp = getSLIR()) & 0xC0) == 0x00){ // break when ARP4 or TOUT
if((tmp = getIR() & 0x04) == 0x04){
break;// break when IPCONF
}
osDelay(1);
}
// check tmp value
// if ARP4 or IPCONF → Detect Conflict, send DHCPDECLINE
// if TOUT → No conflict, continue.
//-----------------------------

At this timing, there is DHCP broadcast packet communication between 12:00:07 and the DHCP server, but IPCONF was not set.
Then 12:00:07 sends an ARPProbe and the W6100’s IPCONF is set.If the ARPProbe from 12:00:07 does not come, the IPCONF bit will not be set.
According to wireshark, no other packets were flowing during this period.

UDP socket 4 was used for previous DHCP communication (broadcast transmission), and the register value remained. As a test, I closed socket 4 before sending the ARPProbe, and the IPCONF bit was set without any effect.

Thanks,

12:00:07 sends ARP request, not ARP response, therefore 12:00:06 must not react to it. This source does not use this mechanism, thus no explicit proof of using this functionality.

while(((tmp = getSLIR()) & 0xC0) == 0x00)
{
 if((tmp = getIR() & 0x04) == 0x04)
 {
   break;
 }
 osDelay(1);
}

If code breaks in break then you get IPCONF set without receiving the ARP reply and within timeout interval. But note that you assign same tmp variable in both locations, and it is important how you check tmp. Assignment syntax differs a little (in while you get tmp assigned to SLIR[7:0], in if - only bit 2 of IR). You may have designed (optimized) this intentionally, but it looks unusual in the debugging environment. Imagine getSLIR() return 0x84 for some reason, would your checks you did not disclose be reliable?

Read IR register just before you send ARP, and check its bit 2 to ensure it is reset.

Thank you for your advice.

12:00:07 sends ARP request, not ARP response, therefore 12:00:06 must not react to it. This source does not use this mechanism, thus no explicit proof of using this functionality.

We believe that source code is insufficient to meet the requirements of section 2.1.1 of RFC5227.
The source code can detect conflicts by someone’s ARP reply, but it cannot detect conflicts when someone does an ARP probe with the same IP address.
I expected that by monitoring the IPCONF bit, I could check for ARP probes for the same IP address that someone sent. However, the IPCONF bit can be set not only by ARP probes with the same IP address, but also with different IP addresses.

Read IR register just before you send ARP, and check its bit 2 to ensure it is reset.

I checked the IP register just before sending the ARP probe and the IPCONF bit is reset (0).
Therefore, we are certain that the IPCONF bit was set (1) by the ARP probe from 12:00:07.

Thanks,

Your registerdump i quite useless here - we would need dumps right before and after every packet to really now, whats going on here.

You are right, sadly theres no information about when the IPCONF-bit is set.
BUT its name is “IP” - you can only have IP-conflicts when having an IP packet. ARP-packets ARE NO IP PACKETS! DHCP-Packets are IP packets!
ARP-Packets are under the IP-Layer in the MAC-layer therefore wireshark is displaying MAC addresses as source and destination.
If so, W6100 has to differ between an ARP and “normal” IP packets. I don’t think it does.

Just change your test setup - i suggest doing the following to reverse engeneer the IPCONF-bit.
Simulate a “real” IP conflict (you need two ethernet chips for that). You have to ensure there is no other traffic on the network!

Simulation one: two CHIPs send IP-packets with the same IP

  1. reset IPCONF-bits in all chips
  2. CHIP1 send any IP-Packet with IP e.g. 192.168.0.11
  3. check CHIP1s IPCONF-flag (should be 0)
  4. check CHIP2s IPCONF-flag (should be 0)
  5. CHIP2 send any IP-Packet with IP 192.168.0.11 (same as CHIP1)
  6. check CHIP1s IPCONF-flag (should be 1)
  7. check CHIP2s IPCONF-flag (should be 1)

Simluation two: IP-Address = 0.0.0.0

  1. reset IPCONF-bits in all chips
  2. CHIP1 send any IP-Packet (e.g. DCHP OFFER) with IP 0.0.0.0
  3. check CHIP1s IPCONF-flag (should be 0) <<< if NOT, wiznet chip is telling you, that ip 0.0.0.0 is “uncommon”
  4. check CHIP2s IPCONF-flag (should be 0)
  5. CHIP2 send any IP-Packet (e.g. DCHP OFFER) with IP 0.0.0.0 (same as CHIP1)
  6. check CHIP1s IPCONF-flag (should be 1) <<< because a DCHP-OFFER is UDP-> therefore it works including the IP-Layer
  7. check CHIP2s IPCONF-flag (should be 1)

Simulation three: both CHIPs ARPing different IP-Addresses:

  1. reset IPCONF-bits in all chips
  2. CHIP1 send an ARP-request for IP e.g. 192.168.0.11
  3. check CHIP1s IPCONF-flag (should be 0) and ARP-Error flag = no error?
  4. check CHIP2s IPCONF-flag (should be 0) and ARP-Error flag = no error?
  5. CHIP2 send an ARP-request for IP e.g. 192.168.0.12
  6. check CHIP1s IPCONF-flag (should be 1) and ARP-Error flag = no error?
  7. check CHIP2s IPCONF-flag (should be 1) and ARP-Error flag = no error?

Simulation four: both CHIPs ARPing SAME IP-Addresses:

  1. reset IPCONF-bits in all chips
  2. CHIP1 send an ARP-request for IP e.g. 192.168.0.11
  3. check CHIP1s IPCONF-flag (should be 0) and ARP-Error flag = no error?
  4. check CHIP2s IPCONF-flag (should be 0) and ARP-Error flag = no error?
  5. CHIP2 send an ARP-request for IP e.g. 192.168.0.11
  6. check CHIP1s IPCONF-flag (should be 1) and ARP-Error flag = no error?
  7. check CHIP2s IPCONF-flag (should be 1) and ARP-Error flag = no error?
    We expect no error here, because there is no answer to the ARP? (forgot what RFC says here)

Simulation five: CHIP1 ARPing - CHIP2 responding:

  1. reset IPCONF-bits in all chips
  2. CHIP1 send an ARP-request for IP e.g. 192.168.0.11
  3. check CHIP1s IPCONF-flag (should be 0) and ARP-Error flag = no error?
  4. check CHIP2s IPCONF-flag (should be 0)
  5. CHIP2 send an ARP-respond for IP e.g. 192.168.0.11
  6. check CHIP1s IPCONF-flag (should be 1) and ARP-Error flag = ERROR?
  7. check CHIP2s IPCONF-flag (should be 1)

I wondering the results^^

Regards

Possible for outgoing packets, for incoming not because they are asynchronous.

W5500 datasheet:

IP Conflict
Bit is set as ‘1’ when own source IP address is same with the sender IP address in the received ARP request.

W5100 datasheet:

IP Conflict
It is set as ‘1’, when there is ARP request with same IP address as Source IP address. This bit is cleared to ‘0’ by writing ‘1’ to this bit.

W3150+ datasheet:

IP Conflict
It is set as ‘1’, when there is ARP request with same IP address as Source IP address. This bit is cleared to ‘0’ by writing ‘1’ to this bit.

To my experience all the chips are based on the same “engine”, therefore if there’s no explicitly defined difference we may assume same behavior.

But we see here… them talking about Source IP address! But ARP packet does NOT have source IP address in the header, there’s target IP address in the payload. Anyway now it looks not only behaving incorrectly, but also being documented incorrectly…

This MAY be true - until i am not shure (unless the W6100s engeneer tells me) i don’t count 100% on that.

Your confused, let me explain:
W5500: “own source IP address” == SIPR
" IP address in the received ARP request." == Wireshark “How has IP …?”

“Source IP address” == IP address of the Wiznets Chip set in “SIPR”.
“ARP request with same IP” == Wireshark “Who has IP…?”

Then use wireshark to “syncronize”.

Right, and these are two different locations in the data packet - source IP address goes in header of IP packet, and ARP IP address goes in Ethernet frame payload.

If the requested IP-Address in the ARP packet (from anther peer) == own source IP ->>> ERROR

Agreed, seems I did not read it properly :slight_smile:

Then it seems that chip does not work as expected…

@tom3 try to contact WIZnet support using email and point them to this thread. Optionally write to sales address to ensure to get attention.