# Signalhouse Subnet Planner (VLSM, CIDR aggregation, IPv4/IPv6) > Subnet calculator, VLSM planner, CIDR aggregation and exclusion for IPv4 and IPv6. Plans address space the way network engineers do it: details of any address or prefix (network, usable range, broadcast, RFC 5952 canonical IPv6 form, special-purpose range), equal splits by subnet count or hosts, VLSM allocation for a list of host requirements, aggregation of prefix lists into the minimal CIDR set and a summary route (RFC 4632), a block minus excluded prefixes, and address ranges as CIDR blocks. It is the planner of the Signalhouse Network lab. Part of usefulweb.app (https://usefulweb.app/). Part of [Signalhouse](https://signalhouse.usefulweb.app/) (ownerApp: signalhouse). Results are deterministic calculations from the inputs and the listed assumptions; the API returns exactly what the web page shows. ## Use it - Human interface: https://signalhousesubnetplanner.usefulweb.app/ (interactive tool at https://signalhousesubnetplanner.usefulweb.app/tool) - JSON API: POST https://signalhousesubnetplanner.usefulweb.app/api/v1/calculate with a JSON object of inputs (schema: https://signalhousesubnetplanner.usefulweb.app/api/v1/tool) - OpenAPI: https://signalhousesubnetplanner.usefulweb.app/openapi.json - MCP (Streamable HTTP): https://signalhousesubnetplanner.usefulweb.app/mcp - tool `signalhouse_subnet_planner` ## Inputs - mode (select): What to calculate - block (text): Block, address or range - The address block to plan in (VLSM, split, exclude), any address or prefix (details) or a range “first - last” (range mode). Not used for aggregation. - requirements (table): Subnets needed (VLSM) - One row per subnet: a name and the number of hosts it must hold, or a fixed prefix length. - order (select): VLSM order - allow31 (boolean): Use /31 (IPv4) or /127 (IPv6) for 2-host point-to-point links - ipv6Lan64 (boolean): IPv6: never smaller than a /64 (SLAAC) - splitBy (select): Split by - count (integer): Number of subnets - hosts (integer): Hosts per subnet - newLength (integer): New prefix length - prefixes (textarea): Prefixes (one per line) - Aggregate: the prefixes to summarise. Exclude: the prefixes to cut out of the block. VLSM: prefixes to keep free (reserved). ## Method - Addresses are parsed per RFC 791 (dotted decimal without leading zeros) and RFC 4291 (IPv6 with “::” and an optional dotted IPv4 tail); IPv6 is printed in the RFC 5952 canonical form. All arithmetic uses 128-bit integers, so IPv4 and IPv6 follow the same rules. - Usable IPv4 hosts exclude the network and broadcast address, except /31 point-to-point links (RFC 3021) and /32 host routes. IPv6 has no broadcast; every address of the prefix is counted. - VLSM gives each requirement the smallest aligned power-of-two block that holds its hosts and places it at the first free aligned position (first fit). Sorted largest first, a plan never leaves gaps: if the total fits, every subnet fits. In listed order it reproduces the delegation sequence of RFC 4632 section 6.1, holes included. - Aggregation merges overlapping and adjacent prefixes and writes each merged range as the minimal list of aligned CIDR blocks; exclusion and range conversion use the same range-to-CIDR step. The summary route is the longest prefix that covers every input; addresses it covers beyond the inputs need a discard route (RFC 4632 rule 2). - The address type comes from the IANA special-purpose registries (RFC 6890 with RFC 1918, 6598, 5737, 3849, 4193, 9637 and others): the most specific matching range wins.