OPENGGSN README
===============


QuickStart
==========


Requirements
------------

*Linux* 
OpenGGSN was developed and tested using Redhat 8.0 and 9.0. It should
run also on other Linux distributions as well as FreeBSD, but this is
untested. Compilation on Solaris 2.8 has also been verified.

*Tun*
The tun driver is required for proper operation of openggsn. For linux
kernels later than 2.4.7 the driver is typically included, but need
to be configured for automatic loading:

1. Add the following line to /etc/modules.conf: alias char-major-10-200 tun 
2. depmod -a


Installation from binary
------------------------

rpm -i openggsn-<version>.rpm

This will install binaries, man pages, configuration files as well as
a Sys V init script for the ggsn.


Installation from source
------------------------

1. ./configure
2. make
3. make install

You need to be root in order to install the package, but not in order
to compile.


Running
-------

*sgsnemu*
Start the emulator as root using the command:

  sgsnemu -l 10.0.0.50 -r 10.0.0.40 --createif --defaultroute

This will cause the sgsn emulator to bind to local address 10.0.0.50
and connect to the ggsn found at 10.0.0.40. It will first send off an
ECHO_REQUEST message. After this it will attempt to establish a pdp
context. If successful it will create a local interface and set up
routing. Now you should be able to ping through the connection. Use a
network analysator such as ethereal to monitor the traffic.

sgsnemu -h will show a list of available options. 

sgsnemu -c sgsnemu.conf will use sgsnemu.conf as a configuration
file. A sample file is provided in examples/sgsnemu.conf.

*ggsn*
Edit the configuration file ggsn.conf found under openggsn/examples.
Start the ggsn as root using the command:

ggsn --fg -c examples/ggsn.conf -l 10.0.0.40 --statedir ./

This will run the ggsn in foreground using the local interface
10.0.0.40. If you don't have a GSM network available for testing you
can use sgsnemu to test the GGSN.


Support
-------

If you have any questions drop me a line at jj@openggsn.org.


Features
========

OpenGGSN is an open source implementation of GPRS Support Nodes
(GSNs). It implements the GPRS tunneling protocol (GTP) version 0 and
version 1.

OpenGGSN provides 3 components:
 * gtplib
 * ggsn
 * sgsnemu

*gtplib*
This library contains all functionality relating to the GTP
protocol. Use this library if you want to implement your own
GSN. gtplib supports both GTPv0 (GSM 09.60) and GTPv1 (3GPP
29.060). At the moment no interface documentation is available for
download.

*ggsn*
The ggsn implements a Gateway GPRS Support Node. The GGSN is a small
application which is provided in order to test and demonstrate the use
of gtplib. It is fully compliant to the 3GPP standards, but lacks
important functionality such as charging and management. Use this
application as a starting point if you want to build your own GGSN
with your own fancy VPN, management and charging functionality.

*sgsnemu*
This application emulates a Serving GPRS Support Node (SGSN). sgsnemu
enables you to test your 3GPP core network without the need to invest
in a 3G radio access network. An important application of sgsnemu is
the testing of roaming connectivity through a GPRS roaming
exchange. sgsnemu will first attempt to use GTPv1. If unsuccessful it
will fallback to GTPv0.


Performance
===========

Two experiments were performed in order to test the performance of
sgsnemu and ggsn. The ggsn used a 550 MHz Athlon with 384 MB of
RAM. sgsnemu used a 1 GHz Athlon with 256 MB of RAM. Both machines had
100 Mb/s NICs (RTL-8139) and were connected through a crossed patch
cable. Both tests were performed by sending ICMP echo packets from
sgsnemu to the ggsn.

89.5 Mb/s IP throughput when sending 10000 ICMP ping packets with a
payload of 1400 bytes. Transfer time 1.27 sec, no packets lost.

71.4 Mb/s IP throughput when sending 10000 ICMP ping packets with a
payload of 1000 bytes. Transfer time 1.15 sec, no packets lost.

12,1 Mb/s IP throughput when sending 10000 ICMP ping packets with a
payload of 100 bytes. Transfer time 0.84 sec, no packets lost.


Required software
=================

Tun
---

Both ggsn and sgsnemu uses the tun package. You need at least tun
version 1.1. With Linux tun is normally included from kernel version
2.4.7. To configure automatic loading:

