Blame src/nmtui/nmt-page-ip6.c

Packit Service dff8e4
/* SPDX-License-Identifier: GPL-2.0-or-later */
Packit Service dff8e4
/*
Packit Service dff8e4
 * Copyright (C) 2013 Red Hat, Inc.
Packit Service dff8e4
 */
Packit Service dff8e4
Packit Service dff8e4
/**
Packit Service dff8e4
 * SECTION:nmt-page-ip6
Packit Service dff8e4
 * @short_description: The editor page for IP6 configuration
Packit Service dff8e4
 */
Packit Service dff8e4
Packit Service dff8e4
#include "libnm-client-aux-extern/nm-default-client.h"
Packit Service dff8e4
Packit Service dff8e4
#include <stdlib.h>
Packit Service dff8e4
Packit Service dff8e4
#include "nmt-page-ip6.h"
Packit Service dff8e4
#include "nmt-ip-entry.h"
Packit Service dff8e4
#include "nmt-address-list.h"
Packit Service dff8e4
#include "nmt-route-editor.h"
Packit Service dff8e4
Packit Service dff8e4
#include "nm-editor-bindings.h"
Packit Service dff8e4
Packit Service dff8e4
G_DEFINE_TYPE(NmtPageIP6, nmt_page_ip6, NMT_TYPE_EDITOR_PAGE)
Packit Service dff8e4
Packit Service dff8e4
static NmtNewtPopupEntry ip6methods[] = {
Packit Service dff8e4
    {N_("Ignore"), NM_SETTING_IP6_CONFIG_METHOD_IGNORE},
Packit Service dff8e4
    {N_("Automatic"), NM_SETTING_IP6_CONFIG_METHOD_AUTO},
Packit Service dff8e4
    {N_("Automatic (DHCP-only)"), NM_SETTING_IP6_CONFIG_METHOD_DHCP},
Packit Service dff8e4
    {N_("Link-Local"), NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL},
Packit Service dff8e4
    {N_("Manual"), NM_SETTING_IP6_CONFIG_METHOD_MANUAL},
Packit Service dff8e4
    {N_("Disabled"), NM_SETTING_IP6_CONFIG_METHOD_DISABLED},
Packit Service dff8e4
    {NULL, NULL}};
Packit Service dff8e4
Packit Service dff8e4
NmtEditorPage *
Packit Service dff8e4
nmt_page_ip6_new(NMConnection *conn)
Packit Service dff8e4
{
Packit Service dff8e4
    return g_object_new(NMT_TYPE_PAGE_IP6, "connection", conn, NULL);
Packit Service dff8e4
}
Packit Service dff8e4
Packit Service dff8e4
static void
Packit Service dff8e4
nmt_page_ip6_init(NmtPageIP6 *ip6)
Packit Service dff8e4
{}
Packit Service dff8e4
Packit Service dff8e4
static void
Packit Service dff8e4
edit_routes(NmtNewtButton *button, gpointer user_data)
Packit Service dff8e4
{
Packit Service dff8e4
    NMSetting *  s_ip6 = user_data;
Packit Service dff8e4
    NmtNewtForm *form;
Packit Service dff8e4
Packit Service dff8e4
    form = nmt_route_editor_new(s_ip6);
Packit Service dff8e4
    nmt_newt_form_run_sync(form);
Packit Service dff8e4
    g_object_unref(form);
Packit Service dff8e4
}
Packit Service dff8e4
Packit Service dff8e4
static gboolean
Packit Service dff8e4
ip6_routes_transform_to_description(GBinding *    binding,
Packit Service dff8e4
                                    const GValue *source_value,
Packit Service dff8e4
                                    GValue *      target_value,
Packit Service dff8e4
                                    gpointer      user_data)
