יום שישי, יולי 10, 2020

Marvell 4G modem 1286:4e31 (PR-LTE01w)


התמזל מזלי לקבל לידי ציוד חדש לגלישה באינטרנט.

הציוד ממותג עבור חברת Provision ISR , והוא מודם/ראוטר LTE.
דגם המכשיר שברשותי הוא PR-LTE01w.

כאשר מחברים את המכשיר ללינוקס, הוא מדווח שהוא של של מרוול (Marvell) ולא של Provision-ISR.

שמחתי מאוד לקבל לידי ציוד שמעולם לא עבדתי איתו ,זה לא קורה הרבה שאתה מקבל ציוד מחברה שמעולם לא עבדת איתה (רק מאוחר יותר גיליתי שזה של מרוול),

הפתעתי הראשונה הייתה שלא ראיתי את קרנל לינוקס ברשימה של המערכות הנתמכות,  אבל כן ראיתי את  WindowsXP מה שאומר שכנראה יש תמיכה ארוכה מאוד לאחור. זה מפתיע שיש עדיין חברות שלא מכירות בצורך לפרסם שהם תומכים בלינוקס או ב OpenWRT אבל כן תומכים ב WindowsXP.

העיצוב :

העיצוב המכני של המודם נועד כנראה לאנשים עם אצבעות קטנות משלי, הייתי צריך להשתמש בפינצטה בשביל לשלוף את כרטיס הסים כארד מהתושבות שלו. אם יש לכם כף יד גדולה צריך פינצטה בשביל המודם הזה.

גם המודם הזה הוא מהמודמים שתופסים יותר מדי מקום, הוא טפס לי שני כניסות USB כי הסתיר חלק מהשקע השני. רוחב הרכיב מעל שני סנטימטרים.

לא מצאתי שום כפתור שעושה reset למכשיר במצב ששכחתי סיסמה למשל.
באתר של provision-isr לא מצאתי שום איזכור למודם הזה (יכול להיות שהוא שם , אני רק לא מצאתי אותו).

תוכנה:

לא ראיתי בשום מקום שום איזכור של שום תוכנה חופשית שרצה בתוכו.

למרות שהמכשיר יוצר ב 2020 , האתר בתוכו מדווח על זכויות יוצרים ל 2016 שזה אומר שכנראה התוכנה שרצה בפנים קצת ישנה .


כאשר מחברים את המודם למחשב מקבלים את המידע הבאה :

[Fri Jul 10 07:29:59 2020] usb 1-2: New USB device found, idVendor=1286, idProduct=812a, bcdDevice= 0.00
[Fri Jul 10 07:29:59 2020] usb 1-2: New USB device strings: Mfr=3, Product=2, SerialNumber=0
[Fri Jul 10 07:29:59 2020] usb 1-2: Product: WUKONG
[Fri Jul 10 07:29:59 2020] usb 1-2: Manufacturer: MARVELL

לאחר מספר שניות המודם משנה את מצבו (לא הבנתי מה גורם לכך )

[Fri Jul 10 07:30:10 2020] usb 1-2: New USB device found, idVendor=1286, idProduct=4e31, bcdDevice= 1.00
[Fri Jul 10 07:30:10 2020] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[Fri Jul 10 07:30:10 2020] usb 1-2: Product: Mobile Composite Device Bus
[Fri Jul 10 07:30:10 2020] usb 1-2: Manufacturer: Marvell
[Fri Jul 10 07:30:10 2020] usb 1-2: SerialNumber: 00000000000000000000000
[Fri Jul 10 07:30:10 2020] usbcore: registered new interface driver cdc_ether
[Fri Jul 10 07:30:10 2020] usb-storage 1-2:1.5: USB Mass Storage device detected

ומתווסף רכיב cdrom כמו בכל המודמים


[Fri Jul 10 07:30:15 2020] scsi 3:0:0:0: CD-ROM            MARVELL  Mobile CMCC CD   1.25 PQ: 0 ANSI: 0
[Fri Jul 10 07:30:15 2020] scsi 3:0:0:0: Attached scsi generic sg1 type 5

להפתעתי הגמורה המודם דורש שימוש ב RNDIS

