diff --git a/README.MacOSX b/README.MacOSX new file mode 100644 index 0000000..0a904cd --- /dev/null +++ b/README.MacOSX @@ -0,0 +1,33 @@ +OpenGGSN/Mac OS X notes + +Mac OS X support is experimental, please test and report bugs. The +Mac OS X port is tested on Mac OS X 10.3.5, but may also work on +other versions. + +1. Compiling + +Everything should be straight-forward. Create a separate +build directory, run ../openggsn/configure and then make. +If you have problems with configure, execute + +$ aclocal && automake && autoheader && autoconf + +and then again configure and make. + +2. Kernel extensions + +You need to add a tunnel kernel extension to your kernel. +The one I've used is available at +http://www-user.rhrk.uni-kl.de/~nissler/tuntap/ +but there are others. If you want to compile that from +sources (instead of using the binary installer), you +will also need kernel sources from opensource.apple.com. + +3. Known problems + +None. + +-- + +Pekka Nikander + diff --git a/ggsn/cmdline.ggo b/ggsn/cmdline.ggo index ca4e2c7..e7e0f66 100644 --- a/ggsn/cmdline.ggo +++ b/ggsn/cmdline.ggo @@ -1,16 +1,13 @@ # OpenGGSN - Gateway GPRS Support Node -# Copyright (C) 2002, 2003 Mondru AB. +# Copyright (C) 2002, 2003, 2004 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 -# -# Contributor(s): - +# +# Use "gengetopt --conf-parser < cmdline.ggo" +# to generate cmdline.c and cmdline.h option "fg" f "Run in foreground" flag off option "debug" d "Run in debug mode" flag off diff --git a/ggsn/ggsn.c b/ggsn/ggsn.c index a59d545..5d60b90 100644 --- a/ggsn/ggsn.c +++ b/ggsn/ggsn.c @@ -1,17 +1,12 @@ /* * OpenGGSN - Gateway GPRS Support Node - * Copyright (C) 2002, 2003 Mondru AB. + * Copyright (C) 2002, 2003, 2004 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 - * - * Contributor(s): - * */ /* ggsn.c @@ -22,6 +17,11 @@ #define _GNU_SOURCE 1 /* strdup() prototype, broken arpa/inet.h */ #endif +#include "../config.h" + +#ifdef HAVE_STDINT_H +#include +#endif #include #include @@ -47,8 +47,6 @@ #include -#include "config.h" - #include "tun.h" #include "ippool.h" #include "syserr.h" diff --git a/ggsn/ippool.c b/ggsn/ippool.c index a942bce..efd927e 100644 --- a/ggsn/ippool.c +++ b/ggsn/ippool.c @@ -9,6 +9,12 @@ * */ +#include "../config.h" + +#ifdef HAVE_STDINT_H +#include +#endif + #include #include /* in_addr */ #include /* calloc */ diff --git a/ggsn/syserr.c b/ggsn/syserr.c index 7223414..8418956 100644 --- a/ggsn/syserr.c +++ b/ggsn/syserr.c @@ -1,17 +1,12 @@ /* * Syslog functions. - * Copyright (C) 2003 Mondru AB. + * Copyright (C) 2003, 2004 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 - * - * Contributor(s): - * */ #include diff --git a/ggsn/syserr.h b/ggsn/syserr.h index ae07848..5a41817 100644 --- a/ggsn/syserr.h +++ b/ggsn/syserr.h @@ -7,11 +7,6 @@ * 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 - * - * Contributor(s): - * */ #ifndef _SYSERR_H diff --git a/ggsn/tun.c b/ggsn/tun.c index 3436972..576e32e 100644 --- a/ggsn/tun.c +++ b/ggsn/tun.c @@ -1,17 +1,12 @@ /* * TUN interface functions. - * Copyright (C) 2002, 2003 Mondru AB. + * Copyright (C) 2002, 2003, 2004 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 - * - * Contributor(s): - * */ /* @@ -55,6 +50,9 @@ #include #include +#elif defined (__APPLE__) +#include + #elif defined (__sun__) #include #include @@ -336,7 +334,7 @@ int tun_addaddr(struct tun_t *this, this->addrs++; return 0; -#elif defined (__FreeBSD__) +#elif defined (__FreeBSD__) || defined (__APPLE__) int fd; struct ifaliasreq areq; @@ -415,7 +413,7 @@ int tun_setaddr(struct tun_t *this, #if defined(__linux__) ifr.ifr_netmask.sa_family = AF_INET; -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined (__APPLE__) ((struct sockaddr_in *) &ifr.ifr_addr)->sin_len = sizeof (struct sockaddr_in); ((struct sockaddr_in *) &ifr.ifr_dstaddr)->sin_len = @@ -467,7 +465,7 @@ int tun_setaddr(struct tun_t *this, ((struct sockaddr_in *) &ifr.ifr_netmask)->sin_addr.s_addr = netmask->s_addr; -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined (__APPLE__) ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr.s_addr = netmask->s_addr; @@ -494,7 +492,7 @@ int tun_setaddr(struct tun_t *this, /* TODO: How does it work on Solaris? */ -#if defined(__FreeBSD__) +#if defined(__FreeBSD__) || defined (__APPLE__) tun_sifflags(this, IFF_UP | IFF_RUNNING); /* TODO */ return tun_addroute(this, addr, addr, netmask); #else @@ -543,7 +541,7 @@ int tun_addroute(struct tun_t *this, close(fd); return 0; -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined (__APPLE__) struct { struct rt_msghdr rt; @@ -610,7 +608,7 @@ int tun_new(struct tun_t **tun) #if defined(__linux__) struct ifreq ifr; -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined (__APPLE__) char devname[IFNAMSIZ+5]; /* "/dev/" + ifname */ int devnum; struct ifaliasreq areq; @@ -657,7 +655,7 @@ int tun_new(struct tun_t **tun) ioctl((*tun)->fd, TUNSETNOCSUM, 1); /* Disable checksums */ return 0; -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined (__APPLE__) /* Find suitable device */ for (devnum = 0; devnum < 255; devnum++) { /* TODO 255 */ @@ -784,7 +782,7 @@ int tun_set_cb_ind(struct tun_t *this, int tun_decaps(struct tun_t *this) { -#if defined(__linux__) || defined (__FreeBSD__) +#if defined(__linux__) || defined (__FreeBSD__) || defined (__APPLE__) unsigned char buffer[PACKET_MAX]; int status; @@ -825,7 +823,7 @@ int tun_decaps(struct tun_t *this) int tun_encaps(struct tun_t *tun, void *pack, unsigned len) { -#if defined(__linux__) || defined (__FreeBSD__) +#if defined(__linux__) || defined (__FreeBSD__) || defined (__APPLE__) return write(tun->fd, pack, len); diff --git a/ggsn/tun.h b/ggsn/tun.h index 8d4618d..eb82162 100644 --- a/ggsn/tun.h +++ b/ggsn/tun.h @@ -7,11 +7,6 @@ * 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 - * - * Contributor(s): - * */ #ifndef _TUN_H diff --git a/gtp/gtp.c b/gtp/gtp.c index d7880a1..9d4ea7b 100644 --- a/gtp/gtp.c +++ b/gtp/gtp.c @@ -1,17 +1,12 @@ /* * OpenGGSN - Gateway GPRS Support Node - * Copyright (C) 2002 Mondru AB. + * Copyright (C) 2002, 2003, 2004 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 - * - * Contributor(s): - * */ /* @@ -27,6 +22,10 @@ #define _GNU_SOURCE 1 #endif +#include "../config.h" +#ifdef HAVE_STDINT_H +#include +#endif #include #include @@ -48,7 +47,6 @@ /* #include ISO C99 types */ -#include "../config.h" #include "pdp.h" #include "gtp.h" #include "gtpie.h" @@ -407,7 +405,7 @@ int gtp_req(struct gsn_t *gsn, int version, struct pdp_t *pdp, memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr = *inetaddr; -#if defined(__FreeBSD__) +#if defined(__FreeBSD__) || defined(__APPLE__) addr.sin_len = sizeof(addr); #endif @@ -766,7 +764,7 @@ int gtp_new(struct gsn_t **gsn, char *statedir, struct in_addr *listen, addr.sin_family = AF_INET; addr.sin_addr = *listen; /* Same IP for user traffic and signalling*/ addr.sin_port = htons(GTP0_PORT); -#if defined(__FreeBSD__) +#if defined(__FreeBSD__) || defined(__APPLE__) addr.sin_len = sizeof(addr); #endif @@ -787,7 +785,7 @@ int gtp_new(struct gsn_t **gsn, char *statedir, struct in_addr *listen, addr.sin_family = AF_INET; addr.sin_addr = *listen; /* Same IP for user traffic and signalling*/ addr.sin_port = htons(GTP1C_PORT); -#if defined(__FreeBSD__) +#if defined(__FreeBSD__) || defined(__APPLE__) addr.sin_len = sizeof(addr); #endif @@ -808,7 +806,7 @@ int gtp_new(struct gsn_t **gsn, char *statedir, struct in_addr *listen, addr.sin_family = AF_INET; addr.sin_addr = *listen; /* Same IP for user traffic and signalling*/ addr.sin_port = htons(GTP1U_PORT); -#if defined(__FreeBSD__) +#if defined(__FreeBSD__) || defined(__APPLE__) addr.sin_len = sizeof(addr); #endif @@ -2944,7 +2942,7 @@ int gtp_data_req(struct gsn_t *gsn, struct pdp_t* pdp, memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; -#if defined(__FreeBSD__) +#if defined(__FreeBSD__) || defined(__APPLE__) addr.sin_len = sizeof(addr); #endif diff --git a/gtp/gtp.h b/gtp/gtp.h index 7e09f6d..7b5083b 100644 --- a/gtp/gtp.h +++ b/gtp/gtp.h @@ -1,17 +1,12 @@ /* * OpenGGSN - Gateway GPRS Support Node - * Copyright (C) 2002 Mondru AB. + * Copyright (C) 2002, 2003, 2004 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 - * - * Contributor(s): - * */ #ifndef _GTP_H @@ -217,7 +212,7 @@ union gtp_packet { struct gtp0_packet gtp0; struct gtp1_packet_short gtp1s; struct gtp1_packet_long gtp1l; -} __attribute__((packed)) h; +} __attribute__((packed)); diff --git a/gtp/gtpie.c b/gtp/gtpie.c index ac98294..55d3f32 100644 --- a/gtp/gtpie.c +++ b/gtp/gtpie.c @@ -7,11 +7,6 @@ * 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 - * - * Contributor(s): - * */ /* @@ -31,6 +26,12 @@ * */ +#include <../config.h> + +#ifdef HAVE_STDINT_H +#include +#endif + #include #include #include diff --git a/gtp/gtpie.h b/gtp/gtpie.h index c376124..9c0e3ca 100644 --- a/gtp/gtpie.h +++ b/gtp/gtpie.h @@ -1,17 +1,12 @@ /* * OpenGGSN - Gateway GPRS Support Node - * Copyright (C) 2002 Mondru AB. + * Copyright (C) 2002, 2003, 2004 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 - * - * Contributor(s): - * */ #ifndef _GTPIE_H diff --git a/gtp/pdp.c b/gtp/pdp.c index 3a652b8..648d70d 100644 --- a/gtp/pdp.c +++ b/gtp/pdp.c @@ -1,17 +1,12 @@ /* * OpenGGSN - Gateway GPRS Support Node - * Copyright (C) 2002, 2003 Mondru AB. + * Copyright (C) 2002, 2003, 2004 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 - * - * Contributor(s): - * */ /* @@ -19,6 +14,12 @@ * */ +#include <../config.h> + +#ifdef HAVE_STDINT_H +#include +#endif + #include #include #include diff --git a/gtp/pdp.h b/gtp/pdp.h index a6780cd..59541c6 100644 --- a/gtp/pdp.h +++ b/gtp/pdp.h @@ -7,11 +7,6 @@ * 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 - * - * Contributor(s): - * */ #ifndef _PDP_H diff --git a/gtp/queue.c b/gtp/queue.c index 845b4ba..7fdf9df 100644 --- a/gtp/queue.c +++ b/gtp/queue.c @@ -1,17 +1,12 @@ /* * OpenGGSN - Gateway GPRS Support Node - * Copyright (C) 2002 Mondru AB. + * Copyright (C) 2002, 2003, 2004 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 - * - * Contributor(s): - * */ /* @@ -19,6 +14,11 @@ * Reliable delivery of signalling messages */ +#include <../config.h> +#ifdef HAVE_STDINT_H +#include +#endif + #include #include #include diff --git a/gtp/queue.h b/gtp/queue.h index 1e95676..46fa22d 100644 --- a/gtp/queue.h +++ b/gtp/queue.h @@ -7,11 +7,6 @@ * 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 - * - * Contributor(s): - * */ /* @@ -22,15 +17,15 @@ #ifndef _QUEUE_H #define _QUEUE_H -#define QUEUE_DEBUG 0 /* Print debug information */ +#define QUEUE_DEBUG 0 /* Print debug information */ -#define QUEUE_SIZE 1024 /* Size of retransmission queue */ +#define QUEUE_SIZE 1024 /* Size of retransmission queue */ #define QUEUE_HASH_SIZE 65536 /* Size of hash table (2^16) */ struct qmsg_t { /* Holder for queued packets */ int state; /* 0=empty, 1=full */ uint16_t seq; /* The sequence number */ - uint8_t type; /* The type of packet */ + uint8_t type; /* The type of packet */ void *cbp; /* Application specific pointer */ union gtp_packet p; /* The packet stored */ int l; /* Length of the packet */ diff --git a/sgsnemu/cmdline.ggo b/sgsnemu/cmdline.ggo index c3e2943..a000748 100644 --- a/sgsnemu/cmdline.ggo +++ b/sgsnemu/cmdline.ggo @@ -1,17 +1,11 @@ # OpenGGSN - Gateway GPRS Support Node -# Copyright (C) 2002, 2003 Mondru AB. +# Copyright (C) 2002, 2003, 2004 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 -# -# Contributor(s): -# -# # Use "gengetopt --conf-parser < cmdline.ggo" # to generate cmdline.c and cmdline.h diff --git a/sgsnemu/ippool.c b/sgsnemu/ippool.c index a942bce..efd927e 100644 --- a/sgsnemu/ippool.c +++ b/sgsnemu/ippool.c @@ -9,6 +9,12 @@ * */ +#include "../config.h" + +#ifdef HAVE_STDINT_H +#include +#endif + #include #include /* in_addr */ #include /* calloc */ diff --git a/sgsnemu/sgsnemu.c b/sgsnemu/sgsnemu.c index c6cf20d..656e3c3 100644 --- a/sgsnemu/sgsnemu.c +++ b/sgsnemu/sgsnemu.c @@ -1,17 +1,12 @@ /* * OpenGGSN - Gateway GPRS Support Node - * Copyright (C) 2002, 2003 Mondru AB. + * Copyright (C) 2002, 2003, 2004 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 - * - * Contributor(s): - * */ /* diff --git a/sgsnemu/syserr.c b/sgsnemu/syserr.c index 7223414..8418956 100644 --- a/sgsnemu/syserr.c +++ b/sgsnemu/syserr.c @@ -1,17 +1,12 @@ /* * Syslog functions. - * Copyright (C) 2003 Mondru AB. + * Copyright (C) 2003, 2004 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 - * - * Contributor(s): - * */ #include diff --git a/sgsnemu/syserr.h b/sgsnemu/syserr.h index ae07848..5a41817 100644 --- a/sgsnemu/syserr.h +++ b/sgsnemu/syserr.h @@ -7,11 +7,6 @@ * 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 - * - * Contributor(s): - * */ #ifndef _SYSERR_H diff --git a/sgsnemu/tun.c b/sgsnemu/tun.c index 3436972..576e32e 100644 --- a/sgsnemu/tun.c +++ b/sgsnemu/tun.c @@ -1,17 +1,12 @@ /* * TUN interface functions. - * Copyright (C) 2002, 2003 Mondru AB. + * Copyright (C) 2002, 2003, 2004 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 - * - * Contributor(s): - * */ /* @@ -55,6 +50,9 @@ #include #include +#elif defined (__APPLE__) +#include + #elif defined (__sun__) #include #include @@ -336,7 +334,7 @@ int tun_addaddr(struct tun_t *this, this->addrs++; return 0; -#elif defined (__FreeBSD__) +#elif defined (__FreeBSD__) || defined (__APPLE__) int fd; struct ifaliasreq areq; @@ -415,7 +413,7 @@ int tun_setaddr(struct tun_t *this, #if defined(__linux__) ifr.ifr_netmask.sa_family = AF_INET; -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined (__APPLE__) ((struct sockaddr_in *) &ifr.ifr_addr)->sin_len = sizeof (struct sockaddr_in); ((struct sockaddr_in *) &ifr.ifr_dstaddr)->sin_len = @@ -467,7 +465,7 @@ int tun_setaddr(struct tun_t *this, ((struct sockaddr_in *) &ifr.ifr_netmask)->sin_addr.s_addr = netmask->s_addr; -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined (__APPLE__) ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr.s_addr = netmask->s_addr; @@ -494,7 +492,7 @@ int tun_setaddr(struct tun_t *this, /* TODO: How does it work on Solaris? */ -#if defined(__FreeBSD__) +#if defined(__FreeBSD__) || defined (__APPLE__) tun_sifflags(this, IFF_UP | IFF_RUNNING); /* TODO */ return tun_addroute(this, addr, addr, netmask); #else @@ -543,7 +541,7 @@ int tun_addroute(struct tun_t *this, close(fd); return 0; -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined (__APPLE__) struct { struct rt_msghdr rt; @@ -610,7 +608,7 @@ int tun_new(struct tun_t **tun) #if defined(__linux__) struct ifreq ifr; -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined (__APPLE__) char devname[IFNAMSIZ+5]; /* "/dev/" + ifname */ int devnum; struct ifaliasreq areq; @@ -657,7 +655,7 @@ int tun_new(struct tun_t **tun) ioctl((*tun)->fd, TUNSETNOCSUM, 1); /* Disable checksums */ return 0; -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined (__APPLE__) /* Find suitable device */ for (devnum = 0; devnum < 255; devnum++) { /* TODO 255 */ @@ -784,7 +782,7 @@ int tun_set_cb_ind(struct tun_t *this, int tun_decaps(struct tun_t *this) { -#if defined(__linux__) || defined (__FreeBSD__) +#if defined(__linux__) || defined (__FreeBSD__) || defined (__APPLE__) unsigned char buffer[PACKET_MAX]; int status; @@ -825,7 +823,7 @@ int tun_decaps(struct tun_t *this) int tun_encaps(struct tun_t *tun, void *pack, unsigned len) { -#if defined(__linux__) || defined (__FreeBSD__) +#if defined(__linux__) || defined (__FreeBSD__) || defined (__APPLE__) return write(tun->fd, pack, len); diff --git a/sgsnemu/tun.h b/sgsnemu/tun.h index 8d4618d..eb82162 100644 --- a/sgsnemu/tun.h +++ b/sgsnemu/tun.h @@ -7,11 +7,6 @@ * 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 - * - * Contributor(s): - * */ #ifndef _TUN_H