mirror of
https://github.com/OpenVPN/openvpn.git
synced 2024-09-20 12:02:28 +02:00
Extract multi_assign_peer_id into its own function
This makes multi_get_create_instance_udp a bit shorter and better structured and also prepares this method to be called from the mutlti TCP context with DCO which will also need to assign unique peer ids to instances. Signed-off-by: Arne Schwabe <arne@rfc2549.org> Acked-by: Gert Doering <gert@greenie.muc.de> Message-Id: <20210401131337.3684-13-arne@rfc2549.org> URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg21959.html Signed-off-by: Gert Doering <gert@greenie.muc.de>
This commit is contained in:
parent
18b4a8380b
commit
9fe0b2c287
@ -103,27 +103,9 @@ multi_get_create_instance_udp(struct multi_context *m, bool *floated)
|
||||
mi = multi_create_instance(m, &real);
|
||||
if (mi)
|
||||
{
|
||||
int i;
|
||||
|
||||
hash_add_fast(hash, bucket, &mi->real, hv, mi);
|
||||
mi->did_real_hash = true;
|
||||
|
||||
/* max_clients must be less then max peer-id value */
|
||||
ASSERT(m->max_clients < MAX_PEER_ID);
|
||||
|
||||
for (i = 0; i < m->max_clients; ++i)
|
||||
{
|
||||
if (!m->instances[i])
|
||||
{
|
||||
mi->context.c2.tls_multi->peer_id = i;
|
||||
m->instances[i] = mi;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* should not really end up here, since multi_create_instance returns null
|
||||
* if amount of clients exceeds max_clients */
|
||||
ASSERT(i < m->max_clients);
|
||||
multi_assign_peer_id(m, mi);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -4046,6 +4046,27 @@ init_management_callback_multi(struct multi_context *m)
|
||||
#endif /* ifdef ENABLE_MANAGEMENT */
|
||||
}
|
||||
|
||||
void multi_assign_peer_id(struct multi_context *m, struct multi_instance *mi)
|
||||
{
|
||||
/* max_clients must be less then max peer-id value */
|
||||
ASSERT(m->max_clients < MAX_PEER_ID);
|
||||
|
||||
for (int i = 0; i < m->max_clients; ++i)
|
||||
{
|
||||
if (!m->instances[i])
|
||||
{
|
||||
mi->context.c2.tls_multi->peer_id = i;
|
||||
m->instances[i] = mi;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* should not really end up here, since multi_create_instance returns null
|
||||
* if amount of clients exceeds max_clients */
|
||||
ASSERT(mi->context.c2.tls_multi->peer_id < m->max_clients);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Top level event loop.
|
||||
*/
|
||||
|
@ -676,5 +676,15 @@ multi_set_pending(struct multi_context *m, struct multi_instance *mi)
|
||||
{
|
||||
m->pending = mi;
|
||||
}
|
||||
/**
|
||||
* Assigns a peer-id to a a client and adds the instance to the
|
||||
* the instances array of the \c multi_context structure.
|
||||
*
|
||||
* @param m - The single \c multi_context structure.
|
||||
* @param mi - The \c multi_instance of the VPN tunnel to be
|
||||
* postprocessed.
|
||||
*/
|
||||
void multi_assign_peer_id(struct multi_context *m, struct multi_instance *mi);
|
||||
|
||||
|
||||
#endif /* MULTI_H */
|
||||
|
Loading…
Reference in New Issue
Block a user