Постоянная ссылка на USB-модем во FreeBSD

By | 2016-09-12

К серверу системы мониторинга Zabbix, подключен USB модем для отсылки SMS-сообщений посредством smsd.
Модем, в силу некоторых обстоятельств, может быть переподключен к серверу и ему может назачиться новое имя последовательного устройства, в результате чего smsd отвалится.
Чтобы после переподключения последовательный порт модема назывался всегда одинаково, нужно знать принцип именования последовательных устройств и реагировать на их подключение/отключение.

Имя последовательного порта можно узнать через sysctl:

root@mon01:/# sysctl dev.u3g
dev.u3g.0.ttyports: 2
dev.u3g.0.ttyname: U0
dev.u3g.0.%parent: uhub3
dev.u3g.0.%pnpinfo: vendor=0x12d1 product=0x1003 devclass=0x00 devsubclass=0x00 sernum="" release=0x0000 mode=host intclass=0xff intsubclass=0xff intprotocol=0xff ttyname=U0 ttyports=2
dev.u3g.0.%location: bus=4 hubaddr=1 port=1 devaddr=2 interface=0 ugen=ugen4.2
dev.u3g.0.%driver: u3g
dev.u3g.0.%desc: HUAWEI Technology HUAWEI Mobile, class 0/0, rev 2.00/0.00, addr 2
dev.u3g.%parent:

ttyname как раз и указывает на имя устройства, т.е в данном случае оно будет /dev/ttyU0. Также можно распарсить dev.u3g.0.%pnpinfo и получить ttyname от туда.

Имя получили, теперь создадим ссылку при помощи /etc/devd. В /etc/devd.conf прописываем:

attach 10 {
        match "vendor" "0x12d1";
        match "product" "0x1003";
        action "rm /dev/modem0";
        action "ln -s /dev/tty`sysctl dev.u3g | grep 'vendor=$vendor*.product=$product' | sed -e 's/.*ttyname=//' | sed -e 's/\ ttyport.*//'`.0 /dev/modem0";
        action "/usr/local/etc/rc.d/smsd status && /usr/local/etc/rc.d/smsd restart";
};
detach 10 {
        match "vendor" "0x12d1";
        match "product" "0x1003";
        action "/usr/local/etc/rc.d/smsd status && /usr/local/etc/rc.d/smsd stop";
        action "rm -r /dev/modem0";
};

Здесь при подключении модема удаляем старую ссылку на устройство, грепаем sysctl по вендору и PID, выделяем имя устройства, создаем софтлинк на модем и перезагружаем devd.

Всех с праздником!

P.S.: Те люди, чьим родным языком является язык sed, скажут, что можно всё сделать одной строкой и будут в чем-то правы, но так тоже не плохо.

One thought on “Постоянная ссылка на USB-модем во FreeBSD

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *