Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package agama-installer for openSUSE:Factory 
checked in at 2026-08-19 17:55:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/agama-installer (Old)
 and      /work/SRC/openSUSE:Factory/.agama-installer.new.1258 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "agama-installer"

Wed Aug 19 17:55:31 2026 rev:40 rq:1371748 version:23.0.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/agama-installer/agama-installer.changes  
2026-08-11 17:09:36.922928888 +0200
+++ 
/work/SRC/openSUSE:Factory/.agama-installer.new.1258/agama-installer.changes    
    2026-08-19 17:56:07.408268575 +0200
@@ -1,0 +2,62 @@
+Mon Aug 17 09:30:00 UTC 2026 - Knut Anderssen <[email protected]>
+
+- HCN: do not collect data from functions that log. dracut's
+  info() writes to stdout when DRACUT_SYSTEMD is set, so the
+  messages of carry_over_cmdline() and get_dev_hcn() would end up
+  in the generated command line and in the device mappings. Both
+  hand their result over in a variable now.
+- HCN: reset the master lookup in every iteration of
+  fixup_nm_connections, a connection that is in no mapping and
+  whose controller is no HCN bond inherited the values of the
+  previous iteration and was treated as HCN-related.
+- HCN: follow the dracut conventions in hcn-init-initrd.service
+  (DRACUT_SYSTEMD=1, StandardInput=null, Conflicts with
+  shutdown.target and emergency.target) and raise
+  TimeoutStartSec to 300s, the 3 minutes parse-hcn waits for the
+  devices exceed the default start timeout.
+- HCN: wait for all the devices to show up in sysfs with a single
+  3 minutes budget instead of restarting it for every device,
+  which exceeded the service start timeout with more than one
+  device, and do not take the name resolved by ofpathname for a
+  device that has no sysfs entry yet as a valid result
+  (gh#agama-project/agama#3790).
+
+-------------------------------------------------------------------
+Mon Aug  3 12:45:00 UTC 2026 - Knut Anderssen <[email protected]>
+
+- HCN: write the nm-initrd-generator configuration files to
+  /run/hcn/conf.d. The generator always emits
+  15-carrier-timeout.conf, so with the default directory the HCN
+  run overwrote the one NetworkManager had generated from the real
+  command line, resetting a user supplied rd.net.timeout.carrier.
+- HCN: fix the bond lookup in fixup_nm_connections, which matched
+  a space delimited name against the newline separated bond list
+  and therefore never matched at all as soon as there was more
+  than one bond.
+- Related to bsc#1272445 (gh#agama-project/agama#3790).
+
+-------------------------------------------------------------------
+Mon Aug  3 12:30:00 UTC 2026 - Knut Anderssen <[email protected]>
+
+- HCN: carry the device independent network options of the kernel
+  command line over to the nm-initrd-generator call, which so far
+  only received the bond=, ip= and rd.route= arguments built from
+  rd.hcn.*. nameserver=, rd.peerdns=, rd.net.timeout.dhcp=,
+  rd.net.dhcp.retry=, rd.net.dhcp.vendor-class= and
+  rd.net.dhcp.dscp= had no effect on an HCN boot so far, since the
+  ip=hcn marker keeps NetworkManager's own generator run from
+  producing any connection (bsc#1273219, related to bsc#1272445,
+  gh#agama-project/agama#3790).
+
+-------------------------------------------------------------------
+Mon Aug  3 10:50:00 UTC 2026 - Knut Anderssen <[email protected]>
+
+Fixes related to bsc#1272445 ISO building and testing
+(gh#agama-project/agama#3782).
+- Fix ppc64le and s390x ISO build issues in fix_bootconfig by
+  ensuring the xorriso wrapper acts as a transparent pass-through
+  for read-only reporting and probing commands.
+- Clean up redundant ppc64le bootloader options, relying on KIWI-NG's
+  native support for making OFW ISOs bootable.
+
+-------------------------------------------------------------------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ config-cdroot.tar.xz ++++++

++++++ fix_bootconfig ++++++
--- /var/tmp/diff_new_pack.gGHdPu/_old  2026-08-19 17:56:08.621311669 +0200
+++ /var/tmp/diff_new_pack.gGHdPu/_new  2026-08-19 17:56:08.623311740 +0200
@@ -115,20 +115,21 @@
 [ -x $bootfix ] && $bootfix $dst
 rm -f $dst/fix_bootconfig.* $dst/.profile
 
-case $arch in
-  s390x)
-    /usr/bin/xorriso "\$@" -volid "\$volid" -boot_image any 
bin_path=boot/s390x/loader/cd.ikr -boot_image any boot_info_table=off 
-boot_image any load_size=512
-    err=\$?
-    [ -x /usr/bin/isozipl ] && isozipl "\$iso"
-    ;;
-  ppc64le)
-    /usr/bin/xorriso "\$@" -volid "\$volid" -boot_image any chrp_boot_part=on
-    err=\$?
-    ;;
-  *)
-    /usr/bin/xorriso "\$@" -volid "\$volid"
-    err=\$?
-esac
+if [ -z "\$iso" ] ; then
+  /usr/bin/xorriso "\$@"
+  err=\$?
+else
+  case $arch in
+    s390x)
+      /usr/bin/xorriso "\$@" -volid "\$volid" -boot_image any 
bin_path=boot/s390x/loader/cd.ikr -boot_image any boot_info_table=off 
-boot_image any load_size=512
+      err=\$?
+      [ -x /usr/bin/isozipl ] && isozipl "\$iso"
+      ;;
+    *)
+      /usr/bin/xorriso "\$@" -volid "\$volid"
+      err=\$?
+  esac
+fi
 
 exit \$err
 XXX

