Подключение LTE модема Huawei 3372S



  • Всем привет!
    Система: физическая, PfSense 2.1.5 x86 (обновление невозможно)
    Есть 2 постоянных физических порта eth1, eth2 и появляющийся только после исполнения скрипта из /rc.d третий eth3.
    К сожалению, при каждой загрузке система обнаруживает отсутствие eth3 и выкидывает в режим ручного определения интерфейсов.
    Вопрос: есть ли возможность указать PfSens-у продолжать загрузку с той конфигурацией интерфейсов, что и была до выключения? Или вообще запретить отслеживание изменений в аппаратной конфигурации?



  • Может быть Вы смотрите на проблему с другой стороны?
    Вопрос - почему этот интерфейс появляется только после отработки rc.d ?
    В pfSense, на сколько я помню, rc.d не используется.



  • А по другому он не появится (по крайней мере, я больше не знаю как). В rc.d запускается usb_modeswitch, который определённым образом инициализирует USB модем, что бы модуль cdc-ethernet создал ue0-интерфейс  :P



  • @Sector:

    А по другому он не появится (по крайней мере, я больше не знаю как). В rc.d запускается usb_modeswitch, который определённым образом инициализирует USB модем, что бы модуль cdc-ethernet создал ue0-интерфейс  :P

    Посмотрите тут, может быть получится выполнить Ваш скрипт раньше конфигурирования интерфейсов.
    Опции <earlyshellcmd>и <shellcmd>в конфиге.</shellcmd></earlyshellcmd>



  • @dvserg:

    Посмотрите тут, может быть получится выполнить Ваш скрипт раньше конфигурирования интерфейсов.
    Опции <earlyshellcmd>и <shellcmd>в конфиге.</shellcmd></earlyshellcmd>

    Огромное спасибо! Это метод не сработал, ибо исполнение команд данного сервиса всё равно происходит поздно, но Вы натолкнули на способ использования devd.conf, с помощью которого всё стало определяться как и когда надо!



  • @Sector:

    @dvserg:

    Посмотрите тут, может быть получится выполнить Ваш скрипт раньше конфигурирования интерфейсов.
    Опции <earlyshellcmd>и <shellcmd>в конфиге.</shellcmd></earlyshellcmd>

    Огромное спасибо! Это метод не сработал, ибо исполнение команд данного сервиса всё равно происходит поздно, но Вы натолкнули на способ использования devd.conf, с помощью которого всё стало определяться как и когда надо!

    Можно ли описать что и как правили? Спасибо.



  • Можно ли описать что и как правили? Спасибо.

    Тогда более полно распишу, вдруг кому пригодиться.
    Итак, задача: подключить LTE модем Huawei 3372S к устройству с PfSense (в моём случае 2.1.5 i386)
    Описание касается только моего устройства, FIT-PC2, потому, что на других может будет всё попроще, например в VirtualBox-е (PfSense) и Windows 7 определение модема в нужной конфигурации происходит автоматически, без лишних телодвижений.

    1. Так как требуется работа multiWAN и опыт эксплуатации показал, что  PPP-соединение работает в этом плане неудовлетворительно, то перепрошиваем модем в режим HiLink (фактически, роутер: веб-сервер, DHCP-сервер, полноценный usb-ethernet на выходе, отсутствие лишних последовательных портов в системе, а главное - автономная работа, потому что как только подали питание, его ОС и загрузилась сама и сеть нашла и даже подключилась по дефолтному профилю к этой сети, а нам остаётся только по DHCP адрес получить).

    2. Основная задача засада состояла в том, что бы модем инициализировался в нужной конфигурации (композиции), вместо

    
    [2.1.5-RELEASE][root@pfSense.localdomain]/root(6): lsusb
    Bus /dev/usb Device /dev/ugen3.2: ID 12d1:1f01 Huawei Technologies Co., Ltd.
    Bus /dev/usb Device /dev/ugen0.2: ID 413c:2107 Dell Computer Corp.
    Bus /dev/usb Device /dev/ugen3.3: ID 148f:3070 Ralink Technology, Corp.
    Bus /dev/usb Device /dev/ugen3.1: ID 0000:0000
    Bus /dev/usb Device /dev/ugen2.1: ID 0000:0000
    Bus /dev/usb Device /dev/ugen1.1: ID 0000:0000
    Bus /dev/usb Device /dev/ugen0.1: ID 0000:0000
    
    

    нам надо было получить

    
    [2.1.5-RELEASE][root@pfSense.localdomain]/root(6): lsusb
    Bus /dev/usb Device /dev/ugen3.2: ID 12d1:14dc Huawei Technologies Co., Ltd.
    Bus /dev/usb Device /dev/ugen0.2: ID 413c:2107 Dell Computer Corp.
    Bus /dev/usb Device /dev/ugen3.3: ID 148f:3070 Ralink Technology, Corp.
    Bus /dev/usb Device /dev/ugen3.1: ID 0000:0000
    Bus /dev/usb Device /dev/ugen2.1: ID 0000:0000
    Bus /dev/usb Device /dev/ugen1.1: ID 0000:0000
    Bus /dev/usb Device /dev/ugen0.1: ID 0000:0000
    
    

    так как первый вариант, это обычная конфигурация с кучей устройств (CD, cardreader и т.д.), а второй - нужный нам чистый usb-ethernet.
    Поэтому применяем программу переключения режимов:

    
    usb_modeswitch -v 12d1 -p 1f01 -V 012d1 -P 014dс -M "55534243123456780000000000000a11062000000000000100000000000000" -W
    
    

    Кстати, в 2.2.2 с более свежим usb_modeswitch ещё проще:

    
    usb_modeswitch -v 12d1 -p 1f01 -J
    
    

    3. Как было описано в постах выше, PfSense при загрузке определял отсутствие созданного ранее виртуального интерфейса и запускал процедуру ручного назначения, как при первом запуске, а значит надо было переключать модем на более раннем этапе. Используем возможность ручного описания устройств devd и редактируем /etc/devd.conf, добавляем в конец файла следующее:

    
    attach 10 {
    device-name "ugen[0-9]+";
    match "vendor" "0x12d1";
    match "product" "0x1f01";
    action "/path-to-script/scriptname.sh";
    
    

    В принципе, всё понятно, ugen любой, указываем свои VID и PID (исходные) и прописываем путь к скрипту инициализации.

    Собственно сам скрипт:

    
    #!/bin/sh
    sleep 5
    usb_modeswitch -v 12d1 -p 1f01 -V 012d1 -P 014dс -M "55534243123456780000000000000a11062000000000000100000000000000" -W
    sleep 10
    
    

    Обратите внимание на паузы, особенно вторую, что бы система по-новой определила модем, подгрузила нужный драйвер и успела IP получить, с этим особо не заморачивался, просто сделал с запасом.

    4. За создание usb-ethernet интерфейса отвечает стандартный модуль CDC Ethernet

    
    [2.1.5-RELEASE][root@pfSense.localdomain]/root(2): kldstat -v | grep cdc
                    346 uhub/cdce
    
    

    и после выполнения скрипта у вас появляется интерфейс:

    
    cdce0: <cdc ethernet="" control="" model="" ecm="">on usbus3
    ue0: <usb ethernet="">on cdce0</usb></cdc> 
    

    который виден в системе как обычный ethernet и стандартно настроен на получение адреса по DHCP

    ifconfig

    
    ue0: flags=8843 <up,broadcast,running,simplex,multicast>metric 0 mtu 1500
            ether 0c:5b:8f:27:9a:64
            inet 192.168.8.100 netmask 0xffffff00 broadcast 192.168.8.255
            inet6 fe80::e5b:8fff:fe27:9a64%ue0 prefixlen 64 scopeid 0x7
            nd6 options=1</up,broadcast,running,simplex,multicast>
    

    netstat -rn

    
    [2.1.5-RELEASE][root@pfSense.localdomain]/root(13): netstat -rn
    Routing tables
    
    Internet:
    Destination        Gateway            Flags    Refs      Use  Netif Expire
    default            192.168.8.1        UGS         0       86    ue0
    127.0.0.1          link#5             UH          0       16    lo0
    192.168.8.0/24     link#7             U           0        0    ue0
    192.168.8.1        0c:5b:8f:27:9a:64  UHS         0     3696    ue0
    192.168.8.100      link#7             UHS         0        0    lo0
    
    


  • Большое спасибо за подробное описание.

    Вопрос :

    Собственно сам скрипт:

    #!/bin/sh
    sleep 5
    usb_modeswitch -v 12d1 -p 1f01 -V 012d1 -P 014dс -M "55534243123456780000000000000a11062000000000000100000000000000" -W
    sleep 10
    

    Это куда добавлять\вписывать ? Это скрипт для автозагрузки ?

    P.s. Если можно, измените тему на что-то типа "Проблема с модемом LTE Huawei 3372S"



  • @werter:

    Большое спасибо за подробное описание.

    Это куда добавлять\вписывать ?

    P.s. Если можно, измените тему на что-то типа "Проблема с модемом LTE Huawei 3372S"

    Добавлять в файл скрипта, он может находиться в любом удобном месте с произвольным именем, но должен быть исполняемым.



  • @Sector:

    @werter:

    Большое спасибо за подробное описание.

    Это куда добавлять\вписывать ?

    P.s. Если можно, измените тему на что-то типа "Проблема с модемом LTE Huawei 3372S"

    Добавлять в файл скрипта, он может находиться в любом удобном месте с произвольным именем, но должен быть исполняемым.

    Ок. Создал я sh-файл, назначил ему "исполняемость". Где к нему путь добавлять - в автозагрузку ?



  • @werter:

    Ок. Создал я sh-файл, назначил ему "исполняемость". Где к нему путь добавлять - в автозагрузку ?

    В разделе 3 - добавление скрипта для загрузки в файл /etc/devd.conf



  • Всё. Увидал. Еще раз спасибо  ;D



  • 2 Sector
    Когда модем зависает как его приводите в чувство? Передёргивалки USB питания я в вашей железке не заметил.



  • @aleksvolgin:

    2 Sector
    Когда модем зависает как его приводите в чувство? Передёргивалки USB питания я в вашей железке не заметил.

    А зачем ему зависать? Ни разу не наблюдал. Да и если такое может происходить постоянно, то надо или модем менять или что-то друге, система же неработоспособна будет.



  • Добрый день!
    Хочу подключить к pfsense 2.1.5 amd64 данный модем. Прошил в HiLink (прошивка E3372Update_22.286.53.01.161_S_D_ADB_TLN_02).

    dmesg показывает:
    ugen0.4: <huaweimobile>at usbus0
    umass0: <mass storage="">on usbus0
    umass0:  SCSI over Bulk-Only; quirks = 0x0000
    umass0:0:0👎 Attached to scbus0
    (probe0:umass-sim0:0:0:0): TEST UNIT READY. CDB: 0 0 0 0 0 0
    (probe0:umass-sim0:0:0:0): CAM status: SCSI Status Error
    (probe0:umass-sim0:0:0:0): SCSI status: Check Condition
    (probe0:umass-sim0:0:0:0): SCSI sense: UNIT ATTENTION asc:29,0 (Power on, reset, or bus device reset occurred)
    (probe0:umass-sim0:0:0:0): TEST UNIT READY. CDB: 0 0 0 0 0 0
    (probe0:umass-sim0:0:0:0): CAM status: SCSI Status Error
    (probe0:umass-sim0:0:0:0): SCSI status: Check Condition
    (probe0:umass-sim0:0:0:0): SCSI sense: NOT READY asc:3a,0 (Medium not present)

    usbconfig -d ugen0.4 dump_device_desc
    ugen0.4: <huaweimobile huaweimobile="">at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON

    bLength = 0x0012
      bDescriptorType = 0x0001
      bcdUSB = 0x0210
      bDeviceClass = 0x0000
      bDeviceSubClass = 0x0000
      bDeviceProtocol = 0x00ff
      bMaxPacketSize0 = 0x0040
      idVendor = 0x12d1
    idProduct = 0x1566
      bcdDevice = 0x0102
      iManufacturer = 0x0001  <huawei_mobile>iProduct = 0x0002  <huawei_mobile>iSerialNumber = 0x0000  <no string="">bNumConfigurations = 0x0001

    Получается у меня ID = 0x1566 (я правильно понимаю?). Меняю в
    usb_modeswitch -v 12d1 -p 1f01 -V 012d1 -P 014dс -M "55534243123456780000000000000a11062000000000000100000000000000" -W
    на 1566.
    Все остальное по инструкции, но ue0 не появляется после перезагрузки.

    $ netstat -rn
    Routing tables

    Internet:
    Destination        Gateway            Flags    Refs      Use  Netif Expire
    default            192.168.1.1        UGS        0    1396    re0
    127.0.0.1          link#6            UH          0      16    lo0
    192.168.0.0/24    link#2            U          0    1834    re1
    192.168.0.1        link#2            UHS        0        0    lo0
    192.168.1.0/24    link#1            U          0        0    re0
    192.168.1.1        fc:aa:14:93:c4:03  UHS        0      852    re0
    192.168.1.3        link#1            UHS        0        0    lo0

    Скажите, какой вы прошивкой прошили свой модем? Правильно ли я меняю ID модема?</no></huawei_mobile></huawei_mobile></huaweimobile></mass></huaweimobile>


Log in to reply