[PATCH] osmo-msc[master]: remove further files and autotest/autoconf bits irrelevant t...

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Harald Welte gerrit-no-reply at lists.osmocom.org
Tue Oct 3 01:48:41 UTC 2017


Review at  https://gerrit.osmocom.org/4125

remove further files and autotest/autoconf bits irrelevant to osmo-msc

Change-Id: I68e879e7474cbd3dd053f23bc4d5d22dc2748c5b
---
M configure.ac
D include/osmocom/msc/gtphub.h
M tests/atlocal.in
3 files changed, 0 insertions(+), 534 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-msc refs/changes/25/4125/1

diff --git a/configure.ac b/configure.ac
index 8f8bdb9..8f468d5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -59,11 +59,6 @@
 AM_CONDITIONAL(BUILD_SMPP, test "x$osmo_ac_build_smpp" = "xyes")
 AC_SUBST(osmo_ac_build_smpp)
 
-# Enable/disable transcoding within osmo-bsc_mgcp?
-AC_ARG_ENABLE([mgcp-transcoding], [AS_HELP_STRING([--enable-mgcp-transcoding], [Build the MGCP gateway with internal transcoding enabled.])],
-    [osmo_ac_mgcp_transcoding="$enableval"],[osmo_ac_mgcp_transcoding="no"])
-AC_ARG_WITH([g729], [AS_HELP_STRING([--with-g729], [Enable G.729 encoding/decoding.])], [osmo_ac_with_g729="$withval"],[osmo_ac_with_g729="no"])
-
 # Enable/disable 3G aka IuPS + IuCS support?
 AC_ARG_ENABLE([iu], [AS_HELP_STRING([--enable-iu], [Build 3G support, aka IuPS and IuCS interfaces])],
     [osmo_ac_iu="$enableval"],[osmo_ac_iu="no"])
