systemd: Backport foreignroutingpolicy from 249.
Also install the modprobe.d support files to allow systemd-networkd to
configure bond and dummy interfaces.
This will allow the GMEC team to drop it's own systemd fork.
BUG=b/180686339
TEST=networkd.conf supporst new directives and systemd.conf exists in
/etc/modprobe.d
RELEASE_NOTE=none
Change-Id: I02ec4fa22e5aba2b0ca5a90faca9a8eeb76d7912
Reviewed-on: https://cos-review.googlesource.com/c/cos/overlays/board-overlays/+/21850
Tested-by: Cusky Presubmit Bot <presubmit@cos-infra-prod.iam.gserviceaccount.com>
Reviewed-by: Roy Yang <royyang@google.com>
Reviewed-by: Meena Shanmugam <meenashanmugam@google.com>
diff --git a/project-lakitu/sys-apps/systemd/files/249-foreignroutingpolicy.patch b/project-lakitu/sys-apps/systemd/files/249-foreignroutingpolicy.patch
new file mode 100644
index 0000000..f1b3ea8
--- /dev/null
+++ b/project-lakitu/sys-apps/systemd/files/249-foreignroutingpolicy.patch
@@ -0,0 +1,115 @@
+commit d94dfe7053d49fa62c4bfc07b7f3fc2227c10aff
+Author: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Sun Apr 11 21:33:51 2021 +0900
+
+ network: introduce ManageForeignRoutingPolicyRules= boolean setting in networkd.conf
+
+ The commit 0b81225e5791f660506f7db0ab88078cf296b771 makes that networkd
+ remove all foreign rules except those with "proto kernel".
+
+ But, in some situation, people may want to manage routing policy rules
+ with other tools, e.g. 'ip' command. To support such the situation,
+ this introduce ManageForeignRoutingPolicyRules= boolean setting.
+
+ Closes #19106.
+
+diff --git a/man/networkd.conf.xml b/man/networkd.conf.xml
+index dcce2095ed..23422c6c94 100644
+--- a/man/networkd.conf.xml
++++ b/man/networkd.conf.xml
+@@ -62,6 +62,15 @@
+ If <varname>SpeedMeter=no</varname>, the value is ignored. Defaults to 10sec.</para></listitem>
+ </varlistentry>
+
++ <varlistentry>
++ <term><varname>ManageForeignRoutingPolicyRules=</varname></term>
++ <listitem><para>A boolean. When true, <command>systemd-networkd</command> will remove rules
++ that are not configured in .network files (except for rules with protocol
++ <literal>kernel</literal>). When false, it will not remove any foreign rules, keeping them even
++ if they are not configured in a .network file. Defaults to yes.
++ </para></listitem>
++ </varlistentry>
++
+ <varlistentry>
+ <term><varname>ManageForeignRoutes=</varname></term>
+ <listitem><para>A boolean. When true, <command>systemd-networkd</command> will store any routes
+diff --git a/src/network/networkd-gperf.gperf b/src/network/networkd-gperf.gperf
+index b2a2f55790..74d509896a 100644
+--- a/src/network/networkd-gperf.gperf
++++ b/src/network/networkd-gperf.gperf
+@@ -20,9 +20,10 @@ struct ConfigPerfItem;
+ %struct-type
+ %includes
+ %%
+-Network.SpeedMeter, config_parse_bool, 0, offsetof(Manager, use_speed_meter)
+-Network.SpeedMeterIntervalSec, config_parse_sec, 0, offsetof(Manager, speed_meter_interval_usec)
+-Network.ManageForeignRoutes, config_parse_bool, 0, offsetof(Manager, manage_foreign_routes)
+-Network.RouteTable, config_parse_route_table_names, 0, 0
+-DHCP.DUIDType, config_parse_duid_type, 0, offsetof(Manager, duid)
+-DHCP.DUIDRawData, config_parse_duid_rawdata, 0, offsetof(Manager, duid)
++Network.SpeedMeter, config_parse_bool, 0, offsetof(Manager, use_speed_meter)
++Network.SpeedMeterIntervalSec, config_parse_sec, 0, offsetof(Manager, speed_meter_interval_usec)
++Network.ManageForeignRoutingPolicyRules, config_parse_bool, 0, offsetof(Manager, manage_foreign_rules)
++Network.ManageForeignRoutes, config_parse_bool, 0, offsetof(Manager, manage_foreign_routes)
++Network.RouteTable, config_parse_route_table_names, 0, 0
++DHCP.DUIDType, config_parse_duid_type, 0, offsetof(Manager, duid)
++DHCP.DUIDRawData, config_parse_duid_rawdata, 0, offsetof(Manager, duid)
+diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c
+index a8db2cc44b..20957ecd89 100644
+--- a/src/network/networkd-manager.c
++++ b/src/network/networkd-manager.c
+@@ -380,6 +380,7 @@ int manager_new(Manager **ret) {
+ *m = (Manager) {
+ .speed_meter_interval_usec = SPEED_METER_DEFAULT_TIME_INTERVAL,
+ .manage_foreign_routes = true,
++ .manage_foreign_rules = true,
+ .ethtool_fd = -1,
+ };
+
+@@ -655,6 +656,9 @@ static int manager_enumerate_rules(Manager *m) {
+ assert(m);
+ assert(m->rtnl);
+
++ if (!m->manage_foreign_rules)
++ return 0;
++
+ r = sd_rtnl_message_new_routing_policy_rule(m->rtnl, &req, RTM_GETRULE, 0);
+ if (r < 0)
+ return r;
+diff --git a/src/network/networkd-manager.h b/src/network/networkd-manager.h
+index 7f630fccc7..0fae7a5c2e 100644
+--- a/src/network/networkd-manager.h
++++ b/src/network/networkd-manager.h
+@@ -32,6 +32,7 @@ struct Manager {
+ bool dirty;
+ bool restarting;
+ bool manage_foreign_routes;
++ bool manage_foreign_rules;
+
+ Set *dirty_links;
+
+diff --git a/src/network/networkd-routing-policy-rule.c b/src/network/networkd-routing-policy-rule.c
+index a7fddfd58f..03bdd4e640 100644
+--- a/src/network/networkd-routing-policy-rule.c
++++ b/src/network/networkd-routing-policy-rule.c
+@@ -977,6 +977,8 @@ int manager_rtnl_process_rule(sd_netlink *rtnl, sd_netlink_message *message, Man
+ case RTM_NEWRULE:
+ if (rule)
+ log_routing_policy_rule_debug(tmp, tmp->family, "Received remembered", NULL, m);
++ else if (!m->manage_foreign_routes)
++ log_routing_policy_rule_debug(tmp, tmp->family, "Ignoring received foreign", NULL, m);
+ else {
+ log_routing_policy_rule_debug(tmp, tmp->family, "Remembering foreign", NULL, m);
+ r = routing_policy_rule_consume_foreign(m, TAKE_PTR(tmp));
+diff --git a/src/network/networkd.conf b/src/network/networkd.conf
+index 0eac327314..4e4e8b8d07 100644
+--- a/src/network/networkd.conf
++++ b/src/network/networkd.conf
+@@ -15,6 +15,7 @@
+ [Network]
+ #SpeedMeter=no
+ #SpeedMeterIntervalSec=10sec
++#ManageForeignRoutingPolicyRules=yes
+ #ManageForeignRoutes=yes
+ #RouteTable=
+
diff --git a/project-lakitu/sys-apps/systemd/systemd-248.6-r1.ebuild b/project-lakitu/sys-apps/systemd/systemd-248.6-r2.ebuild
similarity index 100%
rename from project-lakitu/sys-apps/systemd/systemd-248.6-r1.ebuild
rename to project-lakitu/sys-apps/systemd/systemd-248.6-r2.ebuild
diff --git a/project-lakitu/sys-apps/systemd/systemd-248.6.ebuild b/project-lakitu/sys-apps/systemd/systemd-248.6.ebuild
index ad859ff..7a60570 100644
--- a/project-lakitu/sys-apps/systemd/systemd-248.6.ebuild
+++ b/project-lakitu/sys-apps/systemd/systemd-248.6.ebuild
@@ -263,6 +263,8 @@
# Remove this patch once stackdriver logging agent is
# upgraded with latest systemd version.
"${FILESDIR}"/248-systemd-journald-support-old-format.patch
+ # Can remove once we upgrade to v249+
+ "${FILESDIR}"/249-foreignroutingpolicy.patch
)
#if ! use vanilla; then
@@ -433,6 +435,10 @@
dosym /dev/null /etc/systemd/network/99-default.link
fi
+ # Install modprobe.d files.
+ insinto /etc/modprobe.d
+ doins modprobe.d/systemd.conf
+
# Enable accounting for all supported controllers (CPU, Memory and Block)
sed -i 's/#DefaultCPUAccounting=no/DefaultCPUAccounting=yes/' "${ED}"/etc/systemd/system.conf
sed -i 's/#DefaultBlockIOAccounting=no/DefaultBlockIOAccounting=yes/' "${ED}"/etc/systemd/system.conf