++++++ live-root.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/usr/lib/dracut/modules.d/99hcn/ARCHITECTURE.md 
new/usr/lib/dracut/modules.d/99hcn/ARCHITECTURE.md
--- old/usr/lib/dracut/modules.d/99hcn/ARCHITECTURE.md  2026-08-01 
09:52:37.000000000 +0200
+++ new/usr/lib/dracut/modules.d/99hcn/ARCHITECTURE.md  2026-08-18 
11:57:52.000000000 +0200
@@ -164,9 +164,10 @@
      - **If none of these parameters are present:** Service does not start 
(systemd conditions prevent execution).
      - **If any HCN parameter is present:**
        - `/usr/bin/parse-hcn` performs discovery in `/proc/device-tree` to 
pair adapters sharing an `ibm,hcn-id`.
-       - For each device, it waits up to 3 minutes for the interface to appear 
after potential migration events.
+       - For each device, it waits up to 3 minutes for the interface to appear 
after potential migration events. The unit sets `TimeoutStartSec=300` for that, 
the default start timeout is shorter than the wait.
        - It reads the HCN-specific kernel command line options `rd.hcn.ip` and 
`rd.hcn.route` and translates them to target the planned bond interface (e.g. 
`bond333e80f5`).
-       - It calls the standard `nm-initrd-generator` **directly** with 
transformed parameters as command-line arguments and custom output directory 
`-c /run/hcn/system-connections`.
+       - It carries over the remaining device independent network options of 
the real command line (`nameserver=`, `rd.peerdns=`, `rd.net.dhcp.*`), which 
the generator run of step 2.5 produced nothing for.
+       - It calls the standard `nm-initrd-generator` **directly** with 
transformed parameters as command-line arguments and custom output directories 
`-c /run/hcn/system-connections` and `-r /run/hcn/conf.d`.
        - It adapts the generated NetworkManager profiles for compatibility 
with `hcnmgr` daemon (bond naming, controller references, UUIDs).
        - The adapted profiles are copied to 
`/etc/NetworkManager/system-connections/` for persistence across reboots.
 
@@ -270,10 +271,58 @@
   - `miimon=100`: Monitor link status every 100ms
   - `primary=enP32775p1s0`: Prefer the SR-IOV interface as primary
 
