Skip to content

Commit

Permalink
Merge pull request #711 from ntsbtz/set-ipv4_set-ipv6_changes
Browse files Browse the repository at this point in the history
This commit has changes for set-ipv4 and set-ipv6.
  • Loading branch information
tapakund authored Sep 28, 2024
2 parents 4a857d1 + 47f221f commit 4c52feb
Show file tree
Hide file tree
Showing 10 changed files with 746 additions and 38 deletions.
10 changes: 5 additions & 5 deletions src/json/network-json.c
Original file line number Diff line number Diff line change
Expand Up @@ -1157,22 +1157,22 @@ static int json_array_to_ip(const json_object *obj, const int family, const int
}
}

if (prefix > 0)
g_string_append_printf(v, "/%d", prefix);

if (family == AF_INET6) {
_auto_cleanup_ IPAddress *addr = NULL;
int r;

r = parse_ipv6(v->str, &addr);
r = parse_ip_from_str(v->str, &addr);
if (r < 0)
return r;

r = ip_to_str(AF_INET6, addr, &ip);
r = ip_to_str_prefix(AF_INET6, addr, &ip);
if (r < 0)
return r;
}

if (prefix > 0)
g_string_append_printf(v, "/%d", prefix);

if (family == AF_INET6)
*ret = steal_ptr(ip);
else {
Expand Down
119 changes: 112 additions & 7 deletions src/manager/network-config-manager.c
Original file line number Diff line number Diff line change
Expand Up @@ -4555,7 +4555,8 @@ _public_ int ncm_link_enable_ipv6(int argc, char *argv[]) {

_public_ int ncm_link_set_ipv6(int argc, char *argv[]) {
int accept_ra = -1, dhcp = -1, use_dns = -1, lla = -1, send_release = -1;
_auto_cleanup_strv_ char **addrs = NULL, **dns = NULL;
_auto_cleanup_strv_ char **addrs = NULL, **dns = NULL, **domains = NULL;
UseDomains use_domains = _USE_DOMAINS_INVALID;
_auto_cleanup_ IfNameIndex *p = NULL;
_auto_cleanup_ Route *rt6 = NULL;
bool keep = true;
Expand All @@ -4570,7 +4571,8 @@ _public_ int ncm_link_set_ipv6(int argc, char *argv[]) {
log_warning("Failed to find device: %s", argv[i]);
return r;
}
continue;

continue;
} else if (streq_fold(argv[i], "accept-ra") || streq_fold(argv[i], "ara")) {
parse_next_arg(argv, argc, i);

Expand All @@ -4579,6 +4581,7 @@ _public_ int ncm_link_set_ipv6(int argc, char *argv[]) {
log_warning("Failed to parse accept-ra %s': %s", argv[i], strerror(-r));
return r;
}

accept_ra = r;
continue;
} else if (streq_fold(argv[i], "lla") || streq_fold(argv[i], "link-local")) {
Expand All @@ -4589,6 +4592,7 @@ _public_ int ncm_link_set_ipv6(int argc, char *argv[]) {
log_warning("Failed to parse link-local %s': %s", argv[2], strerror(-r));
return r;
}

lla = r;
continue;
} else if (streq_fold(argv[i], "dhcp")) {
Expand All @@ -4599,6 +4603,7 @@ _public_ int ncm_link_set_ipv6(int argc, char *argv[]) {
log_warning("Failed to parse dhcp: %s", argv[i]);
return -EINVAL;
}

dhcp = r;
continue;
} else if (streq_fold(argv[i], "gateway") || streq_fold(argv[i], "gw") || streq_fold(argv[i], "gw6") || streq_fold(argv[i], "g")) {
Expand Down Expand Up @@ -4657,6 +4662,7 @@ _public_ int ncm_link_set_ipv6(int argc, char *argv[]) {
log_warning("Failed to parse many addresses '%s': %s", argv[i], strerror(EINVAL));
return r;
}

continue;
} else if (streq_fold(argv[i], "dns")) {
parse_next_arg(argv, argc, i);
Expand All @@ -4668,6 +4674,38 @@ _public_ int ncm_link_set_ipv6(int argc, char *argv[]) {
return -EINVAL;
}

continue;
} else if (streq_fold(argv[i], "domains")) {
parse_next_arg(argv, argc, i);

if (strchr(argv[i], ',')) {
char **d;

d = strsplit(argv[i], ",", -1);
if (!d) {
log_warning("Failed to parse DNS Search domains '%s': %s", argv[i], strerror(EINVAL));
return -EINVAL;
}

d = strv_remove(d, "");
if (!d) {
log_warning("Failed to parse DNS Search domains '%s': %s", argv[i], strerror(EINVAL));
return -EINVAL;
}

if (!domains)
domains = d;
else {
domains = strv_merge(domains, d);
if (!domains)
return log_oom();
}
} else {
r = strv_extend(&domains, argv[i]);
if (r < 0)
return log_oom();
}

continue;
} else if (streq_fold(argv[i], "use-dns")) {
parse_next_arg(argv, argc, i);
Expand All @@ -4680,7 +4718,16 @@ _public_ int ncm_link_set_ipv6(int argc, char *argv[]) {

use_dns = r;
continue;
} else if (streq_fold(argv[i], "use-domains")) {
parse_next_arg(argv, argc, i);

use_domains = use_domains_name_to_mode(argv[i]);
if (use_domains < 0) {
log_warning("Failed to parse use-domains='%s': %s", argv[i], strerror(-r));
return -EINVAL;
}

continue;
} else if (streq_fold(argv[i], "send-release")) {
parse_next_arg(argv, argc, i);

Expand Down Expand Up @@ -4714,7 +4761,9 @@ _public_ int ncm_link_set_ipv6(int argc, char *argv[]) {
return -EINVAL;
}

r = manager_set_ipv6(p, dhcp, accept_ra, lla, addrs, rt6, dns, use_dns, send_release, keep);
dns = strv_remove_duplicates(dns);
domains = strv_remove_duplicates(domains);
r = manager_set_ipv6(p, dhcp, accept_ra, lla, addrs, rt6, dns, domains, use_dns, use_domains, send_release, keep);
if (r < 0) {
log_warning("Failed to configure IPv6 on device '%s': %s", p->ifname, strerror(-r));
return r;
Expand All @@ -4724,8 +4773,10 @@ _public_ int ncm_link_set_ipv6(int argc, char *argv[]) {
}

_public_ int ncm_link_set_ipv4(int argc, char *argv[]) {
_auto_cleanup_strv_ char **addrs = NULL, **dns = NULL, **domains = NULL;
DHCPClientIdentifier client_id = _DHCP_CLIENT_IDENTIFIER_INVALID;
int dhcp = -1, use_dns = -1, lla = -1, send_release = -1;
_auto_cleanup_strv_ char **addrs = NULL, **dns = NULL;
UseDomains use_domains = _USE_DOMAINS_INVALID;
_auto_cleanup_ IfNameIndex *p = NULL;
_auto_cleanup_ Route *rt4 = NULL;
bool keep = true;
Expand All @@ -4740,6 +4791,7 @@ _public_ int ncm_link_set_ipv4(int argc, char *argv[]) {
log_warning("Failed to find device: %s", argv[i]);
return r;
}

continue;
} else if (streq_fold(argv[i], "gateway") || streq_fold(argv[i], "gw") || streq_fold(argv[i], "gw4") || streq_fold(argv[i], "g")) {
_auto_cleanup_ IPAddress *gw = NULL;
Expand Down Expand Up @@ -4797,6 +4849,7 @@ _public_ int ncm_link_set_ipv4(int argc, char *argv[]) {
log_warning("Failed to parse many addresses '%s': %s", argv[i], strerror(EINVAL));
return r;
}

continue;
} else if (streq_fold(argv[i], "dhcp")) {
parse_next_arg(argv, argc, i);
Expand All @@ -4819,6 +4872,48 @@ _public_ int ncm_link_set_ipv4(int argc, char *argv[]) {
return -EINVAL;
}

continue;
} else if (streq_fold(argv[i], "domains")) {
parse_next_arg(argv, argc, i);

if (strchr(argv[i], ',')) {
char **d;

d = strsplit(argv[i], ",", -1);
if (!d) {
log_warning("Failed to parse DNS Search domains '%s': %s", argv[i], strerror(EINVAL));
return -EINVAL;
}

d = strv_remove(d, "");
if (!d) {
log_warning("Failed to parse DNS Search domains '%s': %s", argv[i], strerror(EINVAL));
return -EINVAL;
}

if (!domains)
domains = d;
else {
domains = strv_merge(domains, d);
if (!domains)
return log_oom();
}
} else {
r = strv_extend(&domains, argv[i]);
if (r < 0)
return log_oom();
}

continue;
} else if (streq_fold(argv[i], "cid") || streq_fold(argv[i], "client-id")) {
parse_next_arg(argv, argc, i);

client_id = dhcp_client_identifier_to_kind(argv[i]);
if (client_id == _DHCP_CLIENT_IDENTIFIER_INVALID) {
log_warning("Failed to parse DHCP4 client identifier: %s", argv[i]);
return -EINVAL;
}

continue;
} else if (streq_fold(argv[i], "use-dns")) {
parse_next_arg(argv, argc, i);
Expand All @@ -4831,7 +4926,16 @@ _public_ int ncm_link_set_ipv4(int argc, char *argv[]) {

use_dns = r;
continue;
} else if (streq_fold(argv[i], "use-domains")) {
parse_next_arg(argv, argc, i);

use_domains = use_domains_name_to_mode(argv[i]);
if (use_domains < 0) {
log_warning("Failed to parse use-domains='%s': %s", argv[i], strerror(-r));
return -EINVAL;
}

continue;
} else if (streq_fold(argv[i], "send-release")) {
parse_next_arg(argv, argc, i);

Expand All @@ -4842,9 +4946,7 @@ _public_ int ncm_link_set_ipv4(int argc, char *argv[]) {
}

send_release = r;

continue;

} else if (streq_fold(argv[i], "lla") || streq_fold(argv[i], "link-local")) {
parse_next_arg(argv, argc, i);

Expand All @@ -4853,6 +4955,7 @@ _public_ int ncm_link_set_ipv4(int argc, char *argv[]) {
log_warning("Failed to parse link-local %s': %s", argv[2], strerror(-r));
return r;
}

lla = r;
continue;
} else if (streq_fold(argv[i], "keep")) {
Expand All @@ -4877,7 +4980,9 @@ _public_ int ncm_link_set_ipv4(int argc, char *argv[]) {
return -EINVAL;
}

r = manager_set_ipv4(p, lla, dhcp, addrs, rt4, dns, use_dns, send_release, keep);
dns = strv_remove_duplicates(dns);
domains = strv_remove_duplicates(domains);
r = manager_set_ipv4(p, lla, dhcp, addrs, rt4, dns, domains, client_id, use_dns, use_domains, send_release, keep);
if (r < 0) {
log_warning("Failed to configure IPv4 on device '%s': %s", p->ifname, strerror(-r));
return r;
Expand Down
6 changes: 3 additions & 3 deletions src/manager/network-manager-ctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -216,10 +216,10 @@ static int help(void) {
"\n\t\t\t\t route [Prefix ADDRESS] route-lifetime [LifetimeSec NUMBER] Configures IPv6 Router Advertisement.\n"
" remove-ipv6ra dev [DEVICE] Removes Ipv6 Router Advertisement.\n"
" enable-ipv6 dev [DEVICE] [BOOLEAN] Enable or disables IPv6 on the link.\n"
" set-ipv4 dev [DEVICE] dhcp [BOOLEAN] addr [ADDRESS] many [ADDRESS1,ADDRESS2...] gw|gw4|g [GATEWAY] dns [SERVER1,SERVER2...]"
"\n\t\t\t\t lla [BOOLEAN|ipv6|ipv4] use-dns [BOOLEAN send-release [BOOLEAN] keep [BOOLEAN] Configures device IPv4.\n"
" set-ipv4 dev [DEVICE] dhcp [BOOLEAN] addr [ADDRESS] many [ADDRESS1,ADDRESS2...] gw|gw4|g [GATEWAY] dns [SERVER1,SERVER2...] domains [DOMAIN1,DOMAIN2 ...]"
"\n\t\t\t\t lla [BOOLEAN|ipv6|ipv4] cid|client-id [IDENTIFIER {mac|duid|duid-only} use-dns [BOOLEAN use-domains [route|BOOLEAN] send-release [BOOLEAN] keep [BOOLEAN] Configures device IPv4.\n"
" set-ipv6 dev [DEVICE] accept-ra [BOOLEAN] dhcp [BOOLEAN] address|a|addr [ADDRESS] many [ADDRESS1,ADDRESS2...] gw|gw6|g [GATEWAY]"
"\n\t\t\t\t lla [BOOLEAN|ipv6|ipv4] dns [SERVER1,SERVER2...] use-dns [BOOLEAN] send-release [BOOLEAN] keep [BOOLEAN] Configures device IPv6.\n"
"\n\t\t\t\t lla [BOOLEAN|ipv6|ipv4] dns [SERVER1,SERVER2...] domains [DOMAIN1,DOMAIN2 ...] use-dns [BOOLEAN] use-domains [route|BOOLEAN] send-release [BOOLEAN] keep [BOOLEAN] Configures device IPv6.\n"
" add-sr-iov dev [DEVICE] [vf INTEGER] [vlanid INTEGER] [qos INTEGER] [vlanproto STRING] [macspoofck BOOLEAN] [qrss BOOLEAN]"
"\n\t\t\t\t [trust BOOLEAN] [linkstate BOOLEAN or STRING] [macaddr ADDRESS] Configures SR-IOV VirtualFunction, "
"\n\t\t\t\t VLANId, QualityOfService, VLANProtocol, MACSpoofCheck, QueryReceiveSideScaling, Trust, LinkState, MACAddress \n"
Expand Down
Loading

0 comments on commit 4c52feb

Please sign in to comment.