CrossConnect, Connect. Monitor. Optimize.
by CybrIQ

Data Collection Reference

A plain account of what CrossConnect reads off each device, over which protocol, and how every value is staged and validated into the source of truth. Written for the network engineer who wants the OIDs, the ports, the libraries, and the staging table behind each fact, not adjectives.

Audience: network engineering, NetEng tooling, security review
Scope: every collector, MIB column, OID, listener, CLI command, and application input
Stack: Java 21 · Spring Boot 3.4.0 · PostgreSQL · snmp4j 3.8.2 · sshj 0.38.0 · Batfish
Document: technical reference, 21 June 2026
Contact: contact_us@cybriq.io

0 How to read this document

Every collector below is a real protocol implementation, not a mock-up. Each section names the mechanism rather than an adjective: the OID or column walked, the port bound, the library and pinned version, the staging entity written, and the canonical record it becomes. Collectors that are opt-in or off by default are labelled, so you can tell which sockets a stock deployment opens.

on active by default in a discovery sweep opt-in shipped, operator-enabled by flag or credential off dormant listener, opens no network socket until enabled
1How collection works 2The SNMP sweep: session & credentials 3SNMP inventory & topology MIBs 4SNMP routing, multicast, timing, environment 5Configuration over SSH & the formal model 6Cloud-managed sources (vendor REST) 7Passive listeners 8Application & integration input 9The staging entities 10From signal to truth: validation 11Worked example: one link, wire to map AOID reference by probe BCollector configuration reference

1 How collection works

CrossConnect reads, it does not intercept. Every input is either a control-plane query the network already answers, an announcement the gear already broadcasts, configuration text, or a record an operator or another system hands in. Nothing is sniffed off the wire: there is no packet capture, no SPAN or mirror feed, and no payload inspection anywhere in the platform.

Four families of collector feed one pipeline. Each writes to staging, an append-only set of discovered_* observations. Validation then confidence-scores each staged observation and commits it into the source of truth, the canonical store every read, view, and AI answer resolves against. The derived layer sits on top: it computes scores and rollups from that source of truth and writes no new facts of its own.