+### Carrying over the rest of the network command line
+
+The command line above is built from scratch, so it is also the only network 
command line
+`nm-initrd-generator` gets to see for HCN. The generator run NetworkManager 
performs on its
+own with the real command line is not a substitute: the `ip=hcn` marker keeps 
that run from
+producing any connection, so every per-connection setting it parses there is 
dropped.
+
+`carry_over_cmdline()` therefore appends the network options that name no 
device, copied
+verbatim:
+
+| Group | Options | Handling |
+|-------|---------|----------|
+| Device independent | `nameserver`, `rd.peerdns`, `rd.net.timeout.dhcp`, 
`rd.net.dhcp.retry`, `rd.net.dhcp.vendor-class`, `rd.net.dhcp.dscp` | Copied 
verbatim |
+
+Two constraints of the dracut library shape how the function is written:
+
+- It appends to `NEW_ARGS` instead of printing the options. Under systemd 
(`DRACUT_SYSTEMD=1`,
+  which `hcn-init-initrd.service` sets like every other dracut service) 
`info()` writes to
+  stdout, so the output of a function that logs cannot be captured with a 
command
+  substitution. The same applies to `get_dev_hcn()`, which hands its result 
over in
+  `HCN_MAPPING`.
+- Only options taking a value can be carried over this way, because 
`getargs()` prints
+  nothing for an option given as a bare flag. All the options above do take 
one,
+  `rd.peerdns` is used as `rd.peerdns=0`. A boolean option would need 
`getargbool()`.
+
+Known gaps, all of them deliberate:
+
+- `rd.net.dhcp.client-id`, `bootdev`, `rd.ethtool`, and the `vlan=` / 
`bridge=` / `team=`
+  stacked devices name a device. The user names a bond port, so the reference 
would have to
+  be rewritten to its bond first. On top of that, `nm-initrd-generator` 
creates a full
+  connection for every device it sees named in any of these, and the copy step 
below would
+  then persist that stray connection to 
`/etc/NetworkManager/system-connections`. The
+  stacked devices additionally need a way to be addressed from `rd.hcn.ip`, 
which the
+  current syntax does not offer.
+- `rd.net.dns`, `rd.net.dns-backend`, `rd.net.dns-resolve-mode` and 
`rd.net.timeout.carrier`
+  produce a global configuration file rather than a connection. They do not 
depend on the
+  bonds having been resolved and NetworkManager's own run already wrote them to
+  `/run/NetworkManager/conf.d`. That is also why `--run-config-dir` points at
+  `/run/hcn/conf.d`: the generator unconditionally writes 
`15-carrier-timeout.conf`, so
+  with the default directory the HCN run would overwrite NetworkManager's copy 
of it and
+  reset a `rd.net.timeout.carrier` supplied by the user.
+
+The host name field of `rd.hcn.ip` needs no carry-over: the generator writes 
it to its
+`--initrd-data-dir` (`/run/NetworkManager/initrd`, which it creates itself) 
while parsing
+the `ip=` argument built from `rd.hcn.ip`. `nm-run.sh`, the 
`initqueue/settled` hook of
+`35network-manager`, then applies it to `/proc/sys/kernel/hostname`. The 
ordering holds
+because `hcn-init-initrd.service` runs `Before=dracut-initqueue.service`.
+
 **These transformed parameters are:**
 
 1. Passed **directly** to `nm-initrd-generator` as command-line arguments (NOT 
written to `/etc/cmdline.d/`)
-2. Output directed to isolated directory: `-c /run/hcn/system-connections`
+2. Output directed to isolated directories: `-c /run/hcn/system-connections` 
and `-r /run/hcn/conf.d`
 3. Used by `nm-initrd-generator` to create initial NetworkManager connection 
profiles
 4. Adapted by `fixup_nm_connections()` to ensure `hcnmgr` daemon compatibility
 5. Copied to `/etc/NetworkManager/system-connections/` for persistence across 
reboots
@@ -420,14 +469,18 @@
    - Requires validation against `hcnmgr` expectations
 
 3. **DNS Configuration:**
-   - Current `ip=` format supports nameserver (8th field)
+   - The `ip=` format supports nameservers (8th and 9th field)
    - Example: 
