Project: AVM WLAN Repeater unter Linux nutzbar machen

prodigy7

Mitglied
Mitglied seit
28 Mai 2005
Beiträge
739
Punkte für Reaktionen
2
Punkte
18
Hallo zusammen,

ich habe vor, den AVM WLAN Repeater irgendwie unter Linux nutzbar zu machen, so das man von dort aus auch Audio abspielen kann und es auf dem Repeater anhören kann.

Die Steuerung soweit mit uPNP sollte jetzt das geringere Problem sein - ich hab hier mal etwas mit Perl + uPNP rumprobiert es war recht easy, das Gerät zu finden und anzusprechen.
Code:
<?xml version="1.0"?>                                                                                                                                                               
<root xmlns="urn:schemas-upnp-org:device-1-0">                                                                                                                                      
<specVersion>                                                                                                                                                                       
<major>1</major>                                                                                                                                                                    
<minor>0</minor>                                                                                                                                                                    
</specVersion>                                                                                                                                                                      
<device>                                                                                                                                                                            
<deviceType>urn:schemas-upnp-org:device:aura:1</deviceType>                                                                                                                         
<friendlyName>AVM Audiobruecke</friendlyName>                                                                                                                                       
<manufacturer>AVM Berlin</manufacturer>                                                                                                                                             
<manufacturerURL>http://www.avm.de</manufacturerURL>                                                                                                                                
<modelDescription>AVM Audiobruecke</modelDescription>                                                                                                                               
<modelName>FRITZ! WLAN Repeater N/G (UI)</modelName>                                                                                                                                
<modelNumber>0.9.3</modelNumber>                                                                                                                                                    
<modelURL>http://www.avm.de</modelURL>                                                                                                                                              
<UDN>uuid:22617c0d-cb0f-4fb9-a31f-001F3FD43DB3</UDN>                                                                                                                                
<serviceList>                                                                                                                                                                       
<service>                                                                                                                                                                           
<serviceType>urn:schemas-any-com:service:aura:1</serviceType>                                                                                                                       
<serviceId>urn:any-com:serviceId:aura</serviceId>                                                                                                                                   
<controlURL>/upnp/control/aura</controlURL>                                                                                                                                         
<eventSubURL>/upnp/control/aura</eventSubURL>                                                                                                                                       
<SCPDURL>/aura-scpd.xml</SCPDURL>                                                                                                                                                   
</service>                                                                                                                                                                          
</serviceList>                                                                                                                                                                      
<presentationURL>http://fritz.repeater</presentationURL>                                                                                                                            
</device>                                                                                                                                                                           
</root>
Wo ich jetzt etwas hänge und zugegeben auch (noch) nicht so die Erfahrungen haben, ist wie ich das Protokoll auseinander gepflügt bekomme. Soweit - wie auch schon aus dem XML oben ersichtlich, läuft die ganze Kommunikation via AURA (AVM USB Remote Architecture) ab.

Hat irgend jemand von euch schonmal Erkenntnisse zu diesem Protokoll gesammelt? Wäre die Frage, ob man das ganze Protokoll soweit erst mal implementieren muss, so das man "automatisch" auch gleich den USB Fernanschluss implementieren kann oder ob man das soweit eingeschränkt nutzen kann, das es für die Audiofunktionalität reicht.

Mit Wireshark habe ich mir soweit die Kommunikation auch schonmal angesehen - mir fehlt aber ehrlich gesagt ein Anhaltspunkt, wo ich anfangen kann. Sofern mir da jemand helfen kann, würde ich also nicht Nein sagen ;-)
 
Hi,

soweit ich gelesen habe, wurde schon usbip für die FB umgesetzt (Server-Seitig).
Mit den entsprechenden Client-Treibern soll dann wohl eine Verbindung zur FB unter Linux aufgebaut werden können.

Leider fehlen mir momentan die Erfahrungswerte zum USB-Fernanschluss, würde aber sagen, dass die Signale auch hier einfach nur durchgereicht werden.

usbip scheint ein guter Einstieg zu sein und könnte mit entsprechenden Änderungen an das AVM-Protokoll angepasst werden.
 
Wie genau hast du den damals das CAPI Zeug debugged um rauszubekommen, wie du die Kommunikation nachbauen musst?
 
