Skip to content

Commit

Permalink
Merge pull request #960
Browse files Browse the repository at this point in the history
slist: use for address,extension,dhcp6,var_array
  • Loading branch information
cfconrad committed Apr 20, 2023
2 parents d0012cf + 3e513a6 commit 1a1359d
Show file tree
Hide file tree
Showing 13 changed files with 153 additions and 574 deletions.
11 changes: 7 additions & 4 deletions include/wicked/address.h
Expand Up @@ -26,6 +26,7 @@

#include <wicked/types.h>
#include <wicked/refcount.h>
#include <wicked/slist.h>
#include <wicked/util.h>

#include <sys/socket.h>
Expand Down Expand Up @@ -164,12 +165,14 @@ extern unsigned int ni_address_preferred_lft(const ni_address_t *, const struct
extern ni_bool_t ni_address_lft_is_valid(const ni_address_t *, const struct timeval *);
extern ni_bool_t ni_address_lft_is_preferred(const ni_address_t *, const struct timeval *);

extern void ni_address_list_append(ni_address_t **, ni_address_t *);
extern void ni_address_list_destroy(ni_address_t **);
extern ni_declare_slist_append(ni_address);
extern ni_declare_slist_remove(ni_address);
extern ni_declare_slist_delete(ni_address);
extern ni_declare_slist_destroy(ni_address);
extern ni_declare_slist_copy(ni_address);
extern ni_declare_slist_count(ni_address);
extern void ni_address_list_dedup(ni_address_t **);
extern void ni_address_list_copy(ni_address_t **, const ni_address_t *);
extern ni_address_t * ni_address_list_find(ni_address_t *, const ni_sockaddr_t *);
extern unsigned int ni_address_list_count(ni_address_t *list);

extern void ni_address_array_init(ni_address_array_t *);
extern void ni_address_array_destroy(ni_address_array_t *);
Expand Down
5 changes: 3 additions & 2 deletions include/wicked/util.h
Expand Up @@ -9,6 +9,7 @@

#include <sys/types.h>
#include <wicked/types.h>
#include <wicked/slist.h>
#include <string.h>
#include <stdio.h>
#include <stdarg.h>
Expand Down Expand Up @@ -197,8 +198,8 @@ extern ni_bool_t ni_var_array_set_boolean(ni_var_array_t *, const char *, int);
extern void ni_var_array_sort(ni_var_array_t *, ni_var_compare_fn_t);
extern void ni_var_array_sort_by_name(ni_var_array_t *);

extern void ni_var_array_list_append(ni_var_array_t **, ni_var_array_t *);
extern void ni_var_array_list_destroy(ni_var_array_t **);
extern ni_declare_slist_append(ni_var_array);
extern ni_declare_slist_destroy(ni_var_array);

extern void ni_stringbuf_set(ni_stringbuf_t *, const char *);
extern void ni_stringbuf_init(ni_stringbuf_t *);
Expand Down
2 changes: 1 addition & 1 deletion src/addrconf.c
Expand Up @@ -110,7 +110,7 @@ ni_addrconf_lease_clone_dhcp6(struct ni_addrconf_lease_dhcp6 *clone, const struc
ni_string_dup(&clone->status->message, orig->status->message);
}

ni_dhcp6_ia_list_copy(&clone->ia_list, orig->ia_list, FALSE);
ni_dhcp6_ia_list_copy(&clone->ia_list, orig->ia_list);

ni_string_dup(&clone->boot_url, orig->boot_url);
ni_string_array_copy(&clone->boot_params, &orig->boot_params);
Expand Down
65 changes: 8 additions & 57 deletions src/address.c
Expand Up @@ -31,6 +31,7 @@
#include <wicked/route.h>

#include "refcount_priv.h"
#include "slist_priv.h"
#include "util_priv.h"

#include <string.h>
Expand Down Expand Up @@ -430,13 +431,12 @@ ni_address_lft_is_preferred(const ni_address_t *ap, const struct timeval *curren
/*
* ni_address list functions
*/
void
ni_address_list_append(ni_address_t **list, ni_address_t *ap)
{
while (*list)
list = &(*list)->next;
*list = ap;
}
extern ni_define_slist_append(ni_address);
extern ni_define_slist_remove(ni_address);
extern ni_define_slist_delete(ni_address);
extern ni_define_slist_destroy(ni_address);
extern ni_define_slist_copy(ni_address);
extern ni_define_slist_count(ni_address);

void
ni_address_list_dedup(ni_address_t **list)
Expand All @@ -461,67 +461,18 @@ ni_address_list_dedup(ni_address_t **list)
}
}

