plaisthos has uploaded this change for review. ( http://gerrit.openvpn.net/c/openvpn/+/1725?usp=email )
Change subject: Extract multi_get_instance_real_udp_real method ...................................................................... Extract multi_get_instance_real_udp_real method This is just a small refactoring to make the code a little bit better organised. Change-Id: I37ade55d7674c68dd98cf4dfde35c4ad42e20d39 Signed-off-by: Arne Schwabe <[email protected]> --- M src/openvpn/mudp.c M src/openvpn/multi.c 2 files changed, 25 insertions(+), 9 deletions(-) git pull ssh://gerrit.openvpn.net:29418/openvpn refs/changes/25/1725/1 diff --git a/src/openvpn/mudp.c b/src/openvpn/mudp.c index a91d11b..e8d8128 100644 --- a/src/openvpn/mudp.c +++ b/src/openvpn/mudp.c @@ -198,7 +198,6 @@ handle_connection_attempt(struct multi_context *m, struct link_socket *sock, struct mroute_addr *real, - const uint64_t hv, struct hash_bucket *bucket) { struct hash *hash = m->hash; @@ -229,6 +228,7 @@ mi = multi_create_instance(m, real, sock); if (mi) { + const uint64_t hv = hash_value(hash, real); hash_add_fast(hash, bucket, &mi->real, hv, mi); mi->did_real_hash = true; multi_assign_peer_id(m, mi); @@ -258,6 +258,28 @@ } /** + * Looks up an multi instance by its real address (IP and port) + * @param m multi context + * @param real Address to look up + * @return instance matching the NULL otherwise + */ +struct multi_instance * +multi_get_instance_real_udp_real(struct multi_context *m, struct mroute_addr *real) +{ + struct hash *hash = m->hash; + struct hash_element *he; + const uint64_t hv = hash_value(hash, real); + struct hash_bucket *bucket = hash_bucket(hash, hv); + he = hash_lookup_fast(hash, bucket, real, hv); + if (he) + { + return he->value; + } + return NULL; +} + + +/** * Get a client instance based on real address. If * the instance doesn't exist, create it while * maintaining real address hash table atomicity. @@ -273,7 +295,6 @@ if (mroute_extract_openvpn_sockaddr(&real, &m->top.c2.from.dest, true) && m->top.c2.buf.len > 0) { - struct hash_element *he; const uint64_t hv = hash_value(hash, &real); struct hash_bucket *bucket = hash_bucket(hash, hv); uint8_t *ptr = BPTR(&m->top.c2.buf); @@ -310,17 +331,13 @@ } if (!v2 || peer_id_disabled) { - he = hash_lookup_fast(hash, bucket, &real, hv); - if (he) - { - mi = (struct multi_instance *)he->value; - } + mi = multi_get_instance_real_udp_real(m, &real); } /* we have no existing multi instance for this connection */ if (!mi) { - mi = handle_connection_attempt(m, sock, &real, hv, bucket); + mi = handle_connection_attempt(m, sock, &real, bucket); } #ifdef ENABLE_DEBUG diff --git a/src/openvpn/multi.c b/src/openvpn/multi.c index 8a8d742..ddb98c9 100644 --- a/src/openvpn/multi.c +++ b/src/openvpn/multi.c @@ -3108,7 +3108,6 @@ multi_check_dest_addr_allowed(struct multi_context *m, struct multi_instance *mi, struct mroute_addr *real) { struct hash *hash = m->hash; - struct gc_arena gc = gc_new(); const uint64_t hv = hash_value(hash, real); struct hash_bucket *bucket = hash_bucket(hash, hv); -- To view, visit http://gerrit.openvpn.net/c/openvpn/+/1725?usp=email To unsubscribe, or for help writing mail filters, visit http://gerrit.openvpn.net/settings?usp=email Gerrit-MessageType: newchange Gerrit-Project: openvpn Gerrit-Branch: master Gerrit-Change-Id: I37ade55d7674c68dd98cf4dfde35c4ad42e20d39 Gerrit-Change-Number: 1725 Gerrit-PatchSet: 1 Gerrit-Owner: plaisthos <[email protected]> Gerrit-CC: openvpn-devel <[email protected]>
_______________________________________________ Openvpn-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/openvpn-devel
