diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2019-08-20 13:24:55 +0200 |
---|---|---|
committer | Pau Espin Pedrol <pespin@sysmocom.de> | 2019-08-28 11:14:57 +0200 |
commit | f612ffea8262f53017be8eaf465b23c4c18c532a (patch) | |
tree | e5202b7f57d934015b491023524b777afba94a67 /lib | |
parent | 421f22e8cf8059a7141f08b8dcac0854305571fa (diff) |
Move pdp_get_peer_ipv() to lib/util.*
Preparation for next commit, where this function will be needed inside
libmisc (lib/*).
Change-Id: Ibab4f6c09d1e5f0e9cfaea28ae1e7ab5b5c219b5
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Makefile.am | 4 | ||||
-rw-r--r-- | lib/util.c | 35 | ||||
-rw-r--r-- | lib/util.h | 18 |
3 files changed, 55 insertions, 2 deletions
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); |