[Gelistirici] 3G

Ozan Çağlayan ozan at pardus.org.tr
4 Ağu 2009 Sal 20:31:22 EEST


Selam,

Bildiğiniz üzere 3G'nin memleketimize ayak basmasıyla beraber
kullanıcılarımız gerek telefonları üzerinden, gerekse servis
sağlayıcılar tarafından dağıtılan USB dongle'lar üzerinden internete
çıkmak istiyorlar.

Pardus 2009'daki mevcut network altyapısında bu cihazlar için bir Çomar
bacağı olmadığı için, network-manager üzerinden bir profil eklememiz
mümkün değil.

Pardus 2008'de, ppp paketi ile gelen bir çevirmeli Çomar bacağı vardı
ancak bu bacak da 3G/EDGE/GPRS'in gereksinimlerini sağlayabilecek bir
durumda değil.

Örneğin operatör tarama gibi bir destek yok, hard-coded aygıt listesi
içeriyor, aygıt tabanlı quirk tanımlamak mümkün değil.

Hali hazırda ModemManager isimli bir proje yürüyor[0]. D-Bus system-bus
üzerinde, aktivasyon ile çalışan bu hizmet ile *sadece* metod
çağrılarıyla bağlantı kurma, imei alma, pin/puk alma/değiştirme, sms
gönderme, bağlantıyı kesme, operatör taraması yapma, vb. gibi şeyler mümkün.

C ile yazılmış bir proje. Kendi içinde hali hazırda piyasada bulunan tüm
donglelar için (ZTE, Huawei, Novatel, Option, Vodafone, vb.) libtool
pluginleri var, her dongle için bu pluginlerde özel bitmask'lar,
quirk'ler vs.vs. var.

Proje NetworkManager'ın içinden ayrılıp ayrı bir proje haline getirilmiş.

Bütün bunları oturup bir de COMAR bacağı olarak yazmak, yazmaya çalışmak
bana çok manasız geliyor. Bu sebepten D-Bus çağrılarıyla ModemManager'ı
wrap edecek bir bacak yazmaya başladım.

Bahadır, Link API'sinde gerekli metodları tanımladıktan sonra hayata
geçebileceğini söyledi bacağın. Ancak bazı sorunlar yaşıyorum ve çözümü
çok da kolay gibi durmuyor:


* network-manager'ın UI kodu, gömülü olarak kayıtlı paketteki aygıt
tipine bakıyor:

for device in devices.keys():
   if self.packages[package]['type'] in ('net', 'wifi'):

- Neden net ve wifi olarak kısıtlanmış? Doğru bir tasarımda benim bu
koda müdahale etmeden bacağı transparan bir şekilde çalışır hale
getirebilmem gerekirdi diye düşünüyorum.

* yukarıya elle kendi bacağımı ekledim diyelim. Bir alt satırda,
arayüzde 'Profil yarat' altına gelecek öğeler yaratılıyor:

menuItem = QtGui.QAction("%s - %s" % (self.packages[package]['name'],
findInterface(device).name), self)

Benim cihazımın üzerinde findInterface() çağırıyor ve kod doğal olarak
yine bacaktan çıkıp, comar.netutils'e sapıyor. Ben bacağı
findInterface()'in anlayacağı dilden yazamam çünkü findInterface(), IF()
sınıfından bir nesne yaratıp onu kullanıyor. Bizim bağlayacağımız
cihazlar network stack'ine haiz cihazlar değil, /sys/class/net'te mevcut
değiller, network'e özel IOCTL desteklemiyorlar çünkü seri port aygıtı
olarak gözüküyorlar.

Kısacası bu noktada tıkandım ve çok da yapabileceğim bir şey yok gibi
duruyor. Devam edebilmem için UI'nin *sadece* bacak bağımlı bir halde
çalışabilir halde olması gerekiyor.

Fikirleriniz nedir?



Gelistirici mesaj listesiyle ilgili daha fazla bilgi