GPRS / SGSN status update / HOWTO
laforge at gnumonks.org
Tue May 18 15:38:35 UTC 2010
Thanks to the support from On-waves, I've been able to focus on my GPRS
work during recent weeks.
Today, I have managed to actually perform successful PDP context activation /
deactivation using a nanoBTS, OpenBSC, OsmoSGSN and OpenGGSN.
This is a big step forward, as it means that the GTP interface between
our SGSN and OpenGGSN is up and running. The IP addresses allocated
are from a pool defined on the GGSN side, and OpenGGSN opens a tun-device
Also, the GGSN implementation is much less proof-of-concept now, as it actually
maintains propper MM context, PDP context and other state information.
However, for reasons that I couldn't figure out (despite many hours of
debugging): There are no user/data plane packets anymore. This was already
working before I began the GTP / OpenGGSN intergration work 1-2 weeks ago.
The PDP context is established successfully on the LLC-GMM SAPI, the phone
shows that GPRS is up, but then it doesn't actually even send a single
packet (SNDCP, XID exchange, ...) over any of the user data SAPIs. The
SAPI and NSAPI have been assigned properly, and I could not find any differece
looking at packet traces for both the cases.
If you look at the NS-IP / Gb interface of the nanoBTS, not a single gprs
protocol message arrives after the PDP context is activated.
After a minute or two, the phone then simply disconnects with "Regular
Disconnect" cause, as if nothing had happened. Putting the phone in front of
an audio amplifier also doesn't reveal any noticable bursts being generated
by the phone.
For now I'm feeling a bit lost and will work on some other stuff before
returning with renewed energy to the SGSN at some later point.
In case you want to try it, the following steps are needed:
1) check out OpenGGSN from git://openbsc.gnumonks.org/openggsn.git (master
branch), run the usual autoreconf -1 && ./configure && make install
2) check out current OpenBSC master branch and build it. Only if libgtp
(installed by OpenGGSN) is found, it will build src/gprs/osmo-sgsn
3) the IP address where
4) Run OpenBSC like usual, however make sure that the followign settings
are configured in the openbsc.cfg config file:
gprs mode gprs
gprs routing area 0
gprs cell bvci 2
gprs nsei 101
gprs nsvc 0 nsvci 101
gprs nsvc 0 local udp port 23000
gprs nsvc 0 remote udp port 23000
gprs nsvc 0 remote ip 188.8.131.52
Where the last ip address is the address of the machine where you will
5) Configure /etc/ggsn.cfg of your GGSN machine. Check /etc/ggsn.conf
(example attached) Run
$ sudo ./ggsn -l 192.168.100.239 -d
where that address is the local _listening_ address of the GGSN
6) Then simply fire up osmo-sgsn. The only relevant config
setting in osmo_sgsn.cfg is:
nsip local port 23000
7) start your favorite mobile phone and register it to your network
You can telnet to osmo-sgsn on port 4245, and type the followign commands
for some interesting information:
logging filter all 1
logging level ns info
logging level bssgp debug
logging level llc debug
logging level gprs debug
logging level mm debug
show mm-context all
show pdp-context all
Oh, and last, but not least: Wireshark can debug the Gb interface packets
between BTS and SGSN, you simply have to select 'Decode as .... NSIP' on port
23000 packets. It also decodes the GTP between SGSN and GGSN without any extra
- Harald Welte <laforge at gnumonks.org> http://laforge.gnumonks.org/
"Privacy in residential applications is a desirable marketing option."
(ETSI EN 300 175-7 Ch. A6)
More information about the OpenBSC