OnixS C++ CME MDP Premium Market Data Handler 5.11.1
Users' manual and API documentation
Loading...
Searching...
No Matches
Connectivity troubleshooting

Follow the data from the network interface to the Feed Engine, Handler processing, and application callbacks. A packet capture, a connected feed, and a book update establish different things.

Evidence at each observation point

Dashed arrows mark transitions to verify. These are observation points for the standard Socket Feed Engine, not separate threads. For kernel-bypass reception, see Solarflare Feed Engine.

Establish the expected configuration

Before changing network settings:

  1. Confirm the environment, channel, data centre and connectivity XML used by the running process. Check any manually configured feed endpoints, which take priority over the XML. See Connectivity configuration, Market data channel and Selecting the data centre.
  2. Record the multicast group, UDP port and intended local interface for each enabled A/B feed: incremental, instrument definitions, and the required MBP/MBO snapshot feeds. Check the feed layouts against the sources available in that environment; see FAQ for missing secondary snapshot connection settings. Confirm with your market data provider when traffic is expected.
  3. Check startup exceptions, errors, warnings and feed connection logs. OnixS::CME::MDH::HandlerListener::onStarted precedes feed connection and does not confirm reception; see Observing startup. For a supplied sample, check its working directory and settings as described in Live CME channel quickstart.
  4. If using an explicit Feed Engine, confirm that the application repeatedly calls OnixS::CME::MDH::NetFeedEngine::process or runs an OnixS::CME::MDH::FeedEngineThreadPool. Starting the Handler alone does not run an explicit engine. The default engine is managed internally.

An OnixS::CME::MDH::Issue::ReceiveTimeout warning (No data received within N seconds) reports that the feed received no packets within its receive interval. For the source feed named in the warning, follow No relevant traffic at the host interface, then Traffic is visible, but processing is absent if traffic is visible. A timeout can switch feeds when a failover layout is configured, so recheck which feed is connected.

For the standard Socket Feed Engine, use the chart after checking configuration and engine execution, confirming that the feed is currently connected, and establishing when traffic is expected. Select a diagnostic box to open its section.

Choose a diagnostic path

No relevant traffic at the host interface

Note
The capture and UDP socket checks below apply to the standard Socket Feed Engine. For Solarflare kernel-bypass reception, ordinary host captures and UDP socket listings may not cover the receive path. Use Solarflare Feed Engine and its diagnostics; an empty host capture alone does not establish upstream loss.

Start with the currently connected incremental feeds. Confirm each feed's current connection/join from the latest connection/disconnection logs or the OnixS::CME::MDH::ChannelFeedListener::onFeedConnected and OnixS::CME::MDH::ChannelFeedListener::onFeedDisconnected events before interpreting an empty capture.

Instrument-definition and MBP/MBO snapshot feeds are connected for their recovery procedures and are normally disconnected afterwards; see Market State Recovery. With the default recovery feed layout, feed A is primary and feed B is used after failover. An enabled endpoint need not currently be joined.

Capture while the application is running, the feed is connected and traffic is expected. Repeat for the currently connected A/B endpoints; seeing A does not establish that B works. Replace every angle-bracket placeholder with the recorded interface, multicast group or UDP port.

On Linux, with tcpdump installed and capture privileges, run:

sudo tcpdump -ni <feed-interface> 'udp and dst host <multicast-group> and dst port <port>'

Stop with Ctrl+C after the observation interval. Matching lines show traffic at that capture point, including its source IP. Capture drop counts describe the capture mechanism, not the Handler's socket; see the tcpdump manual.

On Windows, use Wireshark with its capture driver installed and the required capture permissions. Select the intended adapter and apply this display filter, replacing the placeholders:

ip.dst == <multicast-group> && udp.dstport == <port>

See Wireshark capture prerequisites and display filters.

If no matching traffic appears for a feed that remains connected, verify the adapter and filter first. Then check the provider's feed availability, entitlement, multicast routing and switch group membership with the network administrator. Keep the receiver running so its multicast joins can be observed. A successful ping to a router tests unicast reachability, not delivery of the configured multicast group and port. If matching traffic appears, check feed and Handler processing. Capture visibility does not prove socket delivery.

