LLDP Neighbors
kubectl fabric inspect lldp reports the LLDP neighbors observed on the switch ports next to what the wiring
diagram expects on those ports, highlighting the values that don't match:
core@control-1 ~ $ kubectl fabric inspect lldp
PORT CONNECTION TYPE NEIGHBOR PORT MAC AGE / TTL
E1/1/1 leaf-1--spark-1 unbundled spark-1.lan enP2p1s0f0np0 (want p1) 4c:bb:47:e8:ef:fe 37/120s
E1/2/1 server-1--bundled--leaf-1 bundled server-1 enp2s2 6e:27:d4:e2:6b:f7 30/120s
E1/5/1 server-5--unbundled--leaf-1 unbundled server-5 +1 enp2s1 00:00:00:0b:bb:11 29/120s
E1/61/1 spine-1--fabric--leaf-1 fabric spine-1 E1/61/1 b4:db:91:9b:60:27 14/20s
Note: +N means N more neighbors on the port, use --show-all to see them
- A value that disagrees with the wiring is shown as
actual (want expected), with only the actual value highlighted. A port that expects a neighbor and sees none shows the expectation alone. - When several neighbors answer on one port and one of them is the expected device, only that one is shown and
+Nnotes the rest.--show-alllists all of them and marks the additional ones. AGE / TTLis the age of the neighbor entry against the TTL the neighbor advertises. Fabric links typically advertise 20 seconds and servers 120, so staleness is best judged against the advertised value rather than a fixed threshold.
Useful flags:
| Flag | Description |
|---|---|
--show-all |
Show all neighbors on a port, not just the expected one |
--ignore-suffix, --ignore-prefix |
Name parts to ignore when matching (see below) |
--fabric, --server, --external, --gateway |
Only show ports of the given connection type |
The output can also be formatted as JSON or YAML, like for the other inspect commands.
Hostname matching
A server wired as server-1 often introduces itself over LLDP as server-1.lan, and DPUs are usually named
similar to the hosts they sit in but with a -dpu suffix. Those are the same device, so some name suffixes and
prefixes are ignored when comparing the neighbor with the wiring:
- The defaults are the
-dpu,.lanand.maassuffixes, and they can be replaced with the--ignore-suffixand--ignore-prefixflags. - A name is only trimmed if trimming produces the expected name, so a device deliberately wired as
host-1-dpustill matches on its full name. - Names, port names and descriptions are compared case-insensitively.
- The ignored parts are reported: dimmed in the table, and as
ignoredPrefix/ignoredSuffixin the JSON and YAML output.
When a server's advertised hostname is unrelated to the name of its object, it can be declared instead with the
spec.inspect.expectedSysName field on the Server object, see Servers.
Metrics
The neighbor and transceiver state above is also exported by the switch agent as Prometheus metrics on every
collection cycle, so a link that goes quiet or an optic that fails is visible without running a command. The
neighbor count, the advertised TTL, the last update time and the neighbor inventory are exported per port, as
are the transceiver presence, activity, CMIS readiness and module identity. Every interface and queue metric
also carries a transceiver label naming the cage the port belongs to, so link, neighbor and optic data can be
joined on a single label. See Observability configuration for how the metrics
are collected.