Разместим в iflayerchanged логирование всех событий
logger -t 'ndm-event' -p 'debug' "iflayerchanged.d: ${id}|${system_name} ${level} in ${layer}"
И выполним такой код
# проверяем level каждого layer
curl -s '127.0.0.1:79/rci/show/interface/L2TP0/summary/layer'
# отключаем
curl -s -d '{"down":"true"}' '127.0.0.1:79/rci/interface/L2TP0'
# снова проверяем level каждого layer
curl -s '127.0.0.1:79/rci/show/interface/L2TP0/summary/layer'
# каждые 0,1 секунды пишем сообщение в лог в течении 7 секунд
attempt=70
while [ $attempt -gt 0 ] ; do
logger -t 'timer' -p 'debug' "Отсечка ${attempt}"
usleep 100000
attempt=$(( $attempt - 1 ))
done
# снова проверяем level каждого layer
curl -s '127.0.0.1:79/rci/show/interface/L2TP0/summary/layer'
В итоге мы выясним, что после команды «отключи интерфейс» с ним происходит:
на 0 секунде pending in ctrl;
на 0,4с pending in ipv4;
на 1с pending in link;
на 1,6с running in link;
на 2,1с running in ipv4;
на 2,6с running in ctrl;
на 3с disabled in ctrl;
на 3,6с disabled in ipv4;
на 4с disabled in link;
на 4,4с disabled in conf.
Последовательность выглядит логичной (кроме running, но он в контексте вопроса/темы не важен).
Но в show/interface/L2TP0/summary/layer сразу после вызова отключения (на 0 секунде) вместо running прописываются disabled и не меняются
{
"conf": "disabled",
"link": "disabled",
"ipv4": "disabled",
"ipv6": "disabled",
"ctrl": "disabled"
}
Разве я не должен на 1 секунде увидеть там картину типа
{
"conf": "running",
"link": "pending",
"ipv4": "pending",
"ipv6": "disabled",#отключен для интерфейса, к вопросу отношение не имеет
"ctrl": "pending"
}
А на 3,8с из примера
{
"conf": "running",
"link": "pending",
"ipv4": "disabled",
"ipv6": "disabled",
"ctrl": "disabled"
}
И лишь только после 4,4с увидеть везде disabled?
Я правильно понимаю, что при помощи API сейчас никак невозможно определить, что интерфейс отключается (команда дана, но ещё не отключен)? Т.к. сразу после команды «отключайся» все layer помечаются как disabled, их значения меняются "на будущее" и с хуком iflayerchanged никак не синхронизированы?