Packit Service dff8e4
{
Packit Service dff8e4
    GPtrArray *routes;
Packit Service dff8e4
    char *     text;
Packit Service dff8e4
Packit Service dff8e4
    routes = g_value_get_boxed(source_value);
Packit Service dff8e4
    if (!routes || !routes->len)
Packit Service dff8e4
        text = g_strdup(_("(No custom routes)"));
Packit Service dff8e4
    else {
Packit Service dff8e4
        text = g_strdup_printf(
Packit Service dff8e4
            g_dngettext(GETTEXT_PACKAGE, "One custom route", "%d custom routes", routes->len),
Packit Service dff8e4
            routes->len);
Packit Service dff8e4
    }
Packit Service dff8e4
Packit Service dff8e4
    g_value_take_string(target_value, text);
Packit Service dff8e4
    return TRUE;
Packit Service dff8e4
}
Packit Service dff8e4
Packit Service dff8e4
static void
Packit Service dff8e4
nmt_page_ip6_constructed(GObject *object)
Packit Service dff8e4
{
Packit Service dff8e4
    NmtPageIP6 *       ip6 = NMT_PAGE_IP6(object);
Packit Service dff8e4
    gboolean           show_by_default;
Packit Service dff8e4
    NmtEditorSection * section;
Packit Service dff8e4
    NmtEditorGrid *    grid;
Packit Service dff8e4
    NMSettingIPConfig *s_ip6;
Packit Service dff8e4
    NmtNewtWidget *    widget, *button;
Packit Service dff8e4
    NMConnection *     conn;
Packit Service dff8e4
Packit Service dff8e4
    conn  = nmt_editor_page_get_connection(NMT_EDITOR_PAGE(ip6));
Packit Service dff8e4
    s_ip6 = nm_connection_get_setting_ip6_config(conn);
Packit Service dff8e4
    if (!s_ip6) {
Packit Service dff8e4
        s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new();
Packit Service dff8e4
        g_object_set(G_OBJECT(s_ip6),
Packit Service dff8e4
                     NM_SETTING_IP_CONFIG_METHOD,
Packit Service dff8e4
                     NM_SETTING_IP6_CONFIG_METHOD_AUTO,
Packit Service dff8e4
                     NULL);
Packit Service dff8e4
        nm_connection_add_setting(conn, (NMSetting *) s_ip6);
Packit Service dff8e4
    }
Packit Service dff8e4
Packit Service dff8e4
    widget = nmt_newt_popup_new(ip6methods);
Packit Service dff8e4
    g_object_bind_property(s_ip6,
Packit Service dff8e4
                           NM_SETTING_IP_CONFIG_METHOD,
Packit Service dff8e4
                           widget,
Packit Service dff8e4
                           "active-id",
Packit Service dff8e4
                           G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
Packit Service dff8e4
Packit Service dff8e4
    if (!g_strcmp0(nm_setting_ip_config_get_method(s_ip6), NM_SETTING_IP6_CONFIG_METHOD_MANUAL))
Packit Service dff8e4
        show_by_default = TRUE;
Packit Service dff8e4
    else if (nm_setting_ip_config_get_num_addresses(s_ip6))
Packit Service dff8e4
        show_by_default = TRUE;
Packit Service dff8e4
    else
Packit Service dff8e4
        show_by_default = FALSE;
Packit Service dff8e4
Packit Service dff8e4
    section = nmt_editor_section_new(_("IPv6 CONFIGURATION"), widget, show_by_default);
Packit Service dff8e4
    grid    = nmt_editor_section_get_body(section);
Packit Service dff8e4
Packit Service dff8e4
    widget = nmt_address_list_new(NMT_ADDRESS_LIST_IP6_WITH_PREFIX);
Packit Service dff8e4
    nm_editor_bind_ip_addresses_with_prefix_to_strv(AF_INET6,
Packit Service dff8e4
                                                    s_ip6,
Packit Service dff8e4
                                                    NM_SETTING_IP_CONFIG_ADDRESSES,
Packit Service dff8e4
                                                    widget,
Packit Service dff8e4
                                                    "strings",
Packit Service dff8e4
                                                    G_BINDING_BIDIRECTIONAL
Packit Service dff8e4
                                                        | G_BINDING_SYNC_CREATE);
Packit Service dff8e4
    nmt_editor_grid_append(grid, _("Addresses"), widget, NULL);
Packit Service dff8e4
Packit Service dff8e4
    widget = nmt_ip_entry_new(25, AF_INET6, FALSE, TRUE);
Packit Service dff8e4
    nm_editor_bind_ip_gateway_to_string(AF_INET6,
Packit Service dff8e4
                                        s_ip6,
Packit Service dff8e4
                                        widget,
Packit Service dff8e4
                                        "text",
Packit Service dff8e4
                                        "sensitive",
Packit Service dff8e4
                                        G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
Packit Service dff8e4
    nmt_editor_grid_append(grid, _("Gateway"), widget, NULL);
Packit Service dff8e4
Packit Service dff8e4
    widget = nmt_address_list_new(NMT_ADDRESS_LIST_IP6);
Packit Service dff8e4
    nm_editor_bind_ip_addresses_to_strv(AF_INET6,
Packit Service dff8e4
                                        s_ip6,
Packit Service dff8e4
                                        NM_SETTING_IP_CONFIG_DNS,
Packit Service dff8e4
                                        widget,
Packit Service dff8e4
                                        "strings",
Packit Service dff8e4
                                        G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
Packit Service dff8e4
    nmt_editor_grid_append(grid, _("DNS servers"), widget, NULL);
Packit Service dff8e4
Packit Service dff8e4
    widget = nmt_address_list_new(NMT_ADDRESS_LIST_HOSTNAME);
Packit Service dff8e4
    g_object_bind_property(s_ip6,
Packit Service dff8e4
                           NM_SETTING_IP_CONFIG_DNS_SEARCH,
Packit Service dff8e4
                           widget,
Packit Service dff8e4
                           "strings",
Packit Service dff8e4
                           G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
Packit Service dff8e4
    nmt_editor_grid_append(grid, _("Search domains"), widget, NULL);
Packit Service dff8e4
Packit Service dff8e4
    widget = g_object_new(NMT_TYPE_NEWT_LABEL, "text", "", "style", NMT_NEWT_LABEL_PLAIN, NULL);
Packit Service dff8e4
    g_object_bind_property_full(s_ip6,
Packit Service dff8e4
                                NM_SETTING_IP_CONFIG_ROUTES,
Packit Service dff8e4
                                widget,
Packit Service dff8e4
                                "text",
Packit Service dff8e4
                                G_BINDING_SYNC_CREATE,
Packit Service dff8e4
                                ip6_routes_transform_to_description,
Packit Service dff8e4
                                NULL,
Packit Service dff8e4
                                NULL,
Packit Service dff8e4
                                NULL);
Packit Service dff8e4
    button = nmt_newt_button_new(_("Edit..."));
Packit Service dff8e4
    g_signal_connect(button, "clicked", G_CALLBACK(edit_routes), s_ip6);
Packit Service dff8e4
    nmt_editor_grid_append(grid, _("Routing"), widget, button);
Packit Service dff8e4
Packit Service dff8e4
    widget = nmt_newt_checkbox_new(_("Never use this network for default route"));
Packit Service dff8e4
    g_object_bind_property(s_ip6,
Packit Service dff8e4
                           NM_SETTING_IP_CONFIG_NEVER_DEFAULT,
Packit Service dff8e4
                           widget,
Packit Service dff8e4
                           "active",
Packit Service dff8e4
                           G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
Packit Service dff8e4
    nmt_editor_grid_append(grid, NULL, widget, NULL);
Packit Service dff8e4
Packit Service dff8e4
    widget = nmt_newt_checkbox_new(_("Ignore automatically obtained routes"));
Packit Service dff8e4
    g_object_bind_property(s_ip6,
Packit Service dff8e4
                           NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES,
Packit Service dff8e4
                           widget,
Packit Service dff8e4
                           "active",
Packit Service dff8e4
                           G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
Packit Service dff8e4
    nmt_editor_grid_append(grid, NULL, widget, NULL);
Packit Service dff8e4
Packit Service dff8e4
    widget = nmt_newt_checkbox_new(_("Ignore automatically obtained DNS parameters"));
Packit Service dff8e4
    g_object_bind_property(s_ip6,
Packit Service dff8e4
                           NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS,
Packit Service dff8e4
                           widget,
Packit Service dff8e4
                           "active",
Packit Service dff8e4
                           G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
Packit Service dff8e4
    nmt_editor_grid_append(grid, NULL, widget, NULL);
Packit Service dff8e4
Packit Service dff8e4
    nmt_editor_grid_append(grid, NULL, nmt_newt_separator_new(), NULL);
Packit Service dff8e4
Packit Service dff8e4
    widget = nmt_newt_checkbox_new(_("Require IPv6 addressing for this connection"));
Packit Service dff8e4
    g_object_bind_property(s_ip6,
Packit Service dff8e4
                           NM_SETTING_IP_CONFIG_MAY_FAIL,
Packit Service dff8e4
                           widget,
Packit Service dff8e4
                           "active",
Packit Service dff8e4
                           G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL
Packit Service dff8e4
                               | G_BINDING_INVERT_BOOLEAN);
Packit Service dff8e4
    nmt_editor_grid_append(grid, NULL, widget, NULL);
Packit Service dff8e4
Packit Service dff8e4
    nmt_editor_page_add_section(NMT_EDITOR_PAGE(ip6), section);
Packit Service dff8e4
Packit Service dff8e4
    G_OBJECT_CLASS(nmt_page_ip6_parent_class)->constructed(object);
Packit Service dff8e4
}
Packit Service dff8e4
Packit Service dff8e4
static void
Packit Service dff8e4
nmt_page_ip6_class_init(NmtPageIP6Class *ip6_class)
Packit Service dff8e4
{
Packit Service dff8e4
    GObjectClass *object_class = G_OBJECT_CLASS(ip6_class);
Packit Service dff8e4
Packit Service dff8e4
    object_class->constructed = nmt_page_ip6_constructed;
Packit Service dff8e4
}