1. Add the following line to /etc/modules.conf: alias char-major-10-200 tun 
2. depmod -a

Alternatively you can execute "modprobe tun" on the commandline.

For Solaris the tun driver needs to be installed manually. For general
information about tun see http://vtun.sourceforge.net/tun/

Gengetopt
---------

Gengetopt is required if you want to change the options defined in the
cmdline.ggo source file. You need at least gengetopt version 2.8. If
you are just going to compile the programs you don't need gengetopt.

To use gengetopt for the ggsn do the following:
cd ggsn
gengetopt < cmdline.ggo --conf-parser

To use gengetopt for the sgsnemu do the following:
cd sgsnemu
gengetopt < cmdline.ggo --conf-parser

For more information about gengetopt see
http://www.gnu.org/software/gengetopt/gengetopt.html


Compilation and Installation
============================


Setting up autotools
--------------------

You do not need to perform this step if you are only going to compile
the package:

1. Get version from somewhere: Script to extract version from configure.in
2. Copy the latest config.guess and config.sub from ftp://ftp.gnu.org/gnu/config
3. Run autoscan and copy configure.scan to configure.in
4. Add/edit the following lines in configure.in:
   - AC_INIT(openggsn, 0.70, jj@openggsn.org)
   - AC_CONFIG_SRCDIR([gtp/gtp.c])
   - AM_CONFIG_HEADER([config.h])
   - AC_PROG_LIBTOOL
   - AM_PROG_LIBTOOL
   - AM_INIT_AUTOMAKE()
5. libtoolize --automake --copy
  (ads copy of ltmain.sh)
6. aclocal
7. autoheader
8. automake --add-missing --copy
  (Ads copy of mkinstalldirs missing, install-sh, depcomp)
9. automake
10. autoconf

The above will initialise the project to the current version of
autotools (As installed in RedHat 8.0). See
http://sources.redhat.com/autobook/autobook/autobook_25.html#SEC25 
for details on autotools.


Compilation and installation
----------------------------

If compiling under Solaris you need to edit the following line in
ggsn/Makefile.in and sgsnemu/Makefile.in:

LDFLAGS = -Wl,--rpath -Wl,/usr/local/lib @EXEC_LDFLAGS@

should be changed to:

LDFLAGS =  -lresolv -lsocket -lnsl @EXEC_LDFLAGS@ 

Note that the above is not necessary on other platforms. Compilation
and installation is performed by the following steps:

 1. ./configure
 2. make clean
 3. cd gtp
 4. make
 5. make install (as root)
 6. cd ..
   (Step 3 to 6 you only need to run the first time to install libgtp)
 7. make
 8. make install (as root)
 9. Add /usr/local/lib to /etc/ld.so.conf
10. run ldconfig

(Steps 9 and 10 are not required as path to libgtp is included in Makefile)

Documentation can be converted to html by issuing:

 1. txt2html -pm -tf README > README.html
 2. txt2html -pm -tf NEWS > NEWS.html
 3. txt2html -pm -tf ChangeLog > ChangeLog.html
 4. man2htm ggsn.8 > ggsn.html
 5. man2htm sgsnemu.8 > sgsnemu.html


Installation from binary
------------------------

1. rpm -i openggsn-<version>.rpm

This will install binaries, man pages, configuration files as well as
a Sys V init script for the ggsn.


Running ggsn
============

Use ggsn -h for a list of available options. All options available on
the command line can also be given in a configuration file. See
examples/ggsn.conf for the format of this file.

Start the ggsn as root using the command:

ggsn -c examples/ggsn.conf --fg -l 10.0.0.40 --net 192.168.0.0/24 --dynip 192.168.0.0/24

First a tun network interface will be created. In the above example
the network interface address is 192.168.0.0 and the mask is
255.255.255.0. You can check that this interface is up by using
ifconfig.

After tun has been successfully established the ggsn will wait for GTP
create PDP context requests on the local interface
10.0.0.40. Currently all requests are accepted, and no password,
username or APN validation is performed.

When receiving a create PDP context request a dynamic IP address will
be allocated from the address pool determined by --dynip. In the above
example the first allocated address will be 192.168.0.1, followed by
192.168.0.2 and so on. The request is confirmed by sending a create
PDP context response message to the peer (SGSN).

Now IP packets will be forwarded between the tun network interface and
the established GTP tunnel. In order to allow users to access the
external network routing needs to be set up. If private addresses are
used you need to configure network address translation. See the Linux
Networking HOWTO for details.

