diff --git a/src/osmo_gsm_tester/osmo_ggsn.py b/src/osmo_gsm_tester/osmo_ggsn.py
new file mode 100644
index 0000000..c11353c
--- /dev/null
+++ b/src/osmo_gsm_tester/osmo_ggsn.py
@@ -0,0 +1,89 @@
+# osmo_gsm_tester: specifics for running an openggsn
+#
+# Copyright (C) 2016-2017 by sysmocom - s.f.m.c. GmbH
+#
+# Author: Pau Espin Pedrol <pespin@sysmocom.de>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+import os
+import pprint
+
+from . import log, util, config, template, process, osmo_ctrl, pcap_recorder
+
+class OsmoGgsn(log.Origin):
+    suite_run = None
+    ip_address = None
+    run_dir = None
+    config_file = None
+    process = None
+
+    def __init__(self, suite_run, ip_address):
+        super().__init__(log.C_RUN, 'osmo-ggsn_%s' % ip_address.get('addr'))
+        self.suite_run = suite_run
+        self.ip_address = ip_address
+
+    def start(self):
+        self.log('Starting osmo-ggsn')
+        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.configure()
+
+        inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-ggsn')))
+
+        binary = inst.child('bin', 'osmo-ggsn')
+        if not os.path.isfile(binary):
+            raise log.Error('Binary missing:', binary)
+        lib = inst.child('lib')
+        if not os.path.isdir(lib):
+            raise log.Error('No lib/ in', inst)
+
+        pcap_recorder.PcapRecorder(self.suite_run, self.run_dir.new_dir('pcap'), None,
+                                   'host %s' % self.addr())
+
+        env = { 'LD_LIBRARY_PATH': util.prepend_library_path(lib) }
+
+        self.dbg(run_dir=self.run_dir, binary=binary, env=env)
+        self.process = process.Process(self.name(), self.run_dir,
+                                       (binary,
+                                        '-c', os.path.abspath(self.config_file)),
+                                       env=env)
+        self.suite_run.remember_to_stop(self.process)
+        self.process.launch()
+
+    def configure(self):
+        self.config_file = self.run_dir.new_file('osmo-ggsn.cfg')
+        self.dbg(config_file=self.config_file)
+
+        values = dict(ggsn=config.get_defaults('ggsn'))
+        config.overlay(values, self.suite_run.config())
+        config.overlay(values, dict(ggsn=dict(ip_address=self.ip_address)))
+        config.overlay(values, dict(ggsn=dict(statedir=self.run_dir.new_dir('statedir'))))
+
+        self.dbg('GGSN CONFIG:\n' + pprint.pformat(values))
+
+        with open(self.config_file, 'w') as f:
+            r = template.render('osmo-ggsn.cfg', values)
+            self.dbg(r)
+            f.write(r)
+
+    def conf_for_client(self):
+        return dict(ggsn=dict(ip_address=self.ip_address))
+
+    def addr(self):
+        return self.ip_address.get('addr')
+
+    def running(self):
+        return not self.process.terminated()
+
+# vim: expandtab tabstop=4 shiftwidth=4
diff --git a/src/osmo_gsm_tester/suite.py b/src/osmo_gsm_tester/suite.py
index 2d04937..8c1d38d 100644
--- a/src/osmo_gsm_tester/suite.py
+++ b/src/osmo_gsm_tester/suite.py
@@ -22,7 +22,7 @@
 import time
 import pprint
 from . import config, log, template, util, resource, schema, event_loop, test
-from . import osmo_nitb, osmo_hlr, osmo_mgcpgw, osmo_mgw, osmo_msc, osmo_bsc, osmo_stp, modem, esme
+from . import osmo_nitb, osmo_hlr, osmo_mgcpgw, osmo_mgw, osmo_msc, osmo_bsc, osmo_stp, osmo_ggsn, modem, esme
 
 class Timeout(Exception):
     pass
@@ -230,6 +230,11 @@
             ip_address = self.ip_address()
         return osmo_hlr.OsmoHlr(self, ip_address)
 
+    def ggsn(self, ip_address=None):
+        if ip_address is None:
+            ip_address = self.ip_address()
+        return osmo_ggsn.OsmoGgsn(self, ip_address)
+
     def mgcpgw(self, ip_address=None, bts_ip=None):
         if ip_address is None:
             ip_address = self.ip_address()
diff --git a/src/osmo_gsm_tester/templates/osmo-ggsn.cfg.tmpl b/src/osmo_gsm_tester/templates/osmo-ggsn.cfg.tmpl
new file mode 100644
index 0000000..1ee19d1
--- /dev/null
+++ b/src/osmo_gsm_tester/templates/osmo-ggsn.cfg.tmpl
@@ -0,0 +1,74 @@
+!
+! OpenGGSN (0.94.1-adac) configuration saved from vty
+!!
+!
+log stderr
+  logging filter all 1
+  logging color 1
+  logging print category 1
+  logging print extended-timestamp 1
+  logging level ip info
+  logging level tun info
+  logging level ggsn info
+  logging level sgsn notice
+  logging level icmp6 notice
+  logging level lglobal notice
+  logging level llapd notice
+  logging level linp notice
+  logging level lmux notice
+  logging level lmi notice
+  logging level lmib notice
+  logging level lsms notice
+  logging level lctrl notice
+  logging level lgtp info
+  logging level lstats notice
+  logging level lgsup notice
+  logging level loap notice
+  logging level lss7 notice
+  logging level lsccp notice
+  logging level lsua notice
+  logging level lm3ua notice
+  logging level lmgcp notice
+  logging level all debug
+!
+stats interval 5
+!
+line vty
+ no login
+!
+ggsn ggsn0
+ gtp state-dir ${ggsn.statedir}
+ gtp bind-ip ${ggsn.ip_address.addr}
+ apn internet
+  gtpu-mode tun
+  tun-device tun4
+  type-support v4
+  ip prefix dynamic 176.16.222.0/24
+  ip dns 0 8.8.8.8
+  ip dns 1 8.8.8.4
+  ip ifconfig 176.16.222.1/24
+  no shutdown
+ apn inet6
+  gtpu-mode tun
+  tun-device tun6
+  type-support v6
+  ipv6 prefix dynamic fde4:8dba:82e1:2000:0:0:0:0/56
+  ipv6 dns 0 2001:4860:4860::8888
+  ipv6 dns 1 2001:4860:4860::8844
+  ipv6 ifconfig fde4:8dba:82e1:2000:0:0:0:0/56
+  no shutdown
+ apn inet46
+  gtpu-mode tun
+  tun-device tun46
+  type-support v4v6
+  ip prefix dynamic 176.16.46.0/24
+  ip dns 0 192.168.100.1
+  ip dns 1 8.8.8.8
+  ip ifconfig 176.16.46.0/24
+  ipv6 prefix dynamic fde4:8dba:82e1:2000:0:0:0:0/56
+  ipv6 dns 0 2001:4860:4860::8888
+  ipv6 dns 1 2001:4860:4860::8844
+  ipv6 ifconfig fde4:8dba:82e1:2000:0:0:0:0/56
+  no shutdown
+ default-apn internet
+ no shutdown ggsn
