# IP pools

> Record the subnets you hand out as IP pools, see which subscriber, binding or router holds each address, take the next free one and catch clashes early.

Source: https://docs.centipidbilling.com/network/ip-pools

## What an IP pool is

Open **Network → Devices → IP pools**. A pool is one IPv4 subnet, written as a CIDR such as `10.20.0.0/24` or `41.90.0.8/30`. Each pool has:

| Field | What it is |
|---|---|
| Name | What your staff call it, e.g. "Estate A PPPoE" |
| Subnet | `/16` to `/32`. A host address is rounded down to its network, so `10.20.0.7/24` is saved as `10.20.0.0/24` |
| Type | Public static, Private PPPoE or Management |
| Router | Optional: the router the subnet lives on |
| Reserved | Optional: addresses no subscriber should get, such as the gateway. One per line, either an address (`10.20.0.1`) or a range (`10.20.0.2-10.20.0.9`) |

The network and broadcast addresses are always reserved. A `/31` or `/32` has neither, so every address in it is usable.

Staff need the **nas** permission to see pools, and **nas create** to add, edit or delete one.

## Who holds an address

Centipid does not keep a separate list of assignments. It reads them from three places that already exist:

- a subscriber's **Static IP**
- an IP binding's address
- a router's own address

So the moment you create a pool over a subnet you already use, its page shows who holds what. The save message says how many addresses are in use and how many clashes it found.

The pool page shows used, free and reserved counts, the next free address, and a list of every held or reserved address. A **Clash** is an address held by two holders at once, or held while reserved. Fix clashes by giving one of the holders a different address.

## Giving a subscriber a static IP

On a PPPoE subscriber's form, fill **Static IP** or pick a pool under **Next free from pool…** to fill in the first address that is neither reserved nor held.

When you save:

- An address **inside a pool** that is reserved or already held is refused, and the message names the holder.
- An address **outside every pool** saves, but you get a warning naming anyone else who holds it.
- An address the subscriber already had saves as before, even if it clashes, so old clashes never block an unrelated edit. You still get the warning.

The static IP is sent to the router as `Framed-IP-Address`, exactly as before. Pools change where you pick the address from, not how it reaches RADIUS.

Deleting a pool removes only the pool and its reserved list. Nobody loses their address.

IPv6 subnets are not supported yet.