`rd.hcn.ip=192.168.1.10::192.168.1.1:255.255.255.0:::none:8.8.8.8`
+   - A plain `nameserver=` is carried over as well, see [Carrying over the 
rest of the network command 
line](#carrying-over-the-rest-of-the-network-command-line)
    - Needs testing and documentation
 
 4. **VLAN Support:**
    - HCN bonds may carry VLAN-tagged traffic
    - Requires additional parameter: `rd.hcn.vlan=<vlan-id>`
    - Profile generation for VLAN interfaces on top of bond
+   - Rewriting a plain `vlan=<name>:<port>` to the bond is the easy half. The 
hard half is
+     addressing the VLAN interface from `rd.hcn.ip`, which currently only 
understands
+     ports, MACs and bond names, so `vlan=`, `bridge=` and `team=` are not 
carried over
 
 5. **Configurable Timeout:**
    - Current 180-second timeout may be insufficient on slow hardware or during 
complex LPM
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/usr/lib/dracut/modules.d/99hcn/hcn-init-initrd.service 
new/usr/lib/dracut/modules.d/99hcn/hcn-init-initrd.service
--- old/usr/lib/dracut/modules.d/99hcn/hcn-init-initrd.service  2026-08-01 
09:52:37.000000000 +0200
+++ new/usr/lib/dracut/modules.d/99hcn/hcn-init-initrd.service  2026-08-18 
11:57:52.000000000 +0200
@@ -10,13 +10,19 @@
 ConditionKernelCommandLine=|rd.hcn=1
 ConditionKernelCommandLine=|rd.hcn.ip
 ConditionKernelCommandLine=|rd.hcn.route
+Conflicts=shutdown.target emergency.target
 
 [Service]
+Environment=DRACUT_SYSTEMD=1
 Type=oneshot
 ExecStart=/usr/bin/parse-hcn
 SyslogIdentifier=hcn-init-initrd
+StandardInput=null
 StandardOutput=journal+console
 StandardError=journal+console
+# parse-hcn waits up to 3 minutes in total for the HCN devices to show up in
+# sysfs, which is longer than the default start timeout
+TimeoutStartSec=300
 RemainAfterExit=yes
 
 [Install]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/usr/lib/dracut/modules.d/99hcn/parse-hcn.sh 
new/usr/lib/dracut/modules.d/99hcn/parse-hcn.sh
--- old/usr/lib/dracut/modules.d/99hcn/parse-hcn.sh     2026-08-01 
09:52:37.000000000 +0200
+++ new/usr/lib/dracut/modules.d/99hcn/parse-hcn.sh     2026-08-18 
11:57:52.000000000 +0200
@@ -10,9 +10,11 @@
 #    - Scans vdevices (VNIC and Virtual Ethernet)
 # 3. Build MAPPINGS: bond names -> slave devices with MACs and modes
 # 4. Process rd.hcn.ip= and rd.hcn.route= parameters and replace slave 
references with bonds
-# 5. Generate NetworkManager connections to a temporary directory via 
nm-initrd-generator
-# 6. Fix up generated connections to use correct bond masters and naming
-# 7. Copy connections to /etc/NetworkManager/system-connections for persistence
+# 5. Carry over the remaining network options of the real kernel command line
+#    (nameserver=, rd.peerdns=, rd.net.dhcp.*)
+# 6. Generate NetworkManager connections to a temporary directory via 
nm-initrd-generator
+# 7. Fix up generated connections to use correct bond masters and naming
+# 8. Copy connections to /etc/NetworkManager/system-connections for persistence
 #
 # This script runs from hcn-init-initrd.service, once udev has discovered the
 # devices. Much earlier, hcn-cmdline.sh has already told NetworkManager and the
@@ -39,12 +41,26 @@
   fi
 }
 
+# Number of 3 second waits left for the devices to show up in sysfs after a
+# migration, 3 minutes in total.
+#
+# The budget is global and not per device on purpose: the devices appear in
+# parallel, so waiting for them one by one would multiply the time spent here
+# by the number of devices and hcn-init-initrd.service, which allows 5 minutes
+# for the whole run, would kill the script in the middle of it.
+HCN_WAIT_RETRIES=60
+
 # Function to discover HCN mapping for a device-tree node