Ich hatte mir den Netzwerkverkehr der capi2032.dll angeschaut und hab zunächst nur Initialisierungsbefehle verschickt, wie CAPI_REGISTER(), mit unterschiedlichen Parametern. Hab dann die einzelnen Aufrufe verglichen und die Funktionen nachgebildet.

Bei den PUT/GET Messages war dann auch schnell klar, das die eigentlichen CAPI-Nachrichten (roh) verschickt werden. Der Aufbau des Headers war ähnlich, wie die der Initialisierungsroutinen. Der Wehavemorefun Artikel hat ebenfalls sehr geholfen, obwohl das Protokoll nur grob angeschnitten wurde. Die ganzen Fallstricke muss man selbst rausfinden und da hilft nur ein Netzwerk-Sniffer.

Beim USB ist es wahrscheinlich noch eine Stufe schwieriger, da Teile des Codes auch im Kernel ausgeführt werden müssen. Etwas Hintergrundwissen, wie ein USB-Adapter funktioniert, wäre auch nicht ganz unwichtig (und da begebe ich mich ebenfalls auf Neuland).
 
Mühsam ernährt sich das Eichhörnchen ;-)

Ich habe jetzt mal den ganzen Netzwerkverkehr detailiert gewälzt und für mich sieht es derzeit so aus, als ob die Kommunikation auf 2 Wegen funktioniert:

Weg 1: Der Steuerkanal (Port 49000) - via uPNP wird alles möglich gesteuert. Es wird abgefragt, welche Geräte vorhanden sind, es wird initiiert, das Geräte "verbunden" bzw. "disconnected" werden. Scheinbar ist es so, das man prinzipiell erst mal Informationen ohne beschränkungen abfragen darf - wenn man dann aber Aktionen auslösen möchte, wird via Digest authentication, Benutzer fbox und dem Fritz!Box Kennwort, sofern vorhanden, eine Authentifizierung durchgeführt und dann darf man.

Weg 2: Der AURA Port (Port 2066) - hierüber werden dann die ganzen (USB) Daten geschleusst, die dann irgendwie dazu führen, dass das System USB Devices vorgegauckelt bekommt. Im Endeffekt, wenn ein Device verbunden ist, sieht man via Sniffer im Datenfeld die ganzen Daten "vorbeihuschen", wie Sie zB auf einem USB-Stick abgelegt sind. So hab ich in den Paketen dann die Seriennummer meines Sticks wie auch zB den Bootsektor sehen können.

Der WLAN Repeater wird scheinbar (so ganz sicher bin ich mir noch nicht) als USB Audio Device angemeldet. Wenn man im Endeffekt also irgendwie die USB Geschichte unter Linux zum laufen kriegt, könnte man wahrscheinlich den USB Audio Treiber aus dem Kernel verwenden und glücklich werden.

In meinem jugendlichen Leichtsinn würde ich mal behaupten, das man die eigentliche Steuerung recht einfach implementieren könnte - nur wie man dann die USB-Geschichte für Linux verwertbar abbildet, da habe ich noch keine Idee.

Edit: Mir ist übrigens aufgefallen, dass der USB Treiber wohl einen Bug haben muss - gibt man alle möglichen Devices an der FB frei, wird der Repeater nicht mehr als Audio Device angezeigt. War mir nur noch nicht ganz klar, ob die FB einen ungültiges Device Array zurückliefert oder ob die Software es nicht korrekt auswertet. Der Server liefert zumindest an ein paar Stellen einen Error zurück.
 
Für die, die es interessiert .... bin mal wieder etwas weitergekommen.

