]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
networkd: Allow specifying RouteTable for RAs 4182/head
authorJason Kölker <jason@koelker.net>
Mon, 19 Sep 2016 02:59:11 +0000 (02:59 +0000)
committerJason Kölker <jason@koelker.net>
Mon, 19 Sep 2016 03:27:46 +0000 (03:27 +0000)
man/systemd.network.xml
src/network/networkd-ndisc.c
src/network/networkd-network-gperf.gperf
src/network/networkd-network.c
src/network/networkd-network.h

index 961ff64ff0fd9da3078646ec46767bec8ed3a561..2e4d927470ee745f490896d18077d6a816560cdd 100644 (file)
             project='man-pages'><refentrytitle>resolv.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
           </listitem>
         </varlistentry>
+
+        <varlistentry>
+          <term><varname>RouteTable=<replaceable>num</replaceable></varname></term>
+          <listitem>
+            <para>The table identifier for dhcp routes (a number between 1 and 4294967295, or 0 to unset).
+            The table can be retrieved using <command>ip route show table <replaceable>num</replaceable></command>.
+            </para>
+          </listitem>
+        </varlistentry>
       </variablelist>
   </refsect1>
 
index d9c18b32a5f8b2f323635627886902bc7a131613..c2b797062396607472de98149c077e21041f3ccd 100644 (file)
@@ -94,7 +94,7 @@ static void ndisc_router_process_default(Link *link, sd_ndisc_router *rt) {
         }
 
         route->family = AF_INET6;
-        route->table = RT_TABLE_MAIN;
+        route->table = link->network->ipv6_accept_ra_route_table;
         route->protocol = RTPROT_RA;
         route->pref = preference;
         route->gw.in6 = gateway;
@@ -214,7 +214,7 @@ static void ndisc_router_process_onlink_prefix(Link *link, sd_ndisc_router *rt)
         }
 
         route->family = AF_INET6;
-        route->table = RT_TABLE_MAIN;
+        route->table = link->network->ipv6_accept_ra_route_table;
         route->protocol = RTPROT_RA;
         route->flags = RTM_F_PREFIX;
         route->dst_prefixlen = prefixlen;
@@ -285,7 +285,7 @@ static void ndisc_router_process_route(Link *link, sd_ndisc_router *rt) {
         }
 
         route->family = AF_INET6;
-        route->table = RT_TABLE_MAIN;
+        route->table = link->network->ipv6_accept_ra_route_table;
         route->protocol = RTPROT_RA;
         route->pref = preference;
         route->gw.in6 = gateway;
index 65ea20c4ca927e32b527288b72f71f571ddf71e8..62779c7c48587bab1929d8db3174e7e6fd16477d 100644 (file)
@@ -97,6 +97,7 @@ DHCP.UseTimezone,                       config_parse_bool,
 DHCP.IAID,                              config_parse_iaid,                              0,                             offsetof(Network, iaid)
 IPv6AcceptRA.UseDNS,                    config_parse_bool,                              0,                             offsetof(Network, ipv6_accept_ra_use_dns)
 IPv6AcceptRA.UseDomains,                config_parse_dhcp_use_domains,                  0,                             offsetof(Network, ipv6_accept_ra_use_domains)
+IPv6AcceptRA.RouteTable,                config_parse_dhcp_route_table,                  0,                             offsetof(Network, ipv6_accept_ra_route_table)
 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)
index c7dc785b241cd2faa0b7e782ab2de18a207ae1f0..584cb969794f53de7e5e8b3f02329bdd30026050 100644 (file)
@@ -138,6 +138,7 @@ static int network_load_one(Manager *manager, const char *filename) {
         network->proxy_arp = -1;
         network->arp = -1;
         network->ipv6_accept_ra_use_dns = true;
+        network->ipv6_accept_ra_route_table = RT_TABLE_MAIN;
 
         dropin_dirname = strjoina(network->name, ".network.d");
 
index a34dbf5c7b8de7a2bb80f34a521141e7ef658cd0..ef4b499ab9f523f982fe51b9fee5dc67494f9f71 100644 (file)
@@ -167,6 +167,7 @@ struct Network {
 
         bool ipv6_accept_ra_use_dns;
         DHCPUseDomains ipv6_accept_ra_use_domains;
+        uint32_t ipv6_accept_ra_route_table;
 
         union in_addr_union ipv6_token;
         IPv6PrivacyExtensions ipv6_privacy_extensions;