diff --git a/include/osmocom/msc/gtphub.h b/include/osmocom/msc/gtphub.h
deleted file mode 100644
index d7b6f1b..0000000
--- a/include/osmocom/msc/gtphub.h
+++ /dev/null
@@ -1,523 +0,0 @@
-/* GTP Hub Implementation */
-
-/* (C) 2015 by sysmocom s.f.m.c. GmbH <info at sysmocom.de>
- * All Rights Reserved
- *
- * Author: Neels Hofmeyr
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
-
-#include <stdint.h>
-#include <sys/socket.h>
-
-#include <osmocom/core/select.h>
-#include <osmocom/core/timer.h>
-#include <osmocom/core/rate_ctr.h>
-
-#include <osmocom/msc/gprs_sgsn.h>
-
-
-/* support */
-
-/* TODO move to osmocom/core/socket.c ? */
-#include <netdb.h> /* for IPPROTO_* etc */
-struct osmo_sockaddr {
-	struct sockaddr_storage a;
-	socklen_t l;
-};
-
-/* TODO move to osmocom/core/socket.c ? */
-/*! \brief Initialize a sockaddr
- * \param[out] addr  Valid osmo_sockaddr pointer to write result to
- * \param[in] family  Address Family like AF_INET, AF_INET6, AF_UNSPEC
- * \param[in] type  Socket type like SOCK_DGRAM, SOCK_STREAM
- * \param[in] proto  Protocol like IPPROTO_TCP, IPPROTO_UDP
- * \param[in] host Remote host name or IP address in string form
- * \param[in] port Remote port number in host byte order
- * \returns 0 on success, otherwise an error code (from getaddrinfo()).
- *
- * Copy the first result from a getaddrinfo() call with the given parameters to
- * *addr and *addr_len. On error, do not change *addr and return nonzero.
- */
-int osmo_sockaddr_init(struct osmo_sockaddr *addr,
-		       uint16_t family, uint16_t type, uint8_t proto,
-		       const char *host, uint16_t port);
-
-/* Conveniently pass AF_UNSPEC, SOCK_DGRAM and IPPROTO_UDP to
- * osmo_sockaddr_init(). */
-static inline int osmo_sockaddr_init_udp(struct osmo_sockaddr *addr,
-					 const char *host, uint16_t port)
-{
-	return osmo_sockaddr_init(addr, AF_UNSPEC, SOCK_DGRAM, IPPROTO_UDP,
-				  host, port);
-}
-
-/*! \brief convert sockaddr to human readable string.
- * \param[out] addr_str  Valid pointer to a buffer of length addr_str_len.
- * \param[in] addr_str_len  Size of buffer addr_str points at.
- * \param[out] port_str  Valid pointer to a buffer of length port_str_len.
- * \param[in] port_str_len  Size of buffer port_str points at.
- * \param[in] addr  Binary representation as returned by osmo_sockaddr_init().
- * \param[in] flags  flags as passed to getnameinfo().
- * \returns  0 on success, an error code on error.
- *
- * Return the IPv4 or IPv6 address string and the port (a.k.a. service) string
- * representations of the given struct osmo_sockaddr in two caller provided
- * char buffers. Flags of (NI_NUMERICHOST | NI_NUMERICSERV) return numeric
- * address and port. Either one of addr_str or port_str may be NULL, in which
- * case nothing is returned there.
- *
- * See also osmo_sockaddr_to_str() (less flexible, but much more convenient). */
-int osmo_sockaddr_to_strs(char *addr_str, size_t addr_str_len,
-			  char *port_str, size_t port_str_len,
-			  const struct osmo_sockaddr *addr,
-			  int flags);
-
-
-/*! \brief concatenate the parts returned by osmo_sockaddr_to_strs().
- * \param[in] addr  Binary representation as returned by osmo_sockaddr_init().
- * \param[in] buf  A buffer to use for string operations.
- * \param[in] buf_len  Length of the buffer.
- * \returns  Address string (in buffer).
- *
- * Compose a string of the numeric IP-address and port represented by *addr of
- * the form "<ip-addr> port <port>". The returned string is valid until the
- * next invocation of this function.
- */
-const char *osmo_sockaddr_to_strb(const struct osmo_sockaddr *addr,
-				  char *buf, size_t buf_len);
-
-/*! \brief conveniently return osmo_sockaddr_to_strb() in a static buffer.
- * \param[in] addr  Binary representation as returned by osmo_sockaddr_init().
- * \returns  Address string in static buffer.
- *
- * See osmo_sockaddr_to_strb().
- *
- * Note: only one osmo_sockaddr_to_str() call will work per print/log
- * statement. For two or more, use osmo_sockaddr_to_strb() with a separate
- * buffer each.
- */
-const char *osmo_sockaddr_to_str(const struct osmo_sockaddr *addr);
-
-/*! \brief compare two osmo_sockaddr.
- * \param[in] a  The first address to compare.
- * \param[in] b  The other address to compare.
- * \returns 0 if equal, otherwise -1 or 1.
- */
-int osmo_sockaddr_cmp(const struct osmo_sockaddr *a,
-		      const struct osmo_sockaddr *b);
-
-/*! \brief Overwrite *dst with *src.
- * Like memcpy(), but copy only the valid bytes. */
-void osmo_sockaddr_copy(struct osmo_sockaddr *dst,
-			const struct osmo_sockaddr *src);
-
-
-/* general */
-
-enum gtphub_plane_idx {
-	GTPH_PLANE_CTRL = 0,
-	GTPH_PLANE_USER = 1,
-	GTPH_PLANE_N
-};
-
-enum gtphub_side_idx {
-	GTPH_SIDE_SGSN = 0,
-	GTPH_SIDE_GGSN = 1,
-	GTPH_SIDE_N
-};
-
-#define for_each_side(I)	for (I = 0; I < GTPH_SIDE_N; I++)
-#define for_each_plane(I)	for (I = 0; I < GTPH_PLANE_N; I++)
-#define for_each_side_and_plane(I,J)	for_each_side(I) for_each_plane(J)
-
-static inline int other_side_idx(int side_idx)
-{
-	return (side_idx + 1) & 1;
-}
-
-extern const char* const gtphub_plane_idx_names[GTPH_PLANE_N];
-extern const uint16_t gtphub_plane_idx_default_port[GTPH_PLANE_N];
-
-extern const char* const gtphub_side_idx_names[GTPH_SIDE_N];
-
-/* A host address in the form that is expected in the 7.7.32 GSN Address IE.
- * len is either 4 (IPv4) or 16 (IPv6), any other value is invalid. If no
- * address is set, len shall be 0. */
-struct gsn_addr {
-	uint16_t len;
-	uint8_t buf[16];
-};
-
-void gsn_addr_copy(struct gsn_addr *gsna, const struct gsn_addr *src);
-int gsn_addr_from_str(struct gsn_addr *gsna, const char *numeric_addr_str);
-
-/* Return gsna in numeric string form, in a static buffer. */
-const char *gsn_addr_to_str(const struct gsn_addr *gsna);
-
-/* note: strbuf_len doesn't need to be larger than INET6_ADDRSTRLEN + 1. */
-const char *gsn_addr_to_strb(const struct gsn_addr *gsna,
-			     char *strbuf, int strbuf_len);
-
-/* Return 1 on match, zero otherwise. */
-int gsn_addr_same(const struct gsn_addr *a, const struct gsn_addr *b);
-
-/* Decode sa to gsna. Return 0 on success. If port is non-NULL, the port number
- * from sa is also returned. */
-int gsn_addr_from_sockaddr(struct gsn_addr *gsna, uint16_t *port,
-			   const struct osmo_sockaddr *sa);
-
-/* expiry */
-
-struct expiring_item;
-typedef void (*del_cb_t)(struct expiring_item *);
-
-struct expiring_item {
-	struct llist_head entry;
-	time_t expiry;
-	del_cb_t del_cb;
-};
-
-struct expiry {
-	int expiry_in_seconds;
-	struct llist_head items;
-};
-
-/* Initialize an expiry queue. */
-void expiry_init(struct expiry *exq, int expiry_in_seconds);
-
-/* Add a new mapping, or restart the expiry timeout for an already listed
- * mapping. */
-void expiry_add(struct expiry *exq, struct expiring_item *item, time_t now);
-
-/* Initialize to all-empty; must be called before using the item in any way. */
-void expiring_item_init(struct expiring_item *item);
-
-/* Remove the given item from its expiry queue, and call item->del_cb, if set.
- * This sets item->del_cb to NULL and is harmless when run a second time on the
- * same item, so the del_cb may choose to call this function, too, to allow
- * deleting items from several code paths. */
-void expiring_item_del(struct expiring_item *item);
-
-/* Carry out due expiry of mappings. Must be invoked regularly.
- * 'now' is the current clock count in seconds and must correspond to the clock
- * count passed to nr_map_add(). A monotonous clock counter should be used. */
-int expiry_tick(struct expiry *exq, time_t now);
-
-/* Expire all items. */
-void expiry_clear(struct expiry *exq);
-
-
-/* number map */
-
-/* A number map assigns a "random" mapped number to each user provided number.
- * If the same number is requested multiple times, the same mapped number is
- * returned.
- *
- * Number maps plug into possibly shared pools and expiry queues, for example:
- *
- *     mapA -----------+-> pool1           <-+-- mapB
- *     {10->1, 11->5}  |   {1, 2, 3, ...}    |   {10->2, 11->3}
- *                     |                     |
- *                     |                     |
- *                 /-> \-> expiry1         <-/
- *                 |       (30 seconds)
- *                 |
- *     mapC -------+-----> pool2           <-+-- mapD
- *     {10->1, 11->3}      {1, 2, 3, ...}    |   {10->2, 11->5}
- *                                           |
- *                         expiry2         <-/
- *                         (60 seconds)
- *
- * A map contains mappings ("10->1"). Each map needs a number pool, which can
- * be shared with other maps. Each new mapping receives a number from the pool,
- * which is then unavailable to any other map using the same pool.
- *
- * A map may point at an expiry queue, in which case all mappings added to it
- * are also appended to the expiry queue (using a separate llist entry in the
- * mapping). Any number of maps may submit to the same expiry queue, if they
- * desire the same expiry timeout. An expiry queue stores the mappings in
- * chronological order, so that expiry checking is needed only from the start
- * of the queue; hence only mappings with identical expiry timeout can be added
- * to the same expiry queue. Upon expiry, a mapping is dropped from the map it
- * was submitted at. expiry_tick() needs to be called regularly for each expiry
- * queue.
- *
- * A nr_mapping can be embedded in a larger struct: each mapping can have a
- * distinct destructor (del_cb), and each del_cb can figure out the container
- * struct's address and free that upon expiry or manual deletion. So in expiry
- * queues (and even maps), mappings of different container types can be mixed.
- * This can help to drastically reduce the amount of unnecessary visits during
- * expiry checking, for the case that no expiry is pending. An expiry queue
- * always knows which mappings to expire next, because they are right at the
- * start of its list.
- *
- * Mapping allocation and a del_cb are provided by the caller. If del_cb is
- * NULL, no deallocation will be done (allowing statically allocated entries).
- */
-
-typedef unsigned int nr_t;
-
-/* Generator for unused numbers. So far this counts upwards from zero, but the
- * implementation may change in the future. Treat this like an opaque struct.
- * If this becomes random, the tests need to be fixed. */
-struct nr_pool {
-	nr_t last_nr;
-	nr_t nr_min;
-	nr_t nr_max;
-};
-
-struct nr_mapping {
-	struct llist_head entry;
-	struct expiring_item expiry_entry;
-
-	void *origin;
-	nr_t orig;
-	nr_t repl;
-};
-
-struct nr_map {
-	struct nr_pool *pool; /* multiple nr_maps can share a nr_pool. */
-	struct expiry *add_items_to_expiry;
-	struct llist_head mappings;
-};
-
-
-void nr_pool_init(struct nr_pool *pool, nr_t nr_min, nr_t nr_max);
-
-/* Return the next unused number from the nr_pool. */
-nr_t nr_pool_next(struct nr_pool *pool);
-
-/* Initialize the nr_mapping to zero/empty values. */
-void nr_mapping_init(struct nr_mapping *mapping);
-
-/* Remove the given mapping from its parent map and expiry queue, and call
- * mapping->del_cb, if set. */
-void nr_mapping_del(struct nr_mapping *mapping);
-
-/* Initialize an (already allocated) nr_map, and set the map's number pool.
- * Multiple nr_map instances may use the same nr_pool. Set the nr_map's expiry
- * queue to exq, so that all added mappings are automatically expired after the
- * time configured in exq. exq may be NULL to disable automatic expiry. */
-void nr_map_init(struct nr_map *map, struct nr_pool *pool,
-		 struct expiry *exq);
-
-/* Add a new entry to the map. mapping->orig, mapping->origin and
- * mapping->del_cb must be set before calling this function. The remaining
- * fields of *mapping will be overwritten. mapping->repl is set to the next
- * available mapped number from map->pool. 'now' is the current clock count in
- * seconds; if no map->expiry is used, just pass 0 for 'now'. */
-void nr_map_add(struct nr_map *map, struct nr_mapping *mapping,
-		time_t now);
-
-/* Restart the timeout for the given mapping. mapping must be a member of map.
- */
-void nr_map_refresh(struct nr_map *map, struct nr_mapping *mapping,
-		    time_t now);
-
-/* Return a known mapping from nr_orig and the given origin. If nr_orig is
- * unknown, return NULL. */
-struct nr_mapping *nr_map_get(const struct nr_map *map,
-			      void *origin, nr_t nr_orig);
-
-/* Return a known mapping to nr_repl. If nr_repl is unknown, return NULL. */
-struct nr_mapping *nr_map_get_inv(const struct nr_map *map, nr_t nr_repl);
-
-/* Remove all mappings from map. */
-void nr_map_clear(struct nr_map *map);
-
-/* Return 1 if map has no entries, 0 otherwise. */
-int nr_map_empty(const struct nr_map *map);
-
-
-/* config */
-
-static const int GTPH_EXPIRE_QUICKLY_SECS = 30; /* TODO is there a spec for this? */
-static const int GTPH_EXPIRE_SLOWLY_MINUTES = 6 * 60; /* TODO is there a spec for this? */
-
-struct gtphub_cfg_addr {
-	const char *addr_str;
-	uint16_t port;
-};
-
-struct gtphub_cfg_bind {
-	struct gtphub_cfg_addr bind;
-};
-
-struct gtphub_cfg {
-	struct gtphub_cfg_bind to_gsns[GTPH_SIDE_N][GTPH_PLANE_N];
-	struct gtphub_cfg_addr proxy[GTPH_SIDE_N][GTPH_PLANE_N];
-	int sgsn_use_sender; /* Use sender, not GSN addr IE with std ports */
-};
-
-
-/* state */
-
-struct gtphub_peer {
-	struct llist_head entry;
-
-	struct llist_head addresses; /* Alternatives, not load balancing. */
-	struct nr_pool seq_pool;
-	struct nr_map seq_map;
-};
-
-struct gtphub_peer_addr {
-	struct llist_head entry;
-
-	struct gtphub_peer *peer;
-	struct gsn_addr addr;
-	struct llist_head ports;
-};
-
-struct gtphub_peer_port {
-	struct llist_head entry;
-
-	struct gtphub_peer_addr *peer_addr;
-	uint16_t port;
-	unsigned int ref_count; /* references from other peers' seq_maps */
-	struct osmo_sockaddr sa; /* a "cache" for (peer_addr->addr, port) */
-	int last_restart_count; /* 0..255 = valid, all else means unknown */
-
-	struct rate_ctr_group *counters_io;
-};
-
-struct gtphub_tunnel_endpoint {
-	struct gtphub_peer_port *peer;
-	uint32_t tei_orig; /* from/to peer */
-
-	struct rate_ctr_group *counters_io;
-};
-
-struct gtphub_tunnel {
-	struct llist_head entry;
-	struct expiring_item expiry_entry;
-
-	uint32_t tei_repl; /* unique TEI to replace peers' TEIs */
-	struct gtphub_tunnel_endpoint endpoint[GTPH_SIDE_N][GTPH_PLANE_N];
-};
-
-struct gtphub_bind {
-	struct gsn_addr local_addr;
-	uint16_t local_port;
-	struct osmo_fd ofd;
-
-	/* list of struct gtphub_peer */
-	struct llist_head peers;
-
-	const char *label; /* For logging */
-	struct rate_ctr_group *counters_io;
-};
-
-struct gtphub_resolved_ggsn {
-	struct llist_head entry;
-	struct expiring_item expiry_entry;
-
-	/* The APN OI, the Operator Identifier, is the combined address,
-	 * including parts of the IMSI and APN NI, and ending with ".gprs". */
-	char apn_oi_str[GSM_APN_LENGTH];
-
-	/* Which address and port we resolved that to. */
-	struct gtphub_peer_port *peer;
-};
-
-struct gtphub {
-	struct gtphub_bind to_gsns[GTPH_SIDE_N][GTPH_PLANE_N];
-
-	/* pointers to an entry of to_gsns[s][p].peers */
-	struct gtphub_peer_port *proxy[GTPH_SIDE_N][GTPH_PLANE_N];
-
-	/* The TEI numbers will simply wrap and be reused, which will work out
-	 * in practice. Problems would arise if one given peer maintained the
-	 * same TEI for a time long enough for the TEI nr map to wrap an entire
-	 * uint32_t; if a new TEI were mapped every second, this would take
-	 * more than 100 years (in which a single given TEI must not time out)
-	 * to cause a problem. */
-	struct nr_pool tei_pool;
-
-	struct llist_head tunnels; /* struct gtphub_tunnel */
-	struct llist_head pending_deletes; /* opaque (gtphub.c) */
-
-	struct llist_head ggsn_lookups; /* opaque (gtphub_ares.c) */
-	struct llist_head resolved_ggsns; /* struct gtphub_resolved_ggsn */
-
-	struct osmo_timer_list gc_timer;
-	struct expiry expire_quickly;
-	struct expiry expire_slowly;
-
-	uint8_t restart_counter;
-
-	int sgsn_use_sender;
-};
-
-struct gtp_packet_desc;
-
-
-/* api */
-
-int gtphub_vty_init(struct gtphub *global_hub, struct gtphub_cfg *global_cfg);
-int gtphub_cfg_read(struct gtphub_cfg *cfg, const char *config_file);
-
-/* Initialize and start gtphub: bind to ports, run expiry timers. */
-int gtphub_start(struct gtphub *hub, struct gtphub_cfg *cfg,
-		 uint8_t restart_counter);
-
-/* Close all sockets, expire all maps and peers and free all allocations. The
- * struct is then unusable, unless gtphub_start() is run on it again. */
-void gtphub_stop(struct gtphub *hub);
-
-time_t gtphub_now(void);
-
-/* Remove expired items, empty peers, ... */
-void gtphub_gc(struct gtphub *hub, time_t now);
-
-/* Return the string of the first address for this peer. */
-const char *gtphub_peer_str(struct gtphub_peer *peer);
-
-/* Return a human readable description of tun in a static buffer. */
-const char *gtphub_tunnel_str(struct gtphub_tunnel *tun);
-
-/* Return 1 if all of tun's endpoints are fully established, 0 otherwise. */
-int gtphub_tunnel_complete(struct gtphub_tunnel *tun);
-
-int gtphub_handle_buf(struct gtphub *hub,
-		      unsigned int side_idx,
-		      unsigned int port_idx,
-		      const struct osmo_sockaddr *from_addr,
-		      uint8_t *buf,
-		      size_t received,
-		      time_t now,
-		      uint8_t **reply_buf,
-		      struct osmo_fd **to_ofd,
-		      struct osmo_sockaddr *to_addr);
-
-struct gtphub_peer_port *gtphub_port_have(struct gtphub *hub,
-					  struct gtphub_bind *bind,
-					  const struct gsn_addr *addr,
-					  uint16_t port);
-
-struct gtphub_peer_port *gtphub_port_find_sa(const struct gtphub_bind *bind,
-					     const struct osmo_sockaddr *addr);
-
-void gtphub_resolved_ggsn(struct gtphub *hub, const char *apn_oi_str,
-			  struct gsn_addr *resolved_addr,
-			  time_t now);
-
-const char *gtphub_port_str(struct gtphub_peer_port *port);
-
-int gtphub_write(const struct osmo_fd *to,
-		 const struct osmo_sockaddr *to_addr,
-		 const uint8_t *buf, size_t buf_len);
diff --git a/tests/atlocal.in b/tests/atlocal.in
index 362bfa9..f361387 100644
--- a/tests/atlocal.in
+++ b/tests/atlocal.in
@@ -1,7 +1 @@
-enable_nat_test='@osmo_ac_build_nat@'
 enable_smpp_test='@osmo_ac_build_smpp@'
-enable_bsc_test='@osmo_ac_build_bsc@'
-enable_mgcp_transcoding_test='@osmo_ac_mgcp_transcoding@'
-enable_sgsn_test='@found_libgtp_and_libcares@'
-enable_oap_test='@found_libgtp_and_libcares@'
-enable_gtphub_test='@found_libgtp_and_libcares@'

-- 
To view, visit https://gerrit.osmocom.org/4125
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I68e879e7474cbd3dd053f23bc4d5d22dc2748c5b
Gerrit-PatchSet: 1
Gerrit-Project: osmo-msc
Gerrit-Branch: master
Gerrit-Owner: Harald Welte <laforge at gnumonks.org>



More information about the gerrit-log mailing list