Skip to content

0.9.25 — rootless: set_iface_inet_addr verb#183

Merged
click0 merged 1 commit into
mainfrom
claude/release-0.9.25
May 9, 2026
Merged

0.9.25 — rootless: set_iface_inet_addr verb#183
click0 merged 1 commit into
mainfrom
claude/release-0.9.25

Conversation

@click0
Copy link
Copy Markdown
Owner

@click0 click0 commented May 9, 2026

Summary

Twenty-sixth 0.9.x release. Third atomic iface verb. Host-side IPv4 assignment primitive used by run_net.cpp::createEpair to configure the host-side epair-A end.

What lands

New privops verb

set_iface_inet_addr — wraps IfconfigOps::setInetAddr(iface, addr, prefixLen). 3-arg shape:

Field Type Notes
ifname string Iface name (validateIfaceName)
addr string Bare IPv4 (no /prefix)
prefix_len unsigned 0..32

Validator reuses validateIpv4Cidr by reassembling addr + "/" + prefixLen — cheaper than duplicating IPv4 octet logic.

Wire-up

Same stack as 0.9.23/0.9.24 — privops_pure, privops_wire_pure, privops_nv_pure, privops_client, privops_handlers. One new function/case in each.

CLI wiring

lib/run_net.cpp::createEpair line 229 now calls setInetAddrPrivopsOrLocal(info.ifaceA, info.ipA, 31) instead of direct IfconfigOps::setInetAddr. The /31 epair-A side gets its IP via privops when socket is detected.

Test plan

  • 1 new ATF test (set_iface_inet_addr_minimal): happy path + 3 reject cases (bad iface, bad addr, out-of-range prefix)
  • verb_token_roundtrips_for_every_verb updated
  • Suite: 1298 → 1299
  • FreeBSD CI must pass

Series state

CLI call-sites wired:

  • crate retune (0.9.15)
  • crate stop (0.9.17)
  • crate run ZFS attach + detach (0.9.18)
  • crate run nullfs mounts 8 sites (0.9.19)
  • crate run vnet moveToVnet 4 sites (0.9.20)
  • crate run removeJail teardown (0.9.21)
  • crate run createJail (0.9.22)
  • crate run setUp + disableOffload 5 sites (0.9.23)
  • crate run bridge add + del 2 sites (0.9.24)
  • crate run setInetAddr (host-side epair-A) → set_iface_inet_addr ← this PR

Remaining iface verbs:

  • 0.9.26 — create_epair (first response-data verb — returns the epair pair names since kernel auto-assigns them)
  • 0.9.27 — network_lease per-user + RCTL umbrella
  • 0.9.28 — default flip
  • 1.0.0 — setuid removed

Files

Same set as 0.9.23/0.9.24: privops_pure.{h,cpp}, privops_wire_pure.{h,cpp}, privops_nv_pure.{h,cpp}, privops_client.h, privops_client_pure.cpp, privops_handlers.{h,cpp}, run_net.cpp, tests/unit/privops_pure_test.cpp, cli/args.cpp, CHANGELOG.md.


Generated by Claude Code

Twenty-sixth 0.9.x release. Third atomic iface verb. The
host-side IPv4 assignment primitive used by run_net.cpp::
createEpair to configure the host-side epair-A end after
the jail-side epair-B is moved into the jail.

set_iface_inet_addr — wraps IfconfigOps::setInetAddr(iface,
addr, prefixLen). 3-arg shape (ifname + addr + prefix_len).
Validator reuses validateIpv4Cidr by reassembling
addr + "/" + prefixLen.

Same wire-up pattern as 0.9.23/0.9.24: privops_pure /
privops_wire_pure / privops_nv_pure / privops_client /
privops_handlers all gain one function/case.

CLI wiring: lib/run_net.cpp gets setInetAddrPrivopsOrLocal
helper; createEpair line 229 now uses it instead of direct
IfconfigOps::setInetAddr.

1 new ATF test covering happy path + 3 reject cases
(bad iface, bad addr, out-of-range prefix).
verb_token_roundtrips updated. Suite: 1298 -> 1299.

Remaining: create_epair (0.9.26 — first response-data verb).
@click0 click0 merged commit 604d292 into main May 9, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants