summaryrefslogtreecommitdiff
path: root/src/init
diff options
context:
space:
mode:
Diffstat (limited to 'src/init')
-rwxr-xr-xsrc/init/vyos-router37
1 files changed, 36 insertions, 1 deletions
diff --git a/src/init/vyos-router b/src/init/vyos-router
index c0d12e2a7..ff1de0584 100755
--- a/src/init/vyos-router
+++ b/src/init/vyos-router
@@ -357,11 +357,39 @@ clear_or_override_config_files ()
update_interface_config ()
{
- if [ -d /run/udev/vyos ]; then
+ # add a configuration node for any interface the name store knows about
+ # that does not have one yet
+ if [ -f /opt/vyatta/etc/config/interface-mapping.json ]; then
$vyos_libexec_dir/vyos-interface-rescan.py $BOOTFILE
fi
}
+# warn (but do not fail boot) about configured hw-id interfaces whose
+# hardware was not found by vyos-net-name-resolve.service
+warn_missing_interface_hardware ()
+{
+ local status_file="/run/vyos-net-name-resolve.json"
+ [ -f "${status_file}" ] || return 0
+
+ jq -r '.missing // {} | to_entries[] | "\(.key) \(.value)"' "${status_file}" \
+ 2>/dev/null | while read -r intf hwid; do
+ [ -n "${intf}" ] || continue
+ log_failure_msg "interface '${intf}' (${hwid}) did not appear during boot - check cabling, hardware and driver/firmware. Its name stays reserved."
+ done
+
+ # A replacement NIC inheriting a slot's name also inherits that
+ # interface's addresses, so say so rather than doing it silently.
+ jq -r '.matched_by_path // {} | to_entries[] | "\(.key) \(.value)"' "${status_file}" \
+ 2>/dev/null | while read -r intf hwid; do
+ [ -n "${intf}" ] || continue
+ log_warning_msg "interface '${intf}' was matched to new hardware ${hwid} by slot - verify it is the port you expect before relying on its configuration"
+ done
+
+ if [ "$(jq -r '.persisted // true' "${status_file}" 2>/dev/null)" = "false" ]; then
+ log_failure_msg "interface names could not be persisted - the configuration volume is not mounted"
+ fi
+}
+
cleanup_post_commit_hooks () {
# Remove links from the post-commit hooks directory.
# note that this approach only supports hooks that are "configured",
@@ -606,6 +634,12 @@ start ()
disabled migrate || migrate_bootfile || overall_status=1
+ # config.boot is only guaranteed to exist/be current from this point on
+ # (tmpfs mount + encrypted config unlock + syntax migration have all
+ # already happened above) - hw-id based interface naming must be
+ # resolved against it before anything below applies interface config.
+ systemctl start vyos-net-name-resolve.service || overall_status=1
+
restore_if_missing_bootup_script pre
run_preconfig_script
@@ -613,6 +647,7 @@ start ()
run_postupgrade_script
update_interface_config || overall_status=1
+ warn_missing_interface_hardware
disabled system_activate || system_activate || overall_status=1