| *** QuickStart *** |
| |
| REQUIREMENTS |
| |
| Linux |
| OpenGGSN was developed and tested using Redhat 7.1 and Redhat |
| 7.2. It should run also on other Linux distributions as well as |
| FreeBSD and Solaris, but this is untested. Please tell me of any |
| testing results. |
| |
| 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 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 this line to /etc/modules.conf: alias char-major-10-200 tun |
| depmod -a |
| |
| |
| COMPILATION and INSTALLATION |
| ./configure |
| cd gtp |
| make |
| make install |
| cd .. |
| make |
| make install |
| Add /usr/local/lib to /etc/ld.so.conf |
| Run ldconfig |
| |
| |
| RUNNING |
| |
| sgsnemu |
| Edit the configuration file sgsnemu.conf found under |
| openggsn/examples. Use sgsnemu -h for a list of available options. |
| Start the emulator using the command: |
| |
| sgsnemu -c examples/sgsnemu.conf -l 10.20.30.50 -r 10.20.30.40 |
| |
| 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 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. |
| |
| ggsn |
| Edit the configuration file ggsn.conf found under |
| openggsn/examples. Use sgsnemu -h for a list of available options. |
| 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. 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 *** |
| |
| OpenGGSN is an open source implementation of GPRS Support Nodes |
| (GSNs). It implements the GPRS tunneling protocol (GTP) version 0. |
| |
| OpenGGSN provides 3 components: |
| * gtplib |
| * ggsn |
| * sgsnemu |
| |
| 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. 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. |
| |
| |
| *** Required software *** |
| |
| 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 |
| installation. Tun is included in the kernel from early version 2.4, so |
| 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 |
| depmod -a |
| |
| |
| 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. |
| |
| 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 |
| |
| |
| *** Compilation and Installation *** |
| |
| To generate everything: |
| See http://sources.redhat.com/autobook/autobook/autobook_25.html#SEC25 |
| 1 edit configure.in |
| 2 run aclocal |
| 3 run autoheader |
| (run automake --add-missing) |
| 4 run automake |
| 5 run autoconf |
| 6 run ./configure |
| 7 rin make clean |
| 8 run make |
| (First time you run make it will complain that it can not find gtp. |
| Ignore the warning, gtp will get installed when you run make install) |
| 9 run make install |
| 10 Add /usr/local/lib to /etc/ld.so.conf |
| 11 run ldconfig |
| |
| |
| 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. 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. 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 |
| |