[Fri Jul 10 07:30:15 2020] rndis_host 1-2:1.0 eth0: register 'rndis_host' at usb-0000:00:14.0-2, RNDIS device, AA:BB:CC:DD:EE:FF
[Fri Jul 10 07:30:15 2020] usbcore: registered new interface driver rndis_host
[Fri Jul 10 07:30:15 2020] usbcore: registered new interface driver uas
[Fri Jul 10 07:30:15 2020] rndis_host 1-2:1.0 enxaabbccddeeff: renamed from eth0
[Fri Jul 10 07:30:15 2020] sr 3:0:0:0: [sr0] scsi3-mmc drive: 0x/0x caddy
[Fri Jul 10 07:30:15 2020] cdrom: Uniform CD-ROM driver Revision: 3.20
[Fri Jul 10 07:30:15 2020] sr 3:0:0:0: Attached scsi CD-ROM sr0

אני לא חושב שראיתי שימוש ב RNDIS מאז 2010 במודמים , אבל זה לא מפתיע מכיוון שהמוצר לא מיועד לשימוש בלינוקס מלתחילה .

ללא כל פעולות המודם גורם לספאם בקרנל על io (מאות הודעות לשנייה).

[ 1409.942098] Buffer I/O error on dev sr0, logical block 0, async page read
[ 1409.942107] blk_update_request: I/O error, dev sr0, sector 4 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 1409.942109] Buffer I/O error on dev sr0, logical block 1, async page read
[ 1409.942125] blk_update_request: I/O error, dev sr0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 1409.942127] Buffer I/O error on dev sr0, logical block 0, async page read
[ 1409.942134] blk_update_request: I/O error, dev sr0, sector 4 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 1409.942135] Buffer I/O error on dev sr0, logical block 1, async page read
[ 1409.942148] blk_update_request: I/O error, dev sr0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 1409.942149] Buffer I/O error on dev sr0, logical block 0, async page read
[ 1409.942156] blk_update_request: I/O error, dev sr0, sector 4 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 1409.942158] Buffer I/O error on dev sr0, logical block 1, async page read
[ 1409.942170] blk_update_request: I/O error, dev sr0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 1409.942172] Buffer I/O error on dev sr0, logical block 0, async page read
[ 1409.942178] blk_update_request: I/O error, dev sr0, sector 4 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 1409.942180] Buffer I/O error on dev sr0, logical block 1, async page read
[ 1409.942192] blk_update_request: I/O error, dev sr0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[ 1409.942193] Buffer I/O error on dev sr0, logical block 0, async page read
[ 1409.942200] Buffer I/O error on dev sr0, logical block 1, async page read

בנקודה הזאת usb_modeswitch היה אמור להכנס לפעולה ולשנות את מצב המודם , אבל אפילו קריאה ידנית ל usb_modeswitch בשביל לשנות את המצב לא הצליחו לשנות את מצבו,ניסיתי את הבאים ללא הצלחה

 sudo usb_modeswitch -v 1286 -p 4e31 -K
 sudo usb_modeswitch -v 1286 -p 4e31 -S
 sudo usb_modeswitch -v 1286 -p 4e31 -A
 sudo usb_modeswitch -v 1286 -p 4e31 -B
 sudo usb_modeswitch -v 1286 -p 4e31 -E
 sudo usb_modeswitch -v 1286 -p 4e31 -O
 sudo usb_modeswitch -v 1286 -p 4e31 -R
 sudo usb_modeswitch -v 1286 -p 4e31 -I
 sudo usb_modeswitch -v 1286 -p 4e31 -D
 
אפילו ניסיתי לייצר את קובץ חוקי udev ואפילו זה לא עזר :

cat /etc/udev/rules.d/provision.rules 
ATTRS{idVendor}=="1286", ATTRS{idProduct}=="4e31", RUN+="usb_modeswitch '%b/%k'"

אז חזרתי לימים הטובים ופשוט עשיתי sudo eject /dev/sr0 והספאם הפסיק.

לצערי הרב המודם לא סיפק שום רכיבים שיכלתי להשתמש בהם תחת /dev כמו למשל /dev/ttyUSB או /dev/ttyACM שהייתי יכול לתת לי למהל אותו מתוך NetworkManager .למה זה טוב ?


הקליטה היתה סבירה , לא הייתה רעה,  לא הייתה ממש טובה. פשוט סבירה.

