Skip to content

AI Networking Security · Part 7 of 9

Act 7 — Network-Level DDoS Mitigation in AI Fabrics

Incast protection via ECN

The most effective defence against a tenant-generated incast attack is correctly configured ECN thresholds, as covered in Chapter 21. If ECN min_threshold is set correctly (approximately BDP/4 for the link speed and RTT), the switch begins marking CE bits before its buffer fills. The attacking nodes' DCQCN rate controllers reduce their send rate. The attack is self-limiting.

# On the leaf switch facing the misbehaving tenant:
# Check current ECN thresholds:
nv show qos ecn profile roce

# If thresholds are missing or too high:
nv set qos ecn profile roce min-threshold 500KB
nv set qos ecn profile roce max-threshold 1500KB
nv config apply

# Monitor if ECN marking is actually occurring:
watch -n 1 'nv show interface swp1 counters | grep ecn'
# ecn_marked_packets should increment rapidly under incast

Per-tenant rate limiting at ToR

If a tenant's traffic consistently exceeds their provisioned share of fabric bandwidth — whether intentional or due to a misconfigured job — NVUE can apply ingress policing on the server-facing port:

# Limit tenant B's ingress rate to 200 Gbps (50% of 400GbE):
nv set interface swp12 link speed 200G
# Note: this limits the physical interface. For per-traffic-class rate limiting:

nv set qos scheduler profile tenant-b-limited
nv set qos scheduler profile tenant-b-limited class 3 bandwidth 50  # 50% of port
nv set interface swp12 qos scheduler profile tenant-b-limited
nv config apply

# Verify:
nv show interface swp12 qos scheduler

WJH as a security signal

WJH (What Just Happened) captures hardware-level drop events on Spectrum-4 with nanosecond timestamps. In a security context, WJH provides early warning of a flood: an attacking node generating traffic faster than the fabric can absorb will produce a distinctive WJH pattern — high-frequency drops from a single source port, all with the same drop reason (L3_LOOKUP_MISS for spoofed destinations, or TAIL_DROP_BY_TC for queue overflow floods).

# Monitor WJH for flood patterns:
# (requires wjhd running — typically via DOCA or Docker container)
docker exec wjhd wjh-util show --type forwarding \
  | grep -E "drop|flood|TAIL_DROP" \
  | sort | uniq -c | sort -rn | head -20

# Example output during a flood event:
# 14821  2026-03-15 02:31:44  src=10.200.0.12 dst=10.100.0.5  reason=TAIL_DROP_BY_TC tc=3
# 14819  2026-03-15 02:31:44  src=10.200.0.12 dst=10.100.0.6  reason=TAIL_DROP_BY_TC tc=3
# ...
# All drops from 10.200.0.12 (TenantB node) targeting TenantA addresses.
# This is a cross-tenant flood — should have been blocked by VRF routing.
# Escalate: check if GBP is configured and VRF route isolation is intact.

# Check if the source is actually reaching the wrong VRF:
nv show vrf VRF_A router rib ipv4 route 10.200.0.12/32
# If this route exists in VRF_A, there is a route leak — critical security event.

DOCA Flow ACL for B200 clusters

On B200 nodes (BF3 equipped), DOCA Flow can suppress flood traffic before it reaches the switch — at the source NIC. This is more effective than switch-side rate limiting because it prevents the malicious traffic from ever consuming fabric bandwidth.

# On DPU OS of the misbehaving B200 node:
# Install a DOCA Flow ACL rule to rate-limit outbound traffic:
doca_flow_inspector --apply-acl \
  "src_ip=10.200.0.12, dst_ip=any, rate_limit=100Gbps, burst=50MB"

# This caps the host's outbound injection rate at 100 Gbps regardless of
# what the host OS or any application attempts to send.