From bcbfb41a18d8f5c94d45f0ea85e3aed85b697607 Mon Sep 17 00:00:00 2001 From: jjako Date: Mon, 6 Jan 2003 21:21:03 +0000 Subject: [PATCH] Small HOWTO on roaming testing in README file --- README | 141 ++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 124 insertions(+), 17 deletions(-) diff --git a/README b/README index 18a9898..d142e91 100644 --- a/README +++ b/README @@ -12,11 +12,11 @@ Tun Both ggsn and sgsnemu uses the tun package. You need at least tun version 1.1. See http://vtun.sourceforge.net/tun/ for instructions on installation. Tun is included in the kernel from early version 2.4, so -you will not normall need to install it. You do however need to do the -following: +you will not normally need to install it. For Redhat 7.1 and 7.2 you +do however need to do the following: mkdir /dev/net mknod /dev/net/tun c 10 200 -Add the following line to /etc/modules.conf: alias char-major-10-200 tun +Add this line to /etc/modules.conf: alias char-major-10-200 tun depmod -a @@ -31,6 +31,7 @@ make install Add /usr/local/lib to /etc/ld.so.conf Run ldconfig + RUNNING sgsnemu @@ -42,7 +43,7 @@ Start the emulator using the command: This will cause the sgsn emulator to bind to local address 10.20.30.50 and connect to the ggsn found at 10.20.30.40. It will first send off -an ECHO_REQUEST message. After this it will attemt to establish a pdp +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. @@ -55,7 +56,11 @@ Start the ggsn using the command: ggsn --fg -c examples/ggsn.conf -l 10.20.30.40 --statedir . This will run the ggsn in foreground using the local interface -10.20.30.40 +10.20.30.40. Of cause you can use sgsnemu to test the GGSN. + + +SUPPORT +If you have any questions drop me a line at jj@openggsn.org. *** Features *** @@ -71,7 +76,8 @@ OpenGGSN provides 3 components: gtplib This library contains all functionality relating to the GTP protocol. Use this libraty if you want to implement your own -GSN. Currently gtplib supports GTPv0. +GSN. Currently gtplib supports GTPv0. At the moment no interface +documentation is available for download. ggsn The ggsn implements a Gateway GPRS Support Node. The GGSN is a small @@ -83,15 +89,14 @@ with your own fancy VPN, management and charging functionality. sgsnemu This application emulates a Serving GPRS Support Node (SGSN). sgsnemu -enable you to test your 3GPP core network without the need to invest +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. *** Required software *** -TUN -http://vtun.sourceforge.net/tun/ +TUN (http://vtun.sourceforge.net/tun/) Both ggsn and sgsnemu uses the tun package. You need at least tun version 1.1. See the above web page for instructions on @@ -104,14 +109,11 @@ Add the following line to /etc/modules.conf: alias char-major-10-200 tun depmod -a -GENGETOPT -http://www.gnu.org/software/gengetopt/gengetopt.html +GENGETOPT (http://www.gnu.org/software/gengetopt/gengetopt.html) 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. +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 @@ -146,8 +148,113 @@ On RedHat add /usr/local/lib to /etc/ld.so.conf http://www.dwheeler.com/program-library/Program-Library-HOWTO/shared-libraries.html *** Running ggsn *** -Use ggsn -h for a list of available options. + +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. *** Running sgsnemu *** -Use sgsnemu -h for a list of available options. + +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 --fg --listen 10.20.30.50 --remote 10.20.30.40 --dns 10.20.38.51 --timelimit 10 --contexts 0 + +sgsnemu will print something like the following on the screen: + + Using DNS server: 10.20.38.51 (10.20.38.51) + Local IP address is: 10.20.30.50 (10.20.30.50) + Remote IP address is: 10.20.30.40 (10.20.30.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 + +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 carefull 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 +netowrk, so please be carefull not to route internet traffic onto the +GPRS core network! Assuming you know what you are doing: + + sgsnemu --fg --listen 10.20.30.50 --remote 10.20.30.40 --dns 10.20.38.51 --timelimit 10 --contexts 1 --apn internet --imsi 240011234567890 --msisdn 46702123456 --net 192.168.0.0 --mask 255.255.255.0 + +sgsnemu will print something like the following on the screen: + + Using DNS server: 10.20.38.51 (10.20.38.51) + Local IP address is: 10.20.30.50 (10.20.30.50) + Remote IP address is: 10.20.30.40 (10.20.30.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 + + +Now a context is established to the remote GGSN. The IP address of the +context is 192.168.0.1. If you specified the correct --net and --mask +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: + + Disconnecting PDP context #0 + Received delete PDP context response. Cause value: 128 + Deleting tun interface