=== README.md ===
# home-lab — as-built network documentation

19 element(s) across 1 site page(s), covering the whole inventory.

| Fact | Value |
|:---|:---|
| Inventory | `home-lab` |
| Scope | the whole inventory |
| Generated | 2026-01-31T09:00:00Z |
| netviz | 0.0.0-test |
| Inventory revision | not under version control |


<a id="contents"></a>

## Sites

One page per site. A site is a namespace; see --group-depth.

<a id="table-sites"></a>

**Site pages**

| SITE | ELEMENTS | CABLES | TUNNELS | SUBNETS |
|:---|---:|---:|---:|---:|
| [(inventory root)](sites/root.md) | 8 | 6 | 0 | 5 |


<a id="diagrams"></a>

## Diagrams

One drawing per layer, from the same inventory as the tables below.

**Physical topology** — 8 node(s), 7 link(s)

![Physical topology (l1)](diagrams/root-l1.svg)

**VLANs** — 8 node(s), 7 link(s)

![VLANs (l2)](diagrams/root-l2.svg)

**IP subnets** — 12 node(s), 15 link(s)

![IP subnets (l3)](diagrams/root-l3.svg)


<a id="findings"></a>

## Validation findings

<a id="table-findings"></a>

**Findings**

_The validator reports nothing about this inventory._

These are the findings 'netviz validate' reports for this inventory. A report is only as authoritative as the inventory behind it, so they are documented here rather than left out.


<a id="devices"></a>

## Every element

One row per element, linked to its page.

<a id="table-devices"></a>

**Elements**

| NAME | KIND | PORTS | ADDRESS | VLANS |
|:---|:---|---:|:---|:---|
| [hosts/adp-usb-eth](devices/hosts_adp-usb-eth.md) | adapter | 1 | 192.168.10.30/24 | 10 |
| [hosts/laptop](devices/hosts_laptop.md) | computer | 2 | - | 10 |
| [hosts/pc-desk](devices/hosts_pc-desk.md) | computer | 3 | 192.168.10.20/24 | 10 |
| [hosts/phone](devices/hosts_phone.md) | computer | 1 | 192.168.10.40/24 | - |
| [hosts/srv-nas](devices/hosts_srv-nas.md) | server | 2 | 192.168.10.10/24 | 10 |
| [routers/rtr-home](devices/routers_rtr-home.md) | router | 3 | 192.0.2.1/32 | 10 |
| [switches/sw-home](devices/switches_sw-home.md) | switch | 7 | 192.168.10.2/24 | 10,20 |
| [wireless/ap-home](devices/wireless_ap-home.md) | switch | 4 | 192.168.10.3/24 | 10,20 |

PORTS counts declared interfaces; ADDRESS is the address that places the element on the network, of however many it has.


<a id="addressing"></a>

## Address plan

Every prefix an address sits in, and how full it is.

<a id="table-subnets"></a>

**Subnets**

| PREFIX | IP | VLANS | HOSTS | USED | FREE | UTIL | DEVICES |
|:---|---:|:---|---:|---:|---:|---:|---:|
| 192.0.2.1/32 | 4 | - | 1 | 1 | 0 | 100.0% | 1 |
| 192.168.10.0/24 | 4 | 10 | 254 | 7 | 247 | 2.8% | 7 |
| 203.0.113.0/30 | 4 | - | 2 | 1 | 1 | 50.0% | 1 |
| 2001:db8::1/128 | 6 | - | 1 | 1 | 0 | 100.0% | 1 |
| 2001:db8:10::/64 | 6 | 10 | 2^64 | 5 | 2^64 | <0.1% | 5 |

HOSTS is the usable capacity of the prefix, USED the distinct addresses declared in it. Loopback and link-local prefixes are left out: they are scoped to one host or one link and say nothing about the plan.


<a id="vlans"></a>

## VLANs

Every VLAN, the prefixes carried in it and the elements that are in it.

<a id="table-vlan-summary"></a>

**VLANs**

| VLAN | NAME | ELEMENTS | PORTS |
|---:|:---|---:|---:|
| 10 | home | 7 | 9 |
| 20 | guest | 2 | 2 |

Membership is derived: a host on an untagged access port counts as a member even though it declares no VLAN itself.

<a id="table-vlan-matrix"></a>

**VLAN, subnet and element matrix**

| VLAN | NAME | ELEMENT | PORTS | MODE | SUBNETS |
|---:|:---|:---|:---|:---|:---|
| 10 | home | [adp-usb-eth](devices/hosts_adp-usb-eth.md) | — | — | 192.168.10.0/24, 2001:db8:10::/64 |
| 10 | home | [laptop](devices/hosts_laptop.md) | — | — | — |
| 10 | home | [pc-desk](devices/hosts_pc-desk.md) | — | — | 192.168.10.0/24, 2001:db8:10::/64 |
| 10 | home | [srv-nas](devices/hosts_srv-nas.md) | — | — | 192.168.10.0/24, 2001:db8:10::/64 |
| 10 | home | [rtr-home](devices/routers_rtr-home.md) | lan0 | access | 192.168.10.0/24, 2001:db8:10::/64 |
| 10 | home | [sw-home](devices/switches_sw-home.md) | Vlan10, port1, port2, port3, port4, port5 | access, trunk | 192.168.10.0/24 |
| 10 | home | [ap-home](devices/wireless_ap-home.md) | Vlan10, eth0 | access, trunk | 192.168.10.0/24 |
| 20 | guest | [sw-home](devices/switches_sw-home.md) | port5 | trunk | — |
| 20 | guest | [ap-home](devices/wireless_ap-home.md) | eth0 | trunk | — |

