networkd:add support to configure ipv6 acceprt ra
authorSusant Sahani <ssahani@gmail.com>
Sat, 12 Sep 2015 02:48:06 +0000 (08:18 +0530)
committerSusant Sahani <ssahani@gmail.com>
Sat, 12 Sep 2015 02:48:06 +0000 (08:18 +0530)
This patch support to configure the ipv6 acceprt ra option.

for more information see
http://www.tldp.org/HOWTO/Linux+IPv6-HOWTO/proc-sys-net-ipv6..html

src/network/networkd-link.c
src/network/networkd-network-gperf.gperf
src/network/networkd-network.c
src/network/networkd-network.h

index 9d4a69b..215c47b 100644 (file)
@@ -1789,6 +1789,45 @@ static int link_set_ipv6_privacy_extensions(Link *link) {
         return 0;
 }
 
+static int link_set_ipv6_accept_ra(Link *link) {
+        const char *p = NULL, *v = NULL;
+        bool b;
+        int r;
+
+        /* Make this a NOP if IPv6 is not available */
+        if (!socket_ipv6_is_supported())
+                return 0;
+
+        if (link->flags & IFF_LOOPBACK)
+                return 0;
+
+        /* if unset check the ip forwarding setting maintained for the interface
+         * and then set it to depending on that. enabled if local forwarding
+         * is disabled. disabled if local forwarding is enabled.
+         */
+        if (link->network->ipv6_accept_ra < 0) {
+                if (IN_SET(link->network->ip_forward, ADDRESS_FAMILY_YES, ADDRESS_FAMILY_IPV6))
+                        b = false;
+                else
+                        b = true;
+        } else
+                b = link->network->ipv6_accept_ra;
+
+        p = strjoina("/proc/sys/net/ipv6/conf/", link->ifname, "/accept_ra");
+        v = one_zero(b);
+
+        r = write_string_file(p, v, 0);
+        if (r < 0) {
+                /* If the right value is set anyway, don't complain */
+                if (verify_one_line_file(p, v) > 0)
+                        return 0;
+
+                log_link_warning_errno(link, r, "Cannot configure IPv6 accept_ra for interface: %m");
+        }
+
+        return 0;
+}
+
 static int link_configure(Link *link) {
         int r;
 
@@ -1812,6 +1851,10 @@ static int link_configure(Link *link) {
         if (r < 0)
                 return r;
 
+        r = link_set_ipv6_accept_ra(link);
+        if (r < 0)
+                return r;
+
         if (link_ipv4ll_enabled(link)) {
                 r = ipv4ll_configure(link);
                 if (r < 0)
index 10ca9da..8257ab4 100644 (file)
@@ -15,88 +15,89 @@ struct ConfigPerfItem;
 %struct-type
 %includes
 %%
-Match.MACAddress,              config_parse_hwaddr,                            0,                             offsetof(Network, match_mac)
-Match.Path,                    config_parse_strv,                              0,                             offsetof(Network, match_path)
-Match.Driver,                  config_parse_strv,                              0,                             offsetof(Network, match_driver)
-Match.Type,                    config_parse_strv,                              0,                             offsetof(Network, match_type)
-Match.Name,                    config_parse_ifnames,                           0,                             offsetof(Network, match_name)
-Match.Host,                    config_parse_net_condition,                     CONDITION_HOST,                offsetof(Network, match_host)
-Match.Virtualization,          config_parse_net_condition,                     CONDITION_VIRTUALIZATION,      offsetof(Network, match_virt)
-Match.KernelCommandLine,       config_parse_net_condition,                     CONDITION_KERNEL_COMMAND_LINE, offsetof(Network, match_kernel)
-Match.Architecture,            config_parse_net_condition,                     CONDITION_ARCHITECTURE,        offsetof(Network, match_arch)
-Link.MACAddress,               config_parse_hwaddr,                            0,                             offsetof(Network, mac)
-Link.MTUBytes,                 config_parse_iec_size,                          0,                             offsetof(Network, mtu)
-Network.Description,           config_parse_string,                            0,                             offsetof(Network, description)
-Network.Bridge,                config_parse_netdev,                            0,                             offsetof(Network, bridge)
-Network.Bond,                  config_parse_netdev,                            0,                             offsetof(Network, bond)
-Network.VLAN,                  config_parse_netdev,                            0,                             0
-Network.MACVLAN,               config_parse_netdev,                            0,                             0
-Network.MACVTAP,               config_parse_netdev,                            0,                             0
-Network.IPVLAN,                config_parse_netdev,                            0,                             0
-Network.VXLAN,                 config_parse_netdev,                            0,                             0
-Network.Tunnel,                config_parse_tunnel,                            0,                             0
-Network.DHCP,                  config_parse_dhcp,                              0,                             offsetof(Network, dhcp)
-Network.DHCPServer,            config_parse_bool,                              0,                             offsetof(Network, dhcp_server)
-Network.LinkLocalAddressing,   config_parse_address_family_boolean,            0,                             offsetof(Network, link_local)
-Network.IPv4LLRoute,           config_parse_bool,                              0,                             offsetof(Network, ipv4ll_route)
-Network.IPv6Token,             config_parse_ipv6token,                         0,                             offsetof(Network, ipv6_token)
-Network.LLDP,                  config_parse_bool,                              0,                             offsetof(Network, lldp)
-Network.Address,               config_parse_address,                           0,                             0
-Network.Gateway,               config_parse_gateway,                           0,                             0
-Network.Domains,               config_parse_domains,                           0,                             offsetof(Network, domains)
-Network.DNS,                   config_parse_strv,                              0,                             offsetof(Network, dns)
-Network.LLMNR,                 config_parse_resolve,                           0,                             offsetof(Network, llmnr)
-Network.NTP,                   config_parse_strv,                              0,                             offsetof(Network, ntp)
-Network.IPForward,             config_parse_address_family_boolean_with_kernel,0,                             offsetof(Network, ip_forward)
-Network.IPMasquerade,          config_parse_bool,                              0,                             offsetof(Network, ip_masquerade)
-Network.IPv6PrivacyExtensions, config_parse_ipv6_privacy_extensions,           0,                             offsetof(Network, ipv6_privacy_extensions)
-Network.BindCarrier,           config_parse_strv,                              0,                             offsetof(Network, bind_carrier)
-Address.Address,               config_parse_address,                           0,                             0
-Address.Peer,                  config_parse_address,                           0,                             0
-Address.Broadcast,             config_parse_broadcast,                         0,                             0
-Address.Label,                 config_parse_label,                             0,                             0
-Route.Gateway,                 config_parse_gateway,                           0,                             0
-Route.Destination,             config_parse_destination,                       0,                             0
-Route.Source,                  config_parse_destination,                       0,                             0
-Route.Metric,                  config_parse_route_priority,                    0,                             0
-Route.Scope,                   config_parse_route_scope,                       0,                             0
-DHCP.ClientIdentifier,         config_parse_dhcp_client_identifier,            0,                             offsetof(Network, dhcp_client_identifier)
-DHCP.UseDNS,                   config_parse_bool,                              0,                             offsetof(Network, dhcp_dns)
-DHCP.UseNTP,                   config_parse_bool,                              0,                             offsetof(Network, dhcp_ntp)
-DHCP.UseMTU,                   config_parse_bool,                              0,                             offsetof(Network, dhcp_mtu)
-DHCP.UseHostname,              config_parse_bool,                              0,                             offsetof(Network, dhcp_hostname)
-DHCP.UseDomains,               config_parse_bool,                              0,                             offsetof(Network, dhcp_domains)
-DHCP.UseRoutes,                config_parse_bool,                              0,                             offsetof(Network, dhcp_routes)
-DHCP.SendHostname,             config_parse_bool,                              0,                             offsetof(Network, dhcp_sendhost)
-DHCP.Hostname,                 config_parse_hostname,                          0,                             offsetof(Network, hostname)
-DHCP.RequestBroadcast,         config_parse_bool,                              0,                             offsetof(Network, dhcp_broadcast)
-DHCP.CriticalConnection,       config_parse_bool,                              0,                             offsetof(Network, dhcp_critical)
-DHCP.VendorClassIdentifier,    config_parse_string,                            0,                             offsetof(Network, dhcp_vendor_class_identifier)
-DHCP.RouteMetric,              config_parse_unsigned,                          0,                             offsetof(Network, dhcp_route_metric)
-DHCP.UseTimezone,              config_parse_bool,                              0,                             offsetof(Network, dhcp_timezone)
-DHCPServer.MaxLeaseTimeSec,    config_parse_sec,                               0,                             offsetof(Network, dhcp_server_max_lease_time_usec)
-DHCPServer.DefaultLeaseTimeSec,config_parse_sec,                               0,                             offsetof(Network, dhcp_server_default_lease_time_usec)
-DHCPServer.EmitDNS,            config_parse_bool,                              0,                             offsetof(Network, dhcp_server_emit_dns)
-DHCPServer.DNS,                config_parse_dhcp_server_dns,                   0,                             0
-DHCPServer.EmitNTP,            config_parse_bool,                              0,                             offsetof(Network, dhcp_server_emit_ntp)
-DHCPServer.NTP,                config_parse_dhcp_server_ntp,                   0,                             0
-DHCPServer.EmitTimezone,       config_parse_bool,                              0,                             offsetof(Network, dhcp_server_emit_timezone)
-DHCPServer.Timezone,           config_parse_timezone,                          0,                             offsetof(Network, dhcp_server_timezone)
-DHCPServer.PoolOffset,         config_parse_uint32,                            0,                             offsetof(Network, dhcp_server_pool_offset)
-DHCPServer.PoolSize,           config_parse_uint32,                            0,                             offsetof(Network, dhcp_server_pool_size)
-Bridge.Cost,                   config_parse_unsigned,                          0,                             offsetof(Network, cost)
-Bridge.UseBPDU,                config_parse_bool,                              0,                             offsetof(Network, use_bpdu)
-Bridge.HairPin,                config_parse_bool,                              0,                             offsetof(Network, hairpin)
-Bridge.FastLeave,              config_parse_bool,                              0,                             offsetof(Network, fast_leave)
-Bridge.AllowPortToBeRoot,      config_parse_bool,                              0,                             offsetof(Network, allow_port_to_be_root)
-Bridge.UnicastFlood,           config_parse_bool,                              0,                             offsetof(Network, unicast_flood)
-BridgeFDB.MACAddress,          config_parse_fdb_hwaddr,                        0,                             0
-BridgeFDB.VLANId,              config_parse_fdb_vlan_id,                       0,                             0
+Match.MACAddress,                       config_parse_hwaddr,                            0,                             offsetof(Network, match_mac)
+Match.Path,                             config_parse_strv,                              0,                             offsetof(Network, match_path)
+Match.Driver,                           config_parse_strv,                              0,                             offsetof(Network, match_driver)
+Match.Type,                             config_parse_strv,                              0,                             offsetof(Network, match_type)
+Match.Name,                             config_parse_ifnames,                           0,                             offsetof(Network, match_name)
+Match.Host,                             config_parse_net_condition,                     CONDITION_HOST,                offsetof(Network, match_host)
+Match.Virtualization,                   config_parse_net_condition,                     CONDITION_VIRTUALIZATION,      offsetof(Network, match_virt)
+Match.KernelCommandLine,                config_parse_net_condition,                     CONDITION_KERNEL_COMMAND_LINE, offsetof(Network, match_kernel)
+Match.Architecture,                     config_parse_net_condition,                     CONDITION_ARCHITECTURE,        offsetof(Network, match_arch)
+Link.MACAddress,                        config_parse_hwaddr,                            0,                             offsetof(Network, mac)
+Link.MTUBytes,                          config_parse_iec_size,                          0,                             offsetof(Network, mtu)
+Network.Description,                    config_parse_string,                            0,                             offsetof(Network, description)
+Network.Bridge,                         config_parse_netdev,                            0,                             offsetof(Network, bridge)
+Network.Bond,                           config_parse_netdev,                            0,                             offsetof(Network, bond)
+Network.VLAN,                           config_parse_netdev,                            0,                             0
+Network.MACVLAN,                        config_parse_netdev,                            0,                             0
+Network.MACVTAP,                        config_parse_netdev,                            0,                             0
+Network.IPVLAN,                         config_parse_netdev,                            0,                             0
+Network.VXLAN,                          config_parse_netdev,                            0,                             0
+Network.Tunnel,                         config_parse_tunnel,                            0,                             0
+Network.DHCP,                           config_parse_dhcp,                              0,                             offsetof(Network, dhcp)
+Network.DHCPServer,                     config_parse_bool,                              0,                             offsetof(Network, dhcp_server)
+Network.LinkLocalAddressing,            config_parse_address_family_boolean,            0,                             offsetof(Network, link_local)
+Network.IPv4LLRoute,                    config_parse_bool,                              0,                             offsetof(Network, ipv4ll_route)
+Network.IPv6Token,                      config_parse_ipv6token,                         0,                             offsetof(Network, ipv6_token)
+Network.LLDP,                           config_parse_bool,                              0,                             offsetof(Network, lldp)
+Network.Address,                        config_parse_address,                           0,                             0
+Network.Gateway,                        config_parse_gateway,                           0,                             0
+Network.Domains,                        config_parse_domains,                           0,                             offsetof(Network, domains)
+Network.DNS,                            config_parse_strv,                              0,                             offsetof(Network, dns)
+Network.LLMNR,                          config_parse_resolve,                           0,                             offsetof(Network, llmnr)
+Network.NTP,                            config_parse_strv,                              0,                             offsetof(Network, ntp)
+Network.IPForward,                      config_parse_address_family_boolean_with_kernel,0,                             offsetof(Network, ip_forward)
+Network.IPMasquerade,                   config_parse_bool,                              0,                             offsetof(Network, ip_masquerade)
+Network.IPv6PrivacyExtensions,          config_parse_ipv6_privacy_extensions,           0,                             offsetof(Network, ipv6_privacy_extensions)
+Network.IPv6AcceptRouterAdvertisements, config_parse_tristate,                          0,                             offsetof(Network, ipv6_accept_ra)
+Network.BindCarrier,                    config_parse_strv,                              0,                             offsetof(Network, bind_carrier)
+Address.Address,                        config_parse_address,                           0,                             0
+Address.Peer,                           config_parse_address,                           0,                             0
+Address.Broadcast,                      config_parse_broadcast,                         0,                             0
+Address.Label,                          config_parse_label,                             0,                             0
+Route.Gateway,                          config_parse_gateway,                           0,                             0
+Route.Destination,                      config_parse_destination,                       0,                             0
+Route.Source,                           config_parse_destination,                       0,                             0
+Route.Metric,                           config_parse_route_priority,                    0,                             0
+Route.Scope,                            config_parse_route_scope,                       0,                             0
+DHCP.ClientIdentifier,                  config_parse_dhcp_client_identifier,            0,                             offsetof(Network, dhcp_client_identifier)
+DHCP.UseDNS,                            config_parse_bool,                              0,                             offsetof(Network, dhcp_dns)
+DHCP.UseNTP,                            config_parse_bool,                              0,                             offsetof(Network, dhcp_ntp)
+DHCP.UseMTU,                            config_parse_bool,                              0,                             offsetof(Network, dhcp_mtu)
+DHCP.UseHostname,                       config_parse_bool,                              0,                             offsetof(Network, dhcp_hostname)
+DHCP.UseDomains,                        config_parse_bool,                              0,                             offsetof(Network, dhcp_domains)
+DHCP.UseRoutes,                         config_parse_bool,                              0,                             offsetof(Network, dhcp_routes)
+DHCP.SendHostname,                      config_parse_bool,                              0,                             offsetof(Network, dhcp_sendhost)
+DHCP.Hostname,                          config_parse_hostname,                          0,                             offsetof(Network, hostname)
+DHCP.RequestBroadcast,                  config_parse_bool,                              0,                             offsetof(Network, dhcp_broadcast)
+DHCP.CriticalConnection,                config_parse_bool,                              0,                             offsetof(Network, dhcp_critical)
+DHCP.VendorClassIdentifier,             config_parse_string,                            0,                             offsetof(Network, dhcp_vendor_class_identifier)
+DHCP.RouteMetric,                       config_parse_unsigned,                          0,                             offsetof(Network, dhcp_route_metric)
+DHCP.UseTimezone,                       config_parse_bool,                              0,                             offsetof(Network, dhcp_timezone)
+DHCPServer.MaxLeaseTimeSec,             config_parse_sec,                               0,                             offsetof(Network, dhcp_server_max_lease_time_usec)
+DHCPServer.DefaultLeaseTimeSec,         config_parse_sec,                               0,                             offsetof(Network, dhcp_server_default_lease_time_usec)
+DHCPServer.EmitDNS,                     config_parse_bool,                              0,                             offsetof(Network, dhcp_server_emit_dns)
+DHCPServer.DNS,                         config_parse_dhcp_server_dns,                   0,                             0
+DHCPServer.EmitNTP,                     config_parse_bool,                              0,                             offsetof(Network, dhcp_server_emit_ntp)
+DHCPServer.NTP,                         config_parse_dhcp_server_ntp,                   0,                             0
+DHCPServer.EmitTimezone,                config_parse_bool,                              0,                             offsetof(Network, dhcp_server_emit_timezone)
+DHCPServer.Timezone,                    config_parse_timezone,                          0,                             offsetof(Network, dhcp_server_timezone)
+DHCPServer.PoolOffset,                  config_parse_uint32,                            0,                             offsetof(Network, dhcp_server_pool_offset)
+DHCPServer.PoolSize,                    config_parse_uint32,                            0,                             offsetof(Network, dhcp_server_pool_size)
+Bridge.Cost,                            config_parse_unsigned,                          0,                             offsetof(Network, cost)
+Bridge.UseBPDU,                         config_parse_bool,                              0,                             offsetof(Network, use_bpdu)
+Bridge.HairPin,                         config_parse_bool,                              0,                             offsetof(Network, hairpin)
+Bridge.FastLeave,                       config_parse_bool,                              0,                             offsetof(Network, fast_leave)
+Bridge.AllowPortToBeRoot,               config_parse_bool,                              0,                             offsetof(Network, allow_port_to_be_root)
+Bridge.UnicastFlood,                    config_parse_bool,                              0,                             offsetof(Network, unicast_flood)
+BridgeFDB.MACAddress,                   config_parse_fdb_hwaddr,                        0,                             0
+BridgeFDB.VLANId,                       config_parse_fdb_vlan_id,                       0,                             0
 /* backwards compatibility: do not add new entries to this section */
-Network.IPv4LL,                config_parse_ipv4ll,                            0,                             offsetof(Network, link_local)
-DHCPv4.UseDNS,                 config_parse_bool,                              0,                             offsetof(Network, dhcp_dns)
-DHCPv4.UseMTU,                 config_parse_bool,                              0,                             offsetof(Network, dhcp_mtu)
-DHCPv4.UseHostname,            config_parse_bool,                              0,                             offsetof(Network, dhcp_hostname)
-DHCP.UseDomainName,            config_parse_bool,                              0,                             offsetof(Network, dhcp_domains)
-DHCPv4.UseDomainName,          config_parse_bool,                              0,                             offsetof(Network, dhcp_domains)
-DHCPv4.CriticalConnection,     config_parse_bool,                              0,                             offsetof(Network, dhcp_critical)
+Network.IPv4LL,                         config_parse_ipv4ll,                            0,                             offsetof(Network, link_local)
+DHCPv4.UseDNS,                          config_parse_bool,                              0,                             offsetof(Network, dhcp_dns)
+DHCPv4.UseMTU,                          config_parse_bool,                              0,                             offsetof(Network, dhcp_mtu)
+DHCPv4.UseHostname,                     config_parse_bool,                              0,                             offsetof(Network, dhcp_hostname)
+DHCP.UseDomainName,                     config_parse_bool,                              0,                             offsetof(Network, dhcp_domains)
+DHCPv4.UseDomainName,                   config_parse_bool,                              0,                             offsetof(Network, dhcp_domains)
+DHCPv4.CriticalConnection,              config_parse_bool,                              0,                             offsetof(Network, dhcp_critical)
index ee14401..57495b5 100644 (file)
@@ -120,6 +120,7 @@ static int network_load_one(Manager *manager, const char *filename) {
         network->link_local = ADDRESS_FAMILY_IPV6;
 
         network->ipv6_privacy_extensions = IPV6_PRIVACY_EXTENSIONS_NO;
+        network->ipv6_accept_ra = -1;
 
         r = config_parse(NULL, filename, file,
                          "Match\0"
index c3439a7..2a43b6b 100644 (file)
@@ -120,6 +120,8 @@ struct Network {
         AddressFamilyBoolean ip_forward;
         bool ip_masquerade;
 
+        int ipv6_accept_ra;
+
         union in_addr_union ipv6_token;
         IPv6PrivacyExtensions ipv6_privacy_extensions;