## XDP fast blocking (`xdp`)

Supported nodes run in fast mode and drop packets from banned and blacklisted IPs at the NIC; others run in standard mode with protection unchanged. Paid feature xdp.

Authentication: Admin only · Docs: https://www-demo.kuxitong.com/en/docs/api/xdp

### GET `/api/v2/xdp/nodes`

List node XDP states · Authentication: Admin only

Query parameters:

| Field | Type | Required | Description |
|---|---|---|---|
| `since` | string |  | Start of "blocked today" (the panel sends the browser's local midnight); defaults to the master's UTC midnight. At most 7 days back. |
| `filter` | string |  | Filter: all; fast mode; standard mode; auto = switched automatically in the last 7 days; offline. Defaults to all. Values: ["all","fast","standard","auto","offline"] Default: "all" |

```sh
curl "https://panel.example.com/api/v2/xdp/nodes" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### POST `/api/v2/xdp/nodes/{id}/disable`

Switch a node to standard mode · Authentication: Admin only

```sh
curl -X POST "https://panel.example.com/api/v2/xdp/nodes/{id}/disable" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### POST `/api/v2/xdp/nodes/{id}/enable`

Enable fast mode on a node · Authentication: Admin only

```sh
curl -X POST "https://panel.example.com/api/v2/xdp/nodes/{id}/enable" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### POST `/api/v2/xdp/pause`

Pause XDP fast blocking network-wide · Authentication: Admin only

Request body:

| Field | Type | Required | Description |
|---|---|---|---|
| `duration` | string | Yes | 1h or 4h resume automatically; manual waits for a manual resume. Values: ["1h","4h","manual"] |

```sh
curl -X POST "https://panel.example.com/api/v2/xdp/pause" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### POST `/api/v2/xdp/resume`

Resume XDP fast blocking network-wide · Authentication: Admin only

```sh
curl -X POST "https://panel.example.com/api/v2/xdp/resume" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/xdp/status`

XDP fast blocking overview · Authentication: Admin only

Query parameters:

| Field | Type | Required | Description |
|---|---|---|---|
| `since` | string |  | Start of "blocked today" (the panel sends the browser's local midnight); defaults to the master's UTC midnight. At most 7 days back. |

```sh
curl "https://panel.example.com/api/v2/xdp/status" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

XDP fast blocking object:

| Field | Type | Required | Description |
|---|---|---|---|
| `auto_at` | string |  | Last automatic switch. |
| `auto_reason` | string |  | Reason code of the last automatic switch. |
| `auto_resume_at` | string |  | Automatic resume time; absent means manual. |
| `bans` | integer |  | Ban entries. |
| `blocked_today` | XdpBlocked |  | Blocked traffic (packets dropped at the NIC). Omitted while the statistics store is unavailable; controls keep working. |
| `can_disable` | boolean |  | Can be switched to standard mode now. |
| `can_enable` | boolean |  | Fast mode can be enabled now. |
| `cause` | string |  | Why standard: license, outdated node agent, switched manually, added during the license buffer, switched automatically, unsupported, or another XDP program on a NIC. Values: ["license","agent_old","manual","not_kept","auto","unsupported","conflict"] |
| `counts` | XdpCounts |  | Node counts by mode. |
| `detail` | string |  | Details reported by the node (such as the NIC). |
| `duration` | string | Yes | 1h or 4h resume automatically; manual waits for a manual resume. Values: ["1h","4h","manual"] |
| `id` | integer |  | Node id. |
| `ip` | string |  | Node IP. |
| `items` | XdpNode[] |  | Nodes. |
| `kernel` | string |  | Kernel version. |
| `license` | XdpLicense |  | License view of paid feature xdp. |
| `max_entries` | integer |  | Table capacity. |
| `name` | string |  | Node name. |
| `nics` | XdpNic[] |  | NICs. |
| `off_source` | string |  | Source of the manual switch: admin or node-local. Values: ["admin","node_local"] |
| `online` | boolean |  | Online. |
| `op` | string |  | Switch in progress on this node. Values: ["enable","disable"] |
| `op_error` | string |  | Reason code of the last failed enable (timeout when it timed out). |
| `op_error_at` | string |  | When the last enable failed. |
| `paused` | boolean |  | Paused network-wide. |
| `paused_at` | string |  | Paused at. |
| `progress` | XdpProgress |  | Network-wide pause or resume in progress. |
| `reason` | string |  | Reason code reported by the node (kernel, driver, check_tcp443, ack_timeout, …); the panel maps it to text. |
| `reported_at` | string |  | Last report. |
| `state` | string |  | Displayed state: offline, fast, deploying, switching, paused, or standard. Values: ["offline","fast","deploying","switching","paused","standard"] |
| `status` | string |  | Header status: unlicensed, stopped, revoking, frozen (license expired), unsynced, paused, deploying, no_nodes, or normal. Values: ["unlicensed","stopped","revoking","frozen","unsynced","paused","deploying","no_nodes","normal"] |
| `top_bans` | XdpTopBans |  | Node with the most ban entries (out of its table capacity). |
