diff options
author | Alexander Couzens <lynxis@fe80.eu> | 2020-10-11 18:41:24 +0200 |
---|---|---|
committer | laforge <laforge@osmocom.org> | 2020-10-12 13:08:42 +0000 |
commit | 4f60845552024419ecf8ad2c20cf108be7be4e04 (patch) | |
tree | ad81f2eca11ca21ba33accdfd73c261dacd6dbe8 /src/gb/gprs_ns2_udp.c | |
parent | bb0a53ba40222afd3d3625e5adc3c0f1bfe6dd80 (diff) |
gprs_ns2: add gprs_ns2_ip_bind_by_sockaddr() to search for binds by sockaddr
Change-Id: I48c3f1a82574eee0a49e6941cf9e1365c2302d3b
Diffstat (limited to 'src/gb/gprs_ns2_udp.c')
-rw-r--r-- | src/gb/gprs_ns2_udp.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/gb/gprs_ns2_udp.c b/src/gb/gprs_ns2_udp.c index 815e5168..a5781606 100644 --- a/src/gb/gprs_ns2_udp.c +++ b/src/gb/gprs_ns2_udp.c @@ -265,6 +265,32 @@ static int nsip_fd_cb(struct osmo_fd *bfd, unsigned int what) return rc; } +/*! Find NS bind for a given socket address + * \param[in] nsi NS instance + * \param[in] sockaddr socket address to search for + * \return + */ +struct gprs_ns2_vc_bind *gprs_ns2_ip_bind_by_sockaddr(struct gprs_ns2_inst *nsi, + const struct osmo_sockaddr *sockaddr) +{ + struct gprs_ns2_vc_bind *bind; + struct osmo_sockaddr *local; + + OSMO_ASSERT(nsi); + OSMO_ASSERT(sockaddr); + + llist_for_each_entry(bind, &nsi->binding, list) { + if (!gprs_ns2_is_ip_bind(bind)) + continue; + + local = gprs_ns2_ip_bind_sockaddr(bind); + if (!osmo_sockaddr_cmp(sockaddr, local)) + return bind; + } + + return NULL; +} + /*! Bind to an IPv4/IPv6 address * \param[in] nsi NS Instance in which to create the NSVC * \param[in] local the local address to bind to |