</listitem>
</varlistentry>
+ <varlistentry>
+ <term><varname>UseCaptivePortal=</varname></term>
+ <listitem>
+ <para>When true (the default), the captive portal advertised by the DHCP server will be recorded
+ and made available to client programs and displayed in the networkctl status output per-link.</para>
+ </listitem>
+ </varlistentry>
+
<varlistentry>
<term><varname>UseMTU=</varname></term>
<listitem>
return network_link_get_strv(ifindex, "SIP", ret);
}
+int sd_network_link_get_captive_portal(int ifindex, char **ret) {
+ return network_link_get_string(ifindex, "CAPTIVE_PORTAL", ret);
+}
+
int sd_network_link_get_search_domains(int ifindex, char ***ret) {
return network_link_get_strv(ifindex, "DOMAINS", ret);
}
if (r < 0)
return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set request flag for SIP server: %m");
}
+ if (link->network->dhcp_use_captive_portal) {
+ r = sd_dhcp_client_set_request_option(link->dhcp_client, SD_DHCP_OPTION_DHCP_CAPTIVE_PORTAL);
+ if (r < 0)
+ return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set request flag for captive portal: %m");
+ }
if (link->network->dhcp_use_timezone) {
r = sd_dhcp_client_set_request_option(link->dhcp_client, SD_DHCP_OPTION_TZDB_TIMEZONE);
DHCPv4.UseNTP, config_parse_dhcp_use_ntp, AF_INET, 0
DHCPv4.RoutesToNTP, config_parse_bool, 0, offsetof(Network, dhcp_routes_to_ntp)
DHCPv4.UseSIP, config_parse_bool, 0, offsetof(Network, dhcp_use_sip)
+DHCPv4.UseCaptivePortal, config_parse_bool, 0, offsetof(Network, dhcp_use_captive_portal)
DHCPv4.UseMTU, config_parse_bool, 0, offsetof(Network, dhcp_use_mtu)
DHCPv4.UseHostname, config_parse_bool, 0, offsetof(Network, dhcp_use_hostname)
DHCPv4.UseDomains, config_parse_dhcp_use_domains, AF_INET, 0
.dhcp_use_ntp = true,
.dhcp_routes_to_ntp = true,
.dhcp_use_sip = true,
+ .dhcp_use_captive_portal = true,
.dhcp_use_dns = true,
.dhcp_routes_to_dns = true,
.dhcp_use_hostname = true,
bool dhcp_use_ntp_set;
bool dhcp_routes_to_ntp;
bool dhcp_use_sip;
+ bool dhcp_use_captive_portal;
bool dhcp_use_mtu;
bool dhcp_use_routes;
int dhcp_use_gateway;
}
int link_save(Link *link) {
- const char *admin_state, *oper_state, *carrier_state, *address_state, *ipv4_address_state, *ipv6_address_state;
+ const char *admin_state, *oper_state, *carrier_state, *address_state, *ipv4_address_state, *ipv6_address_state,
+ *dhcp_captive_portal = NULL;
_cleanup_(unlink_and_freep) char *temp_path = NULL;
_cleanup_fclose_ FILE *f = NULL;
int r;
/************************************************************/
+ if (link->dhcp_lease && link->network->dhcp_use_captive_portal) {
+ r = sd_dhcp_lease_get_captive_portal(link->dhcp_lease, &dhcp_captive_portal);
+ if (r < 0 && r != -ENODATA)
+ return r;
+ }
+
+ if (dhcp_captive_portal)
+ fprintf(f, "CAPTIVE_PORTAL=%s\n", dhcp_captive_portal);
+
+ /************************************************************/
+
fputs("DOMAINS=", f);
if (link->search_domains)
link_save_domains(link, f, link->search_domains, DHCP_USE_DOMAINS_NO);
* representations of IP addresses */
int sd_network_link_get_sip(int ifindex, char ***ret);
+/* Get the captive portal address for a given link. */
+int sd_network_link_get_captive_portal(int ifindex, char **ret);
+
/* Indicates whether or not LLMNR should be enabled for the link
* Possible levels of support: yes, no, resolve
* Possible return codes: