1+ /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
12/*
23 * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
34 * University Research and Technology
1112 * All rights reserved.
1213 * Copyright (c) 2008 Sun Microsystems, Inc. All rights reserved.
1314 * Copyright (c) 2010-2013 Cisco Systems, Inc. All rights reserved.
15+ * Copyright (c) 2014 Los Alamos National Security, LLC. All rights
16+ * reserved.
1417 * $COPYRIGHT$
1518 *
1619 * Additional copyrights may follow
@@ -264,6 +267,7 @@ int16_t opal_ifaddrtokindex(const char* if_addr)
264267 opal_if_t * intf ;
265268 int error ;
266269 struct addrinfo hints , * res = NULL , * r ;
270+ int if_kernel_index ;
267271 size_t len ;
268272
269273 if (OPAL_SUCCESS != mca_base_framework_open (& opal_if_base_framework , 0 )) {
@@ -283,16 +287,15 @@ int16_t opal_ifaddrtokindex(const char* if_addr)
283287 }
284288
285289 for (r = res ; r != NULL ; r = r -> ai_next ) {
286- for (intf = (opal_if_t * )opal_list_get_first (& opal_if_list );
287- intf != (opal_if_t * )opal_list_get_end (& opal_if_list );
288- intf = (opal_if_t * )opal_list_get_next (intf )) {
289-
290+ OPAL_LIST_FOREACH (intf , & opal_if_list , opal_if_t ) {
290291 if (AF_INET == r -> ai_family && AF_INET == intf -> af_family ) {
291292 struct sockaddr_in ipv4 ;
292293 len = (r -> ai_addrlen < sizeof (struct sockaddr_in )) ? r -> ai_addrlen : sizeof (struct sockaddr_in );
293294 memcpy (& ipv4 , r -> ai_addr , len );
294295 if (opal_net_samenetwork ((struct sockaddr * )& ipv4 , (struct sockaddr * )& intf -> if_addr , intf -> if_mask )) {
295- return intf -> if_kernel_index ;
296+ if_kernel_index = intf -> if_kernel_index ;
297+ freeaddrinfo (res );
298+ return if_kernel_index ;
296299 }
297300 }
298301#if OPAL_ENABLE_IPV6
@@ -302,7 +305,9 @@ int16_t opal_ifaddrtokindex(const char* if_addr)
302305 memcpy (& ipv6 , r -> ai_addr , len );
303306 if (opal_net_samenetwork ((struct sockaddr * )((struct sockaddr_in6 * )& intf -> if_addr ),
304307 (struct sockaddr * )& ipv6 , intf -> if_mask )) {
305- return intf -> if_kernel_index ;
308+ if_kernel_index = intf -> if_kernel_index ;
309+ freeaddrinfo (res );
310+ return if_kernel_index ;
306311 }
307312 }
308313#endif
0 commit comments