logging: Switch to using libosmocore logging for all the code
diff --git a/configure.in b/configure.in
index b9e052f..e31a79e 100644
--- a/configure.in
+++ b/configure.in
@@ -48,7 +48,7 @@
# Checks for header files.
AC_HEADER_STDC
AC_HEADER_SYS_WAIT
-AC_CHECK_HEADERS([arpa/inet.h fcntl.h netdb.h netinet/in.h stdint.h stdlib.h string.h sys/ioctl.h sys/socket.h sys/time.h syslog.h unistd.h])
+AC_CHECK_HEADERS([arpa/inet.h fcntl.h netdb.h netinet/in.h stdint.h stdlib.h string.h sys/ioctl.h sys/socket.h sys/time.h unistd.h])
# Check for if header
AC_CHECK_HEADERS([linux/if.h net/if.h])
diff --git a/configure.scan b/configure.scan
deleted file mode 100644
index ac79782..0000000
--- a/configure.scan
+++ /dev/null
@@ -1,48 +0,0 @@
-# Process this file with autoconf to produce a configure script.
-AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
-AC_CONFIG_SRCDIR([sgsnemu/cmdline.c])
-AC_CONFIG_HEADER([config.h])
-
-# Checks for programs.
-AC_PROG_CC
-AC_PROG_INSTALL
-AC_PROG_AWK
-AC_PROG_CPP
-AC_PROG_CXX
-AC_PROG_RANLIB
-
-# Checks for libraries.
-# FIXME: Replace `main' with a function in `-le':
-AC_CHECK_LIB([e], [main])
-# FIXME: Replace `main' with a function in `-lgtp':
-AC_CHECK_LIB([gtp], [main])
-# FIXME: Replace `main' with a function in `-links':
-AC_CHECK_LIB([inks], [main])
-
-# Checks for header files.
-AC_HEADER_STDC
-AC_HEADER_SYS_WAIT
-AC_CHECK_HEADERS([arpa/inet.h fcntl.h netdb.h netinet/in.h stdint.h stdlib.h string.h sys/ioctl.h sys/socket.h sys/time.h syslog.h unistd.h])
-
-# Checks for typedefs, structures, and compiler characteristics.
-AC_C_CONST
-AC_TYPE_MODE_T
-AC_TYPE_SIZE_T
-AC_HEADER_TIME
-
-# Checks for library functions.
-AC_PROG_GCC_TRADITIONAL
-AC_FUNC_MALLOC
-AC_FUNC_MEMCMP
-AC_CHECK_FUNCS([gethostbyname inet_ntoa memset select socket strdup strerror strtol])
-
-AC_CONFIG_FILES([Makefile
- doc/Makefile
- ggsn/Makefile
- gtp/Makefile
- intl/Makefile
- po/Makefile
- sgsnemu/Makefile
- src/Makefile
- tests/Makefile])
-AC_OUTPUT
diff --git a/doc/ggsn.8 b/doc/ggsn.8
index 7a98281..3b9e903 100644
--- a/doc/ggsn.8
+++ b/doc/ggsn.8
@@ -95,9 +95,8 @@
received the ggsn will allocate a dynamic IP address for the mobile
station, and allow the mobile station to access the Gi
interface. Connections are terminated by either the mobile station or
-the SGSN. Runtime errors are reported using the
-.B syslogd (8)
-facility.
+the SGSN. Runtime errors are reported using the Osmocom logging
+framework.
Typically
.B ggsn
@@ -219,8 +218,7 @@
.SH "SEE ALSO"
-.BR sgsnemu (8),
-.BR syslogd (8)
+.BR sgsnemu (8)
.SH NOTES
.LP
diff --git a/doc/ggsn.8.pl b/doc/ggsn.8.pl
deleted file mode 100644
index 35b116b..0000000
--- a/doc/ggsn.8.pl
+++ /dev/null
@@ -1,272 +0,0 @@
-
-.\" * OpenGGSN - Gateway GPRS Support Node
-.\" * Copyright (C) 2002, 2003 Mondru AB.
-.\" * Polish translation copyright (C) 2004 Marek ¯akowicz <mazaczek@users.sourceforge.net>
-.\" *
-.\" * The contents of this file may be used under the terms of the GNU
-.\" * General Public License Version 2, provided that the above copyright
-.\" * notice and this permission notice is included in all copies or
-.\" * substantial portions of the software.
-.\" *
-.\" * The initial developer of the original code is
-.\" * Jens Jakobsen <jj@openggsn.org>
-.\" *
-.\" * Contributor(s):
-.\" *
-.\" * Translation to polish: Marek Zakowicz <mazak@debian.linux.org.pl>
-.\" Manual page for ggsn
-.\" SH section heading
-.\" SS subsection heading
-.\" LP paragraph
-.\" IP indented paragraph
-.\" TP hanging label
-
-.TH ggsn 8 "Lipiec 2003"
-.SH NAZWA
-ggsn \- Wêze³ Wspieraj±cy Bramy GPRS (ang. Gateway GPRS Support Node).
-.SH U¯YTKOWANIE
-.B ggsn
-\-\-help
-
-.B ggsn
- \-\-version
-
-.B ggsn
-[
-.BI \-\-fg
-] [
-.BI \-\-debug
-] [
-.BI \-\-conf " plik"
-] [
-.BI \-\-pidfile " plik"
-] [
-.BI \-\-statedir " plik"
-] [
-.BI \-\-listen " host"
-] [
-.BI \-\-net " sieæ"
-] [
-.BI \-\-ipup " skrypt"
-] [
-.BI \-\-ipdown " skrypt"
-] [
-.BI \-\-dynip " sieæ"
-] [
-.BI \-\-statip " sieæ"
-] [
-.BI \-\-pcodns1 " host"
-] [
-.BI \-\-pcodns2 " host"
-] [
-.BI \-\-timelimit " sekundy"
-]
-
-.SH OPIS
-.B ggsn
-jest czê¶ci± projektu
-.B OpenGGSN
-i implementuje funkcjonalno¶æ wêz³a wspieraj±cego bramy GPRS.
-Wêz³y GGSN s± wykorzystywane przez operatorów sieci komórkowych jako interfejsy
-pomiêdzy Internetem i reszt± infrastruktury sieci komórkowej.
-
-Funkcjonalno¶æ i protoko³y GPRS zosta³y ustandaryzowane w ramach projektu
-Third Generation Partnership Project (3GPP). Stosownie do specyfikacji 3GPP,
-GGSN posiada dwa interfejsy: interfejs Gn/Gp oraz interfejs Gi.
-
-Interfejs Gn/Gp mo¿e byæ postrzegany jako ³±cze podrzêdne wêz³a GGSN.
-Jest on wykorzystywany do komunikacji z Wêz³em Dostarczaj±cym Us³ug GPRS
-(SGSN), który z kolei jest interfejsem do radiowej sieci dostêpowej.
-Interfejs Gn/Gp wykorzystuje protokó³ tunelowania GPRS (GTP). Pakiety danych
-u¿ytkownika (zazwyczaj pakiety IP) s± tunelowane za po¶rednictwem protoko³u GTP,
-który z kolei wykorzystuje protokó³ UDP nad IP.
-
-Drugi z interfejsów mo¿e byæ postrzegany jako ³±cze nadrzêdne,
-prowadz±ce z wêz³a GGSN do zewnêtrznej sieci danych.
-Gi jest najczê¶ciej interfejsem do Internetu.
-
-.B ggsn
-wykorzystuje
-.B sterownik TUN/TAP
-jako interfejs Gi. Interfejs w sieci tun jest uruchamiany podczas startu
-.B ggsn.
-
-.B ggsn
-odbiera po³±czenia nadchodz±ce od urz±dzeñ ruchomych za po¶rednictwem
-sieci radiowej oraz SGSN. Gdy nadchodzi ¿±danie po³±czenia, ggsn rezerwuje
-dla urz±dzenia ruchomego dynamiczny adres IP i pozwala urz±dzeniu ruchomemu
-korzystaæ z interfejsu Gi. Po³±czenia mog± byæ zamykane zarówno przez
-stacje ruchome, jak i SGSN. B³êdy wystêpuj±ce podczas pracy programu
-s± raportowane z wykorzystaniem
-.B syslogd (8).
-
-W typowej sytuacji
-.B ggsn
-jest uruchamiany na komputerze z dwoma kartami Ethernet - jedn±
-przeznaczon± dla interfejsu Gn/Gp i jedn± dla interfejsu Gi.
-Polityki trasowania i regu³y ¶ciany ogniowej powinny byæ wykorzystane
-w celu rozdzielenia ruchu Gi od ruchu Gn/Gp.
-
-.SH OPCJE
-.TP
-.BI --help
-Wy¶wietla pomoc i na tym koñczy wykonanie programu.
-
-.TP
-.BI --version
-Wy¶wietla pomoc i na tym koñczy wykonanie programu.
-
-.TP
-.BI --fg
-Uruchamia na pierwszym planie (domy¶lnie wy³±czone).
-
-.TP
-.BI --debug
-Uruchamia w trybie usuwania b³êdów (domy¶lnie wy³±czone).
-
-.TP
-.BI --conf " plik"
-Odczytuje konfiguracjê z
-.I pliku
-(domy¶lnie /etc/ggsn.conf), którego ka¿da linia odpowiada jednej opcji
-linii poleceñ pozbawionej przedrostka '--'. Opcje podane w linii poleceñ
-nadpisuj± opcje podane w pliku konfiguracyjnym.
-
-.TP
-.BI --pidfile " plik"
-Nazwa
-.I pliku
-z identyfikatorem procesu (domy¶lnie /var/run/ggsn.pid)
-
-.TP
-.BI --statedir " ¶cie¿ka"
-.I ¦cie¿ka
-do katalogu z trwa³ymi (nie ulotnymi) danymi (domy¶lnie /var/lib/ggsn/)
-
-.TP
-.BI --listen " host"
-Lokalny adres IP, który zostanie u¿yty do nas³uchu przez interfejs Gn/Gp.
-Ta opcja musi zostaæ podana.
-Z przyczyn bezpieczeñstwa nie mo¿e byæ wykorzystany INADDR_ANY.
-
-.TP
-.BI --net " sieæ"
-Adres sieci interfejsu Gi (domy¶lnie 192.168.0.0/24).
-Adres sieci jest ustawiany podczas inicjalizacji, gdy
-.B ggsn
-uruchamia urz±dzenie tun dla interfejsu Gi.
-
-.TP
-.BI --ipup " skrypt"
-Skrypt wykonywany po aktywacji interfejsu Gi w sieci tun.
-Skrypt jest uruchamiany z nastêpuj±cymi parametrami <nazwa urz±dzenia> <adres ip>.
-
-.TP
-.BI --ipdown " skrypt"
-Skrypt wykonywany po wy³±czeniu interfejsu Gi w sieci tun.
-Skrypt jest uruchamiany z nastêpuj±cymi parametrami <nazwa urz±dzenia> <adres ip>.
-
-.TP
-.BI --dynip " sieæ"
-Pula dynamicznych adresów sieci IP. Okre¶la pulê dynamicznych adresów IP.
-Je¶li ta opcja zostanie pominiêta, ggsn wykorzystuje do dynamicznej rezerwacji
-adresów IP, adres sieci okre¶lony przez opcjê
-.BI --net.
-
-.TP
-.BI --pcodns1 " host"
-Serwer PCO DNS 1 (domy¶lnie 0.0.0.0). PCO jest akronimem
-Protocol Configuration Options, co t³umaczy siê jako Protokó³ Opcji
-Konfiguracyjnych i jest czê¶ci± specyfikacji prtoko³ów GPRS. Jest
-wykorzystywany do informowania stacji ruchomej o adresie serwera DNS
-stosowanego do rozwi±zywania nazw hostów.
-
-.TP
-.BI --pcodns2 " host"
-Serwer PCO DNS 2 (domy¶lnie 0.0.0.0). PCO jest akronimem
-Protocol Configuration Options, co t³umaczy siê jako Protokó³ Opcji
-Konfiguracyjnych i jest czê¶ci± specyfikacji prtoko³ów GPRS. Jest
-wykorzystywany do informowania stacji ruchomej o adresie serwera DNS
-stosowanego do rozwi±zywania nazw hostów.
-
-.TP
-.BI --timelimit " sekundy"
-Koñczy wykonanie
-.b ggsn
-po up³ywie podanej liczy \fIsekund\fP.
-Opcja wykorzystywana w celu usuwania b³êdów.
-
-
-.SH PLIKI
-.I /etc/ggsn.conf
-.RS
-Plik konfiguracyjny dla
-.B ggsn.
-.RE
-.I /var/run/ggsn.pid
-.RS
-Plik zawieraj±cy identyfikator procesu.
-.RE
-.I /var/lib/ggsn
-.RS
-Katalog przechowuj±cy trwa³e (nie ulotne) dane.
-.RE
-
-.SH B£ÊDY
-Zg³aszaj b³êdy na listê ¶ledzenia b³êdów OpenGGSN
-.I http://sourceforge.net/projects/ggsn/
-
-.B ggsn
-ma bardzo ograniczone wsparcie dla zarz±dzania.
-Obecnie zarówno SNMP jak i mechanizmy rozliczania s± pominiête.
-
-.SH "ZOBACZ TAK¯E"
-.BR sgsnemu (8),
-.BR syslogd (8)
-
-.SH UWAGI
-.LP
-
-Oprócz d³ugich, udokumentowanych w tym podrêczniku, opcji
-.B ggsn
-wspiera równie¿ pewn± liczb± krótkich opcji o tej samej funkcjonalno¶ci.
-Wywo³aj
-.B ggsn --help
-by uzyskaæ pe³n± listê dostêpnych opcji.
-
-Sterownik TUN/TAP jest wymagany dla poprawnego dzia³ania
-.B ggsn.
-Dla j±der linuksa pó¼niejszych ni¿ 2.4.7 sterownik TUN/TAP jest zawarty w j±drze,
-chocia¿ w typowej sytuacji musi byæ ³adowany oddzielnie za pomoc±
-.B modprobe tun.
-Aby ³adowaæ automatycznie nale¿y do pliku
-.B /etc/modules.conf.
-dodaæ liniê
-.B alias char-major-10-200 tun
-Aby uzyskaæ informacje o innych platformach zobacz stronê
-.I http://vtun.sourceforge.net/tun/
-opisuj±c± jak zainstalowaæ i skonfigurowaæ sterownik tun.
-
-.B ggsn
-wykorzystuje protokó³ tunelowania GPRS (GTP) wyspecyfikowany przez
-Third Generation Partnership Project (3GPP). Specyfikacje protoko³ów 3GPP
-mog± byæ znalezione na
-.I http://www.3gpp.org
-
-.SH COPYRIGHT
-
-Copyright (C) 2002, 2003 by Mondru AB.
-
-Zawarto¶æ tego pliku mo¿e byæ wykorzystywana stosownie do terminów
-Ogólnej, Publicznej Licencji (GPL) GNU w wersji 2 dostarczonej wraz
-z niniejsz± uwag± o prawach autorskich zawart± we wszystkich kopiach
-i istotnych fragmentach oprogramowania.
-
-.SH AUTORZY
-Jens Jakobsen <jj@openggsn.org>
-
-.SH T£UMACZENIE
-Polish translation copyright (C) 2004 Marek ¯akowicz <mazaczek@users.sourceforge.net>
-
-T³umaczenie jest chronione prawami autorskimi.
-Dozwolone jest korzystanie, rozprowadzanie i modyfikacja na zasadach licencji GNU GPL 2.
diff --git a/doc/sgsnemu.8 b/doc/sgsnemu.8
index b273b4b..50502e0 100644
--- a/doc/sgsnemu.8
+++ b/doc/sgsnemu.8
@@ -123,9 +123,7 @@
for the local interface. A tun network interface is established for
each connection established to the GGSN.
-Runtime errors are reported using the
-.B syslogd (8)
-facility.
+Runtime errors are reported using the Osmocom logging framework.
.SH OPTIONS
@@ -355,8 +353,7 @@
.SH "SEE ALSO"
-.BR ggsn (8),
-.BR syslog (8)
+.BR ggsn (8)
.SH NOTES
.LP
diff --git a/doc/sgsnemu.8.pl b/doc/sgsnemu.8.pl
deleted file mode 100644
index cbdea48..0000000
--- a/doc/sgsnemu.8.pl
+++ /dev/null
@@ -1,407 +0,0 @@
-
-.\" * OpenGGSN - Gateway GPRS Support Node
-.\" * Copyright (C) 2002, 2003 Mondru AB.
-.\" * Polish translation copyright (C) 2004 Marek ¯akowicz <mazaczek@users.sourceforge.net>
-.\" *
-.\" * The contents of this file may be used under the terms of the GNU
-.\" * General Public License Version 2, provided that the above copyright
-.\" * notice and this permission notice is included in all copies or
-.\" * substantial portions of the software.
-.\" *
-.\" * The initial developer of the original code is
-.\" * Jens Jakobsen <jj@openggsn.org>
-.\" *
-.\" * Contributor(s):
-.\" *
-.\" * Translation to polish: Marek Zakowicz <mazak@debian.linux.org.pl>
-.\" Manual page for ggsn
-.\" SH section heading
-.\" SS subsection heading
-.\" LP paragraph
-.\" IP indented paragraph
-.\" TP hanging label
-
-.TH sgsnemu 8 "Maj 2004"
-.SH NAZWA
-sgsnemu \- Emulator Wêz³a Dostarczaj±cego Us³ug GPRS
-.SH U¯YTKOWANIE
-.B sgsnemu
-\-\-help
-
-.B sgsnemu
-\-\-version
-
-.B sgsnemu
-[
-.BI \-\-debug
-] [
-.BI \-\-conf " plik"
-] [
-.BI \-\-pidfile " plik"
-] [
-.BI \-\-statedir " plik"
-] [
-.BI \-\-dns " host"
-] [
-.BI \-\-listen " host"
-] [
-.BI \-\-remote " host"
-] [
-.BI \-\-contexts " liczba"
-] [
-.BI \-\-timelimit " sekundy"
-] [
-.BI \-\-gtpversion " wersja"
-] [
-.BI \-\-apn " apn"
-] [
-.BI \-\-selmode " tryb"
-] [
-.BI \-\-imsi " imsi"
-] [
-.BI \-\-nsapi " nsapi"
-] [
-.BI \-\-msisdn " msisdn"
-] [
-.BI \-\-qos " qos"
-] [
-.BI \-\-charging " op³ata"
-] [
-.BI \-\-uid " uid"
-] [
-.BI \-\-pwd " pwd"
-] [
-.BI \-\-createif
-] [
-.BI \-\-net " sieæ"
-] [
-.BI \-\-defaultroute
-] [
-.BI \-\-ipup " skrypt"
-] [
-.BI \-\-ipdown " skrypt"
-] [
-.BI \-\-pinghost " host"
-] [
-.BI \-\-pingrate " liczba"
-] [
-.BI \-\-pingsize " liczba"
-] [
-.BI \-\-pingcount " liczba"
-]
-.SH OPIS
-.B sgsnemu
-jest czê¶ci± projektu
-.B OpenGGSN
-i implementuje emulator wêz³a dostarczaj±cego us³ug GPRS (SGSN).
-Mo¿e on byæ wykorzystywany zarówno do testowania wêz³ów GGSN,
-jak rdzenia sieci GRPS, czy po³±czeñ odwiedzaj±cych.
-
-Funkcjonalno¶æ i protoko³y GPRS zosta³y ustandaryzowane w ramach projektu
-Third Generation Partnership Project (3GPP).
-Wed³ug specyfikacji 3GPP, SGSN posiada kilka interfejsów.
-.B sgsnemu
-implementuje interfejs Gn/Gp, który jest wykorzystywany w kierunku
-wêz³ów GGSN.
-
-Interfejs Gn/Gp mo¿e byæ postrzegany jako ³±cze nadrzêdne wêz³a SGSN.
-Jest ono wykorzystywane do komunikacji z wêz³em GGSN, który zazwyczaj jest
-pod³±czony do Internetu.
-Interfejs Gn/Gp wykorzystuje protokó³ tunelowania GPRS (GTP).
-Pakiety u¿ytkownika (zazwyczaj pakiety IP) s± tunelowane za po¶rednictwem protoko³u GTP,
-który z kolei wykorzystuje protokó³ UDP nad IP.
-
-
-.B sgsnemu
-ustanawia pewn± liczbê po³±czeñ do GGSN.
-Wewnêtrzny ping transmituje ¿±dania ICMP poprzez ju¿ ustanowione po³±czenia.
-Alternatywnie, mo¿e byæ utworzony lokalny interfejs sieciowy.
-W tym przypadku
-.B sgsnemu
-przekazuje pakiety pomiêdzy lokalnym interfejsem sieciowym i po³±czeniami
-ustanowionymi na interfejsie Gn/Gp.
-
-.B sgsnemu
-wykorzystuje sterownik
-.B TUN/TAP
-jako interfejs lokalny. Interfejs sieci tun jest ustanawiany dla ka¿dego
-po³±czenia zestawianego z wêz³em GGSN.
-B³êdy wystêpuj±ce podczas pracy programu s± raportowane z wykorzystaniem
-.B syslogd (8).
-
-.SH OPCJE
-.TP
-.BI --help
-Wy¶wietla pomoc i na tym koñczy wykonanie programu.
-
-.TP
-.BI --version
-Wy¶wietla pomoc i na tym koñczy wykonanie programu.
-
-.TP
-.BI --debug
-Uruchamia w trybie usuwania b³êdów (domy¶lnie wy³±czone).
-
-.TP
-.BI --conf " plik"
-Odczytuje konfiguracjê z
-.I pliku
-,którego ka¿da linia odpowiada jednej opcji
-linii poleceñ pozbawionej przedrostka '--'. Opcje podane w linii poleceñ
-nadpisuj± opcje podane w pliku konfiguracyjnym.
-
-.TP
-.BI --pidfile " plik"
-Nazwa
-.I pliku
-z identyfikatorem procesu (domy¶lnie ./sgsnemu.pid)
-
-.TP
-.BI --statedir " ¶cie¿ka"
-.I ¦cie¿ka
-do katalogu z trwa³ymi (nie ulotnymi) danymi (domy¶lnie ./)
-
-.TP
-.BI --dns " host"
-Serwer DNS wykorzystywany do zapytañ APN.
-Je¶li parametr zosta³ pominiêty, wykorzystywana jest domy¶lna, systemowa konfiguracja DNS.
-
-.TP
-.BI --listen " host"
-Lokalny adres IP, który zostanie u¿yty do nas³uchu przez interfejs Gn/Gp.
-Ta opcja musi zostaæ podana.
-Z przyczyn bezpieczeñstwa nie mo¿e byæ wykorzystany INADDR_ANY.
-
-.TP
-.BI --remote " host"
-.I Host
-z wêz³em GGSN wykorzystywanym do po³±czeñ. Je¶li DNS jest prawid³owo skonfigurowany
-to powinno byæ mo¿liwe podanie nazwy punktu dostêpowego (APN) jako nazwy zdalnego hosta.
-
-.TP
-.BI --contexts " liczba"
-Liczba ustanawianych kontekstów (domy¶lnie = 1). W przypadku wielu kontekstów
-pierwszy kontekst jest ustanawiany z wykorzystaniem imsi + 0 i msidn + 0.
-Drugi kontekst jest ustanawiany z wykorzystaniem imsi + 1 i msidn +1.
-Trzeci ...
-
-.TP
-.BI --timelimit " sekundy"
-Koñczy wykonanie
-.b sgsnemu
-po up³ywie podanej liczy \fIsekund\fP.
-W przypadku wykorzystywania opcji ping mo¿na zakoñczyæ
-.B sgsnemu
-po wy³aniu
-.B --pingcount
-pakietów.
-
-.TP
-.BI --gtpversion " wersja"
-.I wersja
-protoko³u GTP wykorzystywana przy ustanawianiu kontekstów (domy¶lnie = 1).
-Je¶li nie jest mo¿liwe ustanowienie kontekstu GTPw1
-.B sgsnemu
-powtórzy ¿±danie wykorzystuj±c GTPw0.
-
-.TP
-.BI --apn " apn"
-.I apn
-wykorzystywany przy ³±czeniu siê z wêz³em GGSN (domy¶lnie = internet).
-APN jest akronimem angielskich s³ów Access Point Name.
-
-.TP
-.BI --selmode " tryb"
-Tryb wyboru wykorzystywany w komunikacji z wêz³em GGSN (domy¶lnie = 0x01).
-Jako tryby wyboru mog± byæ wykorzystane nastêpuj±ce kody:
-0: MS lub sieæ dostarczana przez APN, subskrypcja zweryfikowana,
-1: MS dostarczany przez APN, subskrypcja nie zweryfikowana,
-2: sieæ dostarczana przez APN, subskrypcja nie zweryfikowana.
-
-.TP
-.BI --imsi " imsi"
-.I imsi
-wykorzystywane w komunikacji z wêz³em GGSN (domy¶lnie = 240010123456789).
-IMSI jest akronimem angielskich s³ów International Mobile Subscriber Identity.
-IMSI musi sk³adaæ siê z dok³adnie 15 cyfr. Porównaj z opcj±
-.I contexts
-by zobaczyæ wykorzystanie
-.I imsi
-w przypadku wielu kontekstów.
-
-.TP
-.BI --nsapi " nsapi"
-.I nsapi
-wykorzystywane w komunikacji z wêz³em GGSN (domy¶lnie = 0).
-Warto¶æ musi byæ pomiêdzy 0, a 15.
-
-.TP
-.BI --msisdn " msisdn"
-.I msisdn
-wykorzystywane w komunikacji z wêz³em GGSN (domy¶lnie = 46702123456).
-MSISDN jest akronimem angielskich s³ów International Mobile Integrated Services Digital Network.
-W istocie jest numerem telefonu zapisanym w miêdzynarodowym formacie bez wiod±cych 00 lub 011.
-Porównaj z opcj±
-.I contexts
-by zobaczyæ wykorzystanie
-.I msisdn
-w przypadku wielu kontekstów.
-
-.TP
-.BI --qos " qos"
-.I qos
-wykorzystywany w komunikacji z wêz³em GGSN (domy¶lnie = 0x0b921f).
-QoS jest akronimem angielskich s³ów Quality of Service.
-Format tego parametru zosta³ okre¶lony na podstawie specyfikacji 3GPP 09.60.
-
-.TP
-.BI --charging " op³ata"
-Charakterystyka rozliczania wykorzystywana w komunikacji z wêz³em GGSN
-(domy¶lnie = 0x0800). 0x0800 = normalna, 0x0400 = przedp³ata,
-0x0200 = p³aska rata, 0x0100 = rozliczanie dynamiczne.
-Format pola zosta³ opisany w specyfikacji 3GPP 32.015.
-
-.TP
-.BI --uid " uid"
-Identyfikator u¿ytkownika wysy³any do GGSN jako opcja konfiguracyjna protoko³u.
-
-.TP
-.BI --pwd " has³o"
-Identyfikator wysy³ane do GGSN jako opcja konfiguracyjna protoko³u.
-
-.TP
-.BI --createif
-Tworzy lokalny interfejs tun, wykorzystywany dla
-przesy³ania pakietów do i z interfejsu Gn/Gp.
-Nale¿y zaznaczyæ, ¿e interfejs Gn/Gp zazwyczaj jest kierowany
-do Internetu przez GGSN. Tylko jeden interfejs mo¿e byæ utworzony, chocia¿
-wiele kontekstów mo¿e zostaæ ustanowionych.
-Interfejs mo¿e byæ podany dla ka¿dego kontekstu jako adres IP, lub mo¿e byæ
-okre¶lony za pomoc± opcji
-.I net.
-
-.TP
-.BI --net " sieæ"
-Adres sieci lokalnego interfejsu.
-Opcja
-.I net
-jest poprawna tylko wtedy, gdy zosta³a wykorzystana opcja
-.I createif.
-Warto¶æ parametru
-.I net
-jest podawana w formacie cidr (sieæ/maska). Je¶li opcja
-.I net
-zostanie pominiêta, adres IP jest rezerwowany dla ka¿dego ustanawianego kontekstu.
-
-.TP
-.BI --defaultroute
-Definiuje domy¶lne trasowanie przez lokalny interfejs tun.
-
-.TP
-.BI --ipup " skrypt"
-Skrypt wykonywany po aktywacji interfejsu Gi w sieci tun.
-Skrypt jest uruchamiany z nastêpuj±cymi parametrami <nazwa urz±dzenia> <adres ip>.
-
-.TP
-.BI --ipdown " skrypt"
-Skrypt wykonywany po wy³±czeniu interfejsu Gi w sieci tun.
-Skrypt jest uruchamiany z nastêpuj±cymi parametrami <nazwa urz±dzenia> <adres ip>.
-
-.TP
-.BI --pinghost " host"
-Powoduje wysy³anie pakietów ICMP do urz±dzenia
-.I host
-poprzez interfejs Gn/Gp. Statystyki po³±czeñ s± raportowane w formie
-bardzo zbli¿onej do wyj¶cia oryginalnego programu ping. Mo¿esz wykorzystaæ
-to udogodnienie do testowania wydajno¶ci GGSN.
-
-.TP
-.BI --pingrate " liczba"
-Ilo¶æ ¿±dañ ICMP generowanych w przeci±gu sekundy (domy¶lnie = 1).
-
-.TP
-.BI --pingsize " liczba"
-Rozmiar generowanych ¿±dañ ICMP wyra¿ony w oktetach (domy¶lnie = 56).
-
-
-.TP
-.BI --pingcount " liczba"
-Oczekiwana ilo¶æ wygenerowanych ¿±dañ ICMP (domy¶lnie = 0).
-Warto¶æ 0 (zero) oznacza wielko¶æ nieograniczon±.
-
-.TP
-.BI --pingquiet
-Wy³±cza wypisywanie informacji o otrzymanych pakietach (domy¶lnie pakiety s± wypisywane).
-Jest to ca³kiem przydatne dla du¿ych ilo¶ci pakietów ICMP generowanych w przeci±gu sekundy
-(porównaj z opcj± pingrate).
-
-.SH PLIKI
-.I sgsnemu.conf
-.RS
-Plik konfiguracyjny dla
-.B sgsnemu.
-.RE
-.I .sgsnemu.pid
-.RS
-Plik zawieraj±cy identyfikator procesu.
-.RE
-.I ./
-.RS
-Katalog przechowuj±cy trwa³e (nie ulotne) dane.
-.RE
-
-.SH B£ÊDY
-Zg³aszaj b³êdy na listê ¶ledzenia b³êdów OpenGGSN
-.I http://sourceforge.net/projects/sgsnemu/
-
-
-.SH "ZOBACZ TAK¯E"
-.BR ggsn (8),
-.BR syslog (8)
-
-.SH UWAGI
-.LP
-
-Oprócz d³ugich, udokumentowanych w tym podrêczniku, opcji
-.B sgsnemu
-wspiera równie¿ pewn± liczb± krótkich opcji o tej samej funkcjonalno¶ci.
-Wywo³aj
-.B sgsnemu --help
-by uzyskaæ pe³n± listê dostêpnych opcji.
-
-Sterownik TUN/TAP jest wymagany dla poprawnego dzia³ania
-.B sgsnemu.
-Dla j±der linuksa pó¼niejszych ni¿ 2.4.7 sterownik TUN/TAP jest zawarty w j±drze,
-chocia¿ w typowej sytuacji musi byæ ³adowany oddzielnie za pomoc±
-.B modprobe tun.
-Aby ³adowaæ automatycznie nale¿y do pliku
-.B /etc/modules.conf.
-dodaæ liniê
-.B alias char-major-10-200 tun
-Aby uzyskaæ informacje o innych platformach zobacz stronê
-.I http://vtun.sourceforge.net/tun/
-opisuj±c± jak zainstalowaæ i skonfigurowaæ sterownik tun.
-
-.B ggsn
-wykorzystuje protokó³ tunelowania GPRS (GTP) wyspecyfikowany przez
-Third Generation Partnership Project (3GPP). Specyfikacje protoko³ów 3GPP
-mog± byæ znalezione na
-.I http://www.3gpp.org
-
-.SH COPYRIGHT
-
-Copyright (C) 2002, 2003, 2004 by Mondru AB.
-
-Zawarto¶æ tego pliku mo¿e byæ wykorzystywana stosownie do terminów
-Ogólnej, Publicznej Licencji (GPL) GNU w wersji 2 dostarczonej wraz
-z niniejsz± uwag± o prawach autorskich zawart± we wszystkich kopiach
-i istotnych fragmentach oprogramowania.
-
-.SH AUTORZY
-Jens Jakobsen <jj@openggsn.org>
-
-.SH T£UMACZENIE
-Polish translation copyright (C) 2004 Marek ¯akowicz <mazaczek@users.sourceforge.net>
-
-T³umaczenie jest chronione prawami autorskimi.
-Dozwolone jest korzystanie, rozprowadzanie i modyfikacja na zasadach licencji GNU GPL 2.
diff --git a/ggsn/Makefile.am b/ggsn/Makefile.am
index ada5720..91df8f0 100644
--- a/ggsn/Makefile.am
+++ b/ggsn/Makefile.am
@@ -2,9 +2,9 @@
AM_LDFLAGS = @EXEC_LDFLAGS@
-AM_CFLAGS = -O2 -D_GNU_SOURCE -fno-builtin -Wall -DSBINDIR='"$(sbindir)"' -ggdb
+AM_CFLAGS = -O2 -D_GNU_SOURCE -fno-builtin -Wall -DSBINDIR='"$(sbindir)"' -ggdb $(LIBOSMOCORE_CFLAGS)
-ggsn_LDADD = @EXEC_LDADD@ -lgtp -L../gtp ../lib/libmisc.a
+ggsn_LDADD = @EXEC_LDADD@ -lgtp -L../gtp ../lib/libmisc.a $(LIBOSMOCORE_LIBS)
ggsn_DEPENDENCIES = ../gtp/libgtp.la ../lib/libmisc.a
ggsn_SOURCES = ggsn.c cmdline.c cmdline.h
diff --git a/ggsn/ggsn.c b/ggsn/ggsn.c
index 0022b1b..3fd584a 100644
--- a/ggsn/ggsn.c
+++ b/ggsn/ggsn.c
@@ -19,11 +19,12 @@
#include "../config.h"
+#include <osmocom/core/application.h>
+
#ifdef HAVE_STDINT_H
#include <stdint.h>
#endif
-#include <syslog.h>
#include <ctype.h>
#include <netdb.h>
#include <signal.h>
@@ -88,7 +89,7 @@
file = fopen(pidfile, "w");
umask(oldmask);
if (!file) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DGGSN, LOGL_ERROR, 0,
"Failed to create process ID file: %s!", pidfile);
return;
}
@@ -149,7 +150,7 @@
if (pdp->peer)
ippool_freeip(ippool, (struct ippoolm_t *)pdp->peer);
else
- sys_err(LOG_ERR, __FILE__, __LINE__, 0, "Peer not defined!");
+ SYS_ERR(DGGSN, LOGL_ERROR, 0, "Peer not defined!");
return 0;
}
@@ -240,15 +241,7 @@
int timelimit; /* Number of seconds to be connected */
int starttime; /* Time program was started */
- /* open a connection to the syslog daemon */
- /*openlog(PACKAGE, LOG_PID, LOG_DAEMON); */
-
- /* TODO: Only use LOG__PERROR for linux */
-#ifdef __linux__
- openlog(PACKAGE, (LOG_PID | LOG_PERROR), LOG_DAEMON);
-#else
- openlog(PACKAGE, (LOG_PID), LOG_DAEMON);
-#endif
+ osmo_init_logging(&log_info);
if (cmdline_parser(argc, argv, &args_info) != 0)
exit(1);
@@ -286,13 +279,18 @@
/* Open a log file */
if (args_info.logfile_arg) {
- FILE* log_file = fopen(args_info.logfile_arg, "a");
- if (!log_file) {
- printf("Failed to open logfile: '%s'\n",
- args_info.logfile_arg);
- exit(1);
+ struct log_target *tgt;
+ tgt = log_target_find(LOG_TGT_TYPE_FILE, args_info.logfile_arg);
+ if (!tgt) {
+ tgt = log_target_create_file(args_info.logfile_arg);
+ if (!tgt) {
+ LOGP(DGGSN, LOGL_ERROR,
+ "Failed to create logfile: %s\n",
+ args_info.logfile_arg);
+ exit(1);
+ }
+ log_add_target(tgt);
}
- sys_err_setlogfile(log_file);
}
if (args_info.debug_flag) {
@@ -332,7 +330,7 @@
/* required for create_pdp_context_response messages */
if (args_info.listen_arg) {
if (!(host = gethostbyname(args_info.listen_arg))) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DGGSN, LOGL_ERROR, 0,
"Invalid listening address: %s!",
args_info.listen_arg);
exit(1);
@@ -340,7 +338,7 @@
memcpy(&listen_.s_addr, host->h_addr, host->h_length);
}
} else {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DGGSN, LOGL_ERROR, 0,
"Listening address must be specified! "
"Please use command line option --listen or "
"edit %s configuration file\n", args_info.conf_arg);
@@ -351,7 +349,7 @@
/* Store net as in_addr net and mask */
if (args_info.net_arg) {
if (ippool_aton(&net, &mask, args_info.net_arg, 0)) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DGGSN, LOGL_ERROR, 0,
"Invalid network address: %s!",
args_info.net_arg);
exit(1);
@@ -359,7 +357,7 @@
netaddr.s_addr = htonl(ntohl(net.s_addr) + 1);
destaddr.s_addr = htonl(ntohl(net.s_addr) + 1);
} else {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DGGSN, LOGL_ERROR, 0,
"Network address must be specified: %s!",
args_info.net_arg);
exit(1);
@@ -370,7 +368,7 @@
if (ippool_new(&ippool, args_info.net_arg, NULL, 1, 0,
IPPOOL_NONETWORK | IPPOOL_NOGATEWAY |
IPPOOL_NOBROADCAST)) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DGGSN, LOGL_ERROR, 0,
"Failed to allocate IP pool!");
exit(1);
}
@@ -378,7 +376,7 @@
if (ippool_new(&ippool, args_info.dynip_arg, NULL, 1, 0,
IPPOOL_NONETWORK | IPPOOL_NOGATEWAY |
IPPOOL_NOBROADCAST)) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DGGSN, LOGL_ERROR, 0,
"Failed to allocate IP pool!");
exit(1);
}
@@ -389,7 +387,7 @@
dns1.s_addr = 0;
if (args_info.pcodns1_arg) {
if (0 == inet_aton(args_info.pcodns1_arg, &dns1)) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DGGSN, LOGL_ERROR, 0,
"Failed to convert pcodns1!");
exit(1);
}
@@ -397,7 +395,7 @@
dns2.s_addr = 0;
if (args_info.pcodns2_arg) {
if (0 == inet_aton(args_info.pcodns2_arg, &dns2)) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DGGSN, LOGL_ERROR, 0,
"Failed to convert pcodns2!");
exit(1);
}
@@ -407,7 +405,7 @@
if (args_info.pcodns1_arg) {
dns1.s_addr = inet_addr(args_info.pcodns1_arg);
if (dns1.s_addr == -1) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DGGSN, LOGL_ERROR, 0,
"Failed to convert pcodns1!");
exit(1);
}
@@ -416,7 +414,7 @@
if (args_info.pcodns2_arg) {
dns2.s_addr = inet_addr(args_info.pcodns2_arg);
if (dns2.s_addr == -1) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DGGSN, LOGL_ERROR, 0,
"Failed to convert pcodns2!");
exit(1);
}
@@ -469,32 +467,29 @@
if (!args_info.fg_flag) {
FILE *f;
int rc;
- closelog();
/* Close the standard file descriptors. */
/* Is this really needed ? */
f = freopen("/dev/null", "w", stdout);
if (f == NULL) {
- sys_err(LOG_WARNING, __FILE__, __LINE__, 0,
+ SYS_ERR(DGGSN, LOGL_NOTICE, 0,
"Could not redirect stdout to /dev/null");
}
f = freopen("/dev/null", "w", stderr);
if (f == NULL) {
- sys_err(LOG_WARNING, __FILE__, __LINE__, 0,
+ SYS_ERR(DGGSN, LOGL_NOTICE, 0,
"Could not redirect stderr to /dev/null");
}
f = freopen("/dev/null", "r", stdin);
if (f == NULL) {
- sys_err(LOG_WARNING, __FILE__, __LINE__, 0,
+ SYS_ERR(DGGSN, LOGL_NOTICE, 0,
"Could not redirect stdin to /dev/null");
}
rc = daemon(0, 0);
if (rc != 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, rc,
+ SYS_ERR(DGGSN, LOGL_ERROR, rc,
"Could not daemonize");
exit(1);
}
- /* Open log again. This time with new pid */
- openlog(PACKAGE, LOG_PID, LOG_DAEMON);
}
/* pidfile */
@@ -507,7 +502,7 @@
printf("gtpclient: Initialising GTP tunnel\n");
if (gtp_new(&gsn, args_info.statedir_arg, &listen_, GTP_MODE_GGSN)) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0, "Failed to create gtp");
+ SYS_ERR(DGGSN, LOGL_ERROR, 0, "Failed to create gtp");
exit(1);
}
if (gsn->fd0 > maxfd)
@@ -525,7 +520,7 @@
if (debug)
printf("Creating tun interface\n");
if (tun_new((struct tun_t **)&tun)) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0, "Failed to create tun");
+ SYS_ERR(DGGSN, LOGL_ERROR, 0, "Failed to create tun");
if (debug)
printf("Failed to create tun\n");
exit(1);
@@ -534,7 +529,7 @@
if (debug)
printf("Setting tun IP address\n");
if (tun_setaddr(tun, &netaddr, &destaddr, &mask)) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DGGSN, LOGL_ERROR, 0,
"Failed to set tun IP address");
if (debug)
printf("Failed to set tun IP address\n");
@@ -565,7 +560,7 @@
gtp_retranstimeout(gsn, &idleTime);
switch (select(maxfd + 1, &fds, NULL, NULL, &idleTime)) {
case -1: /* errno == EINTR : unblocked signal */
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DGGSN, LOGL_ERROR, 0,
"select() returned -1");
/* On error, select returns without modifying fds */
FD_ZERO(&fds);
@@ -580,7 +575,7 @@
if (tun->fd != -1 && FD_ISSET(tun->fd, &fds) &&
tun_decaps(tun) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DGGSN, LOGL_ERROR, 0,
"TUN read failed (fd)=(%d)", tun->fd);
}
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 7c06e27..590f0ec 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -4,4 +4,4 @@
AM_CFLAGS = -O2 -fno-builtin -Wall -DSBINDIR='"$(sbindir)"' -ggdb
-libmisc_a_SOURCES = getopt1.c getopt.c ippool.c lookup.c syserr.c tun.c
+libmisc_a_SOURCES = getopt1.c getopt.c ippool.c lookup.c tun.c debug.c
diff --git a/lib/debug.c b/lib/debug.c
new file mode 100644
index 0000000..b3850f9
--- /dev/null
+++ b/lib/debug.c
@@ -0,0 +1,34 @@
+/*
+ * (C) 2014 by Holger Hans Peter Freyther
+ */
+#include "syserr.h"
+
+#include <osmocom/core/utils.h>
+
+static const struct log_info_cat default_categories[] = {
+ [DIP] = {
+ .name = "DIP",
+ .description = "IP Pool and other groups",
+ .enabled = 1, .loglevel = LOGL_NOTICE,
+ },
+ [DTUN] = {
+ .name = "DTUN",
+ .description = "Tunnel interface",
+ .enabled = 1, .loglevel = LOGL_NOTICE,
+ },
+ [DGGSN] = {
+ .name = "DGGSN",
+ .description = "GGSN",
+ .enabled = 1, .loglevel = LOGL_NOTICE,
+ },
+ [DSGSN] = {
+ .name = "DSGSN",
+ .description = "SGSN Emulator",
+ .enabled = 1, .loglevel = LOGL_NOTICE,
+ },
+};
+
+const struct log_info log_info = {
+ .cat = default_categories,
+ .num_cat = ARRAY_SIZE(default_categories),
+};
diff --git a/lib/ippool.c b/lib/ippool.c
index 7ece1e8..1f79a77 100644
--- a/lib/ippool.c
+++ b/lib/ippool.c
@@ -13,7 +13,6 @@
#include <netinet/in.h> /* in_addr */
#include <stdlib.h> /* calloc */
#include <stdio.h> /* sscanf */
-#include <syslog.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
@@ -76,7 +75,7 @@
}
if (p != member) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DIP, LOGL_ERROR, 0,
"ippool_hashdel: Tried to delete member not in hash table");
return -1;
}
@@ -124,31 +123,31 @@
break;
case 5:
if (m1 > 32) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0, "Invalid mask");
+ SYS_ERR(DIP, LOGL_ERROR, 0, "Invalid mask");
return -1; /* Invalid mask */
}
mask->s_addr = htonl(0xffffffff << (32 - m1));
break;
case 8:
if (m1 >= 256 || m2 >= 256 || m3 >= 256 || m4 >= 256) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0, "Invalid mask");
+ SYS_ERR(DIP, LOGL_ERROR, 0, "Invalid mask");
return -1; /* Wrong mask format */
}
m = m1 * 0x1000000 + m2 * 0x10000 + m3 * 0x100 + m4;
for (masklog = 0; ((1 << masklog) < ((~m) + 1)); masklog++) ;
if (((~m) + 1) != (1 << masklog)) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0, "Invalid mask");
+ SYS_ERR(DIP, LOGL_ERROR, 0, "Invalid mask");
return -1; /* Wrong mask format (not all ones followed by all zeros) */
}
mask->s_addr = htonl(m);
break;
default:
- sys_err(LOG_ERR, __FILE__, __LINE__, 0, "Invalid mask");
+ SYS_ERR(DIP, LOGL_ERROR, 0, "Invalid mask");
return -1; /* Invalid mask */
}
if (a1 >= 256 || a2 >= 256 || a3 >= 256 || a4 >= 256) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DIP, LOGL_ERROR, 0,
"Wrong IP address format");
return -1;
} else
@@ -179,7 +178,7 @@
dynsize = 0;
} else {
if (ippool_aton(&addr, &mask, dyn, 0)) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DIP, LOGL_ERROR, 0,
"Failed to parse dynamic pool");
return -1;
}
@@ -205,7 +204,7 @@
statmask.s_addr = 0;
} else {
if (ippool_aton(&stataddr, &statmask, stat, 0)) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DIP, LOGL_ERROR, 0,
"Failed to parse static range");
return -1;
}
@@ -219,7 +218,7 @@
listsize = dynsize + statsize; /* Allocate space for static IP addresses */
if (!(*this = calloc(sizeof(struct ippool_t), 1))) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DIP, LOGL_ERROR, 0,
"Failed to allocate memory for ippool");
return -1;
}
@@ -231,7 +230,7 @@
(*this)->listsize += listsize;
if (!((*this)->member = calloc(sizeof(struct ippoolm_t), listsize))) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DIP, LOGL_ERROR, 0,
"Failed to allocate memory for members in ippool");
return -1;
}
@@ -249,7 +248,7 @@
if (!
((*this)->hash =
calloc(sizeof(struct ippoolm_t), (*this)->hashsize))) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DIP, LOGL_ERROR, 0,
"Failed to allocate memory for hash members in ippool");
return -1;
}
@@ -333,7 +332,7 @@
}
if (member)
*member = NULL;
- /*sys_err(LOG_ERR, __FILE__, __LINE__, 0, "Address could not be found"); */
+ /*SYS_ERR(DIP, LOGL_ERROR, 0, "Address could not be found"); */
return -1;
}
@@ -369,19 +368,19 @@
/* First check to see if this type of address is allowed */
if ((addr) && (addr->s_addr) && statip) { /* IP address given */
if (!this->allowstat) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DIP, LOGL_ERROR, 0,
"Static IP address not allowed");
return -1;
}
if ((addr->s_addr & this->statmask.s_addr) !=
this->stataddr.s_addr) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DIP, LOGL_ERROR, 0,
"Static out of range");
return -1;
}
} else {
if (!this->allowdyn) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DIP, LOGL_ERROR, 0,
"Dynamic IP address not allowed");
return -1;
}
@@ -407,7 +406,7 @@
/* If not found yet and dynamic IP then allocate dynamic IP */
if ((!p2) && (!statip)) {
if (!this->firstdyn) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DIP, LOGL_ERROR, 0,
"No more IP addresses available");
return -1;
} else
@@ -416,7 +415,7 @@
if (p2) { /* Was allocated from dynamic address pool */
if (p2->inuse) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DIP, LOGL_ERROR, 0,
"IP address allready in use");
return -1; /* Allready in use / Should not happen */
}
@@ -445,7 +444,7 @@
if ((addr) && (addr->s_addr) && (statip)) { /* IP address given */
if (!this->firststat) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DIP, LOGL_ERROR, 0,
"No more IP addresses available");
return -1; /* No more available */
} else
@@ -471,7 +470,7 @@
return 0; /* Success */
}
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DIP, LOGL_ERROR, 0,
"Could not allocate IP address");
return -1; /* Should never get here. TODO: Bad code */
}
@@ -483,13 +482,13 @@
(void)ippool_printaddr(this);
if (!member->inuse) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0, "Address not in use");
+ SYS_ERR(DIP, LOGL_ERROR, 0, "Address not in use");
return -1; /* Not in use: Should not happen */
}
switch (member->inuse) {
case 0: /* Not in use: Should not happen */
- sys_err(LOG_ERR, __FILE__, __LINE__, 0, "Address not in use");
+ SYS_ERR(DIP, LOGL_ERROR, 0, "Address not in use");
return -1;
case 1: /* Allocated from dynamic address space */
/* Insert into list of unused */
@@ -526,7 +525,7 @@
(void)ippool_printaddr(this);
return 0;
default: /* Should not happen */
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DIP, LOGL_ERROR, 0,
"Could not free IP address");
return -1;
}
diff --git a/lib/syserr.c b/lib/syserr.c
deleted file mode 100644
index 73b3f15..0000000
--- a/lib/syserr.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Syslog functions.
- * Copyright (C) 2003, 2004 Mondru AB.
- *
- * The contents of this file may be used under the terms of the GNU
- * General Public License Version 2, provided that the above copyright
- * notice and this permission notice is included in all copies or
- * substantial portions of the software.
- *
- */
-
-#include <stdarg.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <stdio.h>
-#include <syslog.h>
-#include <string.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include "syserr.h"
-
-static FILE* err_log;
-
-void sys_err_setlogfile(FILE* log)
-{
- err_log = log;
-}
-
-void sys_err(int pri, char *fn, int ln, int en, char *fmt, ...)
-{
- va_list args;
- char buf[SYSERR_MSGSIZE];
-
- va_start(args, fmt);
- vsnprintf(buf, SYSERR_MSGSIZE, fmt, args);
- va_end(args);
- buf[SYSERR_MSGSIZE - 1] = 0; /* Make sure it is null terminated */
- if (en) {
- if (err_log)
- fprintf(err_log, "%s: %d: %d (%s) %s\n",
- fn, ln, en, strerror(en), buf);
- syslog(pri, "%s: %d: %d (%s) %s", fn, ln, en, strerror(en),
- buf);
- } else {
- if (err_log)
- fprintf(err_log, "%s: %d: %s\n", fn, ln, buf);
- syslog(pri, "%s: %d: %s", fn, ln, buf);
- }
-}
-
diff --git a/lib/syserr.h b/lib/syserr.h
index 991549c..0c50a5f 100644
--- a/lib/syserr.h
+++ b/lib/syserr.h
@@ -12,10 +12,25 @@
#ifndef _SYSERR_H
#define _SYSERR_H
-#define SYSERR_MSGSIZE 256
+#include <osmocom/core/logging.h>
-void sys_err_setlogfile(FILE*);
+enum {
+ DIP,
+ DTUN,
+ DGGSN,
+ DSGSN,
+};
-void sys_err(int pri, char *filename, int en, int line, char *fmt, ...);
+#define SYS_ERR(sub, pri, en, fmt, args...) \
+ if (en) { \
+ logp2(sub, pri, __FILE__, __LINE__, 0, \
+ "errno=%d/%s " fmt "\n", en, strerror(en), \
+ ##args); \
+ } else { \
+ logp2(sub, pri, __FILE__, __LINE__, 0, \
+ fmt "\n", ##args); \
+ }
+
+extern const struct log_info log_info;
#endif /* !_SYSERR_H */
diff --git a/lib/tun.c b/lib/tun.c
index 43a02ee..94d92ef 100644
--- a/lib/tun.c
+++ b/lib/tun.c
@@ -16,7 +16,6 @@
*
*/
-#include <syslog.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
@@ -94,10 +93,10 @@
strncpy(ifr.ifr_name, this->devname, IFNAMSIZ);
ifr.ifr_name[IFNAMSIZ - 1] = 0; /* Make sure to terminate */
if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno, "socket() failed");
+ SYS_ERR(DTUN, LOGL_ERROR, errno, "socket() failed");
}
if (ioctl(fd, SIOCGIFINDEX, &ifr)) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno, "ioctl() failed");
+ SYS_ERR(DTUN, LOGL_ERROR, errno, "ioctl() failed");
close(fd);
return -1;
}
@@ -117,10 +116,10 @@
strncpy(ifr.ifr_name, this->devname, IFNAMSIZ);
ifr.ifr_name[IFNAMSIZ - 1] = 0; /* Make sure to terminate */
if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno, "socket() failed");
+ SYS_ERR(DTUN, LOGL_ERROR, errno, "socket() failed");
}
if (ioctl(fd, SIOCSIFFLAGS, &ifr)) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno,
+ SYS_ERR(DTUN, LOGL_ERROR, errno,
"ioctl(SIOCSIFFLAGS) failed");
close(fd);
return -1;
@@ -162,7 +161,7 @@
tun_nlattr(&req.n, sizeof(req), RTA_GATEWAY, gateway, 4);
if ((fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE)) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno,
+ SYS_ERR(DTUN, LOGL_ERROR, errno,
"socket() failed");
return -1;
}
@@ -172,7 +171,7 @@
local.nl_groups = 0;
if (bind(fd, (struct sockaddr*)&local, sizeof(local)) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno,
+ SYS_ERR(DTUN, LOGL_ERROR, errno,
"bind() failed");
close(fd);
return -1;
@@ -180,21 +179,21 @@
addr_len = sizeof(local);
if (getsockname(fd, (struct sockaddr*)&local, &addr_len) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno,
+ SYS_ERR(DTUN, LOGL_ERROR, errno,
"getsockname() failed");
close(fd);
return -1;
}
if (addr_len != sizeof(local)) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DTUN, LOGL_ERROR, 0,
"Wrong address length %d", addr_len);
close(fd);
return -1;
}
if (local.nl_family != AF_NETLINK) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DTUN, LOGL_ERROR, 0,
"Wrong address family %d", local.nl_family);
close(fd);
return -1;
@@ -265,7 +264,7 @@
tun_nlattr(&req.n, sizeof(req), IFA_LOCAL, dstaddr, sizeof(dstaddr));
if ((fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE)) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno, "socket() failed");
+ SYS_ERR(DTUN, LOGL_ERROR, errno, "socket() failed");
return -1;
}
@@ -274,28 +273,28 @@
local.nl_groups = 0;
if (bind(fd, (struct sockaddr *)&local, sizeof(local)) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno, "bind() failed");
+ SYS_ERR(DTUN, LOGL_ERROR, errno, "bind() failed");
close(fd);
return -1;
}
addr_len = sizeof(local);
if (getsockname(fd, (struct sockaddr *)&local, &addr_len) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno,
+ SYS_ERR(DTUN, LOGL_ERROR, errno,
"getsockname() failed");
close(fd);
return -1;
}
if (addr_len != sizeof(local)) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DTUN, LOGL_ERROR, 0,
"Wrong address length %d", addr_len);
close(fd);
return -1;
}
if (local.nl_family != AF_NETLINK) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DTUN, LOGL_ERROR, 0,
"Wrong address family %d", local.nl_family);
close(fd);
return -1;
@@ -361,12 +360,12 @@
/* Create a channel to the NET kernel. */
if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno, "socket() failed");
+ SYS_ERR(DTUN, LOGL_ERROR, errno, "socket() failed");
return -1;
}
if (ioctl(fd, SIOCAIFADDR, (void *)&areq) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno,
+ SYS_ERR(DTUN, LOGL_ERROR, errno,
"ioctl(SIOCAIFADDR) failed");
close(fd);
return -1;
@@ -381,7 +380,7 @@
if (!this->addrs) /* Use ioctl for first addr to make ping work */
return tun_setaddr(this, addr, dstaddr, netmask);
- sys_err(LOG_ERR, __FILE__, __LINE__, errno,
+ SYS_ERR(DTUN, LOGL_ERROR, errno,
"Setting multiple addresses not possible on Solaris");
return -1;
@@ -417,7 +416,7 @@
/* Create a channel to the NET kernel. */
if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno, "socket() failed");
+ SYS_ERR(DTUN, LOGL_ERROR, errno, "socket() failed");
return -1;
}
@@ -427,10 +426,10 @@
sizeof(*addr));
if (ioctl(fd, SIOCSIFADDR, (void *)&ifr) < 0) {
if (errno != EEXIST) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno,
+ SYS_ERR(DTUN, LOGL_ERROR, errno,
"ioctl(SIOCSIFADDR) failed");
} else {
- sys_err(LOG_WARNING, __FILE__, __LINE__, errno,
+ SYS_ERR(DTUN, LOGL_NOTICE, errno,
"ioctl(SIOCSIFADDR): Address already exists");
}
close(fd);
@@ -443,7 +442,7 @@
memcpy(&((struct sockaddr_in *)&ifr.ifr_dstaddr)->sin_addr,
dstaddr, sizeof(*dstaddr));
if (ioctl(fd, SIOCSIFDSTADDR, (caddr_t) & ifr) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno,
+ SYS_ERR(DTUN, LOGL_ERROR, errno,
"ioctl(SIOCSIFDSTADDR) failed");
close(fd);
return -1;
@@ -468,7 +467,7 @@
#endif
if (ioctl(fd, SIOCSIFNETMASK, (void *)&ifr) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno,
+ SYS_ERR(DTUN, LOGL_ERROR, errno,
"ioctl(SIOCSIFNETMASK) failed");
close(fd);
return -1;
@@ -510,7 +509,7 @@
/* Create a channel to the NET kernel. */
if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno, "socket() failed");
+ SYS_ERR(DTUN, LOGL_ERROR, errno, "socket() failed");
return -1;
}
@@ -525,14 +524,14 @@
if (delete) {
if (ioctl(fd, SIOCDELRT, (void *)&r) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno,
+ SYS_ERR(DTUN, LOGL_ERROR, errno,
"ioctl(SIOCDELRT) failed");
close(fd);
return -1;
}
} else {
if (ioctl(fd, SIOCADDRT, (void *)&r) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno,
+ SYS_ERR(DTUN, LOGL_ERROR, errno,
"ioctl(SIOCADDRT) failed");
close(fd);
return -1;
@@ -554,7 +553,7 @@
struct rt_msghdr *rtm;
if ((fd = socket(AF_ROUTE, SOCK_RAW, 0)) == -1) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno, "socket() failed");
+ SYS_ERR(DTUN, LOGL_ERROR, errno, "socket() failed");
return -1;
}
@@ -586,7 +585,7 @@
req.gate.sin_addr.s_addr = gateway->s_addr;
if (write(fd, rtm, rtm->rtm_msglen) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno, "write() failed");
+ SYS_ERR(DTUN, LOGL_ERROR, errno, "write() failed");
close(fd);
return -1;
}
@@ -594,7 +593,7 @@
return 0;
#elif defined(__sun__)
- sys_err(LOG_WARNING, __FILE__, __LINE__, errno,
+ SYS_ERR(DTUN, LOGL_NOTICE, errno,
"Could not set up routing on Solaris. Please add route manually.");
return 0;
@@ -641,7 +640,7 @@
#endif
if (!(*tun = calloc(1, sizeof(struct tun_t)))) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno, "calloc() failed");
+ SYS_ERR(DTUN, LOGL_ERROR, errno, "calloc() failed");
return EOF;
}
@@ -652,7 +651,7 @@
#if defined(__linux__)
/* Open the actual tun device */
if (((*tun)->fd = open("/dev/net/tun", O_RDWR)) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno, "open() failed");
+ SYS_ERR(DTUN, LOGL_ERROR, errno, "open() failed");
return -1;
}
@@ -661,7 +660,7 @@
memset(&ifr, 0, sizeof(ifr));
ifr.ifr_flags = IFF_TUN | IFF_NO_PI; /* Tun device, no packet info */
if (ioctl((*tun)->fd, TUNSETIFF, (void *)&ifr) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno, "ioctl() failed");
+ SYS_ERR(DTUN, LOGL_ERROR, errno, "ioctl() failed");
close((*tun)->fd);
return -1;
}
@@ -683,7 +682,7 @@
break;
}
if ((*tun)->fd < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno,
+ SYS_ERR(DTUN, LOGL_ERROR, errno,
"Can't find tunnel device");
return -1;
}
@@ -702,7 +701,7 @@
/* Create a channel to the NET kernel. */
if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno, "socket() failed");
+ SYS_ERR(DTUN, LOGL_ERROR, errno, "socket() failed");
return -1;
}
@@ -715,45 +714,45 @@
#elif defined(__sun__)
if ((ip_fd = open("/dev/udp", O_RDWR, 0)) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno,
+ SYS_ERR(DTUN, LOGL_ERROR, errno,
"Can't open /dev/udp");
return -1;
}
if (((*tun)->fd = open("/dev/tun", O_RDWR, 0)) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno,
+ SYS_ERR(DTUN, LOGL_ERROR, errno,
"Can't open /dev/tun");
return -1;
}
/* Assign a new PPA and get its unit number. */
if ((ppa = ioctl((*tun)->fd, TUNNEWPPA, -1)) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno,
+ SYS_ERR(DTUN, LOGL_ERROR, errno,
"Can't assign new interface");
return -1;
}
if ((if_fd = open("/dev/tun", O_RDWR, 0)) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno,
+ SYS_ERR(DTUN, LOGL_ERROR, errno,
"Can't open /dev/tun (2)");
return -1;
}
if (ioctl(if_fd, I_PUSH, "ip") < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno,
+ SYS_ERR(DTUN, LOGL_ERROR, errno,
"Can't push IP module");
return -1;
}
/* Assign ppa according to the unit number returned by tun device */
if (ioctl(if_fd, IF_UNITSEL, (char *)&ppa) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno, "Can't set PPA %d",
+ SYS_ERR(DTUN, LOGL_ERROR, errno, "Can't set PPA %d",
ppa);
return -1;
}
/* Link the two streams */
if ((muxid = ioctl(ip_fd, I_LINK, if_fd)) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno,
+ SYS_ERR(DTUN, LOGL_ERROR, errno,
"Can't link TUN device to IP");
return -1;
}
@@ -769,7 +768,7 @@
if (ioctl(ip_fd, SIOCSIFMUXID, &ifr) < 0) {
ioctl(ip_fd, I_PUNLINK, muxid);
- sys_err(LOG_ERR, __FILE__, __LINE__, errno,
+ SYS_ERR(DTUN, LOGL_ERROR, errno,
"Can't set multiplexor id");
return -1;
}
@@ -793,7 +792,7 @@
}
if (close(tun->fd)) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno, "close() failed");
+ SYS_ERR(DTUN, LOGL_ERROR, errno, "close() failed");
}
/* TODO: For solaris we need to unlink streams */
@@ -818,7 +817,7 @@
int status;
if ((status = read(this->fd, buffer, sizeof(buffer))) <= 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno, "read() failed");
+ SYS_ERR(DTUN, LOGL_ERROR, errno, "read() failed");
return -1;
}
@@ -836,7 +835,7 @@
sbuf.maxlen = PACKET_MAX;
sbuf.buf = buffer;
if (getmsg(this->fd, NULL, &sbuf, &f) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno, "getmsg() failed");
+ SYS_ERR(DTUN, LOGL_ERROR, errno, "getmsg() failed");
return -1;
}
@@ -885,7 +884,7 @@
buf[sizeof(buf) - 1] = 0;
rc = system(buf);
if (rc == -1) {
- sys_err(LOG_ERR, __FILE__, __LINE__, errno,
+ SYS_ERR(DTUN, LOGL_ERROR, errno,
"Error executing command %s", buf);
return -1;
}
diff --git a/sgsnemu/Makefile.am b/sgsnemu/Makefile.am
index 8ce1b61..4d02eca 100644
--- a/sgsnemu/Makefile.am
+++ b/sgsnemu/Makefile.am
@@ -2,8 +2,8 @@
AM_LDFLAGS = @EXEC_LDFLAGS@
-AM_CFLAGS = -O2 -D_GNU_SOURCE -fno-builtin -Wall -DSBINDIR='"$(sbindir)"' -ggdb
+AM_CFLAGS = -O2 -D_GNU_SOURCE -fno-builtin -Wall -DSBINDIR='"$(sbindir)"' -ggdb $(LIBOSMOCORE_CFLAGS)
-sgsnemu_LDADD = @EXEC_LDADD@ -lgtp -L../gtp ../lib/libmisc.a
+sgsnemu_LDADD = @EXEC_LDADD@ -lgtp -L../gtp ../lib/libmisc.a $(LIBOSMOCORE_LIBS)
sgsnemu_DEPENDENCIES = ../gtp/libgtp.la ../lib/libmisc.a
sgsnemu_SOURCES = sgsnemu.c cmdline.c cmdline.h
diff --git a/sgsnemu/sgsnemu.c b/sgsnemu/sgsnemu.c
index 79494c9..5b56751 100644
--- a/sgsnemu/sgsnemu.c
+++ b/sgsnemu/sgsnemu.c
@@ -18,7 +18,8 @@
#define _GNU_SOURCE 1 /* strdup() prototype, broken arpa/inet.h */
#endif
-#include <syslog.h>
+#include <osmocom/core/application.h>
+
#include <ctype.h>
#include <netdb.h>
#include <signal.h>
@@ -377,7 +378,7 @@
printf("\n");
if (args_info.dns_arg) {
if (!(host = gethostbyname(args_info.dns_arg))) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DSGSN, LOGL_ERROR, 0,
"Invalid DNS address: %s!", args_info.dns_arg);
return -1;
} else {
@@ -398,7 +399,7 @@
/* Do hostname lookup to translate hostname to IP address */
if (args_info.listen_arg) {
if (!(host = gethostbyname(args_info.listen_arg))) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DSGSN, LOGL_ERROR, 0,
"Invalid listening address: %s!",
args_info.listen_arg);
return -1;
@@ -409,7 +410,7 @@
args_info.listen_arg, inet_ntoa(options.listen));
}
} else {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DSGSN, LOGL_ERROR, 0,
"Listening address must be specified: %s!",
args_info.listen_arg);
return -1;
@@ -420,7 +421,7 @@
/* Do hostname lookup to translate hostname to IP address */
if (args_info.remote_arg) {
if (!(host = gethostbyname(args_info.remote_arg))) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DSGSN, LOGL_ERROR, 0,
"Invalid remote address: %s!",
args_info.remote_arg);
return -1;
@@ -431,7 +432,7 @@
args_info.remote_arg, inet_ntoa(options.remote));
}
} else {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DSGSN, LOGL_ERROR, 0,
"No remote address given!");
return -1;
}
@@ -844,7 +845,7 @@
if (args_info.net_arg) {
if (ippool_aton
(&options.net, &options.mask, args_info.net_arg, 0)) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DSGSN, LOGL_ERROR, 0,
"Invalid network address: %s!",
args_info.net_arg);
exit(1);
@@ -880,7 +881,7 @@
/* Store ping host as in_addr */
if (args_info.pinghost_arg) {
if (!(host = gethostbyname(args_info.pinghost_arg))) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DSGSN, LOGL_ERROR, 0,
"Invalid ping host: %s!",
args_info.pinghost_arg);
return -1;
@@ -1179,7 +1180,7 @@
(struct timeval *)&p8[CREATEPING_IP + CREATEPING_ICMP];
if (datasize > CREATEPING_MAX) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DSGSN, LOGL_ERROR, 0,
"Ping size to large: %d!", datasize);
return -1;
}
@@ -1410,15 +1411,7 @@
struct timeval tv;
int diff;
- /* open a connection to the syslog daemon */
- /*openlog(PACKAGE, LOG_PID, LOG_DAEMON); */
- /* TODO: Only use LOG__PERROR for linux */
-
-#ifdef __linux__
- openlog(PACKAGE, (LOG_PID | LOG_PERROR), LOG_DAEMON);
-#else
- openlog(PACKAGE, (LOG_PID), LOG_DAEMON);
-#endif
+ osmo_init_logging(&log_info);
/* Process options given in configuration file and command line */
if (process_options(argc, argv))
@@ -1426,7 +1419,7 @@
printf("\nInitialising GTP library\n");
if (gtp_new(&gsn, options.statedir, &options.listen, GTP_MODE_SGSN)) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0, "Failed to create gtp");
+ SYS_ERR(DSGSN, LOGL_ERROR, 0, "Failed to create gtp");
exit(1);
}
if (gsn->fd0 > maxfd)
@@ -1447,7 +1440,7 @@
printf("Setting up interface\n");
/* Create a tunnel interface */
if (tun_new((struct tun_t **)&tun)) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DSGSN, LOGL_ERROR, 0,
"Failed to create tun");
exit(1);
}
@@ -1498,7 +1491,7 @@
if (options.gtpversion == 0) {
if (options.qos.l - 1 > sizeof(pdp->qos_req0)) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DSGSN, LOGL_ERROR, 0,
"QoS length too big");
exit(1);
} else {
@@ -1535,7 +1528,7 @@
pdp->norecovery_given = options.norecovery_given;
if (options.apn.l > sizeof(pdp->apn_use.v)) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DSGSN, LOGL_ERROR, 0,
"APN length too big");
exit(1);
} else {
@@ -1549,7 +1542,7 @@
memcpy(pdp->gsnlu.v, &options.listen, sizeof(options.listen));
if (options.msisdn.l > sizeof(pdp->msisdn.v)) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DSGSN, LOGL_ERROR, 0,
"MSISDN length too big");
exit(1);
} else {
@@ -1559,7 +1552,7 @@
ipv42eua(&pdp->eua, NULL); /* Request dynamic IP address */
if (options.pco.l > sizeof(pdp->pco_req.v)) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DSGSN, LOGL_ERROR, 0,
"PCO length too big");
exit(1);
} else {
@@ -1674,7 +1667,7 @@
switch (select(maxfd + 1, &fds, NULL, NULL, &idleTime)) {
case -1:
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DSGSN, LOGL_ERROR, 0,
"Select returned -1");
break;
case 0:
@@ -1685,7 +1678,7 @@
}
if ((tun) && FD_ISSET(tun->fd, &fds) && tun_decaps(tun) < 0) {
- sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+ SYS_ERR(DSGSN, LOGL_ERROR, 0,
"TUN decaps failed");
}