8
0
Fork 0

qos length bugfix and apple support plus header cleanup

origin
jjako 18 years ago
parent 12f9e6e263
commit 0fe0df0079
  1. 33
      README.MacOSX
  2. 11
      ggsn/cmdline.ggo
  3. 14
      ggsn/ggsn.c
  4. 6
      ggsn/ippool.c
  5. 7
      ggsn/syserr.c
  6. 5
      ggsn/syserr.h
  7. 28
      ggsn/tun.c
  8. 5
      ggsn/tun.h
  9. 22
      gtp/gtp.c
  10. 9
      gtp/gtp.h
  11. 11
      gtp/gtpie.c
  12. 7
      gtp/gtpie.h
  13. 13
      gtp/pdp.c
  14. 5
      gtp/pdp.h
  15. 12
      gtp/queue.c
  16. 11
      gtp/queue.h
  17. 8
      sgsnemu/cmdline.ggo
  18. 6
      sgsnemu/ippool.c
  19. 7
      sgsnemu/sgsnemu.c
  20. 7
      sgsnemu/syserr.c
  21. 5
      sgsnemu/syserr.h
  22. 28
      sgsnemu/tun.c
  23. 5
      sgsnemu/tun.h

@ -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 <pekka.nikander@nomadiclab.com>

@ -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 <jj@openggsn.org>
#
# 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

@ -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 <jj@openggsn.org>
*
* 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 <stdint.h>
#endif
#include <syslog.h>
#include <ctype.h>
@ -47,8 +47,6 @@
#include <time.h>
#include "config.h"
#include "tun.h"
#include "ippool.h"
#include "syserr.h"

@ -9,6 +9,12 @@
*
*/
#include "../config.h"
#ifdef HAVE_STDINT_H
#include <stdint.h>
#endif
#include <sys/types.h>
#include <netinet/in.h> /* in_addr */
#include <stdlib.h> /* calloc */

@ -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 <jj@openggsn.org>
*
* Contributor(s):
*
*/
#include <stdarg.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 <jj@openggsn.org>
*
* Contributor(s):
*
*/
#ifndef _SYSERR_H

@ -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 <jj@openggsn.org>
*
* Contributor(s):
*
*/
/*
@ -55,6 +50,9 @@
#include <net/if.h>
#include <net/if_tun.h>
#elif defined (__APPLE__)
#include <net/if.h>
#elif defined (__sun__)
#include <stropts.h>
#include <sys/sockio.h>
@ -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);

@ -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 <jj@openggsn.org>
*
* Contributor(s):
*
*/
#ifndef _TUN_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 <jj@openggsn.org>
*
* Contributor(s):
*
*/
/*
@ -27,6 +22,10 @@
#define _GNU_SOURCE 1
#endif
#include "../config.h"
#ifdef HAVE_STDINT_H
#include <stdint.h>
#endif
#include <syslog.h>
#include <stdio.h>
@ -48,7 +47,6 @@
/* #include <stdint.h> 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

@ -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 <jj@openggsn.org>
*
* 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));

@ -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 <jj@openggsn.org>
*
* Contributor(s):
*
*/
/*
@ -31,6 +26,12 @@
*
*/
#include <../config.h>
#ifdef HAVE_STDINT_H
#include <stdint.h>
#endif
#include <stdio.h>
#include <sys/types.h>
#include <netinet/in.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 <jj@openggsn.org>
*
* Contributor(s):
*
*/
#ifndef _GTPIE_H

@ -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 <jj@openggsn.org>
*
* Contributor(s):
*
*/
/*
@ -19,6 +14,12 @@
*
*/
#include <../config.h>
#ifdef HAVE_STDINT_H
#include <stdint.h>
#endif
#include <stdio.h>
#include <sys/types.h>
#include <netinet/in.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 <jj@openggsn.org>
*
* Contributor(s):
*
*/
#ifndef _PDP_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 <jj@openggsn.org>
*
* Contributor(s):
*
*/
/*
@ -19,6 +14,11 @@
* Reliable delivery of signalling messages
*/
#include <../config.h>
#ifdef HAVE_STDINT_H
#include <stdint.h>
#endif
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.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 <jj@openggsn.org>
*
* 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 */

@ -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 <jj@openggsn.org>
#
# Contributor(s):
#
#
# Use "gengetopt --conf-parser < cmdline.ggo"
# to generate cmdline.c and cmdline.h

@ -9,6 +9,12 @@
*
*/
#include "../config.h"
#ifdef HAVE_STDINT_H
#include <stdint.h>
#endif
#include <sys/types.h>
#include <netinet/in.h> /* in_addr */
#include <stdlib.h> /* calloc */

@ -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 <jj@openggsn.org>
*
* Contributor(s):
*
*/
/*

@ -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 <jj@openggsn.org>
*
* Contributor(s):
*
*/
#include <stdarg.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 <jj@openggsn.org>
*
* Contributor(s):
*
*/
#ifndef _SYSERR_H

@ -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 <jj@openggsn.org>
*
* Contributor(s):
*
*/
/*
@ -55,6 +50,9 @@
#include <net/if.h>
#include <net/if_tun.h>
#elif defined (__APPLE__)
#include <net/if.h>
#elif defined (__sun__)
#include <stropts.h>
#include <sys/sockio.h>
@ -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);

@ -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 <jj@openggsn.org>
*
* Contributor(s):
*
*/
#ifndef _TUN_H