הממשק הראשוני עם המידע היה משהוא שלא נתקלים בו הרבה.
 בפעם הראשונה מזה המון זמן  אני רואה ממשק שנותן לי מידע טכני במקום אחד ללא תת תפריטים מעצבנים.  שאפו  למי שחשב על זה ! , אם היית מוסיף גם cell id ביחד עם lac ו עוצמת קליטה זה היה בכלל גאוני !.

המכשיר אפילו תומך בשליחת USSD,  רק חבל שזה חבויי בתת תפריט תחת internet.
בתאוריה ניתן למשל לקבל את כמות התקציב שנשאר על הכרטיס, או אפילו לבצע top up על חשבון הכרטיס בממשק הזה.

לא מצאתי אפשרות לביצוע רישום לאזורי CB (אולי יש איזה תת תפריט שפיספסתי).

פירוט טכני למגגלים :
lsusb -vv -d 1286:4e31

Bus 001 Device 007: ID 1286:4e31 Marvell Semiconductor, Inc. Mobile Composite Device Bus
Couldn't open device, some information will be missing
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass          239 Miscellaneous Device
  bDeviceSubClass         2 
  bDeviceProtocol         1 Interface Association
  bMaxPacketSize0        64
  idVendor           0x1286 Marvell Semiconductor, Inc.
  idProduct          0x4e31 
  bcdDevice            1.00
  iManufacturer           1 
  iProduct                2 
  iSerial                 3 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0079
    bNumInterfaces          4
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xc0
      Self Powered
    MaxPower              500mA
    Interface Association:
      bLength                 8
      bDescriptorType        11
      bFirstInterface         0
      bInterfaceCount         2
      bFunctionClass        224 Wireless
      bFunctionSubClass       1 Radio Frequency
      bFunctionProtocol       3 RNDIS
      iFunction               5 
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass       224 Wireless
      bInterfaceSubClass      1 Radio Frequency
      bInterfaceProtocol      3 RNDIS
      iInterface              5 
      ** UNRECOGNIZED:  05 24 00 10 01
      ** UNRECOGNIZED:  05 24 01 00 01
      ** UNRECOGNIZED:  04 24 02 00
      ** UNRECOGNIZED:  05 24 06 00 01
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x85  EP 5 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0010  1x 16 bytes
        bInterval              16
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass        10 CDC Data
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              5 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x87  EP 7 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x06  EP 6 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              8 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x84  EP 4 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x03  EP 3 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        4
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface             11 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
לסיכום , מודם שעושה את עבודותו בלינוקס לאחר קצת מאמצים ,לא מצאתי דרך פשוטה להתמיע אותו בשימוש בתוך סביבת העבודה בה אני משתמש.

3 תגובות:

  1. כך זה בכל הנטסטיקים בשנים האחרונות, אחרי האתחול הם עוברים ל CDROM להתקנת דרייברים ואחר כך ל RNDIS כמתאמי רשת (לא באמת מודם). לפעמים יש דרך להפוך את המצב ולקבל גישת tty ו\או מודם בפרוטוקול כגון NCM או QMI. בהרבה מהם למעשה יש אנדרואיד ואפשר לקבל גישת adb וכן SSH. ממליץ להתחיל מפה:
    https://openwrt.org/docs/guide-user/network/wan/wwan/start

    כנראה מארוול מייצרים את השבב (מסדרת PXA?) ופרוביז'ן הם OEM.

    השבמחק
    תשובות
    1. התועלת הכי מעשית למעבר למצב מודם היא לצאת מה dobule או triple nat (הרבה פעמים IP סלולרי כבר נמצא מאחורי NAT אחד), וRNDIS מכניס מאחורי עוד NAT. אם מחברים אותו לראוטר זה יוצא אפילו quad nat...

      גם מבחינת אבטחה צריך לא לסמוך על ה firewall של המכשיר.

      מחק
    2. אני מכיר את הנושא של cdrom ואז מעבר להתקן אחר (ולכן ישר הלכתי ל usb_modeswitch ו eject ) , אבל בדר"כ זה או cdc_ether או tty כמו שאמרת וממש לא RNDIS שהוא פרוטוקול של מיקרוסופט מעל cdc.

      למשל Huawei מספק cdc_ether :

      [19453.967000] cdc_ether 1-2:1.0 eth0: register 'cdc_ether' at usb-0000:00:14.0-2, CDC Ethernet Device, 00:11:22:33:44:55
      [19453.967130] usbcore: registered new interface driver cdc_ether

      מחק