
.\" * OpenGGSN - Gateway GPRS Support Node
.\" * Copyright (C) 2002, 2003 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.
.\" * 
.\" * The initial developer of the original code is
.\" * Jens Jakobsen <jj@openggsn.org>
.\" * 
.\" * Contributor(s):
.\" * 
.\" Manual page for ggsn
.\" SH section heading
.\" SS subsection heading
.\" LP paragraph
.\" IP indented paragraph
.\" TP hanging label

.TH ggsn 8 "July 2003"
.SH NAME
ggsn \- Gateway GPRS Support Node.
.SH SYNOPSIS
.B ggsn
\-\-help

.B ggsn
\-\-version

.B ggsn
[
.BI \-\-fg
] [
.BI \-\-debug
] [
.BI \-\-conf " file"
] [
.BI \-\-pidfile " file"
] [
.BI \-\-statedir " file" 
] [ 
.BI \-\-listen " host" 
] [
.BI \-\-net " net" 
] [
.BI \-\-ipup " script" 
] [
.BI \-\-ipdown " script" 
] [
.BI \-\-dynip " net" 
] [
.BI \-\-statip " net" 
] [
.BI \-\-pcodns1 " host" 
] [
.BI \-\-pcodns2 " host" 
] [
.BI \-\-timelimit " seconds" 
]
.SH DESCRIPTION
.B ggsn
is part of the 
.B OpenGGSN
project, and implements a Gateway GPRS Support Node. It is used by
mobile operators as the interface between the Internet and the rest of
the mobile network infrastructure.

The GPRS functionality and protocols has been standardised by the
Third Generation Partnership Project (3GPP). According to the 3GPP
specifications a GGSN has two interfaces: The Gn/Gp interface and the
Gi interface.

The Gn/Gp interface can be seen as the downlink interface of the
GGSN. It is used for communicating with the Serving GPRS Support Node
(SGSN) which again interfaces to the radio access network. The Gn/Gp
interface uses the GPRS tunneling protocol (GTP). User data packets
(typically IP packets) are tunneled over GTP, which again uses UDP
over IP.

The other interface can be thought of as the uplink interface, and
interfaces the GGSN to an external data network. Gi is most often an
interface to the Internet.
.B ggsn
uses the 
.B TUN/TAP driver
for the Gi interface. A tun network interface is established when the
.B ggsn
is started.

.B ggsn 
will accept incoming connections from mobile stations through the
radio access network and the SGSN. When a connection request is
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.

Typically 
.B ggsn
will be deployed with two Ethernet interfaces. One for the Gn/Gp
interface, and one for the Gi interface. Policy routing and firewall
rules should be used in order to separate Gi traffic from Gn/Gp
traffic.

.SH OPTIONS
.TP
.BI --help
Print help and exit.

.TP
.BI --version
Print version and exit.

.TP
.BI --fg
Run in foreground (default = off)

.TP
.BI --debug
Run in debug mode (default = off)

.TP
.BI --conf " file"
Read configuration 
.I file
(default = /etc/ggsn.conf) where each line corresponds to one command
line option, but with the leading '--' removed. Command line options
override the options given in the configuration file.

.TP
.BI --pidfile " file"
Filename of process id 
.I file
(default = /var/run/ggsn.pid)

.TP
.BI --statedir " path"
.I path
to directory of nonvolatile data (default = /var/lib/ggsn/)

.TP
.BI --listen " host"
Local interface IP address to use for the Gn/Gp interface. This option
must be specified. For security issues it is not possible to use
INADDR_ANY.

.TP
.BI --net " net"
Network address of the Gi interface (default = 192.168.0.0/24). The
network address is set during initialisation when
.B ggsn
establishes a tun device for the Gi interface.

.TP
.BI --ipup " script"
Script executed after the Gi tun network interface has been brought
up.  Executed with the following parameters: <devicename> <ip address>

.TP
.BI --ipdown " script"
Script executed after the Gi tun network interface has been taken
down.  Executed with the following parameters: <devicename> <ip
address>

.TP
.BI --dynip " net"
Dynamic IP address pool. Specifies a pool of dynamic IP addresses. If
this option is omitted the network address specified by the
.BI --net
option is used for dynamic IP address allocation.

.TP
.BI --pcodns1 " host"
PCO DNS Server 1 (default = 0.0.0.0). PCO stands for Protocol
Configuration options, and is part of the GPRS protocols. It is used
to inform the mobile station about the DNS address to use for host
name resolution.

.TP
.BI --pcodns2 " host"
PCO DNS Server 2 (default = 0.0.0.0). PCO stands for Protocol
Configuration options, and is part of the GPRS protocols. It is used
to inform the mobile station about the DNS address to use for host
name resolution.

.TP
.BI --timelimit " seconds"
Exit 
.b ggsn
after \fIseconds\fP. Used for debugging.


.SH FILES
.I /etc/ggsn.conf
.RS
The configuration file for
.B ggsn.
.RE
.I /var/run/ggsn.pid
.RS
Process ID file.
.RE
.I /var/lib/ggsn
.RS
Directory holding nonvolatile data.
.RE

.SH BUGS
Report all bugs to the OpenGGSN bug tracking list at 
.I http://sourceforge.net/projects/ggsn/

.B ggsn
has very limited management support. Currently both SNMP as well as
billing mechanisms are missing.


.SH "SEE ALSO"
.BR sgsnemu (8), 
.BR syslogd (8)

.SH NOTES 
.LP

Besides the long options documented in this man page
.B ggsn
also accepts a number of short options with the same functionality. Use
.B ggsn --help
for a full list of all the available options.

The TUN/TAP driver is required for proper operation of
.B ggsn. 
For linux kernels later than 2.4.7 the TUN/TAP driver is included in the kernel, but typically needs to be loaded manually with
.B modprobe tun.
For automatic loading the line
.B alias char-major-10-200 tun
can be added to
.B /etc/modules.conf.
For other platforms see
.I http://vtun.sourceforge.net/tun/
for information on how to install and configure the tun driver.

.B ggsn 
uses the GPRS Tunneling Protocol (GTP) as specified by the Third
Generation Partnership Project (3GPP). 3GPP protocols specifications
can be found at
.I http://www.3gpp.org

.SH COPYRIGHT

Copyright (C) 2002, 2003 by 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.

.SH AUTHORS
Jens Jakobsen <jj@openggsn.org>
