ED-IT - Компоненты - netctl

netctl - компонент KMUT на М7, который возвращает сетевые настройки устройства к сохранённому эталону.

Он следит не за доступностью сети, а за расхождением между текущими параметрами в flash и файлом:

/usr/share/kmut/etc/network/interfaces

Связи

Ключевое Ограничение

В актуальном исходнике netctl работает через команды flash get/set. Поэтому восстановление сетевых настроек предназначено для RR10 revB.

На revC файл /usr/share/kmut/etc/network/interfaces может создаваться ZTP-стендом или RR10-revC-os-update, но netctl не умеет применить его через mib. Для revC этот файл сейчас полезен как снимок настроек, а не как рабочий механизм восстановления.

Матрица RevB/RevC

ПоведениеrevBrevC
Файл-эталон создаётся ZTP/updateдада
netctl save применяет сохранённые параметрыданет, потому что исходник использует flash
Табличные параметрыподдержаны через delall + addфайл может содержать WAN/IP_ROUTE-параметры, но netctl их не применяет через mib
Риск при ручном изменении сетистарые параметры вернутся при следующей сверкеавтоматический возврат через netctl не ожидается

Файл-Эталон

Файл содержит строки вида:

ИМЯ_ПАРАМЕТРА=значение

Комментарии и пустые строки игнорируются. Если файл пустой, восстанавливать нечего.

Обычная ZTP-настройка и os_update заполняют файл автоматически, но после стенда или обновления его всё равно нужно проверить:

cat /usr/share/kmut/etc/network/interfaces

Автоматический Запуск

Сверка запускается cron в начале каждого 12-го часа:

0 */12 * * * /usr/share/kmut/bin/netctl save 1>/dev/null 2>/dev/null

Режим кнопки запускается при старте:

/usr/share/kmut/bin/netctl monitor &

Точка подключения:

kmut-lua/ALL_RR10/etc/rcS.d/S19_network_monitor

Что Делает netctl save

  1. Проверяет, что файл-эталон существует.
  2. Валидирует имена параметров: каждый параметр из файла должен существовать во flash.
  3. Сравнивает текущие значения flash с файлом.
  4. Если всё совпадает, ничего не меняет.
  5. Если есть расхождение, записывает значения из файла обратно во flash.
  6. После применения выполняет reinitCli -e 3.

Автоматический запуск не пишет stdout/stderr в журнал: cron отправляет вывод в /dev/null. Поэтому ошибки валидации видны только при ручном запуске.

Табличные Параметры

Если значение содержит запятые, netctl считает параметр табличным. Для таких параметров он:

  • отбрасывает цифры в конце имени, чтобы получить базовое имя;
  • перед применением очищает весь набор через flash set <base> delall;
  • затем добавляет строки из файла через flash set <base> add ....

Из-за этого неполный файл-эталон может удалить отсутствующие в нём маршруты или записи WAN. Не дописывать табличные параметры вручную без проверки на стенде.

Кнопка Очистки

netctl monitor опрашивает GPIO36 раз в секунду. Удержание кнопки не менее одной секунды очищает только файл:

/usr/share/kmut/etc/network/interfaces

Это не сброс устройства и не возврат сети к заводским настройкам. Текущие IP-адреса, маршруты и DNS остаются как были. После очистки netctl save перестаёт возвращать старую конфигурацию, потому что эталон пуст.

Ручная Проверка

Перед ручным запуском убедиться, что есть консоль или запасной канал доступа: reinitCli -e 3 может оборвать текущую SSH-сессию.

cat /usr/share/kmut/etc/network/interfaces
ip route | grep default
/usr/share/kmut/bin/netctl save

Если после запуска сеть изменилась неожиданно, первым делом сравнить текущие параметры с содержимым /usr/share/kmut/etc/network/interfaces: именно этот файл был источником применённых значений.

Изменение Сети На Установленном RevB

Процедура изменения сети вынесена отдельно: ED-IT - Инструкции - Изменение сетевых настроек М7 на установленном устройстве.

Ключевое правило для revB: изменить только текущие параметры недостаточно. Нужно обновить и файл-эталон, иначе netctl вернёт старые значения при ближайшей сверке.

Код

ЧтоГде
netctlkmut-lua/ALL_RR10/bin/netctl
Cronkmut-lua/ALL_RR10/etc/cron.d/root
Старт monitorkmut-lua/ALL_RR10/etc/rcS.d/S19_network_monitor
Заполнение файла на ZTPM7-stand/DEB/tftpboot/kmut_tftp_configure
Заполнение файла при update revBM7-stand/DEB/RR10-os-update
Заполнение файла при update revCM7-stand/DEB/RR10-revC-os-update