Direct IP Call

deller

Neuer User
Mitglied seit
2 Sep 2005
Beiträge
79
Punkte für Reaktionen
0
Punkte
0
Hallo, ich muss doch dieses Thema noch mal aufwühlen. Ich habe eine 7170 und ein bekannter hat eine 7050. Zwischen unseren Boxen ist ein VPN - Tunnel aufgebaut und es funktioniert alles ausgezeichnet. Alle Rechner sehen sich gegenseitig ...

Nun sind wir schon seit einiger Zeit dabei, per Direct IP Calling eine Telefonverbindungüber den VPN Tunnel aufzubauen. Hierzu haben wir schon alle Möglichkeiten, die wir über die Suchfunktion gefunden haben, ausprobiert. --> über Kurzwahlliste die Direktwahl anlegen (z.B. [email protected] oder sip:[email protected] oder [email protected] ... und alles mal mit dem Portangabe :5060, also alle möglichen Varianten. Die für "nick" stehenden User sind auch jeweils auf den Boxen eingerichtet (Registrar beliebig).
Wir bekommen so auch eine Telefonverbindung hin, allerdings läuft diese nicht über den VPN Tunnel. Hier hatte schon mal jemand das gleiche Problem mit seiner 7050. Im Log des Anrufers steht interesaanterweise "change 10.0.0.1 to 'öffentliche IP-Adresse'" und beim Empfänger erscheint dann auch der Anrufer als [email protected]

Vielleicht hat ja diesbezüglich jemand noch einen Rat.


Die nächste Frage wäre dann, ob man nicht einen einfachen kleinen SIP-Server in die Fritzbox bzw. in den DS-Mod integrieren könnte, der dann oben aufgeführtes Problem beseitigt ???
 

deller

Neuer User
Mitglied seit
2 Sep 2005
Beiträge
79
Punkte für Reaktionen
0
Punkte
0
Hiermit sollte doch was zu machen sein:

http://sarwiki.informatik.hu-berlin.de/Mobile_Communication_Networks#Cross-Compilation_vom_SIP_Express_Router



*Schnipp*

Cross-Compilation vom SIP Express Router
Der SIP Express Router ist ein freier, vergleichsweise kleiner in C geschriebener SIP-Server. Er stellt einen SIP registrar, proxy und redirect server dar.

Das SIPatH-Projekt hat bereits fertige ipkgs für OpenWRT-Router.

Welche Tools zum Bauen verwendet werden sollen, kann man über die Umgebungsvariablen mitgeteilen. Z.B.

TARGET_CROSS=/home/foobar/wrt/buildroot/build_mipsel/staging_dir/bin/mipsel-linux-
export AR=${TARGET_CROSS}ar
export AS=${TARGET_CROSS}as
export LD=${TARGET_CROSS}ld
export NM=${TARGET_CROSS}nm
export CC=${TARGET_CROSS}gcc
export GCC=${TARGET_CROSS}gcc
export CXX=${TARGET_CROSS}g++
export RANLIB=${TARGET_CROSS}ranlib

*Schnapp*

--> Könnte hier jemand Entwicklungshelfer spielen ? ;-)
 

deller

Neuer User
Mitglied seit
2 Sep 2005
Beiträge
79
Punkte für Reaktionen
0
Punkte
0
So, ich bin mal nach der Anleitung auf der Seite vorgegangen:

1. Umgebungsvariablen gesetzt (auf die Target Toolchain)
2. Libflex Sourcen heruntergeladen und die flexbinary erzeugt
3. SER-Sourcen runtergeladen, Makfile.defs angepasst

Beim Kompilieren bricht der Compiler dann irgendwann mit unten angefügert Fehlermeldung ab.
Kompiliere ich jedoch nicht mit der Target Toolchain, sondern der Kernel Toolchain, so läuft der Compiler durch!!! Allerdings läuft dann der SER nicht auf der ds-mod Fritzbox.
Also, hat jemand ein Tip ?


