platform -------- commit 09d2b8e57eae106b1c8e9fa7a0c780e0af566184 Author: Thomas Merkel Date: Sun Nov 8 22:52:10 2026 +0100 ci: add incremental builds and publish releases over sftp Builds now happen in a workspace per branch on the build host (and a separate one for debug builds) that is kept between runs. The new build_type input picks a full build, which starts that workspace from scratch, or an incremental one, which runs gmake update, takes a new build stamp and skips the strap rebuild. An incremental build without an earlier build falls back to a full one, and a lock keeps two runs from using the same workspace. Only the logs are uploaded as a workflow artifact now. The release files (platform tarball, ISO, USB image, checksums, ...) are published over sftp to SMARTOS_RELEASE_DIR// on SMARTOS_RELEASE_HOST, like the SmartOS release directories on Manta, without "latest" links. commit dff2e3d2ba7707db196a01544213b237a38975e0 Author: Thomas Merkel Date: Sun Nov 8 20:29:54 2026 +0100 build: rename the working branch from feat/0x42 to 0x42 The build tools put branch names into file names, which breaks with a '/' in the branch name. Point the illumos project at the 0x42 branch and drop the local branch renaming from remote-build.sh, which isn't needed anymore. commit 951d7fd1726747582592e9d327fde29928ed70d5 Author: Thomas Merkel Date: Sun Nov 8 20:26:55 2026 +0100 ci: fix build on branches with '/' and make failures readable The build tools put the smartos-live and project branch names into file names, so building feat/0x42 failed when copying the platform tarball. remote-build.sh now checks out branches containing '/' under a local name with '-' (feat-0x42), for smartos-live and for projects, and writes a configure-projects file using those names. The full build log is too big for the browser, so the pipeline now only prints the step headings while building, and on failure the end of the log plus the illumos build summary (mail_msg). All logs are uploaded as one .tar.gz, since some log file names contain ':', which artifacts don't allow. commit f3e2ca31cbf4d934bd76fb0fc595efa2078dd31b Author: Thomas Merkel Date: Sun Nov 8 13:38:00 2026 +0100 ci: add manual Forgejo pipeline that builds on a SmartOS host over ssh commit 657b0c14dcae8877951077c89aedecf5756d7d34 Author: Thomas Merkel Date: Sun Nov 8 13:17:50 2026 +0100 build: use frubar illumos-joyent feat/0x42 branch Point the illumos project at git@git.frubar.net:drscream/illumos-joyent.git on the feat/0x42 branch, so builds of this branch pick up the matching illumos-joyent changes. commit 9428f2422c29e604047e5b095d53198dd45a31ed Author: Thomas Merkel Date: Mon Sep 7 09:52:20 2026 +0200 dockerinit: support IPv6 gateways in the gateways array setupGateway() only ever read the old single gateway property and only ever added an IPv4 default route. This keeps that path exactly as it was and adds a second, separate check for the gateways array: each entry gets routed through the existing addRoute() for v4 or a new addRoute6() for v6, which builds the same routing socket message but with sockaddr_in6. Unlike the old path, the gateways array doesn't require the legacy ip property to be set, since a nic can be IPv6-only. This is independent from the addrconf/ips work on the docker-ipv6-networking branch, not merged with it yet. commit 5c7e5197ab679336baac4fcb5aefe9c44ef5b13b Author: Thomas Merkel Date: Sat Sep 5 23:02:13 2026 +0200 dockerinit: assign IPv6 addresses from vmadm and support addrconf This adds proper dual-stack address assignment, based on how lxinit already does it for regular LX zones: addresses are assigned from CIDR strings, IPv6 gets its own logical interface. Also starts in.ndpd when a nic asks for addrconf, again matching existing LX zone behavior, so should SLAAC/DHCPv6 addressing works. commit 64ecdf2c205b02701596a43c4b3836667648ccc0 Author: Thomas Merkel Date: Fri Nov 6 15:23:27 2026 +0100 sysinfo: find the admin IP on the admin VLAN VNIC With admin_vlan_id set, net-physical configures the admin IP on a VNIC named 0 (usually admin0) on top of the admin link instead of on the link itself. When the admin IP comes from DHCP, sysinfo looked it up on the link and reported an empty "Admin IP". Look it up on that VNIC when a VLAN is configured for the tag. commit 07a9f332ce37ef7de980010c97480a380cc05c50 Author: Thomas Merkel Date: Sun Nov 8 12:26:10 2026 +0100 imgadm fails to reach image sources on IPv6-only hosts On an IPv6-only host "imgadm sources -a https://datasets.at" fails with "connect ENETUNREACH", while curl works. The platform node (v0.10) dns.lookup() returns IPv4 addresses first, net only tries that first address, and there is no per-request option to choose the address family. So any source hostname with an A record is reached via IPv4. Add an "ipFamily" config option (4 or 6) and an IMGADM_IP_FAMILY envvar that make hostname lookups prefer that family, falling back to any family if the name has no such address. Without either set, behaviour is unchanged. This also works with DNS64/NAT64 resolvers. commit eb36b0b877bd3531ceb3a002aed0507cfad86151 Author: Thomas Merkel Date: Fri Nov 6 15:15:26 2026 +0100 imgadm list is slow on hosts with many snapshots _loadImages() listed every snapshot on the system (with origin, mountpoint and imgadm:ignore properties) just to find the few image candidates that need a "@final" snapshot check. On hosts with many snapshots (e.g. from backup/replication tooling) this dominated `imgadm list` run time and could exceed the exec maxBuffer. Only list filesystems and volumes to depth 2, which is all that can match VMADM_FS_NAME_RE, and look up "@final" snapshots separately, by name only, for just the candidates whose origin is a "@final" snapshot. mdata-client -------- kbmd -------- kvm-cmd -------- kvm -------- ur-agent -------- illumos -------- commit dc61c3439a67d4a4ddbf36f70078bc711e4bec20 Author: Thomas Merkel Date: Mon Sep 7 13:41:23 2026 +0200 add IPv6 default gateway support for lx and regular zones Same gap as dockerinit: gateways were only ever read as IPv4 and only ever added an IPv4 default route, everywhere a zone's networking gets set up from nic data. lxinit.c only read the singular gateway zonecfg property and only built IPv4 route messages. This adds a gateways property (comma separated, like ips) and a new lxi_iface_gateway6() that builds the same routing socket message with sockaddr_in6. The old gateway property still works as before. For regular (non-branded) zones, mdata-fetch writes gateways into /etc/defaultrouter, but only kept IPv4 ones. It now keeps IPv6 gateways too. net-routing-setup then reads that file and calls route add for each one; route needs an explicit -inet6 flag for IPv6 addresses or it fails, so that's added when a gateway looks like an IPv6 address. This does not touch the general sdc:routes/static routes mechanism, only the per-nic default gateway. commit b76219313a8ab07e45335f45901b6069e759945f Author: Thomas Merkel Date: Fri Sep 4 13:34:14 2026 +0200 ipf: allow ICMPv6 ND advertisements/redirects to establish state commit d68805e897e40635b46e0dd3fe11ad4099c24e96 Author: Thomas Merkel Date: Fri Nov 6 15:23:05 2026 +0100 add admin_vlan_id support for the global zone admin nic All other nic tags in /usbkey/config get their IP on a VNIC created on the tagged link, which is where _vlan_id is applied. The admin IP is instead configured directly on the admin link, so there was no place for a VLAN ID and admin_vlan_id was not supported. If admin_vlan_id is set (1-4094), net-physical now creates a VNIC named 0 (usually admin0) with that VLAN on the admin link and configures the admin IPv4 (static or DHCP) and IPv6 addresses on it. The admin nic tag stays on the admin link, so zone VNICs using that tag keep working as before. An optional admin_vlan_mac sets the MAC address of the VNIC, e.g. for DHCP reservations; otherwise a random one is used. Without admin_vlan_id, or with admin_vlan_id=0, nothing changes. Both values can also come from bootparams, like admin_ip, and follow admin_tag when it is overridden. An invalid value fails the service with a config error. The early-admin setup does not support it, so it is ignored there with a warning. illumos-extra --------