Vodem’in (Huawei 4231) Linux’ta Ethernet Olarak Kullanımı

Elime Vodafone’un bir modemi (Vodem) geçti. Bilgisayarıma taktığımda Linux bir ethernet olarak görmedi ve doğrudan çalışmadı. Daha önce Turkcell’in yeni nesil VINN’larında bu hiç başıma gelmediğinden, bir miktar uğraşmam gerekti.

Huawei’nin K4203 isimli bir modeliymiş (lsusb sağolsun). Kendisi öntanımlı olarak MBIM isimli, Linux 3.8’de desteği gelen bir protokolle bağlanıyormuş (Google sağolsun). Bir sonraki nesil bir cihaz kısaca. Ama ethernet aygıtı olarak da çalıştırmak da mümkün. Bunun için usb_modeswitch ile cihaza komut gönderilmesi gerekiyor.

lsusb çıktısında aygıtın ID’sini 12F1:1F1C olarak görüyoruz:

# lsusb
# lsusb | grep Huawei
Bus 002 Device 012: ID 12f1:1f1c Huawei Technologies Co., Ltd.

usb_modeswitch ile şu komutu gönderince kendisi bir ethernet aygıtına dönüşüyor:

# usb_modeswitch -v 12d1 -p 1f1c -W -I -M 55534243123456780000000000000011062000000101000100000000000000
Taking all parameters from the command line

* usb_modeswitch: handle USB devices with multiple modes
* Version 1.2.5 (C) Josua Dietze 2012
* Based on libusb0 (0.1.12 and above)

! PLEASE REPORT NEW CONFIGURATIONS !

DefaultVendor= 0x12d1
DefaultProduct= 0x1f1c
TargetVendor= not set
TargetProduct= not set
TargetClass= not set
TargetProductList=""

DetachStorageOnly=0
HuaweiMode=0
SierraMode=0
SonyMode=0
QisdaMode=0
GCTMode=0
KobilMode=0
SequansMode=0
MobileActionMode=0
CiscoMode=0
MessageEndpoint= not set
MessageContent="55534243123456780000000000000011062000000101000100000000000000"
NeedResponse=0
ResponseEndpoint= not set

InquireDevice disabled
Success check disabled
System integration mode disabled

Looking for default devices ...
searching devices, found USB ID 12d1:1f1c
found matching vendor ID
found matching product ID
adding device
searching devices, found USB ID 04f2:b230
Found device in default mode, class or configuration (1)
Accessing device 012 on bus 002 ...
Getting the current device configuration ...
OK, got current device configuration (1)
Using interface number 0
Using endpoints 0x01 (out) and 0x81 (in)

USB description data (for identification)
-------------------------
Manufacturer: Vodafone(Huawei)
Product: HUAWEI Mobile
Serial No.: FFFFFFFFFFFFFFFF
-------------------------
Looking for active driver ...
OK, driver found; name unknown, limitation of libusb1
OK, driver "unkown" detached
Setting up communication with interface 0
Using endpoint 0x01 for message sending ...
Trying to send message 1 to endpoint 0x01 ...
OK, message successfully sent
Resetting response endpoint 0x81
Resetting message endpoint 0x01
-> Run lsusb to note any changes. Bye.

Artık lsusb ile baktığımızda USB ID’sinin de değiştiğini görüyoruz:

Şimdi bir ağ aygıtı olarak da onu görebilmeliyiz ve eğer ağ yöneticimiz otomatik IP almaya ayarlıysa IP’sini bile almış olmalı:

# ip a
8: enp0s29u1u3: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 86:c9:ec:4d:51:bb brd ff:ff:ff:ff:ff:ff
inet 192.168.9.100/24 brd 192.168.9.255 scope global enp0s29u1u3
valid_lft forever preferred_lft forever

Bu yaptığımız ayarlar, ne yazık ki kalıcı değil. Modemin üzerine böyle bir bilgi yazamıyoruz. Onun yerine Linux’un aygıt yöneticisi olan udev’e bu modemin her takıldığını farkettiğinde bu komutu çalıştırmasını söylememiz gerekiyor.

Bunun için udev’in kuralları okuyabileceği bir dosya oluşturuyoruz:

echo 'ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1f1c", RUN+="/usr/sbin/usb_modeswitch -v 12d1 -p 1f1c -W -I -M 55534243123456780000000000000011062000000101000100000000000000"'> /etc/udev/rules.d/45-usb_modeswitch.rules

udev’e kuralları tekrar okumasını söylüyoruz:

# udevadm control --reload-rules

Artık “Vodem”i taktığımızda, otomatik olarak ethernet kartı olarak görünmeli ve DHCP’ten IP alabilmeli.

Not: Aygıta gönderilmesi gereken “55534243123456780000000000000011062000000101000100000000000000” gibi bir mesajı kafadan yazmadım :). İnternet’ten araştırdığımda rastladım. Sadece bu cihaz değil, başka Huawei cihazlarında da işe yarıyor gibi okudum. Teknik kaynağını bilen varsa, yorumlara eklerse sevinirim.