Also das ganze läuft so ab, dass man via uPNP eine Anfrage rausschickt - daraufhin meldet sich die Box und zeigt, was sie alles anbietet. Wenn man sich dann das entsprechende "device" (in unserem Fall "urn:schemas-upnp-org:device:aura:1" rauspickt, kann man nachfragen, welche Services im Detail angeboten werden. Hierbei bekommt man dann eine Rückantwort und zwar den ServiceType "urn:schemas-any-com:service:aura:1". Zudem erhält man Informationen, wo man eine detailierte Servicebeschreibung erhält und wo man wie was "reinkippen" muss um Aktionen auszulösen bzw. Events gemeldet zu bekommen. Das wäre dann das hier:
Code:
SCPDURL = /aura-scpd.xml
controlURL = /upnp/control/aura
eventSubURL = /upnp/control/aura
postURL = http://192.168.100.254:49000/upnp/control/aura
Wenn man nun das angegebene XML-File herunterlädt und reinguckt, sieht man im prinzip die Beschreibung eines Webservices: Es werden Aufrufe definiert, was diese an Parameter erwarten bzw. was zurück geliefert wird. Sieht dann ins lesbare umgewandelt so aus:
Code:
name = GetVersion
input =
output = NewServerVersion, NewProtocolVersion,

name = GetListInfo
input =
output = NewNumber

name = GetDeviceByIndex
input = NewIndex,
output = NewDeviceHandle, NewName, NewHardwareId, NewSerialNumber, NewTopologyId, NewClass, NewManufacturer, NewStatus, NewClientIP,

name = GetDeviceByHandle
input = NewDeviceHandle,
output = NewName, NewHardwareId, NewSerialNumber, NewTopologyId, NewClass, NewManufacturer, NewStatus, NewClientIP,

name = ConnectDevice
input = NewDeviceHandle
output =

name = DisconnectDevice
input = NewDeviceHandle
output =
Anbei hänge ich mal mein Perl-Skript, mit dem ich rumgespielt und mit dem ich die Infos verwertbar rausgeholt habe. Im nächsten Schritt möchte ich nun schaun, inwieweit die Webservice-Beschreibungen vllt. direkt mit SOAP-Funktionen verwendet werden können und werde mal versuchen, der Box ein paar Befehle reinzukippen.
Im Endeffekt erscheint es mir momentan recht einfach (eigentlich nur Fleißarbeit), einen Controldaemon zu schreiben, mit dem man veranlassen kann, das z.B. USB-Geräte "connected" werden.
Was problematisch wird: Der Softwareteil, der dafür sorgt, dass der Binärdatenstrom irgendwie im System als USB-Controller abgebildet wird. Wenn hier jemand langeweile hat und sich mit sowas auskennt -> Ruhig melden ;-)
 

Anhänge

  • upnptest2.pl.txt
    3.7 KB · Aufrufe: 16
Also neue Erkenntnis:

Die USB-Daten über den AURA-Port (2066) bestehen aus 9 Zeichen Head + X Zeichen USB-Daten (in Rohform).

Die ersten beiden Bytes sind die Länge der zu empfangenen, bzw. zu sendenen Nachricht. Dann folgen 2 Bytes, die nicht näher bekannt sind (wahrscheinlich CONTROL_TRANSFER, BULK_TRANSFER oder ein SETUP PACKET in Kurzform??).

Danach folgen 4 Bytes für die Device ID und noch ein weiters, ebenfalls unbekanntes Byte.

Da kein Probe möglich ist (man bekommt kein Event vom Betriebssystem, sondern verbindet sich über TCP), sind die ersten Nachrichten vom Aura Port mit der DEVICE ID 0xffff (65535) versehen. Nach ein paar Nachrichten ändert sich diese zu Device ID X und es erfolgt ein fast ähnlicher Datenaustausch.
 
Eventuell habe ich noch einen brauchbaren Ansatzpunkt gefunden: http://www.usb-server.com/downloads.html

Müsste man mal schaun, wie dort der Datenverkehr abgewickelt wird - ob ggf. das Ändern des Ports reichen würde, um einen großteil des Zeugs zu "recyclen" für unsere Zwecke.
 
Hallo prodigy7,

bist Du schon weitergekommen ? Habe mir den Repeater gekauft. Das mit der Audioausgabe gefällt mir. Da ich aber hauptsächlich Ubuntu nutze wäre es schön wenn es hierfür eine Lösung geben würde. Im Netz habe ich bis jetzt auch nichts finden können.

Gruß
Mario
 
Hi prodigy7,
hattest du in den letzten 9 Monaten mal etwas Zeit?
Das Projekt ist wirklich sehr interessant!
 
Hallo Saslo,

meine "Untersuchungsergebnisse" findest du in FritzBoxNET wieder. Kam nicht wirklich mehr in letzter Zeit dazu, etwas zu machen und tendenziell habe ich auch zukünftig nicht so wirklich viel Zeit dafür.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.