Find Ethernet readers via UDP introspection

Using UDP introspection, you can locate all ID-engine XE readers in the network. We recommend this approach as an alternative to SLP if the following preconditions apply:


  • You run your application as a server.
  • Readers are not protected by a firewall.
  • Each reader is connected to a PC (or another device with its own IP address).
  • The host knows the PC's IP address.

Advantage of this method: You not only receive the readers' IP addresses, but also a mapping of each reader to its connected PC.

Process overview

  1. The host sends a specially formatted UDP packet to the PC.
    The packet contains the IP address of the host and the PC.
  2. The reader reads the packet.
    This is possible due to the promiscuous mode of the embedded Ethernet switch: In this mode, the reader can process any Ethernet frame that is received by one of the switch ports – This includes frames that aren't addressed to the reader itself, but to the connected PC.
  3. The reader responds with its own IP address as well as the PC's IP address found in the UDP packet.

UID introspection to identify BALTECH readers in a complex Ethernet network

Process in detail

Connect reader to PC

Connect the reader to the PC via the reader's Device port.

Don't insert another switch stage

Make sure the reader is directly connected to the PC to avoid an increase in network load seen by the reader.


UDP introspection is automatically enabled as long as the reader is not configured for a host yet. If the reader is configured, but the host is not available, the reader will re-enable UDP introspection after several connection failures. Thus, you can easily reassign the reader to the host in case of network topology changes, e.g. a new host IP address.

View State Diagram

Send UDP packet with BRP frame

Send out a UDP packet with the following BRP frame periodically to the PCs connected to the readers:

Name Type/Size Description
FormatVersion Integer (8 bits) Has to be 0x01
HostIpAddress Raw data (4 bytes) IP address of host application
HostPort Integer (16 bit; MSB) Port via reader can contact the host application

Stick to maximum frame rate

The reader analyzes every arrived Ethernet frame within an interrupt routine. This takes about 25μs per frame independent of the frame size. If the receiving frame rate is higher, frames will get lost. Short term spikes are no problem as the reader switch buffers the received frames (buffer size is approx. 8k).

If the frame rate is close to the limit, the reader will get caught in a loop working up the interrupt routine again and again. This will block the reader as there's no processor time for any other tasks left.

Reader response

When the reader detects the above frame, it will try to open a BRP-over-TCP connection to the host and send an identification frame with the ConnectReason set to UDPIntrospection:

Name Type/Size Description
FormatVersion Integer (8 bits) 0x01
ConnectReason Bitmask (16 bytes) 0x0010 (the value for UDPIntrospection)
See all connect reasons here
SerialNumber Raw data (8 ASCII encoded decimal digits; no trailing zero byte) Serial number of reader

Configure the reader

  1. Deploy the reader configuration.
    It needs to contain the host connection data.

  2. Reboot the reader using the Sys.Resetcall_made command.

From now on, the reader will open a connection to the host when certain events occur.

Try it out with our app note

The app note appnotes\udp_introspection in the SDK gives you a working example of the implementation. It requires a BRP server to run somewhere in the network. For testing, you can use appnotes\tcp_server (or its precompiled version \binaries\winXX\release\appnote_tcp_server.exe).

Learn more about app notes