/home/avm/ds-0.2.6/toolchain/build/gcc-4.1.0-uClibc-0.9.26/mipsel-linux-uclibc/bin/mipsel-linux-gcc -Wl,-O2 -Wl,-E action.o crc.o daemonize.o data_lump.o data_lump_rpl.o dprint.o dset.o error.o fifo_server.o flags.o forward.o hash_func.o ip_addr.o main.o md5.o md5utils.o modparam.o msg_translator.o pass_fd.o proxy.o qvalue.o re.o receive.o resolve.o route.o route_struct.o script_cb.o socket_info.o sr_module.o stats.o tcp_main.o tcp_read.o timer.o tsend.o udp_server.o unixsock_server.o usr_avp.o mem/f_malloc.o mem/mem.o mem/memtest.o mem/q_malloc.o mem/shm_mem.o mem/vq_malloc.o parser/hf.o parser/msg_parser.o parser/parse_allow.o parser/parse_content.o parser/parse_cseq.o parser/parse_disposition.o parser/parse_diversion.o parser/parse_event.o parser/parse_expires.o parser/parse_fline.o parser/parse_from.o parser/parse_hname2.o parser/parse_hostport.o parser/parse_methods.o parser/parse_nameaddr.o parser/parse_param.o parser/parser_f.o parser/parse_rpid.o parser/parse_rr.o parser/parse_sipifmatch.o parser/parse_to.o parser/parse_uri.o parser/parse_via.o parser/digest/digest.o parser/digest/digest_parser.o parser/digest/param_parser.o parser/contact/contact.o parser/contact/parse_contact.o db/db.o db/db_fifo.o lex.yy.o cfg.tab.o /home/avm/ser-0.9.4/flex-2.5.4/libfl.a -ldl -lresolv -o ser
resolve.o: In function `get_record':resolve.c:(.text+0xe50): undefined reference to `__res_search'
collect2: ld returned 1 exit status
gmake: *** [ser] Fehler 1
[email protected]:~/ser-0.9.4>
 

ptweety

Neuer User
Mitglied seit
3 Apr 2006
Beiträge
138
Punkte für Reaktionen
0
Punkte
0
deller schrieb:
resolve.o: In function `get_record':resolve.c:(.text+0xe50): undefined reference to `__res_search'
Schau dir mal diesen Kommentar an. Evtl. bringt dich das ja weiter.

EDIT: Irgendwie ist bei dem Archiv gerade was schief. Google-Cache zeigt aber noch die richtige Seite.

MFG pTweety
 
Zuletzt bearbeitet:

olistudent

IPPF-Urgestein
Mitglied seit
19 Okt 2004
Beiträge
14,779
Punkte für Reaktionen
10
Punkte
38
Ich hab den openser erfolgreich kompiliert. Der Fehler oben kommt daher, dass unsere uClibc die Funktion res_search nicht unterstützt.
Leider hab ich es aber nicht geschafft das Programm zum Laufen zu bewegen. Leider reichen meine C-Kenntnisse auch nicht aus um den Fehler zu korrigieren...

MfG Oliver
 

deller

Neuer User
Mitglied seit
2 Sep 2005
Beiträge
79
Punkte für Reaktionen
0
Punkte
0
olistudent schrieb:
Ich hab den openser erfolgreich kompiliert. Der Fehler oben kommt daher, dass unsere uClibc die Funktion res_search nicht unterstützt.
Leider hab ich es aber nicht geschafft das Programm zum Laufen zu bewegen. Leider reichen meine C-Kenntnisse auch nicht aus um den Fehler zu korrigieren...

MfG Oliver

Kommt denn beim Starten auf der Box irgendeine Fehlermeldung?
 

olistudent

