Например у меня оператор выдает при соединении с ограничением адрес из другой подсети. Я его проверяю - и переподнимаю соединение.
Пример управления соединением в функции “nmcliReconnect”:
log.info("strt")
//Определим переменные.
var interfaceControlName = "network/GPRS IP" //топик с адресом соединения
var checkPeriod = 5000 //период проверки, мс
var connectionName = "wb-gsm-sim1" //имя соединения
var partIP = "100.211" //старшая часть адреса, текст
//Опишем, пожалуй, функцию проверки отдельно
function interfaceControl(cName, ipPart){ //если не подключено или подключено с верным адресов - возвращается true; иначе - false
var currentAddressString = dev[cName];
log.debug("При проверке текущего адреса получен", currentAddressString)
if (currentAddressString == null) {
log.debug("адреса нет");
return true;
} else { //Тут проверим адрес (Который не null) на соответствие заданному
if ((currentAddressString.indexOf("ipPart",0)) == 0){
log.debug("адреса верный");
return true;
}
}
log.debug("адрес неверный");
return false;
}
//функция разрывающая-поднимающая соединения
function nmcliReconnect(conName){ //аргумент - имя соединения NM
runShellCommand("nmcli connection down "+ conName+"; sleep 6; nmcli connection up "+conName, {
captureOutput: true,
exitCallback: function(exitCode, capturedOutput) {
if (exitCode === 0) {
return true
}
}
});
}
//log.info("проверяем", interfaceControl(interfaceControlName, partIP))
//тут опишем правило, которое будет срабатывать при изменении самого адреса. И вызывать функцию.
var checkRule = defineRule("change_IP", {
whenChanged: interfaceControlName, // топик, при изменении которого сработает правило
then: function (newValue, devName, cellName) {
log.info("devName:{}, cellName:{}, newValue:{}", devName, cellName, newValue); // вывод сообщения в лог
log.debug("devName:{}, cellName:{}, newValue:{}", devName, cellName, newValue); // вывод сообщения в лог
if (!interfaceControl(interfaceControlName, partIP)){
log.debug("при смене адреса новый:{} не прошел проверку", newValue); // вывод сообщения в лог
//nmcliReconnect(connectionName)
log.info("соединение:{} перезапущено. Адрес {} некорректен", connectionName, newValue);
} else {
log.info("при смене адреса новый:{} пуст или прошел проверку", newValue);
}
}
});
runRule(checkRule)
Да.
Пример реализации (не мой): Не понятно чем занимается wb-connection-manager - #15 от пользователя VitP
Но в общем тоже просто выполнением mmcli с аргументами.