diff --git a/sgsnemu/.deps/cmdline.P b/sgsnemu/.deps/cmdline.P
new file mode 100644
index 0000000..f8c0fb9
--- /dev/null
+++ b/sgsnemu/.deps/cmdline.P
@@ -0,0 +1,33 @@
+cmdline.o: cmdline.c /usr/include/stdio.h /usr/include/features.h \
+  /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \
+  /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \
+  /usr/include/bits/types.h /usr/include/libio.h /usr/include/_G_config.h \
+  /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \
+  /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \
+  /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \
+  /usr/include/stdlib.h /usr/include/string.h /usr/include/bits/string.h \
+  /usr/include/bits/string2.h /usr/include/endian.h \
+  /usr/include/bits/endian.h /usr/include/getopt.h cmdline.h
+cmdline.c :
+/usr/include/stdio.h :
+/usr/include/features.h :
+/usr/include/sys/cdefs.h :
+/usr/include/gnu/stubs.h :
+/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h :
+/usr/include/bits/types.h :
+/usr/include/libio.h :
+/usr/include/_G_config.h :
+/usr/include/wchar.h :
+/usr/include/bits/wchar.h :
+/usr/include/gconv.h :
+/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h :
+/usr/include/bits/stdio_lim.h :
+/usr/include/bits/stdio.h :
+/usr/include/stdlib.h :
+/usr/include/string.h :
+/usr/include/bits/string.h :
+/usr/include/bits/string2.h :
+/usr/include/endian.h :
+/usr/include/bits/endian.h :
+/usr/include/getopt.h :
+cmdline.h :
diff --git a/sgsnemu/.deps/pptpstuff.P b/sgsnemu/.deps/pptpstuff.P
new file mode 100644
index 0000000..4699f4f
--- /dev/null
+++ b/sgsnemu/.deps/pptpstuff.P
@@ -0,0 +1,107 @@
+pptpstuff.o: pptpstuff.c /usr/include/syslog.h /usr/include/sys/syslog.h \
+  /usr/include/features.h /usr/include/sys/cdefs.h \
+  /usr/include/gnu/stubs.h \
+  /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \
+  /usr/include/ctype.h /usr/include/bits/types.h \
+  /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \
+  /usr/include/endian.h /usr/include/bits/endian.h /usr/include/netdb.h \
+  /usr/include/netinet/in.h /usr/include/stdint.h \
+  /usr/include/bits/wchar.h /usr/include/bits/wordsize.h \
+  /usr/include/bits/socket.h \
+  /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \
+  /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \
+  /usr/include/limits.h /usr/include/sys/types.h /usr/include/time.h \
+  /usr/include/bits/sockaddr.h /usr/include/asm/socket.h \
+  /usr/include/asm/sockios.h /usr/include/bits/in.h \
+  /usr/include/bits/byteswap.h /usr/include/bits/netdb.h \
+  /usr/include/signal.h /usr/include/bits/sigset.h \
+  /usr/include/bits/signum.h /usr/include/stdio.h /usr/include/libio.h \
+  /usr/include/_G_config.h /usr/include/wchar.h /usr/include/gconv.h \
+  /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \
+  /usr/include/string.h /usr/include/bits/string.h \
+  /usr/include/bits/string2.h /usr/include/stdlib.h \
+  /usr/include/sys/socket.h /usr/include/sys/uio.h \
+  /usr/include/bits/uio.h /usr/include/arpa/inet.h \
+  /usr/include/sys/wait.h /usr/include/sys/resource.h \
+  /usr/include/bits/resource.h /usr/include/bits/time.h \
+  /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \
+  /usr/include/sys/stat.h /usr/include/bits/stat.h /usr/include/unistd.h \
+  /usr/include/bits/posix_opt.h /usr/include/bits/confname.h \
+  /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \
+  /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \
+  /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \
+  /usr/include/net/if.h /usr/include/errno.h /usr/include/bits/errno.h \
+  /usr/include/linux/errno.h /usr/include/asm/errno.h \
+  /usr/include/asm/types.h /usr/include/linux/netlink.h pptpstuff.h
+pptpstuff.c :
+/usr/include/syslog.h :
+/usr/include/sys/syslog.h :
+/usr/include/features.h :
+/usr/include/sys/cdefs.h :
+/usr/include/gnu/stubs.h :
+/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h :
+/usr/include/ctype.h :
+/usr/include/bits/types.h :
+/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h :
+/usr/include/endian.h :
+/usr/include/bits/endian.h :
+/usr/include/netdb.h :
+/usr/include/netinet/in.h :
+/usr/include/stdint.h :
+/usr/include/bits/wchar.h :
+/usr/include/bits/wordsize.h :
+/usr/include/bits/socket.h :
+/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h :
+/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h :
+/usr/include/limits.h :
+/usr/include/sys/types.h :
+/usr/include/time.h :
+/usr/include/bits/sockaddr.h :
+/usr/include/asm/socket.h :
+/usr/include/asm/sockios.h :
+/usr/include/bits/in.h :
+/usr/include/bits/byteswap.h :
+/usr/include/bits/netdb.h :
+/usr/include/signal.h :
+/usr/include/bits/sigset.h :
+/usr/include/bits/signum.h :
+/usr/include/stdio.h :
+/usr/include/libio.h :
+/usr/include/_G_config.h :
+/usr/include/wchar.h :
+/usr/include/gconv.h :
+/usr/include/bits/stdio_lim.h :
+/usr/include/bits/stdio.h :
+/usr/include/string.h :
+/usr/include/bits/string.h :
+/usr/include/bits/string2.h :
+/usr/include/stdlib.h :
+/usr/include/sys/socket.h :
+/usr/include/sys/uio.h :
+/usr/include/bits/uio.h :
+/usr/include/arpa/inet.h :
+/usr/include/sys/wait.h :
+/usr/include/sys/resource.h :
+/usr/include/bits/resource.h :
+/usr/include/bits/time.h :
+/usr/include/bits/waitflags.h :
+/usr/include/bits/waitstatus.h :
+/usr/include/sys/stat.h :
+/usr/include/bits/stat.h :
+/usr/include/unistd.h :
+/usr/include/bits/posix_opt.h :
+/usr/include/bits/confname.h :
+/usr/include/sys/ioctl.h :
+/usr/include/bits/ioctls.h :
+/usr/include/asm/ioctls.h :
+/usr/include/asm/ioctl.h :
+/usr/include/bits/ioctl-types.h :
+/usr/include/sys/ttydefaults.h :
+/usr/include/net/if.h :
+/usr/include/errno.h :
+/usr/include/bits/errno.h :
+/usr/include/linux/errno.h :
+/usr/include/asm/errno.h :
+/usr/include/asm/types.h :
+/usr/include/linux/netlink.h :
+pptpstuff.h :
diff --git a/sgsnemu/.deps/sgsnemu.P b/sgsnemu/.deps/sgsnemu.P
new file mode 100644
index 0000000..f96d1c6
--- /dev/null
+++ b/sgsnemu/.deps/sgsnemu.P
@@ -0,0 +1,157 @@
+sgsnemu.o: sgsnemu.c /usr/include/syslog.h /usr/include/sys/syslog.h \
+  /usr/include/features.h /usr/include/sys/cdefs.h \
+  /usr/include/gnu/stubs.h \
+  /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \
+  /usr/include/ctype.h /usr/include/bits/types.h \
+  /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \
+  /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \
+  /usr/include/endian.h /usr/include/bits/endian.h /usr/include/xlocale.h \
+  /usr/include/netdb.h /usr/include/netinet/in.h /usr/include/stdint.h \
+  /usr/include/bits/wchar.h /usr/include/bits/wordsize.h \
+  /usr/include/bits/socket.h \
+  /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \
+  /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \
+  /usr/include/limits.h /usr/include/bits/posix1_lim.h \
+  /usr/include/bits/local_lim.h /usr/include/linux/limits.h \
+  /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \
+  /usr/include/bits/stdio_lim.h /usr/include/sys/types.h \
+  /usr/include/time.h /usr/include/sys/select.h \
+  /usr/include/bits/select.h /usr/include/bits/sigset.h \
+  /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
+  /usr/include/bits/sockaddr.h /usr/include/asm/socket.h \
+  /usr/include/asm/sockios.h /usr/include/bits/in.h \
+  /usr/include/bits/byteswap.h /usr/include/rpc/netdb.h \
+  /usr/include/bits/siginfo.h /usr/include/bits/netdb.h \
+  /usr/include/signal.h /usr/include/bits/signum.h \
+  /usr/include/bits/sigaction.h /usr/include/bits/sigcontext.h \
+  /usr/include/asm/sigcontext.h /usr/include/bits/sigstack.h \
+  /usr/include/ucontext.h /usr/include/sys/ucontext.h \
+  /usr/include/bits/sigthread.h /usr/include/stdio.h /usr/include/libio.h \
+  /usr/include/_G_config.h /usr/include/wchar.h /usr/include/gconv.h \
+  /usr/include/bits/stdio.h /usr/include/string.h \
+  /usr/include/bits/string.h /usr/include/bits/string2.h \
+  /usr/include/stdlib.h /usr/include/bits/waitflags.h \
+  /usr/include/bits/waitstatus.h /usr/include/alloca.h \
+  /usr/include/sys/socket.h /usr/include/sys/uio.h \
+  /usr/include/bits/uio.h /usr/include/arpa/inet.h \
+  /usr/include/sys/wait.h /usr/include/sys/resource.h \
+  /usr/include/bits/resource.h /usr/include/sys/stat.h \
+  /usr/include/bits/stat.h /usr/include/unistd.h \
+  /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \
+  /usr/include/bits/confname.h /usr/include/getopt.h \
+  /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \
+  /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \
+  /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \
+  /usr/include/net/if.h /usr/include/errno.h /usr/include/bits/errno.h \
+  /usr/include/linux/errno.h /usr/include/asm/errno.h \
+  /usr/include/asm/types.h /usr/include/linux/netlink.h \
+  /usr/include/resolv.h /usr/include/sys/param.h \
+  /usr/include/linux/param.h /usr/include/asm/param.h \
+  /usr/include/sys/bitypes.h /usr/include/arpa/nameser.h \
+  /usr/include/arpa/nameser_compat.h tun.h ../gtp/pdp.h ../gtp/gtp.h \
+  cmdline.h
+sgsnemu.c :
+/usr/include/syslog.h :
+/usr/include/sys/syslog.h :
+/usr/include/features.h :
+/usr/include/sys/cdefs.h :
+/usr/include/gnu/stubs.h :
+/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h :
+/usr/include/ctype.h :
+/usr/include/bits/types.h :
+/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h :
+/usr/include/bits/pthreadtypes.h :
+/usr/include/bits/sched.h :
+/usr/include/endian.h :
+/usr/include/bits/endian.h :
+/usr/include/xlocale.h :
+/usr/include/netdb.h :
+/usr/include/netinet/in.h :
+/usr/include/stdint.h :
+/usr/include/bits/wchar.h :
+/usr/include/bits/wordsize.h :
+/usr/include/bits/socket.h :
+/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h :
+/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h :
+/usr/include/limits.h :
+/usr/include/bits/posix1_lim.h :
+/usr/include/bits/local_lim.h :
+/usr/include/linux/limits.h :
+/usr/include/bits/posix2_lim.h :
+/usr/include/bits/xopen_lim.h :
+/usr/include/bits/stdio_lim.h :
+/usr/include/sys/types.h :
+/usr/include/time.h :
+/usr/include/sys/select.h :
+/usr/include/bits/select.h :
+/usr/include/bits/sigset.h :
+/usr/include/bits/time.h :
+/usr/include/sys/sysmacros.h :
+/usr/include/bits/sockaddr.h :
+/usr/include/asm/socket.h :
+/usr/include/asm/sockios.h :
+/usr/include/bits/in.h :
+/usr/include/bits/byteswap.h :
+/usr/include/rpc/netdb.h :
+/usr/include/bits/siginfo.h :
+/usr/include/bits/netdb.h :
+/usr/include/signal.h :
+/usr/include/bits/signum.h :
+/usr/include/bits/sigaction.h :
+/usr/include/bits/sigcontext.h :
+/usr/include/asm/sigcontext.h :
+/usr/include/bits/sigstack.h :
+/usr/include/ucontext.h :
+/usr/include/sys/ucontext.h :
+/usr/include/bits/sigthread.h :
+/usr/include/stdio.h :
+/usr/include/libio.h :
+/usr/include/_G_config.h :
+/usr/include/wchar.h :
+/usr/include/gconv.h :
+/usr/include/bits/stdio.h :
+/usr/include/string.h :
+/usr/include/bits/string.h :
+/usr/include/bits/string2.h :
+/usr/include/stdlib.h :
+/usr/include/bits/waitflags.h :
+/usr/include/bits/waitstatus.h :
+/usr/include/alloca.h :
+/usr/include/sys/socket.h :
+/usr/include/sys/uio.h :
+/usr/include/bits/uio.h :
+/usr/include/arpa/inet.h :
+/usr/include/sys/wait.h :
+/usr/include/sys/resource.h :
+/usr/include/bits/resource.h :
+/usr/include/sys/stat.h :
+/usr/include/bits/stat.h :
+/usr/include/unistd.h :
+/usr/include/bits/posix_opt.h :
+/usr/include/bits/environments.h :
+/usr/include/bits/confname.h :
+/usr/include/getopt.h :
+/usr/include/sys/ioctl.h :
+/usr/include/bits/ioctls.h :
+/usr/include/asm/ioctls.h :
+/usr/include/asm/ioctl.h :
+/usr/include/bits/ioctl-types.h :
+/usr/include/sys/ttydefaults.h :
+/usr/include/net/if.h :
+/usr/include/errno.h :
+/usr/include/bits/errno.h :
+/usr/include/linux/errno.h :
+/usr/include/asm/errno.h :
+/usr/include/asm/types.h :
+/usr/include/linux/netlink.h :
+/usr/include/resolv.h :
+/usr/include/sys/param.h :
+/usr/include/linux/param.h :
+/usr/include/asm/param.h :
+/usr/include/sys/bitypes.h :
+/usr/include/arpa/nameser.h :
+/usr/include/arpa/nameser_compat.h :
+tun.h :
+../gtp/pdp.h :
+../gtp/gtp.h :
+cmdline.h :
diff --git a/sgsnemu/.deps/sgsnemuopt.P b/sgsnemu/.deps/sgsnemuopt.P
new file mode 100644
index 0000000..233a15f
--- /dev/null
+++ b/sgsnemu/.deps/sgsnemuopt.P
@@ -0,0 +1,33 @@
+sgsnemuopt.o: sgsnemuopt.c /usr/include/stdio.h /usr/include/features.h \
+  /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \
+  /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \
+  /usr/include/bits/types.h /usr/include/libio.h /usr/include/_G_config.h \
+  /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \
+  /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \
+  /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \
+  /usr/include/stdlib.h /usr/include/string.h /usr/include/bits/string.h \
+  /usr/include/bits/string2.h /usr/include/endian.h \
+  /usr/include/bits/endian.h /usr/include/getopt.h sgsnemuopt.h
+sgsnemuopt.c :
+/usr/include/stdio.h :
+/usr/include/features.h :
+/usr/include/sys/cdefs.h :
+/usr/include/gnu/stubs.h :
+/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h :
+/usr/include/bits/types.h :
+/usr/include/libio.h :
+/usr/include/_G_config.h :
+/usr/include/wchar.h :
+/usr/include/bits/wchar.h :
+/usr/include/gconv.h :
+/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h :
+/usr/include/bits/stdio_lim.h :
+/usr/include/bits/stdio.h :
+/usr/include/stdlib.h :
+/usr/include/string.h :
+/usr/include/bits/string.h :
+/usr/include/bits/string2.h :
+/usr/include/endian.h :
+/usr/include/bits/endian.h :
+/usr/include/getopt.h :
+sgsnemuopt.h :
diff --git a/sgsnemu/.deps/tun.P b/sgsnemu/.deps/tun.P
new file mode 100644
index 0000000..29f9cf4
--- /dev/null
+++ b/sgsnemu/.deps/tun.P
@@ -0,0 +1,108 @@
+tun.o: tun.c /usr/include/syslog.h /usr/include/sys/syslog.h \
+  /usr/include/features.h /usr/include/sys/cdefs.h \
+  /usr/include/gnu/stubs.h \
+  /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h \
+  /usr/include/stdio.h \
+  /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h \
+  /usr/include/bits/types.h /usr/include/libio.h /usr/include/_G_config.h \
+  /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \
+  /usr/include/bits/stdio_lim.h /usr/include/bits/stdio.h \
+  /usr/include/stdlib.h /usr/include/sys/types.h /usr/include/time.h \
+  /usr/include/sys/socket.h /usr/include/sys/uio.h \
+  /usr/include/bits/uio.h /usr/include/bits/socket.h \
+  /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h \
+  /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h \
+  /usr/include/limits.h /usr/include/bits/sockaddr.h \
+  /usr/include/asm/socket.h /usr/include/asm/sockios.h \
+  /usr/include/netinet/in.h /usr/include/stdint.h \
+  /usr/include/bits/wordsize.h /usr/include/bits/in.h \
+  /usr/include/endian.h /usr/include/bits/endian.h \
+  /usr/include/bits/byteswap.h /usr/include/arpa/inet.h \
+  /usr/include/sys/stat.h /usr/include/bits/stat.h \
+  /usr/include/sys/time.h /usr/include/bits/time.h \
+  /usr/include/sys/select.h /usr/include/bits/select.h \
+  /usr/include/bits/sigset.h /usr/include/unistd.h \
+  /usr/include/bits/posix_opt.h /usr/include/bits/confname.h \
+  /usr/include/string.h /usr/include/bits/string.h \
+  /usr/include/bits/string2.h /usr/include/errno.h \
+  /usr/include/bits/errno.h /usr/include/linux/errno.h \
+  /usr/include/asm/errno.h /usr/include/fcntl.h /usr/include/bits/fcntl.h \
+  /usr/include/sys/ioctl.h /usr/include/bits/ioctls.h \
+  /usr/include/asm/ioctls.h /usr/include/asm/ioctl.h \
+  /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \
+  /usr/include/linux/if.h /usr/include/linux/types.h \
+  /usr/include/linux/posix_types.h /usr/include/linux/stddef.h \
+  /usr/include/asm/posix_types.h /usr/include/asm/types.h \
+  /usr/include/linux/socket.h /usr/include/linux/if_tun.h tun.h
+tun.c :
+/usr/include/syslog.h :
+/usr/include/sys/syslog.h :
+/usr/include/features.h :
+/usr/include/sys/cdefs.h :
+/usr/include/gnu/stubs.h :
+/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h :
+/usr/include/stdio.h :
+/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h :
+/usr/include/bits/types.h :
+/usr/include/libio.h :
+/usr/include/_G_config.h :
+/usr/include/wchar.h :
+/usr/include/bits/wchar.h :
+/usr/include/gconv.h :
+/usr/include/bits/stdio_lim.h :
+/usr/include/bits/stdio.h :
+/usr/include/stdlib.h :
+/usr/include/sys/types.h :
+/usr/include/time.h :
+/usr/include/sys/socket.h :
+/usr/include/sys/uio.h :
+/usr/include/bits/uio.h :
+/usr/include/bits/socket.h :
+/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/limits.h :
+/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/syslimits.h :
+/usr/include/limits.h :
+/usr/include/bits/sockaddr.h :
+/usr/include/asm/socket.h :
+/usr/include/asm/sockios.h :
+/usr/include/netinet/in.h :
+/usr/include/stdint.h :
+/usr/include/bits/wordsize.h :
+/usr/include/bits/in.h :
+/usr/include/endian.h :
+/usr/include/bits/endian.h :
+/usr/include/bits/byteswap.h :
+/usr/include/arpa/inet.h :
+/usr/include/sys/stat.h :
+/usr/include/bits/stat.h :
+/usr/include/sys/time.h :
+/usr/include/bits/time.h :
+/usr/include/sys/select.h :
+/usr/include/bits/select.h :
+/usr/include/bits/sigset.h :
+/usr/include/unistd.h :
+/usr/include/bits/posix_opt.h :
+/usr/include/bits/confname.h :
+/usr/include/string.h :
+/usr/include/bits/string.h :
+/usr/include/bits/string2.h :
+/usr/include/errno.h :
+/usr/include/bits/errno.h :
+/usr/include/linux/errno.h :
+/usr/include/asm/errno.h :
+/usr/include/fcntl.h :
+/usr/include/bits/fcntl.h :
+/usr/include/sys/ioctl.h :
+/usr/include/bits/ioctls.h :
+/usr/include/asm/ioctls.h :
+/usr/include/asm/ioctl.h :
+/usr/include/bits/ioctl-types.h :
+/usr/include/sys/ttydefaults.h :
+/usr/include/linux/if.h :
+/usr/include/linux/types.h :
+/usr/include/linux/posix_types.h :
+/usr/include/linux/stddef.h :
+/usr/include/asm/posix_types.h :
+/usr/include/asm/types.h :
+/usr/include/linux/socket.h :
+/usr/include/linux/if_tun.h :
+tun.h :
diff --git a/sgsnemu/Makefile b/sgsnemu/Makefile
new file mode 100644
index 0000000..24a2b1c
--- /dev/null
+++ b/sgsnemu/Makefile
@@ -0,0 +1,343 @@
+# Generated automatically from Makefile.in by configure.
+# Makefile.in generated automatically by automake 1.4 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = /bin/sh
+
+srcdir = .
+top_srcdir = ..
+prefix = /usr/local
+exec_prefix = ${prefix}
+
+bindir = ${exec_prefix}/bin
+sbindir = ${exec_prefix}/sbin
+libexecdir = ${exec_prefix}/libexec
+datadir = ${prefix}/share
+sysconfdir = ${prefix}/etc
+sharedstatedir = ${prefix}/com
+localstatedir = ${prefix}/var
+libdir = ${exec_prefix}/lib
+infodir = ${prefix}/info
+mandir = ${prefix}/man
+includedir = ${prefix}/include
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/OpenGGSN
+pkglibdir = $(libdir)/OpenGGSN
+pkgincludedir = $(includedir)/OpenGGSN
+
+top_builddir = ..
+
+ACLOCAL = aclocal
+AUTOCONF = autoconf
+AUTOMAKE = automake
+AUTOHEADER = autoheader
+
+INSTALL = /usr/bin/install -c
+INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_SCRIPT = ${INSTALL_PROGRAM}
+transform = s,x,x,
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_alias = i686-pc-linux
+host_triplet = i686-pc-linux-gnu
+AS = @AS@
+AWK = gawk
+CC = gcc
+DLLTOOL = @DLLTOOL@
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LN_S = ln -s
+MAKEINFO = makeinfo
+OBJDUMP = @OBJDUMP@
+PACKAGE = OpenGGSN
+RANLIB = ranlib
+VERSION = 0.5
+
+bin_PROGRAMS = sgsnemu
+
+CFLAGS = -O2 -fno-builtin -Wall -ansi -DSBINDIR='"$(sbindir)"' -lgtp
+
+sgsnemu_SOURCES = sgsnemu.c tun.c tun.h cmdline.c cmdline.h
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_CLEAN_FILES = 
+PROGRAMS =  $(bin_PROGRAMS)
+
+
+DEFS =  -DSTDC_HEADERS=1 -DHAVE_SYS_WAIT_H=1 -DHAVE_FCNTL_H=1 -DHAVE_STRINGS_H=1 -DHAVE_SYS_IOCTL_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYSLOG_H=1 -DHAVE_UNISTD_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_SELECT=1 -DHAVE_SOCKET=1 -DHAVE_STRDUP=1 -DHAVE_STRERROR=1 -DHAVE_STRTOUL=1 -DPACKAGE=\"OpenGGSN\" -DVERSION=\"0.5\"  -I. -I$(srcdir) 
+CPPFLAGS = 
+LDFLAGS = 
+LIBS = 
+sgsnemu_OBJECTS =  sgsnemu.o tun.o cmdline.o
+sgsnemu_LDADD = $(LDADD)
+sgsnemu_DEPENDENCIES = 
+sgsnemu_LDFLAGS = 
+COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
+DIST_COMMON =  Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = gtar
+GZIP_ENV = --best
+DEP_FILES =  .deps/cmdline.P .deps/sgsnemu.P .deps/tun.P
+SOURCES = $(sgsnemu_SOURCES)
+OBJECTS = $(sgsnemu_OBJECTS)
+
+all: all-redirect
+.SUFFIXES:
+.SUFFIXES: .S .c .lo .o .s
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
+	cd $(top_srcdir) && $(AUTOMAKE) --gnu sgsnemu/Makefile
+
+Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status $(BUILT_SOURCES)
+	cd $(top_builddir) \
+	  && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+mostlyclean-binPROGRAMS:
+
+clean-binPROGRAMS:
+	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+distclean-binPROGRAMS:
+
+maintainer-clean-binPROGRAMS:
+
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	$(mkinstalldirs) $(DESTDIR)$(bindir)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  if test -f $$p; then \
+	    echo " $(LIBTOOL)  --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
+	    $(LIBTOOL)  --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+	  else :; fi; \
+	done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+	done
+
+.s.o:
+	$(COMPILE) -c $<
+
+.S.o:
+	$(COMPILE) -c $<
+
+mostlyclean-compile:
+	-rm -f *.o core *.core
+
+clean-compile:
+
+distclean-compile:
+	-rm -f *.tab.c
+
+maintainer-clean-compile:
+
+.s.lo:
+	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+.S.lo:
+	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+
+maintainer-clean-libtool:
+
+sgsnemu: $(sgsnemu_OBJECTS) $(sgsnemu_DEPENDENCIES)
+	@rm -f sgsnemu
+	$(LINK) $(sgsnemu_LDFLAGS) $(sgsnemu_OBJECTS) $(sgsnemu_LDADD) $(LIBS)
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS)'; \
+	unique=`for i in $$list; do echo $$i; done | \
+	  awk '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	here=`pwd` && cd $(srcdir) \
+	  && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)'; \
+	unique=`for i in $$list; do echo $$i; done | \
+	  awk '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+	  || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags  $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+	-rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = sgsnemu
+
+distdir: $(DISTFILES)
+	here=`cd $(top_builddir) && pwd`; \
+	top_distdir=`cd $(top_distdir) && pwd`; \
+	distdir=`cd $(distdir) && pwd`; \
+	cd $(top_srcdir) \
+	  && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu sgsnemu/Makefile
+	@for file in $(DISTFILES); do \
+	  d=$(srcdir); \
+	  if test -d $$d/$$file; then \
+	    cp -pr $$d/$$file $(distdir)/$$file; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+	    || cp -p $$d/$$file $(distdir)/$$file || :; \
+	  fi; \
+	done
+
+DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
+
+-include $(DEP_FILES)
+
+mostlyclean-depend:
+
+clean-depend:
+
+distclean-depend:
+	-rm -rf .deps
+
+maintainer-clean-depend:
+
+%.o: %.c
+	@echo '$(COMPILE) -c $<'; \
+	$(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
+	@-cp .deps/$(*F).pp .deps/$(*F).P; \
+	tr ' ' '\012' < .deps/$(*F).pp \
+	  | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
+	    >> .deps/$(*F).P; \
+	rm .deps/$(*F).pp
+
+%.lo: %.c
+	@echo '$(LTCOMPILE) -c $<'; \
+	$(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
+	@-sed -e 's/^\([^:]*\)\.o[ 	]*:/\1.lo \1.o :/' \
+	  < .deps/$(*F).pp > .deps/$(*F).P; \
+	tr ' ' '\012' < .deps/$(*F).pp \
+	  | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
+	    >> .deps/$(*F).P; \
+	rm -f .deps/$(*F).pp
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am: install-binPROGRAMS
+install-exec: install-exec-am
+
+install-data-am:
+install-data: install-data-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-binPROGRAMS
+uninstall: uninstall-am
+all-am: Makefile $(PROGRAMS)
+all-redirect: all-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+	$(mkinstalldirs)  $(DESTDIR)$(bindir)
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f Makefile $(CONFIG_CLEAN_FILES)
+	-rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am:  mostlyclean-binPROGRAMS mostlyclean-compile \
+		mostlyclean-libtool mostlyclean-tags mostlyclean-depend \
+		mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am:  clean-binPROGRAMS clean-compile clean-libtool clean-tags \
+		clean-depend clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am:  distclean-binPROGRAMS distclean-compile distclean-libtool \
+		distclean-tags distclean-depend distclean-generic \
+		clean-am
+	-rm -f libtool
+
+distclean: distclean-am
+
+maintainer-clean-am:  maintainer-clean-binPROGRAMS \
+		maintainer-clean-compile maintainer-clean-libtool \
+		maintainer-clean-tags maintainer-clean-depend \
+		maintainer-clean-generic distclean-am
+	@echo "This command is intended for maintainers to use;"
+	@echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \
+maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \
+mostlyclean-compile distclean-compile clean-compile \
+maintainer-clean-compile mostlyclean-libtool distclean-libtool \
+clean-libtool maintainer-clean-libtool tags mostlyclean-tags \
+distclean-tags clean-tags maintainer-clean-tags distdir \
+mostlyclean-depend distclean-depend clean-depend \
+maintainer-clean-depend info-am info dvi-am dvi check check-am \
+installcheck-am installcheck install-exec-am install-exec \
+install-data-am install-data install-am install uninstall-am uninstall \
+all-redirect all-am all installdirs mostlyclean-generic \
+distclean-generic clean-generic maintainer-clean-generic clean \
+mostlyclean distclean maintainer-clean
+
+
+cmdline.c: cmdline.ggo
+	gengetopt < cmdline.ggo --unamed-opts --conf-parser
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/sgsnemu/Makefile.am b/sgsnemu/Makefile.am
new file mode 100644
index 0000000..064f91f
--- /dev/null
+++ b/sgsnemu/Makefile.am
@@ -0,0 +1,11 @@
+bin_PROGRAMS = sgsnemu
+
+CFLAGS = -O2 -fno-builtin -Wall -ansi -DSBINDIR='"$(sbindir)"' -lgtp
+
+sgsnemu_SOURCES = sgsnemu.c tun.c tun.h cmdline.c cmdline.h
+
+cmdline.c: cmdline.ggo
+	gengetopt < cmdline.ggo --unamed-opts --conf-parser
+
+
+
diff --git a/sgsnemu/Makefile.in b/sgsnemu/Makefile.in
new file mode 100644
index 0000000..b99ad73
--- /dev/null
+++ b/sgsnemu/Makefile.in
@@ -0,0 +1,343 @@
+# Makefile.in generated automatically by automake 1.4 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
+AS = @AS@
+AWK = @AWK@
+CC = @CC@
+DLLTOOL = @DLLTOOL@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+MAKEINFO = @MAKEINFO@
+OBJDUMP = @OBJDUMP@
+PACKAGE = @PACKAGE@
+RANLIB = @RANLIB@
+VERSION = @VERSION@
+
+bin_PROGRAMS = sgsnemu
+
+CFLAGS = -O2 -fno-builtin -Wall -ansi -DSBINDIR='"$(sbindir)"' -lgtp
+
+sgsnemu_SOURCES = sgsnemu.c tun.c tun.h cmdline.c cmdline.h
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_CLEAN_FILES = 
+PROGRAMS =  $(bin_PROGRAMS)
+
+
+DEFS = @DEFS@ -I. -I$(srcdir) 
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+sgsnemu_OBJECTS =  sgsnemu.o tun.o cmdline.o
+sgsnemu_LDADD = $(LDADD)
+sgsnemu_DEPENDENCIES = 
+sgsnemu_LDFLAGS = 
+COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
+DIST_COMMON =  Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = gtar
+GZIP_ENV = --best
+DEP_FILES =  .deps/cmdline.P .deps/sgsnemu.P .deps/tun.P
+SOURCES = $(sgsnemu_SOURCES)
+OBJECTS = $(sgsnemu_OBJECTS)
+
+all: all-redirect
+.SUFFIXES:
+.SUFFIXES: .S .c .lo .o .s
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
+	cd $(top_srcdir) && $(AUTOMAKE) --gnu sgsnemu/Makefile
+
+Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status $(BUILT_SOURCES)
+	cd $(top_builddir) \
+	  && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+mostlyclean-binPROGRAMS:
+
+clean-binPROGRAMS:
+	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+distclean-binPROGRAMS:
+
+maintainer-clean-binPROGRAMS:
+
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	$(mkinstalldirs) $(DESTDIR)$(bindir)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  if test -f $$p; then \
+	    echo " $(LIBTOOL)  --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
+	    $(LIBTOOL)  --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+	  else :; fi; \
+	done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+	done
+
+.s.o:
+	$(COMPILE) -c $<
+
+.S.o:
+	$(COMPILE) -c $<
+
+mostlyclean-compile:
+	-rm -f *.o core *.core
+
+clean-compile:
+
+distclean-compile:
+	-rm -f *.tab.c
+
+maintainer-clean-compile:
+
+.s.lo:
+	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+.S.lo:
+	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+
+maintainer-clean-libtool:
+
+sgsnemu: $(sgsnemu_OBJECTS) $(sgsnemu_DEPENDENCIES)
+	@rm -f sgsnemu
+	$(LINK) $(sgsnemu_LDFLAGS) $(sgsnemu_OBJECTS) $(sgsnemu_LDADD) $(LIBS)
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+	list='$(SOURCES) $(HEADERS)'; \
+	unique=`for i in $$list; do echo $$i; done | \
+	  awk '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	here=`pwd` && cd $(srcdir) \
+	  && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)'; \
+	unique=`for i in $$list; do echo $$i; done | \
+	  awk '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+	  || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags  $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+	-rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = sgsnemu
+
+distdir: $(DISTFILES)
+	here=`cd $(top_builddir) && pwd`; \
+	top_distdir=`cd $(top_distdir) && pwd`; \
+	distdir=`cd $(distdir) && pwd`; \
+	cd $(top_srcdir) \
+	  && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu sgsnemu/Makefile
+	@for file in $(DISTFILES); do \
+	  d=$(srcdir); \
+	  if test -d $$d/$$file; then \
+	    cp -pr $$d/$$file $(distdir)/$$file; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+	    || cp -p $$d/$$file $(distdir)/$$file || :; \
+	  fi; \
+	done
+
+DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
+
+-include $(DEP_FILES)
+
+mostlyclean-depend:
+
+clean-depend:
+
+distclean-depend:
+	-rm -rf .deps
+
+maintainer-clean-depend:
+
+%.o: %.c
+	@echo '$(COMPILE) -c $<'; \
+	$(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
+	@-cp .deps/$(*F).pp .deps/$(*F).P; \
+	tr ' ' '\012' < .deps/$(*F).pp \
+	  | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
+	    >> .deps/$(*F).P; \
+	rm .deps/$(*F).pp
+
+%.lo: %.c
+	@echo '$(LTCOMPILE) -c $<'; \
+	$(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
+	@-sed -e 's/^\([^:]*\)\.o[ 	]*:/\1.lo \1.o :/' \
+	  < .deps/$(*F).pp > .deps/$(*F).P; \
+	tr ' ' '\012' < .deps/$(*F).pp \
+	  | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
+	    >> .deps/$(*F).P; \
+	rm -f .deps/$(*F).pp
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am: install-binPROGRAMS
+install-exec: install-exec-am
+
+install-data-am:
+install-data: install-data-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-binPROGRAMS
+uninstall: uninstall-am
+all-am: Makefile $(PROGRAMS)
+all-redirect: all-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+	$(mkinstalldirs)  $(DESTDIR)$(bindir)
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f Makefile $(CONFIG_CLEAN_FILES)
+	-rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am:  mostlyclean-binPROGRAMS mostlyclean-compile \
+		mostlyclean-libtool mostlyclean-tags mostlyclean-depend \
+		mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am:  clean-binPROGRAMS clean-compile clean-libtool clean-tags \
+		clean-depend clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am:  distclean-binPROGRAMS distclean-compile distclean-libtool \
+		distclean-tags distclean-depend distclean-generic \
+		clean-am
+	-rm -f libtool
+
+distclean: distclean-am
+
+maintainer-clean-am:  maintainer-clean-binPROGRAMS \
+		maintainer-clean-compile maintainer-clean-libtool \
+		maintainer-clean-tags maintainer-clean-depend \
+		maintainer-clean-generic distclean-am
+	@echo "This command is intended for maintainers to use;"
+	@echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \
+maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \
+mostlyclean-compile distclean-compile clean-compile \
+maintainer-clean-compile mostlyclean-libtool distclean-libtool \
+clean-libtool maintainer-clean-libtool tags mostlyclean-tags \
+distclean-tags clean-tags maintainer-clean-tags distdir \
+mostlyclean-depend distclean-depend clean-depend \
+maintainer-clean-depend info-am info dvi-am dvi check check-am \
+installcheck-am installcheck install-exec-am install-exec \
+install-data-am install-data install-am install uninstall-am uninstall \
+all-redirect all-am all installdirs mostlyclean-generic \
+distclean-generic clean-generic maintainer-clean-generic clean \
+mostlyclean distclean maintainer-clean
+
+
+cmdline.c: cmdline.ggo
+	gengetopt < cmdline.ggo --unamed-opts --conf-parser
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/sgsnemu/cmdline.c b/sgsnemu/cmdline.c
new file mode 100644
index 0000000..ede48bf
--- /dev/null
+++ b/sgsnemu/cmdline.c
@@ -0,0 +1,776 @@
+/*
+  File autogenerated by gengetopt version 2.8rc
+  generated with the following command:
+  ../../gengetopt-2.8rc/src/gengetopt --conf-parser 
+
+  The developers of gengetopt consider the fixed text that goes in all
+  gengetopt output files to be in the public domain:
+  we make no copyright claims on it.
+*/
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+/* If we use autoconf.  */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+/* Check for configure's getopt check result.  */
+#ifndef HAVE_GETOPT_LONG
+#include "getopt.h"
+#else
+#include <getopt.h>
+#endif
+
+#ifndef HAVE_STRDUP
+#define strdup gengetopt_strdup
+#endif /* HAVE_STRDUP */
+
+#include "cmdline.h"
+
+
+void
+cmdline_parser_print_version (void)
+{
+  printf ("%s %s\n", PACKAGE, VERSION);
+}
+
+void
+cmdline_parser_print_help (void)
+{
+  cmdline_parser_print_version ();
+  printf("\n"
+  "Usage: %s [OPTIONS]...\n", PACKAGE);
+  printf("   -h         --help             Print help and exit\n");
+  printf("   -V         --version          Print version and exit\n");
+  printf("   -f         --fg               Run in foreground (default=off)\n");
+  printf("   -d         --debug            Run in debug mode (default=off)\n");
+  printf("   -cSTRING   --conf=STRING      Read configuration file\n");
+  printf("              --pidfile=STRING   Filename of process id file (default='./sgsnemu.pid')\n");
+  printf("              --statedir=STRING  Directory of nonvolatile data (default='./')\n");
+  printf("              --dns=STRING       DNS Server to use\n");
+  printf("   -lSTRING   --listen=STRING    Local interface\n");
+  printf("   -rSTRING   --remote=STRING    Remote host\n");
+  printf("   -nSTRING   --net=STRING       Network (default='192.168.0.0')\n");
+  printf("              --mask=STRING      Network mask (default='255.255.255.0')\n");
+  printf("              --contexts=INT     Number of contexts (default='1')\n");
+  printf("              --static           Allocate static tun ifterface (default=off)\n");
+  printf("              --timelimit=INT    Exit after timelimit seconds (default='0')\n");
+  printf("   -aSTRING   --apn=STRING       Access point name (default='internet')\n");
+  printf("   -iSTRING   --imsi=STRING      IMSI (default='240010123456789')\n");
+  printf("   -mSTRING   --msisdn=STRING    Mobile Station ISDN number (default='46702123456')\n");
+  printf("   -qINT      --qos=INT          Requested quality of service (default='0x0b921f')\n");
+  printf("   -uSTRING   --uid=STRING       Login user ID (default='mig')\n");
+  printf("   -pSTRING   --pwd=STRING       Login password (default='hemmelig')\n");
+}
+
+
+#ifndef HAVE_STRDUP
+/* gengetopt_strdup(): automatically generated from strdup.c. */
+/* strdup.c replacement of strdup, which is not standard */
+static char *
+gengetopt_strdup (const char *s)
+{
+  char *result = (char*)malloc(strlen(s) + 1);
+  if (result == (char*)0)
+    return (char*)0;
+  strcpy(result, s);
+  return result;
+}
+#endif /* HAVE_STRDUP */
+
+int
+cmdline_parser (int argc, char * const *argv, struct gengetopt_args_info *args_info)
+{
+  int c;	/* Character of the parsed option.  */
+  int missing_required_options = 0;
+
+  args_info->help_given = 0 ;
+  args_info->version_given = 0 ;
+  args_info->fg_given = 0 ;
+  args_info->debug_given = 0 ;
+  args_info->conf_given = 0 ;
+  args_info->pidfile_given = 0 ;
+  args_info->statedir_given = 0 ;
+  args_info->dns_given = 0 ;
+  args_info->listen_given = 0 ;
+  args_info->remote_given = 0 ;
+  args_info->net_given = 0 ;
+  args_info->mask_given = 0 ;
+  args_info->contexts_given = 0 ;
+  args_info->static_given = 0 ;
+  args_info->timelimit_given = 0 ;
+  args_info->apn_given = 0 ;
+  args_info->imsi_given = 0 ;
+  args_info->msisdn_given = 0 ;
+  args_info->qos_given = 0 ;
+  args_info->uid_given = 0 ;
+  args_info->pwd_given = 0 ;
+#define clear_args() { \
+  args_info->fg_flag = 0;\
+  args_info->debug_flag = 0;\
+  args_info->conf_arg = NULL; \
+  args_info->pidfile_arg = strdup("./sgsnemu.pid") ;\
+  args_info->statedir_arg = strdup("./") ;\
+  args_info->dns_arg = NULL; \
+  args_info->listen_arg = NULL; \
+  args_info->remote_arg = NULL; \
+  args_info->net_arg = strdup("192.168.0.0") ;\
+  args_info->mask_arg = strdup("255.255.255.0") ;\
+  args_info->contexts_arg = 1 ;\
+  args_info->static_flag = 0;\
+  args_info->timelimit_arg = 0 ;\
+  args_info->apn_arg = strdup("internet") ;\
+  args_info->imsi_arg = strdup("240010123456789") ;\
+  args_info->msisdn_arg = strdup("46702123456") ;\
+  args_info->qos_arg = 0x0b921f ;\
+  args_info->uid_arg = strdup("mig") ;\
+  args_info->pwd_arg = strdup("hemmelig") ;\
+}
+
+  clear_args();
+
+  optarg = 0;
+  optind = 1;
+  opterr = 1;
+  optopt = '?';
+
+  while (1)
+    {
+      int option_index = 0;
+      char *stop_char;
+      static struct option long_options[] = {
+        { "help",	0, NULL, 'h' },
+        { "version",	0, NULL, 'V' },
+        { "fg",	0, NULL, 'f' },
+        { "debug",	0, NULL, 'd' },
+        { "conf",	1, NULL, 'c' },
+        { "pidfile",	1, NULL, 0 },
+        { "statedir",	1, NULL, 0 },
+        { "dns",	1, NULL, 0 },
+        { "listen",	1, NULL, 'l' },
+        { "remote",	1, NULL, 'r' },
+        { "net",	1, NULL, 'n' },
+        { "mask",	1, NULL, 0 },
+        { "contexts",	1, NULL, 0 },
+        { "static",	0, NULL, 0 },
+        { "timelimit",	1, NULL, 0 },
+        { "apn",	1, NULL, 'a' },
+        { "imsi",	1, NULL, 'i' },
+        { "msisdn",	1, NULL, 'm' },
+        { "qos",	1, NULL, 'q' },
+        { "uid",	1, NULL, 'u' },
+        { "pwd",	1, NULL, 'p' },
+        { NULL,	0, NULL, 0 }
+      };
+
+      c = getopt_long (argc, argv, "hVfdc:l:r:n:a:i:m:q:u:p:", long_options, &option_index);
+
+      if (c == -1) break;	/* Exit from `while (1)' loop.  */
+
+      switch (c)
+        {
+        case 'h':	/* Print help and exit.  */
+          clear_args ();
+          cmdline_parser_print_help ();
+          exit (EXIT_SUCCESS);
+
+        case 'V':	/* Print version and exit.  */
+          clear_args ();
+          cmdline_parser_print_version ();
+          exit (EXIT_SUCCESS);
+
+        case 'f':	/* Run in foreground.  */
+          if (args_info->fg_given)
+            {
+              fprintf (stderr, "%s: `--fg' (`-f') option given more than once\n", PACKAGE);
+              clear_args ();
+              exit (EXIT_FAILURE);
+            }
+          args_info->fg_given = 1;
+          args_info->fg_flag = !(args_info->fg_flag);
+          break;
+
+        case 'd':	/* Run in debug mode.  */
+          if (args_info->debug_given)
+            {
+              fprintf (stderr, "%s: `--debug' (`-d') option given more than once\n", PACKAGE);
+              clear_args ();
+              exit (EXIT_FAILURE);
+            }
+          args_info->debug_given = 1;
+          args_info->debug_flag = !(args_info->debug_flag);
+          break;
+
+        case 'c':	/* Read configuration file.  */
+          if (args_info->conf_given)
+            {
+              fprintf (stderr, "%s: `--conf' (`-c') option given more than once\n", PACKAGE);
+              clear_args ();
+              exit (EXIT_FAILURE);
+            }
+          args_info->conf_given = 1;
+          args_info->conf_arg = strdup (optarg);
+          break;
+
+        case 'l':	/* Local interface.  */
+          if (args_info->listen_given)
+            {
+              fprintf (stderr, "%s: `--listen' (`-l') option given more than once\n", PACKAGE);
+              clear_args ();
+              exit (EXIT_FAILURE);
+            }
+          args_info->listen_given = 1;
+          args_info->listen_arg = strdup (optarg);
+          break;
+
+        case 'r':	/* Remote host.  */
+          if (args_info->remote_given)
+            {
+              fprintf (stderr, "%s: `--remote' (`-r') option given more than once\n", PACKAGE);
+              clear_args ();
+              exit (EXIT_FAILURE);
+            }
+          args_info->remote_given = 1;
+          args_info->remote_arg = strdup (optarg);
+          break;
+
+        case 'n':	/* Network.  */
+          if (args_info->net_given)
+            {
+              fprintf (stderr, "%s: `--net' (`-n') option given more than once\n", PACKAGE);
+              clear_args ();
+              exit (EXIT_FAILURE);
+            }
+          args_info->net_given = 1;
+          args_info->net_arg = strdup (optarg);
+          break;
+
+        case 'a':	/* Access point name.  */
+          if (args_info->apn_given)
+            {
+              fprintf (stderr, "%s: `--apn' (`-a') option given more than once\n", PACKAGE);
+              clear_args ();
+              exit (EXIT_FAILURE);
+            }
+          args_info->apn_given = 1;
+          args_info->apn_arg = strdup (optarg);
+          break;
+
+        case 'i':	/* IMSI.  */
+          if (args_info->imsi_given)
+            {
+              fprintf (stderr, "%s: `--imsi' (`-i') option given more than once\n", PACKAGE);
+              clear_args ();
+              exit (EXIT_FAILURE);
+            }
+          args_info->imsi_given = 1;
+          args_info->imsi_arg = strdup (optarg);
+          break;
+
+        case 'm':	/* Mobile Station ISDN number.  */
+          if (args_info->msisdn_given)
+            {
+              fprintf (stderr, "%s: `--msisdn' (`-m') option given more than once\n", PACKAGE);
+              clear_args ();
+              exit (EXIT_FAILURE);
+            }
+          args_info->msisdn_given = 1;
+          args_info->msisdn_arg = strdup (optarg);
+          break;
+
+        case 'q':	/* Requested quality of service.  */
+          if (args_info->qos_given)
+            {
+              fprintf (stderr, "%s: `--qos' (`-q') option given more than once\n", PACKAGE);
+              clear_args ();
+              exit (EXIT_FAILURE);
+            }
+          args_info->qos_given = 1;
+          args_info->qos_arg = strtol (optarg,&stop_char,0);
+          break;
+
+        case 'u':	/* Login user ID.  */
+          if (args_info->uid_given)
+            {
+              fprintf (stderr, "%s: `--uid' (`-u') option given more than once\n", PACKAGE);
+              clear_args ();
+              exit (EXIT_FAILURE);
+            }
+          args_info->uid_given = 1;
+          args_info->uid_arg = strdup (optarg);
+          break;
+
+        case 'p':	/* Login password.  */
+          if (args_info->pwd_given)
+            {
+              fprintf (stderr, "%s: `--pwd' (`-p') option given more than once\n", PACKAGE);
+              clear_args ();
+              exit (EXIT_FAILURE);
+            }
+          args_info->pwd_given = 1;
+          args_info->pwd_arg = strdup (optarg);
+          break;
+
+
+        case 0:	/* Long option with no short option */
+          /* Filename of process id file.  */
+          if (strcmp (long_options[option_index].name, "pidfile") == 0)
+          {
+            if (args_info->pidfile_given)
+              {
+                fprintf (stderr, "%s: `--pidfile' option given more than once\n", PACKAGE);
+                clear_args ();
+                exit (EXIT_FAILURE);
+              }
+            args_info->pidfile_given = 1;
+            args_info->pidfile_arg = strdup (optarg);
+            break;
+          }
+          /* Directory of nonvolatile data.  */
+          else if (strcmp (long_options[option_index].name, "statedir") == 0)
+          {
+            if (args_info->statedir_given)
+              {
+                fprintf (stderr, "%s: `--statedir' option given more than once\n", PACKAGE);
+                clear_args ();
+                exit (EXIT_FAILURE);
+              }
+            args_info->statedir_given = 1;
+            args_info->statedir_arg = strdup (optarg);
+            break;
+          }
+          /* DNS Server to use.  */
+          else if (strcmp (long_options[option_index].name, "dns") == 0)
+          {
+            if (args_info->dns_given)
+              {
+                fprintf (stderr, "%s: `--dns' option given more than once\n", PACKAGE);
+                clear_args ();
+                exit (EXIT_FAILURE);
+              }
+            args_info->dns_given = 1;
+            args_info->dns_arg = strdup (optarg);
+            break;
+          }
+          /* Network mask.  */
+          else if (strcmp (long_options[option_index].name, "mask") == 0)
+          {
+            if (args_info->mask_given)
+              {
+                fprintf (stderr, "%s: `--mask' option given more than once\n", PACKAGE);
+                clear_args ();
+                exit (EXIT_FAILURE);
+              }
+            args_info->mask_given = 1;
+            args_info->mask_arg = strdup (optarg);
+            break;
+          }
+          /* Number of contexts.  */
+          else if (strcmp (long_options[option_index].name, "contexts") == 0)
+          {
+            if (args_info->contexts_given)
+              {
+                fprintf (stderr, "%s: `--contexts' option given more than once\n", PACKAGE);
+                clear_args ();
+                exit (EXIT_FAILURE);
+              }
+            args_info->contexts_given = 1;
+            args_info->contexts_arg = strtol (optarg,&stop_char,0);
+            break;
+          }
+          /* Allocate static tun ifterface.  */
+          else if (strcmp (long_options[option_index].name, "static") == 0)
+          {
+            if (args_info->static_given)
+              {
+                fprintf (stderr, "%s: `--static' option given more than once\n", PACKAGE);
+                clear_args ();
+                exit (EXIT_FAILURE);
+              }
+            args_info->static_given = 1;
+            args_info->static_flag = !(args_info->static_flag);
+            break;
+          }
+          /* Exit after timelimit seconds.  */
+          else if (strcmp (long_options[option_index].name, "timelimit") == 0)
+          {
+            if (args_info->timelimit_given)
+              {
+                fprintf (stderr, "%s: `--timelimit' option given more than once\n", PACKAGE);
+                clear_args ();
+                exit (EXIT_FAILURE);
+              }
+            args_info->timelimit_given = 1;
+            args_info->timelimit_arg = strtol (optarg,&stop_char,0);
+            break;
+          }
+
+        case '?':	/* Invalid option.  */
+          /* `getopt_long' already printed an error message.  */
+          exit (EXIT_FAILURE);
+
+        default:	/* bug: option not considered.  */
+          fprintf (stderr, "%s: option unknown: %c\n", PACKAGE, c);
+          abort ();
+        } /* switch */
+    } /* while */
+
+
+  if ( missing_required_options )
+    exit (EXIT_FAILURE);
+
+  return 0;
+}
+
+#define CONFIGPARSERBUFSIZE 1024
+
+int
+cmdline_parser_configfile (char * const filename, struct gengetopt_args_info *args_info, int override)
+{
+  FILE* file;
+  char linebuf[CONFIGPARSERBUFSIZE];
+  int line_num = 0;
+  int len;
+  int fnum;
+  char fopt[CONFIGPARSERBUFSIZE], farg[CONFIGPARSERBUFSIZE];
+  char *stop_char;
+
+  if ((file = fopen(filename, "r")) == NULL)
+    {
+      fprintf (stderr, "%s: Error opening configuration file '%s'\n",
+               PACKAGE, filename);
+      exit (EXIT_FAILURE);
+    }
+
+  while ((fgets(linebuf, CONFIGPARSERBUFSIZE, file)) != NULL)
+    {
+      ++line_num;
+      len = strlen(linebuf);
+      if (len == CONFIGPARSERBUFSIZE-1)
+        {
+          fprintf (stderr, "%s: Line longer than %d characters found in configuration file '%s'\n",
+                   PACKAGE, CONFIGPARSERBUFSIZE, filename);
+          exit (EXIT_FAILURE);
+        }
+
+      if (linebuf[0] == '#')
+        continue; /* Line was a comment */
+    
+      /* Get the option */
+      if ((fnum = sscanf(linebuf, "%s %s", fopt, farg)) > 0)
+        {
+          if (!strcmp(fopt, "help"))
+            {
+              if (override || !args_info->help_given)
+                {
+                  args_info->help_given = 1;
+                  
+                }
+              continue;
+            }
+          if (!strcmp(fopt, "version"))
+            {
+              if (override || !args_info->version_given)
+                {
+                  args_info->version_given = 1;
+                  
+                }
+              continue;
+            }
+          if (!strcmp(fopt, "fg"))
+            {
+              if (override || !args_info->fg_given)
+                {
+                  args_info->fg_given = 1;
+                  args_info->fg_flag = !(args_info->fg_flag);
+                }
+              continue;
+            }
+          if (!strcmp(fopt, "debug"))
+            {
+              if (override || !args_info->debug_given)
+                {
+                  args_info->debug_given = 1;
+                  args_info->debug_flag = !(args_info->debug_flag);
+                }
+              continue;
+            }
+          if (!strcmp(fopt, "conf"))
+            {
+              if (override || !args_info->conf_given)
+                {
+                  args_info->conf_given = 1;
+                  if (fnum == 2)
+                    args_info->conf_arg = strdup (farg);
+                  else
+                    {
+                      fprintf (stderr, "%s:%d: required <option_name> <option_val>\n",
+                               filename, line_num);
+                      exit (EXIT_FAILURE);
+                    }
+                }
+              continue;
+            }
+          if (!strcmp(fopt, "pidfile"))
+            {
+              if (override || !args_info->pidfile_given)
+                {
+                  args_info->pidfile_given = 1;
+                  if (fnum == 2)
+                    args_info->pidfile_arg = strdup (farg);
+                  else
+                    {
+                      fprintf (stderr, "%s:%d: required <option_name> <option_val>\n",
+                               filename, line_num);
+                      exit (EXIT_FAILURE);
+                    }
+                }
+              continue;
+            }
+          if (!strcmp(fopt, "statedir"))
+            {
+              if (override || !args_info->statedir_given)
+                {
+                  args_info->statedir_given = 1;
+                  if (fnum == 2)
+                    args_info->statedir_arg = strdup (farg);
+                  else
+                    {
+                      fprintf (stderr, "%s:%d: required <option_name> <option_val>\n",
+                               filename, line_num);
+                      exit (EXIT_FAILURE);
+                    }
+                }
+              continue;
+            }
+          if (!strcmp(fopt, "dns"))
+            {
+              if (override || !args_info->dns_given)
+                {
+                  args_info->dns_given = 1;
+                  if (fnum == 2)
+                    args_info->dns_arg = strdup (farg);
+                  else
+                    {
+                      fprintf (stderr, "%s:%d: required <option_name> <option_val>\n",
+                               filename, line_num);
+                      exit (EXIT_FAILURE);
+                    }
+                }
+              continue;
+            }
+          if (!strcmp(fopt, "listen"))
+            {
+              if (override || !args_info->listen_given)
+                {
+                  args_info->listen_given = 1;
+                  if (fnum == 2)
+                    args_info->listen_arg = strdup (farg);
+                  else
+                    {
+                      fprintf (stderr, "%s:%d: required <option_name> <option_val>\n",
+                               filename, line_num);
+                      exit (EXIT_FAILURE);
+                    }
+                }
+              continue;
+            }
+          if (!strcmp(fopt, "remote"))
+            {
+              if (override || !args_info->remote_given)
+                {
+                  args_info->remote_given = 1;
+                  if (fnum == 2)
+                    args_info->remote_arg = strdup (farg);
+                  else
+                    {
+                      fprintf (stderr, "%s:%d: required <option_name> <option_val>\n",
+                               filename, line_num);
+                      exit (EXIT_FAILURE);
+                    }
+                }
+              continue;
+            }
+          if (!strcmp(fopt, "net"))
+            {
+              if (override || !args_info->net_given)
+                {
+                  args_info->net_given = 1;
+                  if (fnum == 2)
+                    args_info->net_arg = strdup (farg);
+                  else
+                    {
+                      fprintf (stderr, "%s:%d: required <option_name> <option_val>\n",
+                               filename, line_num);
+                      exit (EXIT_FAILURE);
+                    }
+                }
+              continue;
+            }
+          if (!strcmp(fopt, "mask"))
+            {
+              if (override || !args_info->mask_given)
+                {
+                  args_info->mask_given = 1;
+                  if (fnum == 2)
+                    args_info->mask_arg = strdup (farg);
+                  else
+                    {
+                      fprintf (stderr, "%s:%d: required <option_name> <option_val>\n",
+                               filename, line_num);
+                      exit (EXIT_FAILURE);
+                    }
+                }
+              continue;
+            }
+          if (!strcmp(fopt, "contexts"))
+            {
+              if (override || !args_info->contexts_given)
+                {
+                  args_info->contexts_given = 1;
+                  if (fnum == 2)
+                    args_info->contexts_arg = strtol (farg,&stop_char,0);
+                  else
+                    {
+                      fprintf (stderr, "%s:%d: required <option_name> <option_val>\n",
+                               filename, line_num);
+                      exit (EXIT_FAILURE);
+                    }
+                }
+              continue;
+            }
+          if (!strcmp(fopt, "static"))
+            {
+              if (override || !args_info->static_given)
+                {
+                  args_info->static_given = 1;
+                  args_info->static_flag = !(args_info->static_flag);
+                }
+              continue;
+            }
+          if (!strcmp(fopt, "timelimit"))
+            {
+              if (override || !args_info->timelimit_given)
+                {
+                  args_info->timelimit_given = 1;
+                  if (fnum == 2)
+                    args_info->timelimit_arg = strtol (farg,&stop_char,0);
+                  else
+                    {
+                      fprintf (stderr, "%s:%d: required <option_name> <option_val>\n",
+                               filename, line_num);
+                      exit (EXIT_FAILURE);
+                    }
+                }
+              continue;
+            }
+          if (!strcmp(fopt, "apn"))
+            {
+              if (override || !args_info->apn_given)
+                {
+                  args_info->apn_given = 1;
+                  if (fnum == 2)
+                    args_info->apn_arg = strdup (farg);
+                  else
+                    {
+                      fprintf (stderr, "%s:%d: required <option_name> <option_val>\n",
+                               filename, line_num);
+                      exit (EXIT_FAILURE);
+                    }
+                }
+              continue;
+            }
+          if (!strcmp(fopt, "imsi"))
+            {
+              if (override || !args_info->imsi_given)
+                {
+                  args_info->imsi_given = 1;
+                  if (fnum == 2)
+                    args_info->imsi_arg = strdup (farg);
+                  else
+                    {
+                      fprintf (stderr, "%s:%d: required <option_name> <option_val>\n",
+                               filename, line_num);
+                      exit (EXIT_FAILURE);
+                    }
+                }
+              continue;
+            }
+          if (!strcmp(fopt, "msisdn"))
+            {
+              if (override || !args_info->msisdn_given)
+                {
+                  args_info->msisdn_given = 1;
+                  if (fnum == 2)
+                    args_info->msisdn_arg = strdup (farg);
+                  else
+                    {
+                      fprintf (stderr, "%s:%d: required <option_name> <option_val>\n",
+                               filename, line_num);
+                      exit (EXIT_FAILURE);
+                    }
+                }
+              continue;
+            }
+          if (!strcmp(fopt, "qos"))
+            {
+              if (override || !args_info->qos_given)
+                {
+                  args_info->qos_given = 1;
+                  if (fnum == 2)
+                    args_info->qos_arg = strtol (farg,&stop_char,0);
+                  else
+                    {
+                      fprintf (stderr, "%s:%d: required <option_name> <option_val>\n",
+                               filename, line_num);
+                      exit (EXIT_FAILURE);
+                    }
+                }
+              continue;
+            }
+          if (!strcmp(fopt, "uid"))
+            {
+              if (override || !args_info->uid_given)
+                {
+                  args_info->uid_given = 1;
+                  if (fnum == 2)
+                    args_info->uid_arg = strdup (farg);
+                  else
+                    {
+                      fprintf (stderr, "%s:%d: required <option_name> <option_val>\n",
+                               filename, line_num);
+                      exit (EXIT_FAILURE);
+                    }
+                }
+              continue;
+            }
+          if (!strcmp(fopt, "pwd"))
+            {
+              if (override || !args_info->pwd_given)
+                {
+                  args_info->pwd_given = 1;
+                  if (fnum == 2)
+                    args_info->pwd_arg = strdup (farg);
+                  else
+                    {
+                      fprintf (stderr, "%s:%d: required <option_name> <option_val>\n",
+                               filename, line_num);
+                      exit (EXIT_FAILURE);
+                    }
+                }
+              continue;
+            }
+          
+
+          /* Tried all known options. This one is unknown! */
+          fprintf (stderr, "%s: Unknown option '%s' found in %s\n",
+                   PACKAGE, fopt, filename);
+          exit (EXIT_FAILURE);
+        }
+    } /* while */
+  fclose(file); /* No error checking on close */
+
+  return 0;
+}
diff --git a/sgsnemu/cmdline.ggo b/sgsnemu/cmdline.ggo
new file mode 100644
index 0000000..6b21818
--- /dev/null
+++ b/sgsnemu/cmdline.ggo
@@ -0,0 +1,37 @@
+#  OpenGGSN - Gateway GPRS Support Node
+#  Copyright (C) 2002 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):
+
+option  "fg"          f "Run in foreground"              flag   off
+option  "debug"       d "Run in debug mode"              flag   off
+
+option  "conf"        c "Read configuration file"        string no
+option  "pidfile"     - "Filename of process id file"    string default="./sgsnemu.pid" no
+option  "statedir"    - "Directory of nonvolatile data"  string default="./" no
+
+option  "dns"         - "DNS Server to use"              string no
+option  "listen"      l "Local interface"                string no
+option  "remote"      r "Remote host"                    string no
+option  "net"         n "Network"                        string default="192.168.0.0" no
+option  "mask"        - "Network mask"                   string default="255.255.255.0" no
+
+option  "contexts"    - "Number of contexts"             int    default="1" no
+option  "static"      - "Allocate static tun ifterface"  flag   off
+option  "timelimit"   - "Exit after timelimit seconds"   int default="0" no
+
+option  "apn"         a "Access point name"              string default="internet" no
+option  "imsi"        i "IMSI"                           string default="240010123456789" no
+option  "msisdn"      m "Mobile Station ISDN number"     string default="46702123456" no
+option  "qos"         q "Requested quality of service"   int    default="0x0b921f" no
+option  "uid"         u "Login user ID"                  string default="mig" no
+option  "pwd"         p "Login password"                 string default="hemmelig" no
+
diff --git a/sgsnemu/cmdline.h b/sgsnemu/cmdline.h
new file mode 100644
index 0000000..cd4ac6e
--- /dev/null
+++ b/sgsnemu/cmdline.h
@@ -0,0 +1,77 @@
+/* cmdline.h */
+
+/* File autogenerated by gengetopt version 2.8rc  */
+
+#ifndef _cmdline_h
+#define _cmdline_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/* Don't define PACKAGE and VERSION if we use automake.  */
+#ifndef PACKAGE
+#define PACKAGE ""
+#endif
+
+#ifndef VERSION
+#define VERSION ""
+#endif
+
+struct gengetopt_args_info
+{
+  int fg_flag;	/* Run in foreground (default=off).  */
+  int debug_flag;	/* Run in debug mode (default=off).  */
+  char * conf_arg;	/* Read configuration file.  */
+  char * pidfile_arg;	/* Filename of process id file (default='./sgsnemu.pid').  */
+  char * statedir_arg;	/* Directory of nonvolatile data (default='./').  */
+  char * dns_arg;	/* DNS Server to use.  */
+  char * listen_arg;	/* Local interface.  */
+  char * remote_arg;	/* Remote host.  */
+  char * net_arg;	/* Network (default='192.168.0.0').  */
+  char * mask_arg;	/* Network mask (default='255.255.255.0').  */
+  int contexts_arg;	/* Number of contexts (default='1').  */
+  int static_flag;	/* Allocate static tun ifterface (default=off).  */
+  int timelimit_arg;	/* Exit after timelimit seconds (default='0').  */
+  char * apn_arg;	/* Access point name (default='internet').  */
+  char * imsi_arg;	/* IMSI (default='240010123456789').  */
+  char * msisdn_arg;	/* Mobile Station ISDN number (default='46702123456').  */
+  int qos_arg;	/* Requested quality of service (default='0x0b921f').  */
+  char * uid_arg;	/* Login user ID (default='mig').  */
+  char * pwd_arg;	/* Login password (default='hemmelig').  */
+
+  int help_given ;	/* Whether help was given.  */
+  int version_given ;	/* Whether version was given.  */
+  int fg_given ;	/* Whether fg was given.  */
+  int debug_given ;	/* Whether debug was given.  */
+  int conf_given ;	/* Whether conf was given.  */
+  int pidfile_given ;	/* Whether pidfile was given.  */
+  int statedir_given ;	/* Whether statedir was given.  */
+  int dns_given ;	/* Whether dns was given.  */
+  int listen_given ;	/* Whether listen was given.  */
+  int remote_given ;	/* Whether remote was given.  */
+  int net_given ;	/* Whether net was given.  */
+  int mask_given ;	/* Whether mask was given.  */
+  int contexts_given ;	/* Whether contexts was given.  */
+  int static_given ;	/* Whether static was given.  */
+  int timelimit_given ;	/* Whether timelimit was given.  */
+  int apn_given ;	/* Whether apn was given.  */
+  int imsi_given ;	/* Whether imsi was given.  */
+  int msisdn_given ;	/* Whether msisdn was given.  */
+  int qos_given ;	/* Whether qos was given.  */
+  int uid_given ;	/* Whether uid was given.  */
+  int pwd_given ;	/* Whether pwd was given.  */
+
+} ;
+
+int cmdline_parser (int argc, char * const *argv, struct gengetopt_args_info *args_info);
+
+void cmdline_parser_print_help(void);
+void cmdline_parser_print_version(void);
+
+int cmdline_parser_configfile (char * const filename, struct gengetopt_args_info *args_info, int override);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* _cmdline_h */
diff --git a/sgsnemu/ggsn_restart b/sgsnemu/ggsn_restart
new file mode 100644
index 0000000..82cced2
--- /dev/null
+++ b/sgsnemu/ggsn_restart
@@ -0,0 +1 @@
+51
diff --git a/sgsnemu/sgsnemu.c b/sgsnemu/sgsnemu.c
new file mode 100644
index 0000000..b25fe87
--- /dev/null
+++ b/sgsnemu/sgsnemu.c
@@ -0,0 +1,754 @@
+/* 
+ *  OpenGGSN - Gateway GPRS Support Node
+ *  Copyright (C) 2002 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):
+ * 
+ */
+
+/*
+ * sgsnemu.c
+ *
+ */
+
+
+#ifdef __linux__
+#define _GNU_SOURCE 1		/* strdup() prototype, broken arpa/inet.h */
+#endif
+
+
+#include <syslog.h>
+#include <ctype.h>
+#include <netdb.h>
+#include <signal.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <sys/wait.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+#include <net/if.h>
+#include <features.h>
+#include <errno.h>
+#include <asm/types.h>
+#include <sys/socket.h>
+#include <linux/netlink.h>
+#include <resolv.h>
+#include <time.h>
+
+#include "tun.h"
+#include "../gtp/pdp.h"
+#include "../gtp/gtp.h"
+#include "cmdline.h"
+
+/* State variable      */
+/* 0: Idle             */
+/* 1: Wait_connect     */
+/* 2: Connected        */
+/* 3: Wait_disconnect  */
+int state = 0;                  
+
+int maxfd = 0;	                /* For select() */
+int tun_fd = -1;		/* Network file descriptor */
+struct tun_t *tun;              /* TUN instance            */
+struct tun_t *tun1, *tun2;      /* TUN instance for client */
+int tun_fd1 = -1;		/* Network file descriptor */
+int tun_fd2 = -1;		/* Network file descriptor */
+struct in_addr net, mask;       /* Network interface       */
+int stattun;                    /* Allocate static tun     */
+
+int debug;                      /* Print debug messages */
+
+int encaps_printf(void *p, void *packet, unsigned len)
+{
+  int i;
+  printf("The packet looks like this:\n");
+  for( i=0; i<len; i++) {
+    printf("%02x ", (unsigned char)*(char *)(packet+i));
+    if (!((i+1)%16)) printf("\n");
+  };
+  printf("\n"); 
+}
+
+/* Used to write process ID to file. Assume someone else will delete */
+void log_pid(char *pidfile) {
+  FILE *file;
+  mode_t oldmask;
+  
+  oldmask = umask(022);
+  file = fopen(pidfile, "w");
+  umask(oldmask);
+  if(!file)
+    return;
+  fprintf(file, "%d\n", getpid());
+  fclose(file);
+}
+
+
+int create_tun() {
+  char buf[1024];
+  char snet[100], smask[100];
+
+  if ((tun_fd = tun_newtun((struct tun_t**) &tun)) > maxfd)
+    maxfd = tun_fd;
+
+  if (tun_fd == -1) {
+    printf("Failed to open tun\n");
+    exit(1);
+  }
+
+  strncpy(snet, inet_ntoa(net), 100);
+  strncpy(smask, inet_ntoa(mask), 100);
+
+  sprintf(buf, "ifconfig %s %s mtu 1450 netmask %s",
+	  tun->devname, snet, smask);
+  if (debug) printf("%s\n", buf);
+  system(buf);
+
+  system("echo 1 > /proc/sys/net/ipv4/ip_forward");
+  
+  return 0;
+}
+
+int getip(struct pdp_t *pdp, void* ipif, struct ul66_t *eua,
+	  struct in_addr *net, struct in_addr *mask) {
+  struct in_addr addr;
+  uint32_t ip_start, ip_end, ip_cur;
+  struct pdp_t *pdp_;
+  struct ul66_t eua_;
+
+  printf("Begin getip %d %d %2x%2x%2x%2x\n", (unsigned)ipif, eua->l, 
+	 eua->v[2],eua->v[3],eua->v[4],eua->v[5]);
+
+  ip_start = ntoh32(net->s_addr & mask->s_addr);
+  ip_end   = ntoh32(hton32(ip_start) | ~mask->s_addr);
+
+  /* By convention the first address is the network address, and the last */
+  /* address is the broadcast address. This way two IP addresses are "lost" */
+  ip_start++; 
+  
+  if (eua->l == 0) { /* No address supplied. Find one that is available! */
+    /* This routine does linear search. In order to support millions of 
+     * addresses we should instead keep a linked list of available adresses */
+    for (ip_cur = ip_start; ip_cur < ip_end; ip_cur++) {
+      addr.s_addr = hton32(ip_cur);
+      pdp_ntoeua(&addr, &eua_);
+      if (pdp_ipget(&pdp_, ipif, &eua_) == -1) {
+	pdp_ntoeua(&addr, &pdp->eua);
+	pdp->ipif = ipif;
+	return 0;
+      };
+    }
+    return EOF; /* No addresses available */
+  }
+  else { /* Address supplied */
+    if (pdp_ipget(&pdp_, ipif, eua) == -1) {
+      pdp->ipif = ipif;
+      pdp->eua.l = eua->l;
+      memcpy(pdp->eua.v, eua->v, eua->l);
+      return 0;
+    }
+    else return EOF; /* Specified address not available */
+  }
+}
+
+int delete_context(struct pdp_t *pdp) {
+
+  if (!stattun) {
+    tun_freetun((struct tun_t*) pdp->ipif);
+    
+    /* Clean up locally */
+    if (pdp->ipif == tun1) {
+      printf("Deleting tun interface\n");
+      tun_fd1=-1;
+    }
+    if (pdp->ipif == tun2) {
+      printf("Deleting tun interface\n");
+      tun_fd2=-1;
+    }
+  }
+
+  pdp_ipdel(pdp);
+  return 0;
+}
+
+int create_pdp_conf(struct pdp_t *pdp, int cause) {
+  char buf[1024];
+
+  printf("Received create PDP context response. Cause value: %d\n", cause);
+  if ((cause == 128) && (pdp->eua.l == 6)) {
+
+
+    if (stattun) {
+      pdp->ipif = tun1;
+    }
+    else {
+      printf("Setting up interface and routing\n");
+      if ((tun_fd = tun_newtun((struct tun_t**) &pdp->ipif)) > maxfd)
+	maxfd = tun_fd;
+
+      /* HACK: Only support select of up to two tun interfaces */
+      if (NULL == tun1) {
+	tun1 = pdp->ipif;
+	tun_fd1 = tun1->fd;
+      }
+      else {
+	tun2 = pdp->ipif;
+	tun_fd2 = tun2->fd;
+      }
+      
+      /*system("ifconfig tun0 192.168.0.10");*/
+      sprintf(buf, "ifconfig %s %hu.%hu.%hu.%hu", 
+	      ((struct tun_t*) pdp->ipif)->devname,
+	      pdp->eua.v[2], pdp->eua.v[3], pdp->eua.v[4], pdp->eua.v[5]);
+      printf(buf);  printf("\n");
+      system(buf);
+      
+      
+      /*system("route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.0.10");*/
+      sprintf(buf, "route add -net %hu.%hu.%hu.0 netmask 255.255.255.0 gw %hu.%hu.%hu.%hu", 
+	      pdp->eua.v[2], pdp->eua.v[3], pdp->eua.v[4],
+	      pdp->eua.v[2], pdp->eua.v[3], pdp->eua.v[4], pdp->eua.v[5]);
+      printf(buf);  printf("\n");
+      system(buf);
+      
+      system("echo 1 > /proc/sys/net/ipv4/ip_forward");
+    }
+    
+    pdp_ipset(pdp, pdp->ipif, &pdp->eua);
+
+    state = 2;                      /* Connected */
+  }
+  else {
+    state = 0;
+  }
+
+  printf("\n");
+
+  return 0;
+}
+
+
+int create_pdp_ind(struct pdp_t *pdp) {
+
+  printf("Received create PDP context request\n");
+
+  pdp->eua.l=0; /* TODO: Indicates dynamic IP */
+
+  /* ulcpy(&pdp->qos_neg, &pdp->qos_req, sizeof(pdp->qos_req.v)); */
+  memcpy(pdp->qos_neg0, pdp->qos_req0, sizeof(pdp->qos_neg));
+
+  getip(pdp, &tun, &pdp->eua, &net, &mask);
+  pdp_ipset(pdp, pdp->ipif, &pdp->eua);
+
+  return 0; /* Success */
+}
+
+
+int delete_pdp_conf(struct pdp_t *pdp, int cause) {
+  printf("Received delete PDP context response. Cause value: %d\n", cause);
+  return 0;
+}
+
+int echo_conf(struct pdp_t *pdp, int cause) {
+  printf("Received echo response. Cause value: %d\n", cause);
+  return 0;
+}
+
+int conf(int type, int cause, struct pdp_t* pdp, void *aid) {
+  /* if (cause < 0) return 0; Some error occurred. We don't care */
+  switch (type) {
+  case GTP_ECHO_REQ:
+    return echo_conf(pdp, cause);
+  case GTP_CREATE_PDP_REQ:
+    if (cause !=128) return 0; /* Request not accepted. We don't care */
+    return create_pdp_conf(pdp, cause);
+  case GTP_DELETE_PDP_REQ:
+    if (cause !=128) return 0; /* Request not accepted. We don't care */
+    return delete_pdp_conf(pdp, cause);
+  default:
+    return 0;
+  }
+}
+
+int encaps_gtp_client(void *gsn, struct tun_t *tun, void *pack, unsigned len) {
+  /* Special client version which checks for source address instead */
+  struct pdp_t *pdp;
+  struct in_addr addr;
+  struct ul66_t eua;
+  /*printf("encaps_gtp. Packet received: forwarding to gtp.\n");*/
+  /* First we need to extract the IP destination address */
+  memcpy(&addr.s_addr, pack+12, 4); /* This ought to be dest addr */
+  pdp_ntoeua(&addr, &eua);
+  if (pdp_ipget(&pdp, tun, &eua) == 0) {
+    return gtp_gpdu((struct gsn_t*) gsn, pdp, pack, len);
+  }
+  else {
+    printf("Received packet with no destination!!!\n");
+    return 0;
+  }
+}
+
+int encaps_tun(struct pdp_t *pdp, void *pack, unsigned len) {
+  /*  printf("encaps_tun. Packet received: forwarding to tun\n");*/
+  return tun_encaps((struct tun_t*) pdp->ipif, pack, len);
+}
+
+int main(int argc, char **argv)
+{
+  /* gengeopt declarations */
+  struct gengetopt_args_info args_info;
+
+  /* function-local options */
+
+  struct hostent *host;
+
+  struct in_addr listen, remote;
+  struct in_addr dns;
+
+  int gtpfd = -1;		/* Network file descriptor */
+  struct gsn_t *gsn;            /* GSN instance            */
+
+  fd_set fds;			/* For select() */
+  struct timeval idleTime;	/* How long to select() */
+
+  struct pdp_t *pdp[2];
+	
+  int n; /* For counter */
+
+  int contexts; /* Number of contexts to create */
+  int timelimit; /* Number of seconds to be connected */
+  int starttime; /* Time program was started */
+
+  struct ul_t imsi, qos, apn, msisdn;
+  unsigned char qosh[3], imsih[8], apnh[256], msisdnh[256];
+  struct ul255_t pco;
+  uint64_t imsi3;
+
+  /* open a connection to the syslog daemon */
+  /*openlog(PACKAGE, LOG_PID, LOG_DAEMON);*/
+  openlog(PACKAGE, (LOG_PID | LOG_PERROR), LOG_DAEMON);
+
+  if (cmdline_parser (argc, argv, &args_info) != 0)
+    exit(1);
+  if (args_info.debug_flag) {
+    printf("remote: %s\n", args_info.remote_arg);
+    printf("listen: %s\n", args_info.listen_arg);
+    printf("conf: %s\n", args_info.conf_arg);
+    printf("fg: %d\n", args_info.fg_flag);
+    printf("debug: %d\n", args_info.debug_flag);
+    printf("imsi: %s\n", args_info.imsi_arg);
+    printf("qos: %#08x\n", args_info.qos_arg);
+    printf("apn: %s\n", args_info.apn_arg);
+    printf("msisdn: %s\n", args_info.msisdn_arg);
+    printf("uid: %s\n", args_info.uid_arg);
+    printf("pwd: %s\n", args_info.pwd_arg);
+    printf("static: %d\n", args_info.static_flag);
+    printf("net: %s\n", args_info.net_arg);
+    printf("mask: %s\n", args_info.mask_arg);
+    printf("pidfile: %s\n", args_info.pidfile_arg);
+    printf("statedir: %s\n", args_info.statedir_arg);
+    printf("dns: %s\n", args_info.dns_arg);
+    printf("contexts: %d\n", args_info.contexts_arg);
+    printf("timelimit: %d\n", args_info.timelimit_arg);
+  }
+
+  /* Try out our new parser */
+  
+  if (args_info.conf_arg) {
+    if (cmdline_parser_configfile (args_info.conf_arg, &args_info, 0) != 0)
+      exit(1);
+    if (args_info.debug_flag) {
+      printf("cmdline_parser_configfile\n");
+      printf("remote: %s\n", args_info.remote_arg);
+      printf("listen: %s\n", args_info.listen_arg);
+      printf("conf: %s\n", args_info.conf_arg);
+      printf("fg: %d\n", args_info.fg_flag);
+      printf("debug: %d\n", args_info.debug_flag);
+      printf("imsi: %s\n", args_info.imsi_arg);
+      printf("qos: %#08x\n", args_info.qos_arg);
+      printf("apn: %s\n", args_info.apn_arg);
+      printf("msisdn: %s\n", args_info.msisdn_arg);
+      printf("uid: %s\n", args_info.uid_arg);
+      printf("pwd: %s\n", args_info.pwd_arg);
+      printf("static: %d\n", args_info.static_flag);
+      printf("net: %s\n", args_info.net_arg);
+      printf("mask: %s\n", args_info.mask_arg);
+      printf("pidfile: %s\n", args_info.pidfile_arg);
+      printf("statedir: %s\n", args_info.statedir_arg);
+      printf("dns: %s\n", args_info.dns_arg);
+      printf("contexts: %d\n", args_info.contexts_arg);
+      printf("timelimit: %d\n", args_info.timelimit_arg);
+    }
+  }
+
+  /* Handle each option */
+
+  /* foreground                                                   */
+  /* If flag not given run as a daemon                            */
+  if (!args_info.fg_flag)
+    {
+      closelog(); 
+      /* Close the standard file descriptors. Why? */
+      freopen("/dev/null", "w", stdout);
+      freopen("/dev/null", "w", stderr);
+      freopen("/dev/null", "r", stdin);
+      daemon(0, 0);
+      /* Open log again. This time with new pid */
+      openlog(PACKAGE, LOG_PID, LOG_DAEMON);
+    }
+
+  /* debug                                                        */
+  debug = args_info.debug_flag;
+
+  /* pidfile */
+  /* This has to be done after we have our final pid */
+  if (args_info.pidfile_arg) {
+    log_pid(args_info.pidfile_arg);
+  }
+
+  /* dns                                                          */
+  /* If no dns option is given use system         default         */
+  /* Do hostname lookup to translate hostname to IP address       */
+  printf("\n");
+  if (args_info.dns_arg) {
+    if (!(host = gethostbyname(args_info.dns_arg))) {
+      fprintf(stderr, "%s: Invalid dns address: %s!\n", 
+	      PACKAGE, args_info.dns_arg);
+      syslog(LOG_ERR, "Invalid dns address: %s!", 
+	     args_info.dns_arg);
+      exit(1);
+    }
+    else {
+      memcpy(&dns.s_addr, host->h_addr, host->h_length);
+      _res.nscount = 1;
+      _res.nsaddr_list[0].sin_addr = dns;
+      printf("Using DNS server:      %s (%s)\n", args_info.dns_arg, inet_ntoa(dns));
+    }
+  }
+  else {
+    dns.s_addr= 0;
+    printf("Using default DNS server\n");
+  }
+
+  /* listen                                                       */
+  /* If no listen option is specified listen to any local port    */
+  /* Do hostname lookup to translate hostname to IP address       */
+  if (args_info.listen_arg) {
+    if (!(host = gethostbyname(args_info.listen_arg))) {
+      fprintf(stderr, "%s: Invalid listening address: %s!\n", 
+	      PACKAGE, args_info.listen_arg);
+      syslog(LOG_ERR, "Invalid listening address: %s!", 
+	     args_info.listen_arg);
+      exit(1);
+    }
+    else {
+      memcpy(&listen.s_addr, host->h_addr, host->h_length);
+      printf("Local IP address is:   %s (%s)\n", args_info.listen_arg, inet_ntoa(listen));
+    }
+  }
+  else {
+    fprintf(stderr, "%s: Listening address must be specified: %s!\n", 
+	    PACKAGE, args_info.listen_arg);
+    syslog(LOG_ERR, "Listening address must be specified: %s!", 
+	   args_info.listen_arg);
+    exit(1);
+  }
+  
+  
+  /* remote                                                       */
+  /* If no remote option is specified terminate                   */
+  /* Do hostname lookup to translate hostname to IP address       */
+  if (args_info.remote_arg) {
+    if (!(host = gethostbyname(args_info.remote_arg))) {
+      fprintf(stderr, "%s: Invalid remote address: %s!\n", 
+	      PACKAGE, args_info.remote_arg);
+      syslog(LOG_ERR, "Invalid remote address: %s!", 
+	     args_info.remote_arg);
+      exit(1);
+    }
+    else {
+      memcpy(&remote.s_addr, host->h_addr, host->h_length);
+      printf("Remote IP address is:  %s (%s)\n", args_info.remote_arg, inet_ntoa(remote));
+    }
+  }
+  else {
+    fprintf(stderr, "%s: No remote address given!\n", 
+	    PACKAGE);
+    syslog(LOG_ERR, "No remote address given!");
+    exit(1);
+  }
+
+
+  /* net                                                          */
+  /* Store net as in_addr                                         */
+  if (args_info.net_arg) {
+    if (!inet_aton(args_info.net_arg, &net)) {
+      fprintf(stderr, "%s: Invalid network address: %s!\n", 
+	      PACKAGE, args_info.net_arg);
+      syslog(LOG_ERR, "Invalid network address: %s!", 
+	     args_info.net_arg);
+      exit(1);
+    }
+  }
+
+  /* mask                                                         */
+  /* Store mask as in_addr                                        */
+  if (args_info.mask_arg) {
+    if (!inet_aton(args_info.mask_arg, &mask)) {
+      fprintf(stderr, "%s: Invalid network mask: %s!\n", 
+	      PACKAGE, args_info.mask_arg);
+      syslog(LOG_ERR, "Invalid network mask: %s!", 
+	     args_info.mask_arg);
+      exit(1);
+    }
+  }
+
+  /* imsi                                                            */
+  if (strlen(args_info.imsi_arg)!=15) {
+    printf("Invalid IMSI\n");
+    exit(1);
+  }
+  imsi.l = 8;
+  imsi.v = imsih;
+  imsi.v[0] = args_info.imsi_arg[0]-48 + (args_info.imsi_arg[1]-48)*16;
+  imsi.v[1] = args_info.imsi_arg[2]-48 + (args_info.imsi_arg[3]-48)*16;
+  imsi.v[2] = args_info.imsi_arg[4]-48 + (args_info.imsi_arg[5]-48)*16;
+  imsi.v[3] = args_info.imsi_arg[6]-48 + (args_info.imsi_arg[7]-48)*16;
+  imsi.v[4] = args_info.imsi_arg[8]-48 + (args_info.imsi_arg[9]-48)*16;
+  imsi.v[5] = args_info.imsi_arg[10]-48 + (args_info.imsi_arg[11]-48)*16;
+  imsi.v[6] = args_info.imsi_arg[12]-48 + (args_info.imsi_arg[13]-48)*16;
+  imsi.v[7] = args_info.imsi_arg[14]-48 + 0*16;
+
+  if (imsi.l > sizeof(imsi3)) {
+    printf("Invalid IMSI\n");
+    exit(1);
+  }
+  else {
+    memcpy(&imsi3, imsi.v, imsi.l);
+    printf("IMSI is:               %s (%#08llx)\n", args_info.imsi_arg, imsi3);
+  }
+
+  /* qos                                                             */
+  qos.l = 3;
+  qos.v = qosh;
+  qos.v[2] = (args_info.qos_arg) & 0xff;
+  qos.v[1] = ((args_info.qos_arg) >> 8) & 0xff;
+  qos.v[0] = ((args_info.qos_arg) >> 16) & 0xff;
+  
+  /* contexts                                                        */
+  contexts = args_info.contexts_arg;
+
+  /* Timelimit                                                       */
+  timelimit = args_info.timelimit_arg;
+  starttime = time(NULL);
+  
+  /* apn                                                             */
+  if (strlen(args_info.apn_arg)>255) {
+    printf("Invalid APN\n");
+    exit(1);
+  }
+  apn.l = strlen(args_info.apn_arg) + 1;
+  apn.v = apnh;
+  apn.v[0] = (char) strlen(args_info.apn_arg);
+  strncpy(&apn.v[1], args_info.apn_arg, 255);
+  printf("Using APN:             %s\n", args_info.apn_arg);
+  
+  /* msisdn                                                          */
+  if (strlen(args_info.msisdn_arg)>255) {
+    printf("Invalid MSISDN\n");
+    exit(1);
+  }
+  msisdn.l = 1;
+  msisdn.v = msisdnh;
+  msisdn.v[0] = 0x91; /* International format */
+  for(n=0; n<strlen(args_info.msisdn_arg); n++) {
+    if ((n%2) == 0) {
+      msisdn.v[((int)n/2)+1] = args_info.msisdn_arg[n] - 48 + 0xf0;
+      msisdn.l += 1;
+    }
+    else {
+      msisdn.v[((int)n/2)+1] = (msisdn.v[((int)n/2)+1] & 0x0f) + (args_info.msisdn_arg[n] - 48) * 16;
+    }
+  }
+  printf("Using MSISDN:          %s\n", args_info.msisdn_arg);
+
+  /* UID and PWD */
+  /* Might need to also insert stuff like DNS etc. */
+  if ((strlen(args_info.uid_arg) + strlen(args_info.pwd_arg) + 10)>255) {
+    printf("invalid UID and PWD\n");
+    exit(1);
+  }
+  pco.l = strlen(args_info.uid_arg) + strlen(args_info.pwd_arg) + 10;
+  pco.v[0] = 0x80; /* PPP */
+  pco.v[1] = 0xc0;
+  pco.v[2] = 0x23; /* PAP */
+  pco.v[3] = 0x12;
+  pco.v[4] = 0x01; /* Authenticate request */
+  pco.v[5] = 0x01;
+  pco.v[6] = 0x00; /* MSB of length */
+  pco.v[7] = strlen(args_info.uid_arg) + strlen(args_info.pwd_arg) + 6;
+  pco.v[8] = strlen(args_info.uid_arg);
+  memcpy(&pco.v[9], args_info.uid_arg, strlen(args_info.uid_arg));
+  pco.v[9+strlen(args_info.uid_arg)] = strlen(args_info.pwd_arg);
+  memcpy(&pco.v[10+strlen(args_info.uid_arg)], args_info.pwd_arg, strlen(args_info.pwd_arg));
+  
+  /* static */
+  stattun = args_info.static_flag;
+
+  printf("\nInitialising GTP library\n");
+  if ((gtpfd = gtp_new(&gsn, args_info.statedir_arg,  &listen)) > maxfd)
+    maxfd = gtpfd;
+
+  if ((gtpfd = gtp_fd(gsn)) > maxfd)
+    maxfd = gtpfd;
+    
+  gtp_set_cb_gpdu(gsn, encaps_tun);
+  gtp_set_cb_delete_context(gsn, delete_context);
+  
+  gtp_set_cb_conf(gsn, conf);
+  printf("Done initialising GTP library\n\n");
+  
+  if (stattun) {
+    create_tun();
+    tun1 = tun;
+    tun_fd1 = tun1->fd;
+  }
+
+  /* See if anybody is there */
+  printf("Sending off echo request\n");
+  if (gtpfd != -1) gtp_echo_req(gsn, &remote); /* See if remote is alive ? */
+
+  for(n=0; n<contexts; n++) {
+    printf("Setting up PDP context #%d\n", n);
+
+    pdp_newpdp(&pdp[n], imsi3, n, NULL); /* Allocated here. Cleaned up in gtp.c: TODO Should be statically allocated! */
+    
+    /*    
+	  if (qos.l > sizeof(pdp[n]->qos_req.v)) {
+	  exit(1);
+	  }
+	  else {
+	  pdp[n]->qos_req.l = qos.l;
+	  memcpy(pdp[n]->qos_req.v, qos.v, qos.l);
+	  }
+    */
+    memcpy(pdp[n]->qos_req0, qos.v, qos.l); /* TODO range check */
+    
+    pdp[n]->selmode = 0x01; /* MS provided APN, subscription not verified */
+    
+    if (apn.l > sizeof(pdp[n]->apn_use.v)) {
+      exit(1);
+    }
+    else {
+      pdp[n]->apn_use.l = apn.l;
+      memcpy(pdp[n]->apn_use.v, apn.v, apn.l);
+    }
+    
+    pdp[n]->gsnlc.l = 4;
+    memcpy(pdp[n]->gsnlc.v, &listen, 4);
+    pdp[n]->gsnlu.l = 4;
+    memcpy(pdp[n]->gsnlu.v, &listen, 4);
+    
+    if (msisdn.l > sizeof(pdp[n]->msisdn.v)) {
+      exit(1);
+    }
+    else {
+      pdp[n]->msisdn.l = msisdn.l;
+      memcpy(pdp[n]->msisdn.v, msisdn.v, msisdn.l);
+    }
+    
+    ipv42eua(&pdp[n]->eua, NULL); /* Request dynamic IP address */
+    
+    if (pco.l > sizeof(pdp[n]->pco_req.v)) {
+      exit(1);
+    }
+    else {
+      pdp[n]->pco_req.l = pco.l;
+      memcpy(pdp[n]->pco_req.v, pco.v, pco.l);
+    }
+    
+    /* Create context */
+    /* We send this of once. Retransmissions are handled by gtplib */
+    if (gtpfd != -1) gtp_create_context(gsn, pdp[n], NULL, &remote);
+  }    
+
+  state = 1;  /* Enter wait_connection state */
+
+  printf("Waiting for response from ggsn........\n\n");
+
+  
+  /******************************************************************/
+  /* Main select loop                                               */
+  /******************************************************************/
+
+  while (((starttime + timelimit + 10) > time(NULL)) || (0 == timelimit)) {
+
+    /* Take down client connections at some stage */
+    if (((starttime + timelimit) <= time(NULL)) && (0 != timelimit) && (2 == state)) {
+      state = 3;
+      for(n=0; n<contexts; n++) {
+	/* Delete context */
+	printf("Disconnecting PDP context #%d\n", n);
+	if (gtpfd != -1) gtp_delete_context(gsn, pdp[n], NULL);
+      }
+    }
+
+    FD_ZERO(&fds);
+    if (tun_fd1 != -1) FD_SET(tun_fd1, &fds);
+    if (tun_fd2 != -1) FD_SET(tun_fd2, &fds);
+    if (gtpfd != -1) FD_SET(gtpfd, &fds);
+    
+    gtp_retranstimeout(gsn, &idleTime);
+
+    switch (select(maxfd + 1, &fds, NULL, NULL, &idleTime)) {
+    case -1:
+      syslog(LOG_ERR, "sgsnemu: select = -1");
+      break;  
+    case 0:
+      gtp_retrans(gsn); /* Only retransmit if nothing else */
+      break; 
+    default:
+      break;
+    }
+
+    if (tun_fd1 != -1 && 
+	FD_ISSET(tun_fd1, &fds) && 
+	tun_decaps(tun1, encaps_gtp_client, gsn) < 0) {
+      syslog(LOG_ERR, "TUN read failed (fd)=(%d)", tun_fd1);
+    }
+
+    if (tun_fd2 != -1 && 
+	FD_ISSET(tun_fd2, &fds) && 
+	tun_decaps(tun2, encaps_gtp_client, gsn) < 0) {
+      syslog(LOG_ERR, "TUN read failed (fd)=(%d)", tun_fd2);
+    }
+
+    if (gtpfd != -1 && FD_ISSET(gtpfd, &fds) && 
+	gtp_decaps(gsn) < 0) {
+      syslog(LOG_ERR, "GTP read failed (gre)=(%d)", gtpfd);
+    }
+    
+    
+    }
+
+  gtp_free(gsn); /* Clean up the gsn instance */
+  
+  return 1;
+  
+}
+
diff --git a/sgsnemu/sgsnemu.pid b/sgsnemu/sgsnemu.pid
new file mode 100644
index 0000000..6673415
--- /dev/null
+++ b/sgsnemu/sgsnemu.pid
@@ -0,0 +1 @@
+14305
diff --git a/sgsnemu/tun.c b/sgsnemu/tun.c
new file mode 100644
index 0000000..72ea264
--- /dev/null
+++ b/sgsnemu/tun.c
@@ -0,0 +1,128 @@
+/* 
+ *  OpenGGSN - Gateway GPRS Support Node
+ *  Copyright (C) 2002 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):
+ * 
+ */
+
+/*
+ * tun.c: Contains all TUN functionality. Should be able to handle multiple
+ * tunnels in the same program. Each tunnel is identified by the socket. 
+ * I suppose that no other state information than the socket is needed.
+ *
+ *  - tun_newtun: Initialise TUN tunnel.
+ *  - tun_freetun: Free a device previously created with tun_newtun.
+ *  - tun_encaps: Encapsulate packet in TUN tunnel and send off
+ *  - tun_decaps: Extract packet from TUN tunnel and call function to
+ *    ship it off as GTP encapsulated packet. 
+ *
+ * TODO:
+ *  - Do we need to handle fragmentation?
+ */
+
+
+#include <syslog.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <fcntl.h>
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <sys/socket.h>
+#include <linux/if.h>
+#include <errno.h>
+#include <linux/if_tun.h>
+
+
+#include "tun.h"
+
+
+int tun_newtun(struct tun_t **tun)
+{
+  struct ifreq ifr;
+
+  if (!(*tun = calloc(1, sizeof(struct tun_t)))) {
+    syslog(LOG_ERR, "%s %d. calloc(nmemb=%d, size=%d) failed: Error = %s(%d)",
+	   __FILE__, __LINE__, 1, sizeof(struct tun_t), 
+	   strerror(errno), errno);
+    return EOF;
+  }
+
+  if (((*tun)->fd  = open("/dev/net/tun", O_RDWR)) < 0) {
+    syslog(LOG_ERR, "TUN: open() failed");
+    return -1;
+  }
+
+  memset(&ifr, 0, sizeof(ifr));
+  ifr.ifr_flags = IFF_TUN | IFF_NO_PI; /* Tun device, no packet info */
+  strncpy(ifr.ifr_name, (*tun)->devname, IFNAMSIZ);
+
+  if (ioctl((*tun)->fd, TUNSETIFF, (void *) &ifr) < 0) {
+    syslog(LOG_ERR, "TUN: ioctl() failed");
+    close((*tun)->fd);
+    return -1;
+  } 
+
+  ioctl((*tun)->fd, TUNSETNOCSUM, 1); /* Disable checksums */
+
+  strncpy((*tun)->devname, ifr.ifr_name, IFNAMSIZ);
+
+  return (*tun)->fd;
+}
+
+int tun_freetun(struct tun_t *tun)
+{
+  if (close(tun->fd)) {
+    syslog(LOG_ERR, "%s %d. close(fd=%d) failed: Error = %s", 
+	   __FILE__, __LINE__, tun->fd, strerror(errno));
+    return EOF;
+  }
+  free(tun);
+  return 0;
+}
+
+
+int tun_decaps(struct tun_t *tun, 
+	       int (*cb) (void *cl, struct tun_t*, void *pack, unsigned len),
+	       void *cl)
+{
+	unsigned char buffer[PACKET_MAX + 64 /*TODO: ip header */ ];
+	int status;
+
+
+	if ((status = read(tun->fd, buffer, sizeof(buffer))) <= 0) {
+		syslog(LOG_ERR, "TUN: read(fd=%d,buffer=%lx,len=%d) from network failed: status = %d error = %s",
+		       tun->fd, (unsigned long) buffer, sizeof(buffer), status, status ? strerror(errno) : "No error");
+		return -1;
+	}
+
+	/* Need to include code to verify packet src and dest addresses */
+	return cb(cl, tun, buffer, status);
+}
+
+int tun_encaps(struct tun_t *tun, void *pack, unsigned len)
+{
+	return write(tun->fd, pack, len);
+}
diff --git a/sgsnemu/tun.h b/sgsnemu/tun.h
new file mode 100644
index 0000000..03dc7df
--- /dev/null
+++ b/sgsnemu/tun.h
@@ -0,0 +1,48 @@
+/* 
+ *  OpenGGSN - Gateway GPRS Support Node
+ *  Copyright (C) 2002 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):
+ * 
+ */
+
+#ifndef _TUN_H
+#define _TUN_H
+
+#define hton8(x)  (x)
+#define ntoh8(x)  (x)
+#define hton16(x) htons(x)
+#define ntoh16(x) ntohs(x)
+#define hton32(x) htonl(x)
+#define ntoh32(x) ntohl(x)
+
+#define PACKET_MAX      8196 /* TODO */
+
+/* ***********************************************************
+ * Information storage for each tun instance
+ *************************************************************/
+
+struct tun_t {
+  int fd;                /* File descriptor to network interface */
+  struct in_addr addr;   /* IP address of tun interface */
+  char devname[IFNAMSIZ];/* Name of the tun device */
+};
+
+
+extern int tun_newtun(struct tun_t **tun);
+extern int tun_freetun(struct tun_t *tun);
+extern int tun_decaps(struct tun_t *tun, 
+     int (*cb) (void *cl, struct tun_t*, void *pack, unsigned len),
+		      void *cl);
+extern int tun_encaps(struct tun_t *tun, void *pack, unsigned len);
+
+
+#endif	/* !_TUN_H */