Remember to enable routing: 

echo 1 > /proc/sys/net/ipv4/ip_forward

If you installed using a binary RPM package it is possible to start
ggsn by using the Sys 5 script:

/etc/init.d/ggsn start


Running sgsnemu
===============

Use sgsnemu -h for a list of available options. All options available
on the command line can also be given in a configuration file. See
examples/sgsnemu.conf for the format of this file.

If you want to test a GRX roaming connection you will need to do the
following:

1. Install sgsnemu on a Linux Box. See under installation above.
2. Connect your Linux box with sgsnemu installed to the GPRS core
network. Use the same LAN switch as the one your SGSN is connected
to. You also need a free IP address that can be used by sgsnemu.
3. You need to configure networking in terms of interface address,
subnet mask and default route. See the Linux Networking HOWTO for
details.
4. Launch sgsnemu with something like:

sgsnemu --listen 10.0.0.50 --remote 10.0.0.40 --dns 10.20.38.51 --timelimit 10 --contexts 0 

sgsnemu will print something like the following on the screen:

<PRE>

  Using DNS server:      10.20.38.51 (10.20.38.51)
  Local IP address is:   10.0.0.50 (10.0.0.50)
  Remote IP address is:  10.0.0.40 (10.0.0.40)
  IMSI is:               240011234567890 (0x98765432110042)
  Using APN:             internet
  Using MSISDN:          46702123456

  Initialising GTP library
  OpenGGSN[1823]: GTP: gtp_newgsn() started
  Done initialising GTP library

  Sending off echo request
  Waiting for response from ggsn........

  Received echo response. Cause value: 0

</PRE>

This is quite good. It means that you managed to send off an echo
request to a remote GGSN, and it was friendly enough to answer you. If
you did not get an echo response it means that something is wrong
either with your setup OR with the GRX connection OR with your roaming
partners connection.

If the above went well you might want to try to establish a PDP
context to the remote GGSN. Note that you should be careful when
establishing PDP contexts using sgsnemu as each established PDP
context will result in a Charge Detail Record (CDR) being generated by
the GGSN. You should use real IMSI and MSISDN from a valid test SIM
card. Otherwise some poor customer might get charged for your
testing. Also note that you are establishing a connection to the Gi
network, so please be carefull not to route internet traffic onto the
GPRS core network! Assuming you know what you are doing:

sgsnemu --listen 10.0.0.50 --remote 10.0.0.40 --dns 10.20.38.51 --timelimit 10 --contexts 1 --apn internet --imsi 240011234567890 --msisdn 46702123456 --createif --defaultroute

sgsnemu will print something like the following on the screen:

<PRE>

  Using DNS server:      10.20.38.51 (10.20.38.51)
  Local IP address is:   10.0.0.50 (10.0.0.50)
  Remote IP address is:  10.0.0.40 (10.0.0.40)
  IMSI is:               240011234567890 (0x98765432110042)
  Using APN:             internet
  Using MSISDN:          46702123456

  Initialising GTP library
  OpenGGSN[1838]: GTP: gtp_newgsn() started
  Done initialising GTP library

  Sending off echo request
  Setting up PDP context #0
  Waiting for response from ggsn........

  Received echo response. Cause value: 0
  Received create PDP context response. Cause value: 128
  Setting up interface and routing
  /sbin/ifconfig tun0 192.168.0.1
  /sbin/route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.0.1

</PRE>

Now a context is established to the remote GGSN. The IP address of the
context is 192.168.0.1. You should be able to ping a known address on
the Gi network of the roaming partner. You should even be able to do
web browsing through the PDP context.

Note however that you probably need to adjust your routing tables, so
that you make sure that all GRX traffic is routed to the GPRS core
network and everything else through the PDP context. The proper way to
do this is to use policy routing. Also note that you are effectively
connecting the same computer to both the Gn and Gi network, so please
be carefull not to route internet traffic onto the GPRS core network
and please protect yourself against hackers! For this reason it is
advised to always use --contexts 0 when testing a live network.

After --timelimit seconds the PDP context is disconnected with the
following messages from sgsnemu:


<PRE>

  Disconnecting PDP context #0
  Received delete PDP context response. Cause value: 128
  Deleting tun interface

</PRE>