+#
+# On success it sets HCN_MAPPING to "bondname devname mac mode" and returns 0.
+# The result is handed over in a variable instead of being printed because the
+# function logs its progress with info(), and under systemd info() writes to
+# stdout, which would end up mixed into the mapping (see carry_over_cmdline).
 get_dev_hcn() {
   local dev=$1
   local hcnid devname mode mac ofpath
-  # Wait up to 3 minutes for device to appear after migration (12 * 15s)
-  local wait=12
+
+  HCN_MAPPING=""
 
   hcnid=$(xdump4 "$dev/ibm,hcn-id")
   [ -z "$hcnid" ] && return 1
@@ -53,15 +69,27 @@
   ofpath=${dev#/proc/device-tree}
 
   # Wait for device to appear in sysfs. This might take time after migration.
-  while [ $wait -gt 0 ]; do
-    if devname=$(ofpathname -l "$ofpath" 2>/dev/null) && [ -e 
"/sys/class/net/$devname" ]; then
+  # Every device is looked up at least once, even with the shared wait budget
+  # already spent by the previous ones. devname is reset on each try because
+  # ofpathname can resolve a name for a device that is not in sysfs yet, and
+  # such a name must not be taken as a valid result once the waiting is over.
+  while :; do
+    devname=$(ofpathname -l "$ofpath" 2>/dev/null)
+    if [ -n "$devname" ] && [ -e "/sys/class/net/$devname" ]; then
       info "parse-hcn: device $devname ready for $ofpath"
       mac=$(get_mac "$dev")
       break
     fi
-    info "parse-hcn: waiting for device for $ofpath (retry $wait)"
-    sleep 15
-    wait=$((wait - 1))
+    devname=""
+    [ "${HCN_WAIT_RETRIES:-0}" -gt 0 ] || break
+    # The tries are short so that a device that is already there is not waited
+    # for longer than needed, but only one out of five is logged, the messages
+    # also go to the console
+    if [ $((HCN_WAIT_RETRIES % 5)) -eq 0 ]; then
+      info "parse-hcn: waiting for device for $ofpath ($HCN_WAIT_RETRIES tries 
left)"
+    fi
+    sleep 3
+    HCN_WAIT_RETRIES=$((HCN_WAIT_RETRIES - 1))
   done
 
   if [ -z "$devname" ]; then
@@ -69,8 +97,8 @@
     return 1
   fi
 
-  # Output the bond mapping: bondname devname mac mode
-  echo "bond$hcnid $devname ${mac:-none} ${mode:-none}"
+  # The bond mapping: bondname devname mac mode
+  HCN_MAPPING="bond$hcnid $devname ${mac:-none} ${mode:-none}"
   return 0
 }
 
@@ -206,6 +234,11 @@
   for con in "$conn_dir"/*.nmconnection; do
     [ -e "$con" ] || continue
 
+    # Start from scratch, otherwise a connection that is in no mapping and
+    # whose controller is no HCN bond would inherit the values of the previous
+    # iteration and be treated as HCN-related
+    found_master="" found_ifname=""
+
     # Extract connection details
     IFS='|' read -r id uuid ifname master controller mac <<EOF
 $(parse_nm_connection "$con")
@@ -252,7 +285,7 @@
     if [ -n "$mapping_info" ]; then
       found_master=${mapping_info% *}
       found_ifname=${mapping_info#* }
-    elif strstr " $BOND_NAMES " " ${master:-$controller} "; then
+    elif strstr " $BOND_LIST " " ${master:-$controller} "; then
       found_master=${master:-$controller}
       found_ifname=$ifname
     fi
@@ -287,6 +320,47 @@
   done
 }
 
+# Carry over the rest of the network command line
+#
+# nm-initrd-generator is called with a command line built from scratch, so any
+# network option the user really passed is invisible to it unless it is copied
+# over here. The generator run NetworkManager does on its own is no substitute:
+# the "ip=hcn" marker keeps that run from producing any connection, so
+# everything it would have parsed into one is lost.
+#
+# Options that end up in a global configuration file rather than in a
+# connection (rd.net.dns, rd.net.dns-backend, rd.net.dns-resolve-mode,
+# rd.net.timeout.carrier) are left out on purpose, the NetworkManager run
+# already wrote them to /run/NetworkManager/conf.d.
+#
+# Only the options that name no device are copied. The ones that do
+# (rd.net.dhcp.client-id=, bootdev=, rd.ethtool=, and the vlan=, bridge= and
+# team= stacked devices) would need the port reference rewritten to its bond,
+# and the generator creates a full connection for any device named in them,
+# which this module would then persist to /etc.
+#
+# Appends the options to NEW_ARGS. The result is not printed on purpose: the
+# function logs what it copies with info(), and info() writes to stdout when
+# DRACUT_SYSTEMD is set, so the output of a function using it cannot be
+# captured with a command substitution without getting the log messages mixed
+# into the value.
+#
+# Only options taking a value can be carried over this way, because getargs()
+# prints nothing for an option given as a bare flag. All the ones below do take
+# one, rd.peerdns is used as rd.peerdns=0. Keep that in mind before adding a
+# boolean option here, it would need getargbool() instead.
+carry_over_cmdline() {
+  local opt val
+
+  for opt in nameserver rd.peerdns rd.net.timeout.dhcp rd.net.dhcp.retry \
+    rd.net.dhcp.vendor-class rd.net.dhcp.dscp; do
+    for val in $(getargs "$opt"); do
+      info "parse-hcn: keeping $opt=$val"
+      NEW_ARGS="$NEW_ARGS $opt=$val"
+    done
+  done
+}
+
 # --- Main Execution ---
 
 info "parse-hcn: starting"
@@ -297,8 +371,8 @@
   for dev in /proc/device-tree/pci*/ethernet*; do
     [ -e "$dev/ibm,hcn-id" ] || continue
     info "parse-hcn: checking PCI device $dev"
