aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ggsn/ggsn.c21
-rw-r--r--ggsn/ggsn.h1
-rw-r--r--ggsn/ggsn_vty.c2
-rw-r--r--ggsn/pco.c2
-rw-r--r--lib/Makefile.am4
-rw-r--r--lib/util.c35
-rw-r--r--lib/util.h18
7 files changed, 60 insertions, 23 deletions
diff --git a/ggsn/ggsn.c b/ggsn/ggsn.c
index c7756d9..4e13151 100644
--- a/ggsn/ggsn.c
+++ b/ggsn/ggsn.c
@@ -51,6 +51,7 @@
#include "../lib/syserr.h"
#include "../lib/in46_addr.h"
#include "../lib/gtp-kernel.h"
+#include "../lib/util.h"
#include "../gtp/pdp.h"
#include "../gtp/gtp.h"
#include "icmpv6.h"
@@ -365,26 +366,6 @@ static int delete_context(struct pdp_t *pdp)
return 0;
}
-/*! Get the peer of pdp based on IP version used.
- * \param[in] pdp PDP context to select the peer from.
- * \param[in] v4v6 IP version to select. Valid values are 4 and 6.
- * \returns The selected peer matching the given IP version. NULL if not present.
- */
-struct ippoolm_t *pdp_get_peer_ipv(struct pdp_t *pdp, bool is_ipv6) {
- uint8_t i;
-
- for (i = 0; i < 2; i++) {
- struct ippoolm_t * ippool = pdp->peer[i];
- if (!ippool)
- continue;
- if (is_ipv6 && in46a_is_v6(&ippool->addr))
- return ippool;
- else if (!is_ipv6 && in46a_is_v4(&ippool->addr))
- return ippool;
- }
- return NULL;
-}
-
static bool apn_supports_ipv4(const struct apn_ctx *apn)
{
if (apn->v4.cfg.static_prefix.addr.len || apn->v4.cfg.dynamic_prefix.addr.len)
diff --git a/ggsn/ggsn.h b/ggsn/ggsn.h
index 1bd067e..88fd8b9 100644
--- a/ggsn/ggsn.h
+++ b/ggsn/ggsn.h
@@ -145,7 +145,6 @@ extern int ggsn_start(struct ggsn_ctx *ggsn);
extern int ggsn_stop(struct ggsn_ctx *ggsn);
extern int apn_start(struct apn_ctx *apn);
extern int apn_stop(struct apn_ctx *apn);
-extern struct ippoolm_t *pdp_get_peer_ipv(struct pdp_t *pdp, bool is_ipv6);
#define LOGPAPN(level, apn, fmt, args...) \
LOGP(DGGSN, level, "APN(%s): " fmt, (apn)->cfg.name, ## args)
diff --git a/ggsn/ggsn_vty.c b/ggsn/ggsn_vty.c
index 0a86f49..b85df77 100644
--- a/ggsn/ggsn_vty.c
+++ b/ggsn/ggsn_vty.c
@@ -37,6 +37,8 @@
#include "../gtp/gtp.h"
#include "../gtp/pdp.h"
+#include "../lib/util.h"
+
#include "ggsn.h"
#define PREFIX_STR "Prefix (Network/Netmask)\n"
diff --git a/ggsn/pco.c b/ggsn/pco.c
index 5715865..e2181e1 100644
--- a/ggsn/pco.c
+++ b/ggsn/pco.c
@@ -17,6 +17,8 @@
#include <osmocom/core/msgb.h>
#include <osmocom/gsm/tlv.h>
+#include "../lib/util.h"
+
#include "pco.h"
#include "ggsn.h"
diff --git a/lib/Makefile.am b/lib/Makefile.am
index b6e7aba..533d777 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -1,10 +1,10 @@
noinst_LIBRARIES = libmisc.a
-noinst_HEADERS = gnugetopt.h ippool.h lookup.h syserr.h tun.h in46_addr.h netdev.h gtp-kernel.h
+noinst_HEADERS = gnugetopt.h ippool.h lookup.h syserr.h tun.h in46_addr.h netdev.h gtp-kernel.h util.h
AM_CFLAGS = -O2 -fno-builtin -Wall -DSBINDIR='"$(sbindir)"' -ggdb $(LIBOSMOCORE_CFLAGS)
-libmisc_a_SOURCES = getopt1.c getopt.c ippool.c lookup.c tun.c debug.c in46_addr.c netdev.c
+libmisc_a_SOURCES = getopt1.c getopt.c ippool.c lookup.c tun.c debug.c in46_addr.c netdev.c util.c
if ENABLE_GTP_KERNEL
AM_CFLAGS += -DGTP_KERNEL $(LIBGTPNL_CFLAGS)
diff --git a/lib/util.c b/lib/util.c
new file mode 100644
index 0000000..6bb0d85
--- /dev/null
+++ b/lib/util.c
@@ -0,0 +1,35 @@
+/*
+ * misc helpers
+ * Copyright 2019 sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
+ *
+ * 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.
+ *
+ */
+
+#include "../gtp/pdp.h"
+
+#include "ippool.h"
+#include "in46_addr.h"
+
+/*! Get the peer of pdp based on IP version used.
+* \param[in] pdp PDP context to select the peer from.
+* \param[in] v4v6 IP version to select. Valid values are 4 and 6.
+* \returns The selected peer matching the given IP version. NULL if not present.
+*/
+struct ippoolm_t *pdp_get_peer_ipv(struct pdp_t *pdp, bool is_ipv6) {
+ uint8_t i;
+
+ for (i = 0; i < 2; i++) {
+ struct ippoolm_t * ippool = pdp->peer[i];
+ if (!ippool)
+ continue;
+ if (is_ipv6 && in46a_is_v6(&ippool->addr))
+ return ippool;
+ else if (!is_ipv6 && in46a_is_v4(&ippool->addr))
+ return ippool;
+ }
+ return NULL;
+}
diff --git a/lib/util.h b/lib/util.h
new file mode 100644
index 0000000..bc9674d
--- /dev/null
+++ b/lib/util.h
@@ -0,0 +1,18 @@
+#pragma once
+/*
+ * misc helpers
+ * Copyright 2019 sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
+ *
+ * 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.
+ *
+ */
+
+#include <stdbool.h>
+
+struct ippoolm_t;
+struct pdp_t;
+
+struct ippoolm_t *pdp_get_peer_ipv(struct pdp_t *pdp, bool is_ipv6);