# `Hyper.Cfg.Network`
[🔗](https://github.com/harmont-dev/hyper/blob/main/lib/hyper/cfg/network.ex#L1)

VM egress networking settings from the `[network]` table — `config.toml`-only
because the setuid helper reads the same `uplink` and `clone_pool` to build
each VM's netns, veth, and NAT rules.

Networking is **mandatory**: a node refuses to start unless `[network]` is
configured (see `Hyper.Node.FireVMM.Jailer.Checks.network_ready/0`). Every VM
gets a NIC; there is no opt-out. `configured?/0` exists only so the startup
preflight can fail fast with a clear message rather than crash later.

# `clone_pool`

```elixir
@spec clone_pool() :: String.t()
```

IPv4 CIDR the per-VM clone /30s are carved from. `[network] clone_pool`.

# `configured?`

```elixir
@spec configured?() :: boolean()
```

Whether the required `[network] uplink` is present. Used only by the startup
preflight to fail fast; once a node is running, networking is guaranteed
configured, so runtime code calls `uplink/0` directly.

# `resolver`

```elixir
@spec resolver() :: String.t()
```

DNS resolver IP handed to the guest via the `hyper.resolver=` kernel cmdline
param, since the kernel's `ip=` autoconfig sets the guest's address/route but
never DNS. The PID-1 guest agent reads this back out of `/proc/cmdline` and
writes it to `/etc/resolv.conf`. `[network] resolver`.

# `uplink`

```elixir
@spec uplink() :: String.t()
```

Physical uplink interface guest egress is NAT'd out of. Raises if unset (a running node has already passed the preflight).

---

*Consult [api-reference.md](api-reference.md) for complete listing*