-    if res=$(get_dev_hcn "$dev"); then
-      MAPPINGS="$MAPPINGS $res"
+    if get_dev_hcn "$dev"; then
+      MAPPINGS="$MAPPINGS $HCN_MAPPING"
     fi
   done
 
@@ -306,8 +380,8 @@
   for dev in /proc/device-tree/vdevice/vnic* /proc/device-tree/vdevice/l-lan*; 
do
     [ -e "$dev/ibm,hcn-id" ] || continue
     info "parse-hcn: checking vdevice $dev"
-    if res=$(get_dev_hcn "$dev"); then
-      MAPPINGS="$MAPPINGS $res"
+    if get_dev_hcn "$dev"; then
+      MAPPINGS="$MAPPINGS $HCN_MAPPING"
     fi
   done
 fi
@@ -326,19 +400,23 @@
 NM_RUNTIME_CONN_DIR="$NM_RUNTIME_DIR/system-connections"
 HCN_RUNTIME_DIR="/run/hcn"
 HCN_RUNTIME_CONN_DIR="$HCN_RUNTIME_DIR/system-connections"
+HCN_RUNTIME_CONF_DIR="$HCN_RUNTIME_DIR/conf.d"
 NEW_ARGS=""
 
 # Extract unique bond names from discovered mappings
 BOND_NAMES=$(echo "$MAPPINGS" | awk '{for(i=1;i<=NF;i+=4) if (!seen[$i]++) 
print $i}')
 
+# Space separated copy of BOND_NAMES. BOND_NAMES is newline separated, which
+# does not work for the " $list " substring checks done with strstr. The echo
+# is what collapses the newlines, so it is not the useless one it looks like.
+# shellcheck disable=SC2086,SC2116
+BOND_LIST=$(echo $BOND_NAMES)
+
 # First discovered bond. Only unqualified *static* configs (a fixed address
 # with no interface field) fall back to this bond, because a fixed address can
 # belong to a single bond. Method-only configs (dhcp, auto6, ...) carry no
 # per-host address and instead fan out to every discovered bond (see below).
-# NOTE: BOND_NAMES is newline-separated, so it must be left unquoted here for
-# awk to see a single record and return just the first token.
-# shellcheck disable=SC2086
-FIRST_BOND=$(echo $BOND_NAMES | awk '{print $1}')
+FIRST_BOND=${BOND_LIST%% *}
 
 for BONDNAME in $BOND_NAMES; do
   SLAVES="" SLAVE_NAMES="" SLAVE_MACS="" PRIMARY=""
@@ -540,10 +618,13 @@
   done
 done
 
+carry_over_cmdline
+
 # Write new configuration and update NetworkManager
 if [ -n "$NEW_ARGS" ]; then
-  # Create runtime directory to store HCN connections
-  mkdir -p "$HCN_RUNTIME_CONN_DIR"
+  # Create runtime directories to store HCN connections and the generator
+  # configuration files
+  mkdir -p "$HCN_RUNTIME_CONN_DIR" "$HCN_RUNTIME_CONF_DIR"
 
   # Write new cmdline options
   info "parse-hcn: new cmdline arguments: $NEW_ARGS"
@@ -556,8 +637,12 @@
     generator_found=1
     info "parse-hcn: calling $gen"
     rm -f "$HCN_RUNTIME_CONN_DIR"/*
+    # --run-config-dir points to a scratch directory on purpose. The generator
+    # always writes 15-carrier-timeout.conf, and with the default directory
+    # this run would overwrite the one NetworkManager generated from the real
+    # command line, resetting a user supplied rd.net.timeout.carrier.
     # shellcheck disable=SC2086
-    if "$gen" -c "$HCN_RUNTIME_CONN_DIR" -- $NEW_ARGS; then
+    if "$gen" -c "$HCN_RUNTIME_CONN_DIR" -r "$HCN_RUNTIME_CONF_DIR" -- 
$NEW_ARGS; then
       if [ "$(ls -A "$HCN_RUNTIME_CONN_DIR")" ]; then
         fixup_nm_connections
         # Persist these new HCN connections to /etc

Reply via email to