A row with no port is an element that reaches the VLAN over a link rather than by configuring it — a host behind an access port, or a hub.


<a id="accounts"></a>

## Identity

The accounts the network is for, and the groups that grant access.

<a id="table-users"></a>

**Accounts**

| USER | LOGIN | FULL NAME | EMAIL | UID | TYPE | STATUS | KEYS | GROUPS |
|:---|:---|:---|:---|---:|:---|:---|---:|:---|
| ana | ana | Ana Brandt | ana@example.invalid | 1000 | person | active | 1 | admins |
| kit | kit | Kit Brandt | kit@example.invalid | 1001 | person | active | 0 | household |
| backup | backup | - | - | 900 | service | active | 0 | - |

GROUPS is the reverse of what the documents hold: no 'user' lists its groups, so this is the one fact about a person their own file cannot say.

<a id="table-groups"></a>

**Groups**

| GROUP | GID | EMAIL | MEMBERS | NESTED | PEOPLE | HOLDS |
|:---|---:|:---|---:|---:|---:|:---|
| admins | 100 | - | 1 | 0 | 1 | ana |
| household | 101 | - | 2 | 1 | 2 | admins, kit |

HOLDS is what the document names; PEOPLE is how many accounts the group reaches once nested groups have been walked.


---

Generated by [netviz](https://github.com/blechschmidt/netviz) 0.0.0-test with
`netviz report`. Every table on these pages comes from the same inventory as the
diagrams, so the two cannot disagree.

=== devices/hosts_adp-usb-eth.md ===
# adp-usb-eth

adapter hosts/adp-usb-eth

[← home-lab — as-built network documentation](../README.md) · [site](../sites/root.md)

<a id="identity"></a>

## Identity

| Field | Value |
|:---|:---|
| Name | adp-usb-eth |
| Qualified name | hosts/adp-usb-eth |
| Kind | adapter |
| Site | [(inventory root)](../sites/root.md) |
| Description | USB 3.0 gigabit dongle. `upstream.attached_to` is what joins it to the laptop - there is deliberately no cable between the two (NV-X005). |
| Vendor | Anker |
| Model | A83130A1 |
| Serial | AK2231007744 |
| Declared in | hosts/adp-usb-eth.yaml#0:1 |

<a id="table-labels"></a>

**Labels**

| KEY | VALUE |
|:---|:---|
| asset | A-0001 |
| site | home |

<a id="table-annotations"></a>

**Annotations**

_This element carries no annotation._


<a id="placement"></a>

## Placement and power

| Field | Value |
|:---|:---|
| Site | — |
| Room | — |
| Rack | — |
| Position | — |
| Height | 1U |

<a id="table-feeds"></a>

**Power feeds**

_No power feed is declared for this element._

A dual-corded element has one row per cord.


<a id="interfaces"></a>

## Interfaces

<a id="table-interfaces"></a>

**Interfaces**

| NAME | TYPE | UP | MAC | MTU | ADDRESSES | VLANS | VRF | AGGREGATION | DESCRIPTION |
|:---|:---|:---|:---|---:|:---|:---|:---|:---|:---|
| enx001122334455 | ethernet | yes | 00:11:22:33:44:55 | 1500 | 192.168.10.30/24, 2001:db8:10::30/64 | — | — | — | Dongle Ethernet port |

Addresses are as configured, prefix length included. VLANS reads 'mode: ids', with the native VLAN named where a trunk has one.


<a id="links"></a>

## Links

What is plugged into this element, and what runs over it.

<a id="table-cables"></a>

**Cables**

| PORT | CABLE | LABEL | MEDIUM | SPEED | LENGTH | FAR END | FAR PORT | VIA |
|:---|:---|:---|:---|---:|---:|:---|:---|:---|
| enx001122334455 | cbl-sw-dongle | H-004 | copper | 1Gbps | 10m | [sw-home](switches_sw-home.md) | port4 | — |
| usb0 | adp-usb-eth#upstream | usb | copper | 5Gbps | — | [laptop](hosts_laptop.md) | — | — |

One row per cable that physically terminates here. VIA names the panels the run this cable is a segment of crosses, and the two ends of that run; the site page's cable schedule has every segment of it. An attachment row is an adapter's upstream rather than a cable somebody pulled.

<a id="table-tunnels"></a>

**Tunnels**

_No tunnel terminates on this element._


<a id="diagrams"></a>

## Diagrams

The drawings this element is in.

- [Physical topology (l1)](../sites/root.md#diagrams)
- [VLANs (l2)](../sites/root.md#diagrams)
- [IP subnets (l3)](../sites/root.md#diagrams)


---

netviz 0.0.0-test, generated 2026-01-31T09:00:00Z.

=== devices/hosts_laptop.md ===
# laptop

computer hosts/laptop

[← home-lab — as-built network documentation](../README.md) · [site](../sites/root.md)

<a id="identity"></a>

## Identity

| Field | Value |
|:---|:---|
| Name | laptop |
| Qualified name | hosts/laptop |
| Kind | computer |
| Site | [(inventory root)](../sites/root.md) |
| Description | Ultrabook without a built-in Ethernet port. It reaches the wired network through the USB dongle declared in hosts/adp-usb-eth.yaml, so it owns no cabled interface of its own. |
| Vendor | Lenovo |
| Model | X1 Carbon Gen 11 |
| Serial | — |
| Declared in | hosts/laptop.yaml#0:1 |

<a id="table-labels"></a>

**Labels**

| KEY | VALUE |
|:---|:---|
| owner | sam |
| role | laptop |
| site | home |

<a id="table-annotations"></a>

**Annotations**

_This element carries no annotation._


<a id="placement"></a>

## Placement and power

| Field | Value |
|:---|:---|
| Site | — |
| Room | — |
| Rack | — |
| Position | — |
| Height | 1U |

<a id="table-feeds"></a>

**Power feeds**

_No power feed is declared for this element._

A dual-corded element has one row per cord.


<a id="interfaces"></a>

## Interfaces

<a id="table-interfaces"></a>

**Interfaces**

| NAME | TYPE | UP | MAC | MTU | ADDRESSES | VLANS | VRF | AGGREGATION | DESCRIPTION |
|:---|:---|:---|:---|---:|:---|:---|:---|:---|:---|
| lo | loopback | yes | — | — | 127.0.0.1/8, ::1/128 | — | — | — | — |
| wlp0s20f3 | wifi | no | 8c:8c:aa:30:01:01 | — | — | — | — | — | Disabled while docked |

Addresses are as configured, prefix length included. VLANS reads 'mode: ids', with the native VLAN named where a trunk has one.


<a id="links"></a>

## Links

What is plugged into this element, and what runs over it.

<a id="table-cables"></a>

**Cables**

| PORT | CABLE | LABEL | MEDIUM | SPEED | LENGTH | FAR END | FAR PORT | VIA |
|:---|:---|:---|:---|---:|---:|:---|:---|:---|
| — | adp-usb-eth#upstream | usb | copper | 5Gbps | — | [adp-usb-eth](hosts_adp-usb-eth.md) | usb0 | — |

One row per cable that physically terminates here. VIA names the panels the run this cable is a segment of crosses, and the two ends of that run; the site page's cable schedule has every segment of it. An attachment row is an adapter's upstream rather than a cable somebody pulled.

<a id="table-tunnels"></a>

**Tunnels**

_No tunnel terminates on this element._


<a id="diagrams"></a>

## Diagrams

The drawings this element is in.

- [Physical topology (l1)](../sites/root.md#diagrams)
- [VLANs (l2)](../sites/root.md#diagrams)


---

netviz 0.0.0-test, generated 2026-01-31T09:00:00Z.

=== devices/hosts_pc-desk.md ===
# pc-desk

computer hosts/pc-desk

[← home-lab — as-built network documentation](../README.md) · [site](../sites/root.md)

<a id="identity"></a>

## Identity

| Field | Value |
|:---|:---|
| Name | pc-desk |
| Qualified name | hosts/pc-desk |
| Kind | computer |
| Site | [(inventory root)](../sites/root.md) |
| Description | Desktop workstation in the study |
| Vendor | Dell |
| Model | OptiPlex 7010 |
| Serial | — |
| Declared in | hosts/pc-desk.yaml#0:1 |

<a id="table-labels"></a>

**Labels**

| KEY | VALUE |
|:---|:---|
| owner | sam |
| role | workstation |
| site | home |

<a id="table-annotations"></a>

**Annotations**

_This element carries no annotation._


<a id="placement"></a>

## Placement and power

| Field | Value |
|:---|:---|
| Site | — |
| Room | — |
| Rack | — |
| Position | — |
| Height | 1U |

<a id="table-feeds"></a>

**Power feeds**

_No power feed is declared for this element._

A dual-corded element has one row per cord.


<a id="interfaces"></a>

## Interfaces

<a id="table-interfaces"></a>

**Interfaces**

| NAME | TYPE | UP | MAC | MTU | ADDRESSES | VLANS | VRF | AGGREGATION | DESCRIPTION |
|:---|:---|:---|:---|---:|:---|:---|:---|:---|:---|
| lo | loopback | yes | — | — | 127.0.0.1/8, ::1/128 | — | — | — | — |
| eno1 | ethernet | yes | 3c:97:0e:20:01:01 | 1500 | 192.168.10.20/24, 2001:db8:10::20/64 | — | — | — | Onboard gigabit port |
| wlp1s0 | wifi | no | 3c:97:0e:20:01:02 | — | — | — | — | — | Disabled - the desk is wired |

Addresses are as configured, prefix length included. VLANS reads 'mode: ids', with the native VLAN named where a trunk has one.


<a id="links"></a>

## Links

What is plugged into this element, and what runs over it.

<a id="table-cables"></a>

**Cables**

| PORT | CABLE | LABEL | MEDIUM | SPEED | LENGTH | FAR END | FAR PORT | VIA |
|:---|:---|:---|:---|---:|---:|:---|:---|:---|
| eno1 | cbl-sw-desk | H-002 | copper | 1Gbps | 8m | [sw-home](switches_sw-home.md) | port2 | — |

One row per cable that physically terminates here. VIA names the panels the run this cable is a segment of crosses, and the two ends of that run; the site page's cable schedule has every segment of it. An attachment row is an adapter's upstream rather than a cable somebody pulled.

<a id="table-tunnels"></a>

**Tunnels**

_No tunnel terminates on this element._


<a id="diagrams"></a>

## Diagrams

The drawings this element is in.

- [Physical topology (l1)](../sites/root.md#diagrams)
- [VLANs (l2)](../sites/root.md#diagrams)
- [IP subnets (l3)](../sites/root.md#diagrams)


---

netviz 0.0.0-test, generated 2026-01-31T09:00:00Z.

=== devices/hosts_phone.md ===
# phone

computer hosts/phone

[← home-lab — as-built network documentation](../README.md) · [site](../sites/root.md)

<a id="identity"></a>

## Identity

| Field | Value |
|:---|:---|
| Name | phone |
| Qualified name | hosts/phone |
| Kind | computer |
| Site | [(inventory root)](../sites/root.md) |
| Description | Wireless-only client. It reaches the network through its association to ap-home, which is declared as a `medium: wireless` cable - the association is the link. |
| Vendor | Apple |
| Model | iPhone 15 |
| Serial | — |
| Declared in | hosts/phone.yaml#0:1 |

<a id="table-labels"></a>

**Labels**

| KEY | VALUE |
|:---|:---|
| owner | sam |
| role | mobile |
| site | home |

<a id="table-annotations"></a>

**Annotations**

_This element carries no annotation._


<a id="placement"></a>

## Placement and power

| Field | Value |
|:---|:---|
| Site | — |
| Room | — |
| Rack | — |
| Position | — |
| Height | 1U |

<a id="table-feeds"></a>

**Power feeds**

_No power feed is declared for this element._

A dual-corded element has one row per cord.


<a id="interfaces"></a>

## Interfaces

<a id="table-interfaces"></a>

**Interfaces**

| NAME | TYPE | UP | MAC | MTU | ADDRESSES | VLANS | VRF | AGGREGATION | DESCRIPTION |
|:---|:---|:---|:---|---:|:---|:---|:---|:---|:---|
| en0 | wifi | yes | f0:18:98:11:22:33 | 1500 | 192.168.10.40/24, 2001:db8:10::40/64 | — | — | — | Associated to the home SSID on 5 GHz |

Addresses are as configured, prefix length included. VLANS reads 'mode: ids', with the native VLAN named where a trunk has one.

<a id="table-radios"></a>

**Radios and BSSs**

| SSID | RADIO | ROLE | CHANNEL | BSSID | VLAN | SECURITY |
|:---|:---|:---|:---|:---|---:|:---|
| home | [hosts/phone:en0](hosts_phone.md) | station | 36/5GHz | 78:8a:20:aa:00:11 | - | wpa3-psk |

The wireless detail of this element, one row per SSID per radio.


<a id="links"></a>

## Links

What is plugged into this element, and what runs over it.

<a id="table-cables"></a>

**Cables**

| PORT | CABLE | LABEL | MEDIUM | SPEED | LENGTH | FAR END | FAR PORT | VIA |
|:---|:---|:---|:---|---:|---:|:---|:---|:---|
| en0 | wl-ap-phone | — | wireless | — | — | [ap-home](wireless_ap-home.md) | wlan0 | — |

One row per cable that physically terminates here. VIA names the panels the run this cable is a segment of crosses, and the two ends of that run; the site page's cable schedule has every segment of it. An attachment row is an adapter's upstream rather than a cable somebody pulled.

<a id="table-tunnels"></a>

**Tunnels**

_No tunnel terminates on this element._


<a id="diagrams"></a>

## Diagrams

The drawings this element is in.

- [Physical topology (l1)](../sites/root.md#diagrams)
- [VLANs (l2)](../sites/root.md#diagrams)
- [IP subnets (l3)](../sites/root.md#diagrams)


---

netviz 0.0.0-test, generated 2026-01-31T09:00:00Z.

=== devices/hosts_srv-nas.md ===
# srv-nas

server hosts/srv-nas

[← home-lab — as-built network documentation](../README.md) · [site](../sites/root.md)

<a id="identity"></a>

## Identity

| Field | Value |
|:---|:---|
| Name | srv-nas |
| Qualified name | hosts/srv-nas |
| Kind | server |
| Site | [(inventory root)](../sites/root.md) |
| Description | Backup and media server |
| Vendor | Synology |
| Model | DS923+ |
| Serial | — |
| Declared in | hosts/srv-nas.yaml#0:1 |

<a id="table-labels"></a>

**Labels**

| KEY | VALUE |
|:---|:---|
| env | prod |
| role | storage |
| site | home |

<a id="table-annotations"></a>

**Annotations**

_This element carries no annotation._


<a id="placement"></a>

## Placement and power

| Field | Value |
|:---|:---|
| Site | — |
| Room | — |
| Rack | — |
| Position | — |
| Height | 1U |

<a id="table-feeds"></a>

**Power feeds**

_No power feed is declared for this element._

A dual-corded element has one row per cord.


<a id="interfaces"></a>

## Interfaces

<a id="table-interfaces"></a>

**Interfaces**

| NAME | TYPE | UP | MAC | MTU | ADDRESSES | VLANS | VRF | AGGREGATION | DESCRIPTION |
|:---|:---|:---|:---|---:|:---|:---|:---|:---|:---|
| lo | loopback | yes | — | — | 127.0.0.1/8, ::1/128 | — | — | — | — |
| eth0 | ethernet | yes | 00:11:32:40:01:01 | 1500 | 192.168.10.10/24, 2001:db8:10::10/64 | — | — | — | — |

Addresses are as configured, prefix length included. VLANS reads 'mode: ids', with the native VLAN named where a trunk has one.


<a id="links"></a>

## Links

What is plugged into this element, and what runs over it.

<a id="table-cables"></a>

**Cables**

| PORT | CABLE | LABEL | MEDIUM | SPEED | LENGTH | FAR END | FAR PORT | VIA |
|:---|:---|:---|:---|---:|---:|:---|:---|:---|
| eth0 | cbl-sw-nas | H-003 | copper | 1Gbps | 0.5m | [sw-home](switches_sw-home.md) | port3 | — |

One row per cable that physically terminates here. VIA names the panels the run this cable is a segment of crosses, and the two ends of that run; the site page's cable schedule has every segment of it. An attachment row is an adapter's upstream rather than a cable somebody pulled.

<a id="table-tunnels"></a>

**Tunnels**

_No tunnel terminates on this element._


<a id="diagrams"></a>

## Diagrams

The drawings this element is in.

- [Physical topology (l1)](../sites/root.md#diagrams)
- [VLANs (l2)](../sites/root.md#diagrams)
- [IP subnets (l3)](../sites/root.md#diagrams)


---

netviz 0.0.0-test, generated 2026-01-31T09:00:00Z.

=== devices/routers_rtr-home.md ===
# rtr-home

router routers/rtr-home

[← home-lab — as-built network documentation](../README.md) · [site](../sites/root.md)

<a id="identity"></a>

## Identity

| Field | Value |
|:---|:---|
| Name | rtr-home |
| Qualified name | routers/rtr-home |
| Kind | router |
| Site | [(inventory root)](../sites/root.md) |
| Description | Home edge router. Terminates the ISP hand-off on wan0 and is the default gateway for the single home VLAN (10). |
| Vendor | MikroTik |
| Model | hEX S |
| Serial | — |
| Declared in | routers/rtr-home.yaml#0:1 |

<a id="table-labels"></a>

**Labels**

| KEY | VALUE |
|:---|:---|
| env | prod |
| role | edge |
| site | home |

<a id="table-annotations"></a>

**Annotations**

| KEY | VALUE |
|:---|:---|
| netviz/ignore | NV-C015 |


<a id="placement"></a>

## Placement and power

| Field | Value |
|:---|:---|
| Site | — |
| Room | — |
| Rack | — |
| Position | — |
| Height | 1U |

<a id="table-feeds"></a>

**Power feeds**

_No power feed is declared for this element._

A dual-corded element has one row per cord.


<a id="interfaces"></a>

## Interfaces

<a id="table-interfaces"></a>

**Interfaces**

| NAME | TYPE | UP | MAC | MTU | ADDRESSES | VLANS | VRF | AGGREGATION | DESCRIPTION |
|:---|:---|:---|:---|---:|:---|:---|:---|:---|:---|
| lo0 | loopback | yes | — | — | 192.0.2.1/32, 2001:db8::1/128 | — | — | — | Router ID and management target |
| wan0 | ethernet | yes | 00:1e:8c:00:10:01 | 1500 | 203.0.113.2/30 | — | — | — | ISP hand-off |
| lan0 | ethernet | yes | 00:1e:8c:00:10:02 | 1500 | 192.168.10.1/24, 2001:db8:10::1/64 | access 10 | — | — | Downlink to sw-home |

Addresses are as configured, prefix length included. VLANS reads 'mode: ids', with the native VLAN named where a trunk has one.


<a id="links"></a>

## Links

What is plugged into this element, and what runs over it.

<a id="table-cables"></a>

**Cables**

| PORT | CABLE | LABEL | MEDIUM | SPEED | LENGTH | FAR END | FAR PORT | VIA |
|:---|:---|:---|:---|---:|---:|:---|:---|:---|
| lan0 | cbl-rtr-sw | H-001 | copper | 1Gbps | 0.5m | [sw-home](switches_sw-home.md) | port1 | — |

One row per cable that physically terminates here. VIA names the panels the run this cable is a segment of crosses, and the two ends of that run; the site page's cable schedule has every segment of it. An attachment row is an adapter's upstream rather than a cable somebody pulled.

<a id="table-tunnels"></a>

**Tunnels**

_No tunnel terminates on this element._


<a id="diagrams"></a>

## Diagrams

The drawings this element is in.

- [Physical topology (l1)](../sites/root.md#diagrams)
- [VLANs (l2)](../sites/root.md#diagrams)
- [IP subnets (l3)](../sites/root.md#diagrams)


---

netviz 0.0.0-test, generated 2026-01-31T09:00:00Z.

=== devices/switches_sw-home.md ===
# sw-home

switch switches/sw-home

[← home-lab — as-built network documentation](../README.md) · [site](../sites/root.md)

<a id="identity"></a>

## Identity

| Field | Value |
|:---|:---|
| Name | sw-home |
| Qualified name | switches/sw-home |
| Kind | switch |
| Site | [(inventory root)](../sites/root.md) |
| Description | Eight-port desktop switch in the hallway cabinet |
| Vendor | TP-Link |
| Model | TL-SG108E |
| Serial | — |
| Declared in | switches/sw-home.yaml#0:1 |

<a id="table-labels"></a>

**Labels**

| KEY | VALUE |
|:---|:---|
| role | access |
| site | home |

<a id="table-annotations"></a>

**Annotations**

_This element carries no annotation._


<a id="placement"></a>

## Placement and power

| Field | Value |
|:---|:---|
| Site | — |
| Room | — |
| Rack | — |
| Position | — |
| Height | 1U |

<a id="table-feeds"></a>

**Power feeds**

_No power feed is declared for this element._

A dual-corded element has one row per cord.


<a id="interfaces"></a>

## Interfaces

<a id="table-interfaces"></a>

**Interfaces**

| NAME | TYPE | UP | MAC | MTU | ADDRESSES | VLANS | VRF | AGGREGATION | DESCRIPTION |
|:---|:---|:---|:---|---:|:---|:---|:---|:---|:---|
| br0 | bridge | yes | — | — | — | — | — | members: port1, port2, port3, port4, port5 | Switching instance |
| Vlan10 | vlan | yes | — | — | 192.168.10.2/24 | access 10 | — | under br0 | In-band management address of the switch |
| port1 | ethernet | yes | 00:22:07:aa:00:01 | 1500 | — | access 10 | — | member of br0 | Uplink to rtr-home |
| port2 | ethernet | yes | 00:22:07:aa:00:02 | 1500 | — | access 10 | — | member of br0 | Desk - pc-desk |
| port3 | ethernet | yes | 00:22:07:aa:00:03 | 1500 | — | access 10 | — | member of br0 | NAS |
| port4 | ethernet | yes | 00:22:07:aa:00:04 | 1500 | — | access 10 | — | member of br0 | Patch to the desk, used by the laptop dongle |
| port5 | ethernet | yes | 00:22:07:aa:00:05 | 1500 | — | trunk 10,20 (native 10) | — | member of br0 | PoE injector for ap-home; trunks the guest VLAN up to it |

Addresses are as configured, prefix length included. VLANS reads 'mode: ids', with the native VLAN named where a trunk has one.


<a id="links"></a>

## Links

What is plugged into this element, and what runs over it.

<a id="table-cables"></a>

**Cables**

| PORT | CABLE | LABEL | MEDIUM | SPEED | LENGTH | FAR END | FAR PORT | VIA |
|:---|:---|:---|:---|---:|---:|:---|:---|:---|
| port1 | cbl-rtr-sw | H-001 | copper | 1Gbps | 0.5m | [rtr-home](routers_rtr-home.md) | lan0 | — |
| port2 | cbl-sw-desk | H-002 | copper | 1Gbps | 8m | [pc-desk](hosts_pc-desk.md) | eno1 | — |
| port3 | cbl-sw-nas | H-003 | copper | 1Gbps | 0.5m | [srv-nas](hosts_srv-nas.md) | eth0 | — |
| port4 | cbl-sw-dongle | H-004 | copper | 1Gbps | 10m | [adp-usb-eth](hosts_adp-usb-eth.md) | enx001122334455 | — |
| port5 | cbl-sw-ap | H-005 | copper | 1Gbps | 6m | [ap-home](wireless_ap-home.md) | eth0 | — |

One row per cable that physically terminates here. VIA names the panels the run this cable is a segment of crosses, and the two ends of that run; the site page's cable schedule has every segment of it. An attachment row is an adapter's upstream rather than a cable somebody pulled.

<a id="table-tunnels"></a>

**Tunnels**

_No tunnel terminates on this element._


<a id="diagrams"></a>

## Diagrams

The drawings this element is in.

- [Physical topology (l1)](../sites/root.md#diagrams)
- [VLANs (l2)](../sites/root.md#diagrams)
- [IP subnets (l3)](../sites/root.md#diagrams)


---

netviz 0.0.0-test, generated 2026-01-31T09:00:00Z.

=== devices/wireless_ap-home.md ===
# ap-home

switch wireless/ap-home

[← home-lab — as-built network documentation](../README.md) · [site](../sites/root.md)

<a id="identity"></a>

## Identity

| Field | Value |
|:---|:---|
| Name | ap-home |
| Qualified name | wireless/ap-home |
| Kind | switch |
| Site | [(inventory root)](../sites/root.md) |
| Description | Ceiling access point in the hallway, powered over the uplink. It is a switch: the radio is a bridge port like any other, and the two SSIDs are what it bridges the air into. |
| Vendor | Ubiquiti |
| Model | U6-Lite |
| Serial | — |
| Declared in | wireless/ap-home.yaml#0:1 |

<a id="table-labels"></a>

**Labels**

| KEY | VALUE |
|:---|:---|
| role | wireless |
| site | home |

<a id="table-annotations"></a>

**Annotations**

_This element carries no annotation._


<a id="placement"></a>

## Placement and power

| Field | Value |
|:---|:---|
| Site | — |
| Room | — |
| Rack | — |
| Position | — |
| Height | 1U |

<a id="table-feeds"></a>

**Power feeds**

_No power feed is declared for this element._

A dual-corded element has one row per cord.


<a id="interfaces"></a>

## Interfaces

<a id="table-interfaces"></a>

**Interfaces**

| NAME | TYPE | UP | MAC | MTU | ADDRESSES | VLANS | VRF | AGGREGATION | DESCRIPTION |
|:---|:---|:---|:---|---:|:---|:---|:---|:---|:---|
| br0 | bridge | yes | — | — | — | — | — | members: eth0, wlan0 | Bridges the radio onto the wired uplink |
| Vlan10 | vlan | yes | — | — | 192.168.10.3/24 | access 10 | — | under br0 | In-band management address of the access point |
| eth0 | ethernet | yes | 78:8a:20:aa:00:01 | 1500 | — | trunk 10,20 (native 10) | — | member of br0 | PoE uplink to sw-home |
| wlan0 | wifi | yes | 78:8a:20:aa:00:10 | 1500 | — | — | — | member of br0 | 5 GHz radio, two SSIDs |

Addresses are as configured, prefix length included. VLANS reads 'mode: ids', with the native VLAN named where a trunk has one.

<a id="table-radios"></a>

**Radios and BSSs**

| SSID | RADIO | ROLE | CHANNEL | BSSID | VLAN | SECURITY |
|:---|:---|:---|:---|:---|---:|:---|
| home | [wireless/ap-home:wlan0](wireless_ap-home.md) | ap | 36/5GHz | 78:8a:20:aa:00:11 | 10 | wpa3-psk |
| home-guest | [wireless/ap-home:wlan0](wireless_ap-home.md) | ap | 36/5GHz | 78:8a:20:aa:00:12 | 20 | wpa2-psk |

The wireless detail of this element, one row per SSID per radio.


<a id="links"></a>

## Links

What is plugged into this element, and what runs over it.

<a id="table-cables"></a>

**Cables**

| PORT | CABLE | LABEL | MEDIUM | SPEED | LENGTH | FAR END | FAR PORT | VIA |
|:---|:---|:---|:---|---:|---:|:---|:---|:---|
| eth0 | cbl-sw-ap | H-005 | copper | 1Gbps | 6m | [sw-home](switches_sw-home.md) | port5 | — |
| wlan0 | wl-ap-phone | — | wireless | — | — | [phone](hosts_phone.md) | en0 | — |

One row per cable that physically terminates here. VIA names the panels the run this cable is a segment of crosses, and the two ends of that run; the site page's cable schedule has every segment of it. An attachment row is an adapter's upstream rather than a cable somebody pulled.

<a id="table-tunnels"></a>

**Tunnels**

_No tunnel terminates on this element._


<a id="diagrams"></a>

## Diagrams

The drawings this element is in.

- [Physical topology (l1)](../sites/root.md#diagrams)
- [VLANs (l2)](../sites/root.md#diagrams)
- [IP subnets (l3)](../sites/root.md#diagrams)


---

netviz 0.0.0-test, generated 2026-01-31T09:00:00Z.

=== diagrams/root-l1.svg (drawing, not compared) ===

=== diagrams/root-l2.svg (drawing, not compared) ===

=== diagrams/root-l3.svg (drawing, not compared) ===

=== sites/root.md ===
# (inventory root)

As-built record of the inventory root.

[← home-lab — as-built network documentation](../README.md)


<a id="summary"></a>

## Summary

| Field | Value |
|:---|:---|
| Namespace | (inventory root) |
| Elements | 8 |
| Cables | 6 |
| Tunnels | 0 |
| Subnets | 5 |

- [Report overview](../README.md)


<a id="diagrams"></a>

## Diagrams

One drawing per layer, from the same inventory as the tables below.

**Physical topology** — 8 node(s), 7 link(s)

![Physical topology (l1)](../diagrams/root-l1.svg)

**VLANs** — 8 node(s), 7 link(s)

![VLANs (l2)](../diagrams/root-l2.svg)

**IP subnets** — 12 node(s), 15 link(s)

![IP subnets (l3)](../diagrams/root-l3.svg)


<a id="devices"></a>

## Elements

Everything documented on this page, with a page each.

<a id="table-devices"></a>

**Elements**

| NAME | KIND | PORTS | ADDRESS | VLANS |
|:---|:---|---:|:---|:---|
| [hosts/adp-usb-eth](../devices/hosts_adp-usb-eth.md) | adapter | 1 | 192.168.10.30/24 | 10 |
| [hosts/laptop](../devices/hosts_laptop.md) | computer | 2 | - | 10 |
| [hosts/pc-desk](../devices/hosts_pc-desk.md) | computer | 3 | 192.168.10.20/24 | 10 |
| [hosts/phone](../devices/hosts_phone.md) | computer | 1 | 192.168.10.40/24 | - |
| [hosts/srv-nas](../devices/hosts_srv-nas.md) | server | 2 | 192.168.10.10/24 | 10 |
| [routers/rtr-home](../devices/routers_rtr-home.md) | router | 3 | 192.0.2.1/32 | 10 |
| [switches/sw-home](../devices/switches_sw-home.md) | switch | 7 | 192.168.10.2/24 | 10,20 |
| [wireless/ap-home](../devices/wireless_ap-home.md) | switch | 4 | 192.168.10.3/24 | 10,20 |


<a id="addressing"></a>

## Address plan

Every prefix an address sits in, and how full it is.

<a id="table-subnets"></a>

**Subnets**

| PREFIX | IP | VLANS | HOSTS | USED | FREE | UTIL | DEVICES |
|:---|---:|:---|---:|---:|---:|---:|---:|
| 192.0.2.1/32 | 4 | - | 1 | 1 | 0 | 100.0% | 1 |
| 192.168.10.0/24 | 4 | 10 | 254 | 7 | 247 | 2.8% | 7 |
| 203.0.113.0/30 | 4 | - | 2 | 1 | 1 | 50.0% | 1 |
| 2001:db8::1/128 | 6 | - | 1 | 1 | 0 | 100.0% | 1 |
| 2001:db8:10::/64 | 6 | 10 | 2^64 | 5 | 2^64 | <0.1% | 5 |

HOSTS is the usable capacity of the prefix, USED the distinct addresses declared in it. Loopback and link-local prefixes are left out: they are scoped to one host or one link and say nothing about the plan.


<a id="vlans"></a>

## VLANs

Every VLAN, the prefixes carried in it and the elements that are in it.

<a id="table-vlan-summary"></a>

**VLANs**

| VLAN | NAME | ELEMENTS | PORTS |
|---:|:---|---:|---:|
| 10 | home | 7 | 9 |
| 20 | guest | 2 | 2 |

Membership is derived: a host on an untagged access port counts as a member even though it declares no VLAN itself.

<a id="table-vlan-matrix"></a>

**VLAN, subnet and element matrix**

| VLAN | NAME | ELEMENT | PORTS | MODE | SUBNETS |
|---:|:---|:---|:---|:---|:---|
| 10 | home | [adp-usb-eth](../devices/hosts_adp-usb-eth.md) | — | — | 192.168.10.0/24, 2001:db8:10::/64 |
| 10 | home | [laptop](../devices/hosts_laptop.md) | — | — | — |
| 10 | home | [pc-desk](../devices/hosts_pc-desk.md) | — | — | 192.168.10.0/24, 2001:db8:10::/64 |
| 10 | home | [srv-nas](../devices/hosts_srv-nas.md) | — | — | 192.168.10.0/24, 2001:db8:10::/64 |
| 10 | home | [rtr-home](../devices/routers_rtr-home.md) | lan0 | access | 192.168.10.0/24, 2001:db8:10::/64 |
| 10 | home | [sw-home](../devices/switches_sw-home.md) | Vlan10, port1, port2, port3, port4, port5 | access, trunk | 192.168.10.0/24 |
| 10 | home | [ap-home](../devices/wireless_ap-home.md) | Vlan10, eth0 | access, trunk | 192.168.10.0/24 |
| 20 | guest | [sw-home](../devices/switches_sw-home.md) | port5 | trunk | — |
| 20 | guest | [ap-home](../devices/wireless_ap-home.md) | eth0 | trunk | — |

A row with no port is an element that reaches the VLAN over a link rather than by configuring it — a host behind an access port, or a hub.


<a id="cabling"></a>

## Cabling

What an installer would carry into the room.

<a id="table-cable-schedule"></a>

**Cable schedule**

| RUN | SEGMENT | CABLE | LABEL | MEDIUM | CATEGORY | SPEED | LENGTH | A END | A PORT | A POSITION | B END | B PORT | B POSITION |
|:---|:---|:---|:---|:---|:---|---:|---:|:---|:---|:---|:---|:---|:---|
| — | — | cbl-sw-dongle | H-004 | copper | cat6 | 1Gbps | 10m | [adp-usb-eth](../devices/hosts_adp-usb-eth.md) | enx001122334455 | — | [sw-home](../devices/switches_sw-home.md) | port4 | — |
| — | — | cbl-sw-desk | H-002 | copper | cat6 | 1Gbps | 8m | [pc-desk](../devices/hosts_pc-desk.md) | eno1 | — | [sw-home](../devices/switches_sw-home.md) | port2 | — |
| — | — | cbl-sw-nas | H-003 | copper | cat6a | 1Gbps | 0.5m | [srv-nas](../devices/hosts_srv-nas.md) | eth0 | — | [sw-home](../devices/switches_sw-home.md) | port3 | — |
| — | — | cbl-rtr-sw | H-001 | copper | cat6 | 1Gbps | 0.5m | [rtr-home](../devices/routers_rtr-home.md) | lan0 | — | [sw-home](../devices/switches_sw-home.md) | port1 | — |
| — | — | cbl-sw-ap | H-005 | copper | cat6 | 1Gbps | 6m | [ap-home](../devices/wireless_ap-home.md) | eth0 | — | [sw-home](../devices/switches_sw-home.md) | port5 | — |
| — | — | wl-ap-phone | — | wireless | — | — | — | [ap-home](../devices/wireless_ap-home.md) | wlan0 | — | [phone](../devices/hosts_phone.md) | en0 | — |

One row per cable document, which is one run somebody pulls: a link through a patch panel is several. RUN names the end-to-end link and SEGMENT which leg of it this is. 'netviz export cable-list' writes the same rows as CSV, with the full location of both ends.


<a id="wireless"></a>

## Wireless

Every BSS: which radio beacons which SSID, on what channel, into which VLAN.

<a id="table-bss"></a>

**BSS and SSID plan**

| SSID | RADIO | ROLE | CHANNEL | BSSID | VLAN | SECURITY |
|:---|:---|:---|:---|:---|---:|:---|
| home | [hosts/phone:en0](../devices/hosts_phone.md) | station | 36/5GHz | 78:8a:20:aa:00:11 | - | wpa3-psk |
| home | [wireless/ap-home:wlan0](../devices/wireless_ap-home.md) | ap | 36/5GHz | 78:8a:20:aa:00:11 | 10 | wpa3-psk |
| home-guest | [wireless/ap-home:wlan0](../devices/wireless_ap-home.md) | ap | 36/5GHz | 78:8a:20:aa:00:12 | 20 | wpa2-psk |

One row per SSID per radio: a dual-band AP serving three networks has six.


<a id="accounts"></a>

## Identity

The accounts the network is for, and the groups that grant access.

<a id="table-users"></a>

**Accounts**

| USER | LOGIN | FULL NAME | EMAIL | UID | TYPE | STATUS | KEYS | GROUPS |
|:---|:---|:---|:---|---:|:---|:---|---:|:---|
| ana | ana | Ana Brandt | ana@example.invalid | 1000 | person | active | 1 | admins |
| kit | kit | Kit Brandt | kit@example.invalid | 1001 | person | active | 0 | household |
| backup | backup | - | - | 900 | service | active | 0 | - |

GROUPS is the reverse of what the documents hold: no 'user' lists its groups, so this is the one fact about a person their own file cannot say.

<a id="table-groups"></a>

**Groups**

| GROUP | GID | EMAIL | MEMBERS | NESTED | PEOPLE | HOLDS |
|:---|---:|:---|---:|---:|---:|:---|
| admins | 100 | - | 1 | 0 | 1 | ana |
| household | 101 | - | 2 | 1 | 2 | admins, kit |

HOLDS is what the document names; PEOPLE is how many accounts the group reaches once nested groups have been walked.


<a id="external"></a>

## Links leaving this page

Where this part of the network is joined to the rest of it.

<a id="table-external-links"></a>

**External links**

_Nothing on this page is joined to an element outside it._

These links are deliberately absent from the diagrams and the cable schedule above, which cover this page's elements only. A far end with no page of its own is outside what this report documents at all.


<a id="findings"></a>

## Validation findings

<a id="table-findings"></a>

**Findings**

_The validator reports nothing about this inventory._

Findings anchored to an element of this site.


---

netviz 0.0.0-test, generated 2026-01-31T09:00:00Z.