IPPF-Urgestein
Mitglied seit
19 Okt 2004
Beiträge
14,779
Punkte für Reaktionen
10
Punkte
38
Klar, kommt da ne Fehlermeldung.
Und zwar von der uac.c im Modul tm:
Code:
[I][COLOR=#b22222]/*
 * Initialize UAC
 */[/COLOR][/I]
[COLOR=#228b22][B]int[/B][/COLOR] [B][COLOR=#0000ff]uac_init[/COLOR][/B]([COLOR=#228b22][B]void[/B][/COLOR]) 
{
    str src[3];
    [COLOR=#228b22][B]struct[/B][/COLOR] socket_info *si;

    [B][COLOR=#a020f0]if[/COLOR][/B] (RAND_MAX < TM_TABLE_ENTRIES) {
        LOG(L_WARN, [COLOR=#bc8f8f][B]"Warning: uac does not spread "[/B][/COLOR]
            [COLOR=#bc8f8f][B]"across the whole hash table\n"[/B][/COLOR]);
    }
    [I][COLOR=#b22222]/* on tcp/tls bind_address is 0 so try to get the first address we listen
     * on no matter the protocol */[/COLOR][/I]
    si=bind_address?[B][COLOR=#5f9ea0]bind_address[/COLOR][/B]:get_first_socket();
    [B][COLOR=#a020f0]if[/COLOR][/B] (si==0){
        LOG(L_CRIT, [COLOR=#bc8f8f][B]"BUG: uac_init: null socket list\n"[/B][/COLOR]);
        [B][COLOR=#a020f0]return[/COLOR][/B] -1;
    }

    [I][COLOR=#b22222]/* calculate the initial From tag */[/COLOR][/I]
    src[0].s = [COLOR=#bc8f8f][B]"Long live SER server"[/B][/COLOR];
    src[0].len = strlen(src[0].s);
    src[1].s = si->address_str.s;
    src[1].len = strlen(src[1].s);
    src[2].s = si->port_no_str.s;
    src[2].len = strlen(src[2].s);

    MDStringArray(from_tag, src, 3);
    from_tag[MD5_LEN] = [COLOR=#bc8f8f][B]'-'[/B][/COLOR];
    [B][COLOR=#a020f0]return[/COLOR][/B] 1;
}
Fehlermeldung: BUG: uac_init: null socket list
socket_info.h:
Code:
...
[COLOR=#228b22][B]struct[/B][/COLOR] socket_info* tcp_listen;
[I][COLOR=#b22222]/* gets first non-null socket_info structure
 * (useful if for. e.g we are not listening on any udp sockets )
 */[/COLOR][/I]
inline [COLOR=#228b22][B]static[/B][/COLOR] [COLOR=#228b22][B]struct[/B][/COLOR] socket_info* [B][COLOR=#0000ff]get_first_socket[/COLOR][/B]()
{
    [B][COLOR=#a020f0]if[/COLOR][/B] (udp_listen) [B][COLOR=#a020f0]return[/COLOR][/B] udp_listen;
#[B][COLOR=#5f9ea0]ifdef[/COLOR][/B] [COLOR=#b8860b]USE_TCP[/COLOR]
    [B][COLOR=#a020f0]else[/COLOR][/B] [B][COLOR=#a020f0]if[/COLOR][/B] (tcp_listen) [B][COLOR=#a020f0]return[/COLOR][/B] tcp_listen;
#[B][COLOR=#5f9ea0]ifdef[/COLOR][/B] [COLOR=#b8860b]USE_TLS[/COLOR]
    [B][COLOR=#a020f0]else[/COLOR][/B] [B][COLOR=#a020f0]if[/COLOR][/B] (tls_listen) [B][COLOR=#a020f0]return[/COLOR][/B] tls_listen;
#[B][COLOR=#5f9ea0]endif[/COLOR][/B]
#[B][COLOR=#5f9ea0]endif[/COLOR][/B]
    [B][COLOR=#a020f0]return[/COLOR][/B] 0;
}
...
Leider kapier ich nicht wo tcp_listen einen Wert zugewiesen bekommt. Daher kann ich da auch nix machen...

MfG Oliver
 

deller

Neuer User
Mitglied seit
2 Sep 2005
Beiträge
79
Punkte für Reaktionen
0
Punkte
0
olistudent schrieb:
Ich hab den openser erfolgreich kompiliert. Der Fehler oben kommt daher, dass unsere uClibc die Funktion res_search nicht unterstützt.
Leider hab ich es aber nicht geschafft das Programm zum Laufen zu bewegen. Leider reichen meine C-Kenntnisse auch nicht aus um den Fehler zu korrigieren...

MfG Oliver
Wie hast das denn kompiliert bekommen? Muss da in make menuconfig etwas umgestellt werden. Oder wie funktioniert das mit der Verwendung einer anderen uClibc?
 

olistudent

IPPF-Urgestein
Mitglied seit
19 Okt 2004
Beiträge
14,779
Punkte für Reaktionen
10
Punkte
38
Ich hab die Funktion aus einer neuen uClibc geklaut und in die resolve.c eingefügt.

MfG Oliver
 

deller

Neuer User
Mitglied seit
2 Sep 2005
Beiträge
79
Punkte für Reaktionen
0
Punkte
0
Unter welchen Bedingungen laufen denn Programme, die mit der Kernel-Toolchain bzw.(???) mit der glibc erstellt worden sind, auf der Fritzbox.

Momentan verwende ich die Originalfirmware und habe meine zusätzliche Software auf einem USB Stick (mit Startscript)

Einzige Änderung ist dann in der debug.cfg --> Aufruf des Startscripts auf dem USB-Stick.
 

olistudent

IPPF-Urgestein
Mitglied seit
19 Okt 2004
Beiträge
14,779
Punkte für Reaktionen
10
Punkte
38
Du musst das Programm statisch gegen die glibc linken.
Das könnte sehr groß werden!

MfG Oliver
 

deller

Neuer User
Mitglied seit
2 Sep 2005
Beiträge
79
Punkte für Reaktionen
0
Punkte
0
hmm

Habe jetzt die libc.a gelinkt aber es kommt nach wie vor die Fehlermeldung

-sh: ./openser: not found


Nachtrag: kann man nicht auch eine neuere uclibc statisch linken?
 

olistudent

IPPF-Urgestein
Mitglied seit
19 Okt 2004
Beiträge
14,779
Punkte für Reaktionen
10
Punkte
38
Hi.
Klar kannst du auch gegen eine uClibc statisch linken.
Du hast den richtigen Compiler genommen und auch ein "chmod +x openser" ausgeführt?

MfG Oliver
 

deller

Neuer User
Mitglied seit
2 Sep 2005
Beiträge
79
Punkte für Reaktionen
0
Punkte
0
Ich habe die Umgebungsvariablen hierher gesetzt:

.../ds-0.2.6/toolchain/build/gcc-3.3.2-glibc-2.3.2/mipsel-unknown-linux-gnu/mipsel-unknown-linux-gnu/bin

und diesen Complier verwendet er dann auch. Chmod + x habe ich auch gemacht
 

deller

Neuer User
Mitglied seit
2 Sep 2005
Beiträge
79
Punkte für Reaktionen
0
Punkte
0
hmm, jetzt funktioniert es auf einmal *g* --> Buchstabendreher.

Und 2 MB statisch gelinkt ist ja nun nicht die Welt.
 

debugger

Neuer User
Mitglied seit
19 Apr 2006
Beiträge
83
Punkte für Reaktionen
0
Punkte
0
Mal am Rande eine Idee: Durch das VPN bekommt (zumindest eine) FB doch eine zusätzliche/andere IP. Außerdem wird der voipd doch vor dem VPN gestartet. Horcht der vielleicht nicht auf einer VPN-IP oder kommt mit den Routen nicht klar und läuft deshalb etwas Amok?

Ich weiß nicht, ob es auf der FBox überhaupt geht, trotzdem: Hast du mal ein VPN mit tap (also Ethernet Tunnel) probiert?
 

deller

Neuer User
Mitglied seit
2 Sep 2005
Beiträge
79
Punkte für Reaktionen
0
Punkte
0
Also voip funktioniert einwandfrei. Jeder bekommt nur die Anrufe, die er auch bekommen soll. Die voip-Anrufe über den Tunnel funktionieren ebenfalls einwandfrei.

Mit openvpn haben wir eine Ethernetbrücke eingerichtet (udp und tap). Hierbei kommt keine IP-Adresse hinzu.

openser habe ich zwar in diversen lauffähigen Versionen übersetzt bekommen, allerdings kommt dann spätestens auf der Fritzbox Fehlermeldungen wie

undefined symbol 'tcp_children_no'

Mit einer uclibc0.9.28 kompilierten Version SIGSEGV. Was gibt es denn für Möglichkeiten, eine 0.9.28 er Version oder Openser aus dem openwrt Package auf der Fritzbox zum laufen zu bringen (chroot Umgebung / sqf Package ???)


Momentan habe ich den sip-server auf dem PC laufen. Wie gesagt, beide Fritzboxen melden sich hier sauber an und voip über den Tunnel funktioniert.

Die alten Tricks mit der Sipadresse im Telefonbuch laufen bei der Fritzbox 7170 leider nicht mehr. --> daher der Sipserver
 

Zurzeit aktive Besucher

3CX PBX - GRATIS
Linux / Win / Cloud

Neueste Beiträge

Statistik des Forums

Themen
232,075
Beiträge
2,018,490
Mitglieder
349,401
Neuestes Mitglied
Hoermi007