Skip to content

Commit

Permalink
Add API to get link address
Browse files Browse the repository at this point in the history
  • Loading branch information
ssahani committed Oct 12, 2020
1 parent 0b96ad2 commit 88f417d
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 2 deletions.
5 changes: 3 additions & 2 deletions include/network-config-manager.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,18 @@ int ncm_add_dns_domains(int argc, char *argv[]);
int ncm_show_dns_server_domains(int argc, char *argv[]);
int ncm_get_dns_domains(char ***ret);

int ncm_link_get_addresses(const char *ifname, char ***ret);
int ncm_link_add_address(int argc, char *argv[]);
int ncm_link_delete_address(int argc, char *argv[]);

int ncm_link_add_default_gateway(int argc, char *argv[]);
int ncm_link_add_route(int argc, char *argv[]);
int ncm_link_delete_address(int argc, char *argv[]);
int ncm_link_delete_gateway_or_route(int argc, char *argv[]);

int ncm_link_add_ntp(int argc, char *argv[]);
int ncm_link_get_ntp(const char *ifname, char ***ret);
int ncm_link_delete_ntp(int argc, char *argv[]);


int ncm_link_set_dhcp4_client_identifier(int argc, char *argv[]);
int ncm_link_set_dhcp4_section(int argc, char *argv[]);
int ncm_link_set_dhcp6_section(int argc, char *argv[]);
Expand Down
48 changes: 48 additions & 0 deletions src/manager/network-config-manager.c
Original file line number Diff line number Diff line change
Expand Up @@ -902,6 +902,54 @@ _public_ int ncm_link_delete_address(int argc, char *argv[]) {
return 0;
}

_public_ int ncm_link_get_addresses(const char *ifname, char ***ret) {
_cleanup_(addresses_unref) Addresses *addr = NULL;
_auto_cleanup_ IfNameIndex *p = NULL;
_auto_cleanup_strv_ char **s = NULL;
GHashTableIter iter;
gpointer key, value;
unsigned long size;
int r;

assert(ifname);

r = parse_ifname_or_index(ifname, &p);
if (r < 0)
return -errno;

r = manager_get_one_link_address(p->ifindex, &addr);
if (r < 0)
return r;

if (!set_size(addr->addresses))
return -ENODATA;

g_hash_table_iter_init(&iter, addr->addresses->hash);
while (g_hash_table_iter_next (&iter, &key, &value)) {
Address *a = (Address *) g_bytes_get_data(key, &size);
_auto_cleanup_ char *c = NULL;

r = ip_to_string_prefix(a->family, &a->address, &c);
if (r < 0)
return r;

if (!s) {
s = strv_new(c);
if (!s)
return log_oom();
} else {
r = strv_add(&s, c);
if (r < 0)
return log_oom();
}

steal_pointer(c);
}

*ret = steal_pointer(s);
return 0;
}

_public_ int ncm_link_add_default_gateway(int argc, char *argv[]) {
_auto_cleanup_ IPAddress *address = NULL;
_auto_cleanup_ IfNameIndex *p = NULL;
Expand Down

0 comments on commit 88f417d

Please sign in to comment.