Traffic is visible, but processing is absent

  1. Confirm that the feed is still connected, then compare the captured destination and interface with its connection log. Correct a mismatch in the stopped Handler's settings; see Network interfaces. The OnixS::CME::MDH::FeedSettings::feedANetworkInterfaces and OnixS::CME::MDH::FeedSettings::feedBNetworkInterfaces setters configure multicast join interfaces for the corresponding feed roles. Use interface names on Linux and local interface IP addresses on Windows; multiple values are separated by semicolons.
  2. With the standard Socket Feed Engine, check that the process has the expected UDP endpoint while the feed is connected. On Linux, sudo ss -unap lists UDP sockets and owning processes. On Windows, use PowerShell with the NetTCPIP module, replacing <handler-pid>:

    Get-NetUDPEndpoint -OwningProcess <handler-pid> | Format-Table LocalAddress, LocalPort, OwningProcess

    Compare the port and owning process, allowing for wildcard local addresses. A bound endpoint does not prove multicast membership or packet delivery. If it is absent, inspect connection errors and confirm the correct process and active feed. See Get-NetUDPEndpoint.

  3. Register an OnixS::CME::MDH::ChannelFeedListener before startup and count OnixS::CME::MDH::ChannelFeedListener::onFeedPacket events by source; see Listening to feed events and Feed tracing. A feed connection event only confirms connection/join setup. Packet events establish delivery to the feed callback, including duplicates and out-of-order data; they do not establish market data processing or book readiness. Recheck engine execution and worker errors if packet events are absent. If they are present, inspect processing errors and recovery events, then follow the recovery or book-callback path.

If endpoint, interface and engine checks agree but reception remains absent, inspect host filtering with the administrator. Firewall logs or drop counters showing blocked feed traffic can justify a narrow rule for the required source, destination group, UDP port and interface/application. Rule changes require administrative privileges; keep the firewall enabled rather than disabling it as a general diagnostic step.

Check reverse-path filtering on Linux

When captured packets arrive on one interface but the route to their source IP uses another, strict reverse-path filtering is a possible cause. With iproute2 and sysctl available, read:

ip route get <sender-ip>
sysctl net.ipv4.conf.all.rp_filter net.ipv4.conf.<feed-interface>.rp_filter

The route lookup is an initial check; policy routing may require further analysis. The effective rp_filter value is the maximum of all and the receiving interface: 0 disables source validation, 1 requires the best reverse path to use that interface, and 2 requires the source to be reachable through some interface. default supplies defaults for newly created interfaces; it does not describe the effective policy on an existing interface. See the Linux kernel documentation.

If routing and filtering evidence explains the failure, have the administrator correct the route or choose an appropriate interface policy. Loose mode can accommodate asymmetric routing while retaining source reachability checks.

Attention
Changing source validation requires administrative privileges and changes spoofing protection. Setting only the receiving interface's rp_filter to 0 may have no effect when all is nonzero.

Retest feed packet reception after an agreed change.

Gaps or repeated recovery

Record issue codes, feed sources, sequence ranges and recovery timings. An OnixS::CME::MDH::Issue::SequenceError warning identifies a gap in the Handler's incremental sequence; it does not locate the loss in the network, NIC, socket buffers or recovery queue.

Use the measured bottleneck to choose the next action: investigate upstream loss, correct a missing feed, reduce processing delays, or review the relevant buffer/queue limit. Increasing a recovery queue limit does not repair socket loss or a processing bottleneck.

Processing is active, but book callbacks are absent

  1. Confirm that the desired instrument belongs to the configured channel and passes the application's selection; see Selecting securities of interest. Feed activity can concern other instruments or duplicate packets.
  2. Check that the application registered an OnixS::CME::MDH::SecurityListener and implements the onBookUpdate overload for the expected book type. Confirm that maintenance of that book type is enabled; see Order book maintenance and Event listeners.
  3. Check processing/recovery events and errors. Continued feed reception during recovery does not mean that incremental updates are already being published. Follow Processing Phases and Data Readiness and the repeated-recovery path if recovery stalls.
  4. Check the notification strategy and whether the instrument actually has book changes. Incremental notifications can wait for a quote/event boundary; see Book Update Notification Strategies. See Interpreting a book update for book readiness conditions once a callback arrives.

More information

For further investigation, retain the effective configuration, SDK version, timestamps, issue codes, feed traces and counter changes for OnixS Support.