void
ni_address_list_copy(ni_address_t **dst, const ni_address_t *src)
{
const ni_address_t *ap;

if (!dst)
return;

for (ap = src; ap != NULL; ap = ap->next)
ni_address_list_append(dst, ni_address_clone(ap));
}

unsigned int
ni_address_list_count(ni_address_t *list)
{
unsigned int count = 0;
const ni_address_t *ap;

for (ap = list; ap != NULL; ap = ap->next)
count++;
return count;
}

ni_address_t *
ni_address_list_find(ni_address_t *list, const ni_sockaddr_t *addr)
{
ni_address_t *ap;

for (ap = list; ap != NULL; ap = ap->next) {
ni_slist_foreach(list, ap) {
if (ni_sockaddr_equal(&ap->local_addr, addr))
return ap;
}
return NULL;
}

ni_bool_t
__ni_address_list_remove(ni_address_t **list, ni_address_t *ap)
{
ni_address_t **pos, *cur;

for (pos = list; (cur = *pos) != NULL; pos = &cur->next) {
if (cur == ap) {
*pos = cur->next;
ni_address_free(cur);
return TRUE;
}
}
return FALSE;
}

void
ni_address_list_destroy(ni_address_t **list)
{
ni_address_t *ap;

while ((ap = *list) != NULL) {
*list = ap->next;
ni_address_free(ap);
}
}

void
ni_address_array_init(ni_address_array_t *array)
{
Expand Down
12 changes: 8 additions & 4 deletions src/auto6.c
Expand Up @@ -402,12 +402,14 @@ ni_auto6_lease_address_update(ni_netdev_t *dev, ni_addrconf_lease_t *lease, cons

if ((la = ni_address_list_find(lease->addrs, &ap->local_addr))) {
if (ap->owner != NI_ADDRCONF_NONE && ap->owner != NI_ADDRCONF_AUTOCONF) {
unsigned int plen = la->prefixlen;

changed = TRUE;
__ni_address_list_remove(&lease->addrs, la);
ni_address_list_delete(&lease->addrs, la);
ni_debug_verbose(NI_LOG_DEBUG, NI_TRACE_IPV6|NI_TRACE_AUTOIP,
"%s: removed address %s/%u in %s:%s lease (owner %s)",
dev->name,
ni_sockaddr_print(&la->local_addr), la->prefixlen,
ni_sockaddr_print(&ap->local_addr), plen,
ni_addrfamily_type_to_name(lease->family),
ni_addrconf_type_to_name(lease->type),
ni_addrconf_type_to_name(ap->owner));
Expand Down Expand Up @@ -573,12 +575,14 @@ ni_auto6_on_address_event(ni_netdev_t *dev, ni_event_t event, const ni_address_t

case NI_EVENT_ADDRESS_DELETE:
if ((la = ni_address_list_find(lease->addrs, &ap->local_addr))) {
unsigned int plen = la->prefixlen;

changed = TRUE;
__ni_address_list_remove(&lease->addrs, la);
ni_address_list_delete(&lease->addrs, la);
ni_debug_verbose(NI_LOG_DEBUG, NI_TRACE_IPV6|NI_TRACE_AUTOIP,
"%s: deleted address %s/%u in %s:%s lease (owner %s)",
dev->name,
ni_sockaddr_print(&la->local_addr), la->prefixlen,
ni_sockaddr_print(&ap->local_addr), plen,
ni_addrfamily_type_to_name(lease->family),
ni_addrconf_type_to_name(lease->type),
ni_addrconf_type_to_name(ap->owner));
Expand Down
2 changes: 1 addition & 1 deletion src/dhcp6/device.c
Expand Up @@ -1123,7 +1123,7 @@ ni_dhcp6_acquire(ni_dhcp6_device_t *dev, const ni_dhcp6_request_t *req, char **e
if (!ph->plen)
continue;

padr = ni_dhcp6_ia_addr_clone(ph, FALSE);
padr = ni_dhcp6_ia_addr_clone(ph);
ni_dhcp6_ia_addr_list_append(&ia->addrs, padr);
break; /* one pd hint per ia only */
}
Expand Down

0 comments on commit 1a1359d

Please sign in to comment.