Skip to content

Commit

Permalink
Merge pull request #34 from ssahani/nc-libs
Browse files Browse the repository at this point in the history
Add support to get address and routes
  • Loading branch information
ssahani authored Oct 12, 2020
2 parents 13d435b + f6b7c61 commit 3757a6a
Show file tree
Hide file tree
Showing 4 changed files with 152 additions and 8 deletions.
15 changes: 11 additions & 4 deletions include/network-config-manager.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -16,23 +16,24 @@ 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_get_routes(char *ifname, char ***ret);

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_enable_ipv6(int argc, char *argv[]);
int ncm_link_reconfigure(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[]);
int ncm_link_set_dhcp_client_duid(int argc, char *argv[]);
int ncm_link_get_dhcp_client_iaid(char *ifname, uint32_t *ret);
int ncm_link_set_dhcp_client_iaid(int argc, char *argv[]);

int ncm_link_set_dhcp_mode(int argc, char *argv[]);
Expand All @@ -49,9 +50,15 @@ int ncm_link_get_mtu(const char *ifname, uint32_t *ret);
int ncm_link_set_network_section_bool(int argc, char *argv[]);
int ncm_link_status(int argc, char *argv[]);
int ncm_link_update_state(int argc, char *argv[]);

int ncm_network_reload(int argc, char *argv[]);
int ncm_link_reconfigure(int argc, char *argv[]);

int ncm_link_enable_ipv6(int argc, char *argv[]);

int ncm_revert_resolve_link(int argc, char *argv[]);
int ncm_set_system_hostname(int argc, char *argv[]);

int ncm_get_system_hostname(char **ret);
int ncm_show_version(void);

Expand Down
121 changes: 117 additions & 4 deletions src/manager/network-config-manager.c
Original file line number Diff line number Diff line change
Expand Up @@ -446,15 +446,15 @@ _public_ int ncm_system_status(int argc, char *argv[]) {
}

_public_ int ncm_link_status(int argc, char *argv[]) {
int c;
int r;

if (argc <= 1)
return list_links(argc, argv);
else
c = list_one_link(argv + 1);
r = list_one_link(argv + 1);

if (c < 0)
return c;
if (r < 0)
return r;

return 0;
}
Expand Down Expand Up @@ -670,6 +670,24 @@ _public_ int ncm_link_set_dhcp_client_iaid(int argc, char *argv[]) {
return 0;
}

_public_ int ncm_link_get_dhcp_client_iaid(char *ifname, uint32_t *ret) {
_auto_cleanup_ IfNameIndex *p = NULL;
uint32_t v;
int r;

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

r = manager_get_link_dhcp_client_iaid(p, &v);
if (r < 0)
return r;

*ret = v;

return 0;
}

_public_ int ncm_link_set_network_section_bool(int argc, char *argv[]) {
_auto_cleanup_ IfNameIndex *p = NULL;
const char *k;
Expand Down Expand Up @@ -884,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 Expand Up @@ -983,6 +1049,53 @@ _public_ int ncm_link_add_route(int argc, char *argv[]) {
return 0;
}

_public_ int ncm_link_get_routes(char *ifname, char ***ret) {
_cleanup_(routes_free) Routes *route = NULL;
_auto_cleanup_ IPAddress *address = NULL;
_auto_cleanup_ IfNameIndex *p = NULL;
_auto_cleanup_strv_ char **s = NULL;
GList *i;
int r;

assert(ifname);

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

r = manager_get_one_link_route(p->ifindex, &route);
if (r < 0)
return r;

if (g_list_length(route->routes) <= 0)
return -ENODATA;

for (i = route->routes; i; i = i->next) {
_auto_cleanup_ char *c = NULL;
Route *a = NULL;

a = i->data;
ip_to_string(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_delete_gateway_or_route(int argc, char *argv[]) {
_auto_cleanup_ IfNameIndex *p = NULL;
int r;
Expand Down
19 changes: 19 additions & 0 deletions src/manager/network-manager.c
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,25 @@ int manager_set_link_dhcp_client_iaid(const IfNameIndex *ifnameidx, uint32_t iai
return 0;
}

int manager_get_link_dhcp_client_iaid(const IfNameIndex *ifnameidx, uint32_t *iaid) {
_auto_cleanup_ char *network = NULL;
unsigned v;
int r;

assert(ifnameidx);

r = network_parse_link_network_file(ifnameidx->ifindex, &network);
if (r < 0)
return r;

r = parse_config_file_integer(network, "DHCPv6", "IAID", &v);
if (r < 0)
return r;

*iaid = v;
return 0;
}

int manager_set_link_dhcp_client_duid(const IfNameIndex *ifnameidx, DHCPClientDUIDType duid, char *raw_data, bool system) {
_auto_cleanup_ char *network = NULL;
int r;
Expand Down
5 changes: 5 additions & 0 deletions src/manager/network-manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,17 @@

int manager_set_link_mtu(const IfNameIndex *ifnameidx, uint32_t mtu);
int manager_set_link_mac_addr(const IfNameIndex *ifnameidx, const char *mac);

int manager_set_link_dhcp_mode(const IfNameIndex *ifnameidx, DHCPMode mode);
int manager_get_link_dhcp_mode(const IfNameIndex *ifnameidx, DHCPMode *mode);

int manager_set_link_mode(const IfNameIndex *ifnameidx, bool mode, char **ret);
int manager_set_link_state(const IfNameIndex *ifnameidx, LinkState state);
int manager_set_link_dhcp_client_identifier(const IfNameIndex *ifnameidx, DHCPClientIdentifier identifier);

int manager_set_link_dhcp_client_iaid(const IfNameIndex *ifnameidx, uint32_t v);
int manager_get_link_dhcp_client_iaid(const IfNameIndex *ifnameidx, uint32_t *iaid);

int manager_set_link_dhcp_client_duid(const IfNameIndex *ifnameidx, DHCPClientDUIDType duid, char *raw_data, bool system);

int manager_configure_link_address(const IfNameIndex *ifnameidx, IPAddress *address, IPAddress *peer);
Expand Down

0 comments on commit 3757a6a

Please sign in to comment.