flowchart LR
  subgraph COL["FOUR COLLECTOR FAMILIES"]
    direction TB
    A["Active discovery
SNMP · LLDP · ICMP"] P["Passive listeners
flow · mDNS · DHCP · traps"] C["Config & formal model
SSH · Batfish"] X["Application input
REST · CSV · inbound API"] end STG[("Staging
append-only discovered_*")] G{"Validation
confidence-score · commit"} SOT["Source of truth
canonical records"] AUD[("Audit chain
hash-linked · HMAC")] DER["Derived layer
pure functions"] A --> STG P --> STG C --> STG X --> STG STG --> G G --> SOT SOT --> AUD SOT --> DER classDef app fill:#173a6b,stroke:#0f2a4f,color:#ffffff; classDef store fill:#e3f3f6,stroke:#1797b3,color:#173a6b; classDef gate fill:#fdf0dd,stroke:#e0892a,color:#173a6b; classDef ext fill:#ffffff,stroke:#9aa8c0,color:#173a6b; class A,P,C,X,SOT,DER app; class STG,AUD store; class G gate;
Figure 1. The collection map. Four read-only collector families feed one append-only staging store. Validation is the trust boundary into the source of truth and its hash-linked audit chain, and the derived layer reads from there. No collector writes the source of truth directly, apart from direct operator entry.
Two postures hold throughout. Active discovery (SNMP, LLDP, reachability) is the backbone. It runs on a timer, scheduled at interval-ms (default 300000, 5 minutes) after a one-minute initial-delay-ms. The four passive listeners (flow, mDNS, DHCP, traps) are dormant by default: each is gated by its own enabled flag (default false) and binds no socket until an operator turns it on. Nothing a collector reads counts as truth on its own; it stays an observation until validation (§10) commits it.

2 The SNMP sweep: session & credentials

SNMP is the Simple Network Management Protocol, the standard way to read facts off network gear. The discovery worker (crossconnect.discovery.enabled, default false; set source=snmp to drive real SNMP rather than the seed source) queries each managed device over UDP/161 on a schedule. The session is built by SnmpDiscoverySource on snmp4j 3.8.2, and the per-device probe methods live in SnmpProbe. The session details a security reviewer or a network engineer wiring up an account will need:

PropertyValueNotes
Transport / portDefaultUdpTransportMapping, UDP 161Outbound only; no agent installed, no port opened on the device.
SNMP versionsv2c (community) and v3 (USM)v3 registers USM via SecurityProtocols.addDefaultProtocols().
v3 authMD5, SHA, SHA-224/256/384/512Mapped to snmp4j AuthSHA / AuthHMAC* protocol IDs.
v3 privacyDES, 3DES, AES-128/192/256Security level resolves to AUTH_PRIV, AUTH_NOPRIV, or NOAUTH_NOPRIV.
Read operationscalar GET; table GETBULKTableUtils with maxNumRowsPerPDU = 20; there is no set path, so it can only read, never write.
Timeout / retries1500 ms per request, 1 retryAn unreachable device is counted and skipped; it never blocks the sweep.
Credential storageAES-256-GCM, per-tenantCommunity / v3 keys decrypted in memory only at probe time; never logged.
Credential pinningCredentialPinService, per (tenant, device)The credential that last worked is tried first on the next sweep, and the others are tried in order only if it fails.
sequenceDiagram
  participant SCH as Scheduler
(interval-ms) participant SRC as SnmpDiscoverySource participant DEV as Managed device
SNMP agent participant PRB as SnmpProbe participant STG as DiscoveryStagingService SCH->>SRC: open tenant sweep SRC->>SRC: build read-only target
(pinned credential first) SRC->>DEV: GET system scalars (161/UDP) DEV-->>SRC: sysDescr · sysName · sysUpTime SRC->>PRB: probeAll(session, device) loop each MIB family (best-effort) PRB->>DEV: GETBULK walk (maxRows 20) DEV-->>PRB: varbinds → typed Fact records end PRB-->>SRC: SnmpSweepResult SRC->>STG: stage() inserts discovered_* rows Note over STG: append-only · stamped observedAt
nothing in source of truth changes yet
Figure 2. One probe sweep. The scheduler opens a tenant sweep, SnmpDiscoverySource pins a read-only credential and reads the system scalars, then SnmpProbe runs each MIB family best-effort over GETBULK. If a device does not support a given MIB, the probe returns an empty list and moves on, so one missing MIB never aborts the sweep. The decoded SnmpSweepResult is staged append-only.

3 SNMP inventory & topology MIBs

A MIB (Management Information Base) is the catalog of values a device exposes over SNMP. The inventory probes answer the basics: what is this device, what are its ports, and how is it wired. Each writes a single staging entity per natural key per sweep. The literal OID roots are in Appendix A.

Probe / MIBColumns readStaging → record
probeSystem
RFC 1213 system
sysDescr, sysObjectID, sysUpTime, sysName (GET scalars); software version parsed from sysDescrDiscoveryFactsDevice identity, platform, software, uptime. This is the one probe that always has to run.
probeSerial
ENTITY-MIB, RFC 4133
entPhysicalClass, entPhysicalSerialNumChassis serial (prefers class 3 = chassis). Committed to the Device record.
probeInterfaces
IF-MIB, RFC 2863
ifDescr/ifName/ifAlias, ifType, ifMtu, ifSpeed + ifHighSpeed, ifPhysAddress (MAC), admin + oper statusDiscoveredInterfaceInterface: every port, speed, MAC, state.
probeIfStack
ifStackTable
ifStackStatus (higher / lower ifIndex pairs; sentinels at 0 dropped)DiscoveredIfStack → port-channel (LAG) membership and sub-interface parents.
probeLldp
LLDP-MIB, 802.1AB
lldpRemChassisIdSubtype/Id, lldpRemPortIdSubtype/Id, lldpRemPortDesc, lldpRemSysName/DescDiscoveredNeighborCable links and the topology graph. A neighbour that maps to no known device is flagged as unmanaged.
probeVlans
Q-BRIDGE, 802.1Q
dot1qVlanStaticName (VLAN id from row index)DiscoveredVlanVlan.
probeEndpoints
BRIDGE-MIB / IP-MIB
dot1dBasePortIfIndex, ipNetToMediaPhysAddress (ARP), dot1qTpFdbPort (per-VLAN FDB, legacy dot1dTpFdbPort fallback)DiscoveredEndpoint (source=snmp) → which MAC and IP sit on which port and VLAN.
probeIps
IP-MIB, RFC 1213
ipAdEntIfIndex, ipAdEntNetMask (mask → prefix length)DiscoveredIpIpAddress: host address and recovered prefix per interface.

4 SNMP routing, multicast, timing, environment

On the same session, discovery walks the more specialized MIBs below: routing, multicast, clock timing, and physical health. All are best-effort, so a device that does not support a given MIB is skipped for that one. Reachability is handled separately by an ICMP (ping) probe.

Probe / MIBColumns readStaging → meaning
probeBgp
BGP4-MIB, RFC 4273
bgpLocalAs (scalar); per-peer bgpPeerState, bgpPeerAdminStatus, bgpPeerLocalAddr, bgpPeerRemoteAs, bgpPeerIdentifierDiscoveredBgpPeer: peer AS, router-id, session state (idle…established), admin-up, established flags.
probeOspf
OSPF-MIB, RFC 4750
ospfRouterId (scalar); per-neighbour ospfNbrIpAddr, ospfNbrRtrId, ospfNbrStateDiscoveredOspfNeighbor: neighbour id and adjacency state (down…full).
probeVrfs
MPLS-L3VPN, RFC 4382
mplsL3VpnVrfRD (VRF name decoded from length-prefixed row index)DiscoveredVrf → the VRF / routing-domain model.
probeMulticast
IGMP-MIB, RFC 2933
igmpInterfaceQuerier + igmpInterfaceVersion; igmpCacheSelf (group from row index)DiscoveredQuerier + DiscoveredIgmpMembership: the elected querier plus who is listening to which multicast group, which is evidence of a live Dante / NDI / AV stream.
probePtp
PTPBASE-MIB (RFC 8173), CISCO-PTP fallback
currentStepsRemoved, offsetFromMaster (ns), parent GM identity, priority1/2, clockClass (6=GPS, 7=holdover, 248=free-run), port running stateDiscoveredPtpClock + DiscoveredPtpPort → PTP (Precision Time Protocol) clock-health quality for AV timing. It walks the standard tree first and falls back to the vendor tree.
probeSensors
ENTITY-SENSOR, RFC 3433
entPhySensorType/Scale/Precision/Value/OperStatus/UnitsDisplay; entPhysicalName for the labelDeviceSensor via EntitySensorMapping: temperature, fan, voltage, current, power, frequency, humidity, with ok / warning / critical status. Feeds Service readiness.
Reachability
ICMP probe
Reachable or not, round-trip latency (ms) per sampleDeviceReachability (source=probe): the up/down history over time that sits behind Service readiness and device health.
PoE (Power over Ethernet). probePoe walks POWER-ETHERNET-MIB (RFC 3621): pethMainPsePower (the power budget), pethMainPseConsumptionPower (measured watts), and oper status, writing one DiscoveredPoe per PSE group. This feeds the Rack power view and the building-presence preview.

5 Configuration over SSH & the formal model

Collecting a device's running configuration unlocks the formal-analysis layer, where CrossConnect reasons about the config itself. This collection is opt-in (crossconnect.discovery.collect-config, default false); the bean only loads when the flag is true, so a default deployment never opens an SSH session. The collector is SshConfigCollector on sshj 0.38.0: it opens a read-only interactive shell, turns off paging, issues one read-only show command, captures the text, and exits. It never issues a configure or any other command that would change device state.

Vendor profilePaging commandShow command (read-only)
Cisco IOS / IOS-XEterminal length 0show running-config
Cisco NX-OSterminal length 0show running-config
Juniperset cli screen-length 0show configuration | display set | no-more
Aristaterminal length 0show running-config
Fortinetconfig system console / set output standardshow full-configuration
Palo Altoset cli pager off / config-output-format setshow config running
F5modify cli preference pager disabledtmsh -q show running-config

VendorCliProfile.forVendor() matches the device vendor slug without caring about case. The SSH connect and read timeouts are both 20 seconds. Host-key verification accepts the device key for a read-only collection session, and passwords are decrypted in memory only for the duration of that session.

InputSourceWhat it becomes
Running configSSH, post-sweep, opt-inDeviceConfig (kind=running, source=ssh): captured state, normalized for diffing and fed to Batfish.
Intended / golden configoperator-set or importedDeviceConfig (kind=intended): the baseline a device is checked against.
Configuration driftcomputedConfigDiff: the lines added and removed between two captures (cosmetic differences filtered out), which is the signal behind golden-config drift.
Formal modelBatfish sidecar, from running configsA vendor-neutral model that proves what can reach what, works out the effect of each ACL, infers topology from the config, and finds duplicate addressing. Read by ReachabilityService, AclAnalysisService, ConfigTopologyService.

6 Cloud-managed sources (vendor REST)

Some networks are run from a vendor's cloud dashboard rather than managed device by device. For those, CrossConnect pulls inventory from the vendor's dashboard API over HTTPS instead of walking SNMP. CloudVendorSourceService turns on per tenant once a base URL and bearer token are configured. It reads only the documented dashboard endpoints below, and the token is stored with AES-256-GCM and decrypted in memory only for the duration of the pull.

REST endpointWhat it readsWhat it becomes
/organizations/{org}/networksNetwork list under the organizationThe set of networks to enumerate.
/networks/{id}/appliance/vlansAppliance VLANs and subnetsVlan + recovered prefixes for the network.
/networks/{id}/appliance/firewall/l3FirewallRulesLayer-3 firewall intentDocumented L3 policy for the network, surfaced for review.
Guarded against SSRF. SSRF (server-side request forgery) is the trick of getting a server to call an address it should not. The HTTP client (JDK HttpClient) sets followRedirects(NEVER), a 5-second connect and 10-second request timeout, and requires an HTTPS public host. Before it makes the call it resolves the target and rejects loopback, link-local, RFC1918, CGN (100.64/10), and IPv6 ULA (fc00::/7) addresses. A token is never sent to a private or rebindable target.

7 Passive listeners

Passive listeners query nothing. They listen for traffic summaries and the announcements gear already broadcasts on its own, and none of them looks inside a packet payload. Each listener is off by default (its enabled flag is false) and binds no socket until it is enabled and pinned to a tenant UUID, so the platform adds no network surface unless an operator turns one on.

Listener / classBindWhat it capturesDefaultStaging
NetFlow / sFlow
FlowListener
UDP 2055 / 63435-tuples, byte and packet counts, exporting ifIndex (NetFlow v5/v9/IPFIX, sFlow v5)offDecodedFlowTrafficFlow: top-talkers, per-application mapping, multicast / AV media flows.
mDNS
MdnsListener
mcast 224.0.0.251:5353Service type (_dante._tcp, _ndi._tcp, _airplay._tcp, _rtsp._tcp, any _x._tcp/_udp), instance name, TXT model, source IPoffDiscoveredMdnsService → AV endpoint classification, all from the announcement and without touching a payload (10-min re-stage throttle per IP+type).
DHCP fingerprint
DhcpFingerprintListener
UDP 67Option-55 parameter list, option-60 vendor class, option-12 hostname, client MACoffDiscoveredDhcpFingerprint → a best guess at the device family (control box vs codec vs camera).
SNMP traps
SnmpTrapListener
UDP 162linkUp / linkDown, cold / warm start, auth failure, enterprise alarms (PSU, fan, temperature); v1 generic + v2c snmpTrapOIDoffInboundObservation (source=snmptrap) → classified events on the device timeline.
The discovery sweep (§2–4) is the backbone and runs whenever it is enabled. These four listeners are extras on top of it. The push API in §8 feeds the same flow-ingestion path, so a collector can POST traffic summaries instead of exporting datagrams.

8 Application & integration input

Not every input comes off the wire. Operators and other systems hand records in directly. Manual entry is the one path that writes the source of truth without validation, because a person is treated as the authority. Everything else arrives as an observation and is validated like anything from a collector.

InputSourceWhat it becomes
Manual entryREST / UIOperator-documented records (devices, cables, IPAM, VLANs, services). Written directly as documented truth.
Inbound event APIPOST /api/v1/inbound/eventClaims pushed in by another system (header X-CrossConnect-Tenant; body source/kind/summary/objectRef). Staged as InboundObservation, returns 202, and validated like any other observation.
Flow pushTrafficFlowService.ingest()A collector POSTs flow summaries; merged into TrafficFlow keyed on (tenant, srcIp, dstIp, dstPort, protocol), counters accumulated.
Bulk importCSV / RESTRecords loaded in bulk into the source of truth, keyed so that re-importing the same file changes nothing.

Outbound paths (signed webhooks and SIEM / chat sinks) send data out rather than take it in, and they are covered in the Security & Architecture reference.

9 The staging entities

Every collector lands in a discovered_* staging table (plus the health and inbound tables). Each row carries id, tenantId, observedAt, and, where it applies to a device, a deviceId. Rows are only ever inserted, never updated, and the newest observedAt per natural key is the one that counts. The set written by the collectors in this document, with the distinctive fields each one carries:

EntityFromKey fields
DiscoveredInterfaceIF-MIBifIndex, ifName/Descr/Alias, ifType, mtu, speedBps, highSpeedMbps, macAddress, admin/oper status
DiscoveredIfStackifStackTablehigherIfIndex, lowerIfIndex
DiscoveredNeighborLLDP-MIBlocalPortIndex, remoteChassis/Port subtype+id, remoteSysName, remoteSysDesc
DiscoveredVlanQ-BRIDGEvid, vlanName
DiscoveredVrfMPLS-L3VPNvrfName, rd
DiscoveredIpIP-MIBipAddress, prefixLen, ifIndex
DiscoveredEndpointFDB + ARPmac, ip, vlan, ifIndex, source
DiscoveredPoePOWER-ETHERNETgroupIndex, nominalPowerW, consumptionPowerW, operStatus
DiscoveredBgpPeerBGP4-MIBlocalAs, localAddr, peerAddr, peerAs, peerRouterId, state, adminUp, established
DiscoveredOspfNeighborOSPF-MIBlocalRouterId, neighborIp, neighborRouterId, state, fullAdj
DiscoveredQuerierIGMP-MIBifIndex, querierIp, igmpVersion
DiscoveredIgmpMembershipIGMP-MIBgroupAddress, ifIndex
DiscoveredPtpClock / DiscoveredPtpPortPTPBASE / CISCO-PTPdomainNumber, gmIdentity, priority1/2, clockClass, offsetNs, stepsRemoved · portNumber, portState, source
DiscoveredMdnsServicemDNS listenersourceIp, serviceType, instanceName, txtModel, sourceMac, vlan
DiscoveredDhcpFingerprintDHCP listenermac, ip, vlan, option55Csv, vendorClass, hostname
DeviceSensorENTITY-SENSORkind, label, value, unit, status
DeviceReachabilityICMPreachable, latencyMs, source
InboundObservationtraps / inbound APIsource, kind, objectRef, resolvedType/Key/Name, confidence, corroboratingSources, status

10 From signal to truth: validation

No matter where it came from, every collector above feeds the same pipeline under the same rules. Validation is the step that decides which observations become trusted records.

flowchart LR
  O["1 · Observe
discovered_* · untrusted"] --> G{"2 · Validate
confidence-score · commit"} G --> S["3 · Documented
source of truth"] S --> A[("4 · Audit
hash-linked entry")] S --> D["5 · Derived
pure functions"] classDef gate fill:#fdf0dd,stroke:#e0892a,color:#173a6b; classDef truth fill:#173a6b,stroke:#0f2a4f,color:#ffffff; classDef store fill:#e3f3f6,stroke:#1797b3,color:#173a6b; class G gate; class S,D truth; class O,A store;
Figure 3. Data lifecycle. Confidence is earned by agreement between sources: two sources that agree score Confirmed / high, a single source is Inferred / medium, and an observation that maps to no known entity is Unconfirmed / low and flagged as a possible rogue. Sources only count as agreeing if they land within a 24-hour window. A commit is the only write path from observation to truth, and every one is audited.
Cross-cutting ruleHow it applies to every input
TenancyEvery staged row and every record belongs to one tenant. The tenant is the line that keeps customers separate, and inbound APIs require a tenant header.
No payload inspectionCollectors read switch-derived signals, announcements, and configuration text only. No collector captures or parses packet payloads, and there is no SPAN or mirror feed.
Default-off listenersThe four passive listeners bind no socket until their enabled flag is set and a tenant is pinned. Active discovery is the only collector that runs as soon as it is enabled.
IdempotencyStaging and imports key on a natural key, so collecting the same thing twice converges on one row instead of duplicating it.
RetentionAppend-only staging is dropped past its window (default 14 days); the audit chain is retained on its own policy (default 90 days), preserving link integrity.

11 Worked example: one link, wire to map

Take one fact and follow it the whole way through. Switch acc-sw-3 port Gi1/0/14 is patched to core-sw-1 port Gi1/0/1. Every signal in this document goes through the same five moves, read, stage, validate, commit, prove. This traces one of them in full, with the exact OIDs, staging tables, services, and records.

  1. Trigger. The discovery scheduler (interval-ms, default about 5 minutes) opens a tenant sweep and, for each documented device, has SnmpDiscoverySource build a read-only snmp4j session to the management IP on UDP/161 with the pinned credential. No agent is installed and no port is opened on the device.
  2. Read the wire. On acc-sw-3 the sweep walks IF-MIB and LLDP-MIB. From ifTable / ifXTable it reads ifName (Gi1/0/14), speed, MAC, and admin and oper status. From lldpRemTable it reads, on local port Gi1/0/14, the remote lldpRemSysName (core-sw-1) and lldpRemPortId (Gi1/0/1), with chassis and port subtypes. When the sweep later reaches core-sw-1 it reads the mirror-image neighbour, so the one link is observed independently from both ends.
  3. Parse. SnmpProbe decodes the raw varbinds into a SnmpSweepResult: a list of SnmpInterfaceFact and SnmpLldpNeighbor records, each stamped with tenantId, the resolved deviceId, and observedAt.
  4. Stage, append-only. DiscoveryStagingService inserts a DiscoveredInterface row for acc-sw-3 / Gi1/0/14 and a DiscoveredNeighbor row (local Gi1/0/14 to remote core-sw-1 / Gi1/0/1). Rows are inserted, never updated; the newest observedAt per natural key is operative, so the next sweep is idempotent. Nothing in the source of truth has changed yet: the link is observed, not documented.
  5. Validate, the trust gate. ValidationService confidence-scores the staged neighbour. It resolves both endpoint names, and since both are managed devices this is a candidate cable between two known ports. It checks whether a Cable already records the pair; if not, the link is queued to commit. Because both switches reported the same adjacency, the link scores Confirmed. (A one-sided LLDP sighting would score Inferred, and a neighbour whose name resolves to no device would score Unconfirmed and be flagged as a possible rogue.) The link then waits in the validation queue with its evidence and score, still outside the source of truth.
  6. Commit. Once the link has earned enough confidence, commit() is the only write path from observation into truth. It find-or-creates the two Interface endpoints and writes one Cable joining acc-sw-3:Gi1/0/14 and core-sw-1:Gi1/0/1, stamping discoveredAt. The observation is now a record.
  7. Record and prove. The write publishes a RecordChangeEvent on the EventBus. The audit plugin captures it into the tamper-evident chain, contentHash = SHA-256(tenantId · kind · occurredAt · actor · payload · previousHash), HMAC-signed and linked to the previous entry for the tenant. The link is provable: who added it, when, and that the record has not been altered since.
  8. Downstream updates, at no extra cost. Because the derived layer is computed purely from the source of truth, the new Cable immediately shows up on the topology graph and the network map; clears the data-quality "undocumented link" finding the LLDP sighting had raised while it was still staged; joins the Batfish topology input, so reachability checks now traverse it; and becomes citable by the AI assistant, which can reference the Cable record and its audit entry by primary key.

One LLDP value, read read-only off two switches, became a Confirmed, operator-approved, cryptographically recorded cable the whole platform now reasons over.

A Appendix, OID reference by probe

The literal OID roots each SNMP probe walks (GET for single values, GETBULK for tables). No state-changing OID set is ever issued, so collection can only read.

ProbeOID root(s)Object
probeSystem1.3.6.1.2.1.1.1/.2/.3/.5.0sysDescr, sysObjectID, sysUpTime, sysName
probeSerial1.3.6.1.2.1.47.1.1.1.1.5 / .11entPhysicalClass, entPhysicalSerialNum
probeInterfaces1.3.6.1.2.1.2.2.1.*, 1.3.6.1.2.1.31.1.1.1.{1,15,18}ifTable + ifXTable (name, alias, highSpeed)
probeIfStack1.3.6.1.2.1.31.1.1.3.1.3ifStackStatus
probeLldp1.0.8802.1.1.2.1.4.1.1.{4..10}lldpRemTable
probeVlans1.3.6.1.2.1.17.7.1.4.3.1.1dot1qVlanStaticName
probeEndpoints1.3.6.1.2.1.17.1.4.1.2, 1.3.6.1.2.1.4.22.1.2, 1.3.6.1.2.1.17.7.1.2.2.1.2 / 17.4.3.1.2basePortIfIndex, ipNetToMedia, dot1q/dot1d FDB
probeIps1.3.6.1.2.1.4.20.1.2 / .3ipAdEntIfIndex, ipAdEntNetMask
probePoe1.3.6.1.2.1.105.1.3.1.1.{2,3,4}pethMainPsePower / OperStatus / ConsumptionPower
probeBgp1.3.6.1.2.1.15.2.0, 1.3.6.1.2.1.15.3.1.{1,2,3,5,9}bgpLocalAs, bgpPeerTable
probeOspf1.3.6.1.2.1.14.1.1.0, 1.3.6.1.2.1.14.10.1.{1,3,6}ospfRouterId, ospfNbrTable
probeVrfs1.3.6.1.2.1.10.166.11.1.2.2.1.4mplsL3VpnVrfRD
probeMulticast1.3.6.1.2.1.85.1.1.1.{3,4}, 1.3.6.1.2.1.85.1.2.1.4igmpInterfaceVersion/Querier, igmpCacheSelf
probePtp1.3.6.1.2.1.241.1.2.* (std), 1.3.6.1.4.1.9.9.760.1.2.* (fallback)PTPBASE clock/parent/port datasets
probeSensors1.3.6.1.2.1.99.1.1.1.{1..6}, 1.3.6.1.2.1.47.1.1.1.1.7entPhySensor*, entPhysicalName

B Appendix, collector configuration reference

What gets collected is driven by configuration. Representative properties from application.yml follow. The defaults are deliberately quiet, with almost everything off until an operator turns on what they need:

CollectorPropertyDefault
Discovery workercrossconnect.discovery.enabledfalse
Discovery sourcecrossconnect.discovery.sourcestub (set snmp for real SNMP)
Sweep intervalcrossconnect.discovery.interval-ms300000 (5 min)
Initial delaycrossconnect.discovery.initial-delay-ms60000 (1 min)
Config (SSH) collectioncrossconnect.discovery.collect-configfalse
SSH timeoutcrossconnect.discovery.ssh.timeout-seconds20
mDNS listenercrossconnect.discovery.mdns.enabled · .port · .groupfalse · 5353 · 224.0.0.251
DHCP listenercrossconnect.discovery.dhcp.enabled · .portfalse · 67
Flow listenercrossconnect.integrations.flow.enabled · .netflow-port · .sflow-portfalse · 2055 · 6343
Trap listenercrossconnect.integrations.snmptrap.enabled · .portfalse · 162
Inbound event APIcrossconnect.integrations.inbound.enabledfalse
Credential master keyCROSSCONNECT_CREDENTIALS_AES_KEY / …_KEY_COMMAND / …_KEY_FILEresolved in priority order; fails closed in prod if unset
Staging retentioncrossconnect.discovery.staging.retention-days14
Audit retentioncrossconnect.audit.retention-days90