diff --git a/recipes-core/systemd/systemd/0001-networkd-Track-address-configuration.patch b/recipes-core/systemd/systemd/0001-networkd-Track-address-configuration.patch
deleted file mode 100644
index c683669..0000000
--- a/recipes-core/systemd/systemd/0001-networkd-Track-address-configuration.patch
+++ /dev/null
@@ -1,77 +0,0 @@
-From a24d0d95df1929912c0f767f5ab1353552464c84 Mon Sep 17 00:00:00 2001
-From: "William A. Kennington III" <william@wkennington.com>
-Date: Fri, 30 Nov 2018 15:54:45 -0800
-Subject: [PATCH 1/3] networkd: Track address configuration
-
-This will be useful to assert that our static route configuration always
-happens after address configuration once our individual configure state
-goes away.
-
-(cherry picked from commit c42ff3a1a7bfea66dc4655096c79bd481159091b)
-
-Upstream-Status: Backport
----
- src/network/networkd-link.c | 11 +++++++++--
- src/network/networkd-link.h |  2 ++
- 2 files changed, 11 insertions(+), 2 deletions(-)
-
-diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
-index 4afcf843bd..0faf337069 100644
---- a/src/network/networkd-link.c
-+++ b/src/network/networkd-link.c
-@@ -728,6 +728,9 @@ void link_check_ready(Link *link) {
-         if (!link->network)
-                 return;
- 
-+        if (!link->addresses_configured)
-+                return;
-+
-         if (!link->static_routes_configured)
-                 return;
- 
-@@ -835,6 +838,8 @@ static int link_enter_set_routes(Link *link) {
- 
-         assert(link);
-         assert(link->network);
-+        assert(link->addresses_configured);
-+        assert(link->address_messages == 0);
-         assert(link->state == LINK_STATE_SETTING_ADDRESSES);
- 
-         (void) link_set_routing_policy_rule(link);
-@@ -904,6 +909,7 @@ static int address_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userda
- 
-         if (link->address_messages == 0) {
-                 log_link_debug(link, "Addresses set");
-+                link->addresses_configured = true;
-                 link_enter_set_routes(link);
-         }
- 
-@@ -1204,9 +1210,10 @@ static int link_enter_set_addresses(Link *link) {
-                 log_link_debug(link, "Offering DHCPv4 leases");
-         }
- 
--        if (link->address_messages == 0)
-+        if (link->address_messages == 0) {
-+                link->addresses_configured = true;
-                 link_enter_set_routes(link);
--        else
-+        } else
-                 log_link_debug(link, "Setting addresses");
- 
-         return 0;
-diff --git a/src/network/networkd-link.h b/src/network/networkd-link.h
-index 7e22dfd504..2f37cc1598 100644
---- a/src/network/networkd-link.h
-+++ b/src/network/networkd-link.h
-@@ -80,6 +80,8 @@ typedef struct Link {
-         Set *routes;
-         Set *routes_foreign;
- 
-+        bool addresses_configured;
-+
-         sd_dhcp_client *dhcp_client;
-         sd_dhcp_lease *dhcp_lease;
-         char *lease_file;
--- 
-2.20.1.97.g81188d93c3-goog
-
diff --git a/recipes-core/systemd/systemd/0001-timedate-defer-the-property-changed-signal-until-job.patch b/recipes-core/systemd/systemd/0001-timedate-defer-the-property-changed-signal-until-job.patch
deleted file mode 100644
index a43c36b..0000000
--- a/recipes-core/systemd/systemd/0001-timedate-defer-the-property-changed-signal-until-job.patch
+++ /dev/null
@@ -1,179 +0,0 @@
-From 3af0a96c0fcc623bd16649fc3640396a657cf9ef Mon Sep 17 00:00:00 2001
-From: Yu Watanabe <watanabe.yu+github@gmail.com>
-Date: Sun, 22 Jul 2018 23:10:02 +0900
-Subject: [PATCH] timedate: defer the property changed signal until job of
- starting/stopping NTP service is finished
-
-Before this, the property changed signal is emitted immediately after
-StartUnit/StopUnit method is called. So, the running state of the NTP
-client service may not updated.
-This makes the timing of emitting property changed signal is deferred
-until job of starting/stopping NTP client service is completed.
-
-Fixes #9672.
----
- src/timedate/timedated.c | 78 ++++++++++++++++++++++++++++++++++++++++--------
- 1 file changed, 65 insertions(+), 13 deletions(-)
-
-diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c
-index 6c95764..012cbe0 100644
---- a/src/timedate/timedated.c
-+++ b/src/timedate/timedated.c
-@@ -46,6 +46,9 @@ typedef struct Context {
-         Hashmap *polkit_registry;
-         sd_bus_message *cache;
- 
-+        sd_bus_slot *slot_job_removed;
-+        char *path_ntp_unit;
-+
-         LIST_HEAD(UnitStatusInfo, units);
- } Context;
- 
-@@ -74,6 +77,9 @@ static void context_free(Context *c) {
-         bus_verify_polkit_async_registry_free(c->polkit_registry);
-         sd_bus_message_unref(c->cache);
- 
-+        sd_bus_slot_unref(c->slot_job_removed);
-+        free(c->path_ntp_unit);
-+
-         while ((p = c->units)) {
-                 LIST_REMOVE(units, c->units, p);
-                 unit_status_info_free(p);
-@@ -345,17 +351,55 @@ static int context_update_ntp_status(Context *c, sd_bus *bus, sd_bus_message *m)
-         return 0;
- }
- 
--static int unit_start_or_stop(UnitStatusInfo *u, sd_bus *bus, sd_bus_error *error, bool start) {
-+static int match_job_removed(sd_bus_message *m, void *userdata, sd_bus_error *error) {
-+        const char *path;
-+        Context *c = userdata;
-+        int r;
-+
-+        assert(c);
-+        assert(m);
-+
-+        r = sd_bus_message_read(m, "uoss", NULL, &path, NULL, NULL);
-+        if (r < 0) {
-+                bus_log_parse_error(r);
-+                return 0;
-+        }
-+
-+        if (!streq_ptr(path, c->path_ntp_unit))
-+                return 0;
-+
-+        (void) sd_bus_emit_properties_changed(sd_bus_message_get_bus(m), "/org/freedesktop/timedate1", "org.freedesktop.timedate1", "NTP", NULL);
-+
-+        c->slot_job_removed = sd_bus_slot_unref(c->slot_job_removed);
-+        c->path_ntp_unit = mfree(c->path_ntp_unit);
-+
-+        return 0;
-+}
-+
-+static int unit_start_or_stop(Context *c, UnitStatusInfo *u, sd_bus *bus, sd_bus_error *error, bool start) {
-+        _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-+        _cleanup_(sd_bus_slot_unrefp) sd_bus_slot *slot = NULL;
-+        const char *path;
-         int r;
- 
-+        assert(c);
-         assert(u);
-         assert(bus);
-         assert(error);
- 
--        /* Call context_update_ntp_status() to update UnitStatusInfo before calling this. */
-+        /* This method may be called frequently. Forget the previous job if it has not completed yet. */
-+        c->slot_job_removed = sd_bus_slot_unref(c->slot_job_removed);
- 
--        if (streq(u->active_state, "active") == start)
--                return 0;
-+        r = sd_bus_match_signal_async(
-+                        bus,
-+                        &slot,
-+                        "org.freedesktop.systemd1",
-+                        "/org/freedesktop/systemd1",
-+                        "org.freedesktop.systemd1.Manager",
-+                        "JobRemoved",
-+                        match_job_removed, NULL, c);
-+        if (r < 0)
-+                return r;
- 
-         r = sd_bus_call_method(
-                 bus,
-@@ -364,13 +408,22 @@ static int unit_start_or_stop(UnitStatusInfo *u, sd_bus *bus, sd_bus_error *erro
-                 "org.freedesktop.systemd1.Manager",
-                 start ? "StartUnit" : "StopUnit",
-                 error,
--                NULL,
-+                &reply,
-                 "ss",
-                 u->name,
-                 "replace");
-         if (r < 0)
-                 return r;
- 
-+        r = sd_bus_message_read(reply, "o", &path);
-+        if (r < 0)
-+                return bus_log_parse_error(r);
-+
-+        r = free_and_strdup(&c->path_ntp_unit, path);
-+        if (r < 0)
-+                return log_oom();
-+
-+        c->slot_job_removed = TAKE_PTR(slot);
-         return 0;
- }
- 
-@@ -422,8 +475,9 @@ static int unit_enable_or_disable(UnitStatusInfo *u, sd_bus *bus, sd_bus_error *
-                         error,
-                         NULL,
-                         NULL);
--         if (r < 0)
--                 return r;
-+        if (r < 0)
-+                return r;
-+
-         return 0;
- }
- 
-@@ -813,7 +867,7 @@ static int method_set_ntp(sd_bus_message *m, void *userdata, sd_bus_error *error
-                         if (q < 0)
-                                 r = q;
- 
--                        q = unit_start_or_stop(u, bus, error, enable);
-+                        q = unit_start_or_stop(c, u, bus, error, enable);
-                         if (q < 0)
-                                 r = q;
-                 }
-@@ -827,17 +881,17 @@ static int method_set_ntp(sd_bus_message *m, void *userdata, sd_bus_error *error
-                         if (r < 0)
-                                 continue;
- 
--                        r = unit_start_or_stop(u, bus, error, enable);
-+                        r = unit_start_or_stop(c, u, bus, error, enable);
-                         break;
-                 }
- 
--        else if (context_ntp_service_is_active(c) <= 0)
-+        else
-                 LIST_FOREACH(units, u, c->units) {
-                         if (!streq(u->load_state, "loaded") ||
-                             !streq(u->unit_file_state, "enabled"))
-                                 continue;
- 
--                        r = unit_start_or_stop(u, bus, error, enable);
-+                        r = unit_start_or_stop(c, u, bus, error, enable);
-                         break;
-                 }
- 
-@@ -846,8 +900,6 @@ static int method_set_ntp(sd_bus_message *m, void *userdata, sd_bus_error *error
- 
-         log_info("Set NTP to %sd", enable_disable(enable));
- 
--        (void) sd_bus_emit_properties_changed(bus, "/org/freedesktop/timedate1", "org.freedesktop.timedate1", "NTP", NULL);
--
-         return sd_bus_reply_method_return(m, NULL);
- }
- 
--- 
-2.7.4
-
diff --git a/recipes-core/systemd/systemd/0001-timedate-treat-activating-or-inactivating-NTP-client.patch b/recipes-core/systemd/systemd/0001-timedate-treat-activating-or-inactivating-NTP-client.patch
deleted file mode 100644
index 6ca16ab..0000000
--- a/recipes-core/systemd/systemd/0001-timedate-treat-activating-or-inactivating-NTP-client.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From 84a87726eec88e7b11c8aa633bca006a0c0fc435 Mon Sep 17 00:00:00 2001
-From: Yu Watanabe <watanabe.yu+github@gmail.com>
-Date: Tue, 15 Jan 2019 02:59:48 +0900
-Subject: [PATCH 1/2] timedate: treat 'activating' or 'inactivating' NTP client
- status as 'active'
-
-When `timedatectl set-time` is called, NTP client may be in
-'activating' or something. For safety, let's treat such states as
-'active'.
-
-This also changes all unit file status except for 'masked' or 'disabled'
-are treated as 'enabled'.
----
- src/timedate/timedated.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c
-index e168889..12308be 100644
---- a/src/timedate/timedated.c
-+++ b/src/timedate/timedated.c
-@@ -160,7 +160,7 @@ static int context_ntp_service_is_active(Context *c) {
-         /* Call context_update_ntp_status() to update UnitStatusInfo before calling this. */
- 
-         LIST_FOREACH(units, info, c->units)
--                count += streq_ptr(info->active_state, "active");
-+                count += !STRPTR_IN_SET(info->active_state, "inactive", "failed");
- 
-         return count;
- }
-@@ -174,7 +174,7 @@ static int context_ntp_service_is_enabled(Context *c) {
-         /* Call context_update_ntp_status() to update UnitStatusInfo before calling this. */
- 
-         LIST_FOREACH(units, info, c->units)
--                count += STRPTR_IN_SET(info->unit_file_state, "enabled", "enabled-runtime");
-+                count += !STRPTR_IN_SET(info->unit_file_state, "masked", "masked-runtime", "disabled", "bad");
- 
-         return count;
- }
--- 
-2.7.4
-
diff --git a/recipes-core/systemd/systemd/0002-networkd-Use-only-a-generic-CONFIGURING-state.patch b/recipes-core/systemd/systemd/0002-networkd-Use-only-a-generic-CONFIGURING-state.patch
deleted file mode 100644
index 49c4cc3..0000000
--- a/recipes-core/systemd/systemd/0002-networkd-Use-only-a-generic-CONFIGURING-state.patch
+++ /dev/null
@@ -1,176 +0,0 @@
-From 3283d15fe33da392b7174eb4b82a5ad1ce03a6e4 Mon Sep 17 00:00:00 2001
-From: "William A. Kennington III" <william@wkennington.com>
-Date: Fri, 30 Nov 2018 15:36:33 -0800
-Subject: [PATCH 2/3] networkd: Use only a generic CONFIGURING state
-
-This allows us to convey that we are performing multiple link
-configuration changes in parallel. This is needed to support configuring
-neighbors while simultaneously configuring addresses and routes.
-
-(cherry picked from commit 289e6774d0daefe86771171b8f4f97b63354683e)
-
-Upstream-Status: Backport
----
- src/network/networkd-link.c | 37 +++++++++++++++++--------------------
- src/network/networkd-link.h |  4 +---
- 2 files changed, 18 insertions(+), 23 deletions(-)
-
-diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
-index 0faf337069..71b92185cd 100644
---- a/src/network/networkd-link.c
-+++ b/src/network/networkd-link.c
-@@ -706,7 +706,7 @@ static void link_enter_configured(Link *link) {
-         assert(link);
-         assert(link->network);
- 
--        if (link->state != LINK_STATE_SETTING_ROUTES)
-+        if (link->state != LINK_STATE_CONFIGURING)
-                 return;
- 
-         log_link_info(link, "Configured");
-@@ -810,9 +810,8 @@ static int route_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userdata
-         int r;
- 
-         assert(link->route_messages > 0);
--        assert(IN_SET(link->state, LINK_STATE_SETTING_ADDRESSES,
--                      LINK_STATE_SETTING_ROUTES, LINK_STATE_FAILED,
--                      LINK_STATE_LINGER));
-+        assert(IN_SET(link->state, LINK_STATE_CONFIGURING,
-+                      LINK_STATE_FAILED, LINK_STATE_LINGER));
- 
-         link->route_messages--;
- 
-@@ -832,7 +831,7 @@ static int route_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userdata
-         return 1;
- }
- 
--static int link_enter_set_routes(Link *link) {
-+static int link_request_set_routes(Link *link) {
-         Route *rt;
-         int r;
- 
-@@ -840,11 +839,11 @@ static int link_enter_set_routes(Link *link) {
-         assert(link->network);
-         assert(link->addresses_configured);
-         assert(link->address_messages == 0);
--        assert(link->state == LINK_STATE_SETTING_ADDRESSES);
-+        assert(link->state != _LINK_STATE_INVALID);
- 
--        (void) link_set_routing_policy_rule(link);
-+        link_set_state(link, LINK_STATE_CONFIGURING);
- 
--        link_set_state(link, LINK_STATE_SETTING_ROUTES);
-+        (void) link_set_routing_policy_rule(link);
- 
-         LIST_FOREACH(routes, rt, link->network->static_routes) {
-                 r = route_configure(rt, link, route_handler);
-@@ -893,7 +892,7 @@ static int address_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userda
-         assert(link);
-         assert(link->ifname);
-         assert(link->address_messages > 0);
--        assert(IN_SET(link->state, LINK_STATE_SETTING_ADDRESSES,
-+        assert(IN_SET(link->state, LINK_STATE_CONFIGURING,
-                LINK_STATE_FAILED, LINK_STATE_LINGER));
- 
-         link->address_messages--;
-@@ -910,7 +909,7 @@ static int address_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userda
-         if (link->address_messages == 0) {
-                 log_link_debug(link, "Addresses set");
-                 link->addresses_configured = true;
--                link_enter_set_routes(link);
-+                link_request_set_routes(link);
-         }
- 
-         return 1;
-@@ -1054,7 +1053,7 @@ static int link_set_bridge_fdb(Link *link) {
-         return 0;
- }
- 
--static int link_enter_set_addresses(Link *link) {
-+static int link_request_set_addresses(Link *link) {
-         AddressLabel *label;
-         Address *ad;
-         int r;
-@@ -1067,7 +1066,7 @@ static int link_enter_set_addresses(Link *link) {
-         if (r < 0)
-                 return r;
- 
--        link_set_state(link, LINK_STATE_SETTING_ADDRESSES);
-+        link_set_state(link, LINK_STATE_CONFIGURING);
- 
-         LIST_FOREACH(addresses, ad, link->network->static_addresses) {
-                 r = address_configure(ad, link, address_handler, false);
-@@ -1212,7 +1211,7 @@ static int link_enter_set_addresses(Link *link) {
- 
-         if (link->address_messages == 0) {
-                 link->addresses_configured = true;
--                link_enter_set_routes(link);
-+                link_request_set_routes(link);
-         } else
-                 log_link_debug(link, "Setting addresses");
- 
-@@ -2313,7 +2312,7 @@ static int link_joined(Link *link) {
-         if (!link_has_carrier(link) && !link->network->configure_without_carrier)
-                 return 0;
- 
--        return link_enter_set_addresses(link);
-+        return link_request_set_addresses(link);
- }
- 
- static int netdev_join_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userdata) {
-@@ -2351,7 +2350,7 @@ static int link_enter_join_netdev(Link *link) {
-         assert(link->network);
-         assert(link->state == LINK_STATE_PENDING);
- 
--        link_set_state(link, LINK_STATE_ENSLAVING);
-+        link_set_state(link, LINK_STATE_CONFIGURING);
- 
-         link_dirty(link);
- 
-@@ -3264,7 +3263,7 @@ static int link_carrier_gained(Link *link) {
-                         return r;
-                 }
- 
--                r = link_enter_set_addresses(link);
-+                r = link_request_set_addresses(link);
-                 if (r < 0)
-                         return r;
-         }
-@@ -3348,7 +3347,7 @@ int link_update(Link *link, sd_netlink_message *m) {
-         if (link->state == LINK_STATE_LINGER) {
-                 link_ref(link);
-                 log_link_info(link, "Link readded");
--                link_set_state(link, LINK_STATE_ENSLAVING);
-+                link_set_state(link, LINK_STATE_CONFIGURING);
- 
-                 r = link_new_carrier_maps(link);
-                 if (r < 0)
-@@ -3911,9 +3910,7 @@ void link_clean(Link *link) {
- 
- static const char* const link_state_table[_LINK_STATE_MAX] = {
-         [LINK_STATE_PENDING] = "pending",
--        [LINK_STATE_ENSLAVING] = "configuring",
--        [LINK_STATE_SETTING_ADDRESSES] = "configuring",
--        [LINK_STATE_SETTING_ROUTES] = "configuring",
-+        [LINK_STATE_CONFIGURING] = "configuring",
-         [LINK_STATE_CONFIGURED] = "configured",
-         [LINK_STATE_UNMANAGED] = "unmanaged",
-         [LINK_STATE_FAILED] = "failed",
-diff --git a/src/network/networkd-link.h b/src/network/networkd-link.h
-index 2f37cc1598..5fd81be5a5 100644
---- a/src/network/networkd-link.h
-+++ b/src/network/networkd-link.h
-@@ -19,9 +19,7 @@
- 
- typedef enum LinkState {
-         LINK_STATE_PENDING,
--        LINK_STATE_ENSLAVING,
--        LINK_STATE_SETTING_ADDRESSES,
--        LINK_STATE_SETTING_ROUTES,
-+        LINK_STATE_CONFIGURING,
-         LINK_STATE_CONFIGURED,
-         LINK_STATE_UNMANAGED,
-         LINK_STATE_FAILED,
--- 
-2.20.1.97.g81188d93c3-goog
-
diff --git a/recipes-core/systemd/systemd/0002-timedate-refuse-to-set-time-when-previous-request-is.patch b/recipes-core/systemd/systemd/0002-timedate-refuse-to-set-time-when-previous-request-is.patch
deleted file mode 100644
index 09c3f37..0000000
--- a/recipes-core/systemd/systemd/0002-timedate-refuse-to-set-time-when-previous-request-is.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From b4356b5720ae0974f1f8962e26562591dd0be9e9 Mon Sep 17 00:00:00 2001
-From: Yu Watanabe <watanabe.yu+github@gmail.com>
-Date: Tue, 15 Jan 2019 14:51:30 +0900
-Subject: [PATCH 2/2] timedate: refuse to set time when previous request is not
- finished
-
-If `timedatectl set-time` is invoked right after `timedatectl set-ntp true`,
-then, the NTP service may not be started yet.
-
-Fixes #11420.
----
- src/timedate/timedated.c | 11 +++++++++++
- 1 file changed, 11 insertions(+)
-
-diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c
-index 12308be..eeb17b6 100644
---- a/src/timedate/timedated.c
-+++ b/src/timedate/timedated.c
-@@ -523,6 +523,10 @@ static int property_get_can_ntp(
-         assert(reply);
-         assert(error);
- 
-+        if (c->slot_job_removed)
-+                /* When the previous request is not finished, then assume NTP is enabled. */
-+                return sd_bus_message_append(reply, "b", true);
-+
-         r = context_update_ntp_status(c, bus, reply);
-         if (r < 0)
-                 return r;
-@@ -548,6 +552,10 @@ static int property_get_ntp(
-         assert(reply);
-         assert(error);
- 
-+        if (c->slot_job_removed)
-+                /* When the previous request is not finished, then assume NTP is active. */
-+                return sd_bus_message_append(reply, "b", true);
-+
-         r = context_update_ntp_status(c, bus, reply);
-         if (r < 0)
-                 return r;
-@@ -735,6 +743,9 @@ static int method_set_time(sd_bus_message *m, void *userdata, sd_bus_error *erro
-         assert(m);
-         assert(c);
- 
-+        if (c->slot_job_removed)
-+                return sd_bus_error_set(error, BUS_ERROR_AUTOMATIC_TIME_SYNC_ENABLED, "Previous request is not finished, refusing.");
-+
-         r = context_update_ntp_status(c, bus, m);
-         if (r < 0)
-                 return sd_bus_error_set_errnof(error, r, "Failed to update context: %m");
--- 
-2.7.4
-
diff --git a/recipes-core/systemd/systemd/0003-networkd-Static-neighbor-support.patch b/recipes-core/systemd/systemd/0003-networkd-Static-neighbor-support.patch
deleted file mode 100644
index 86a5631..0000000
--- a/recipes-core/systemd/systemd/0003-networkd-Static-neighbor-support.patch
+++ /dev/null
@@ -1,547 +0,0 @@
-From 2402e69c2ccf795d67bb55d7cd073e7384d57a3d Mon Sep 17 00:00:00 2001
-From: "William A. Kennington III" <william@wkennington.com>
-Date: Wed, 28 Nov 2018 19:00:58 -0800
-Subject: [PATCH 3/3] networkd: Static neighbor support
-
-When using networkd we currently have no way of ensuring that static
-neighbor entries are set when our link comes up. This change adds a new
-section to the network definition that allows multiple static neighbors
-to be set on a link.
-
-(cherry picked from commit e4a71bf36f422c3728b902aaa5846add7bbc0eb9)
-
-Upstream-Status: Backport
----
- man/systemd.network.xml                  |  25 +++
- src/network/meson.build                  |   2 +
- src/network/networkd-link.c              |  34 ++++
- src/network/networkd-link.h              |   3 +
- src/network/networkd-neighbor.c          | 234 +++++++++++++++++++++++
- src/network/networkd-neighbor.h          |  37 ++++
- src/network/networkd-network-gperf.gperf |   2 +
- src/network/networkd-network.c           |  10 +
- src/network/networkd-network.h           |   4 +
- 9 files changed, 351 insertions(+)
- create mode 100644 src/network/networkd-neighbor.c
- create mode 100644 src/network/networkd-neighbor.h
-
-diff --git a/man/systemd.network.xml b/man/systemd.network.xml
-index fc8e0aea68..804419c31a 100644
---- a/man/systemd.network.xml
-+++ b/man/systemd.network.xml
-@@ -899,6 +899,31 @@
-       </variablelist>
-   </refsect1>
- 
-+  <refsect1>
-+    <title>[Neighbor] Section Options</title>
-+      <para>A <literal>[Neighbor]</literal> section accepts the
-+      following keys. The neighbor section adds a permanent, static
-+      entry to the neighbor table (IPv6) or ARP table (IPv4) for
-+      the given hardware address on the links matched for the network.
-+      Specify several <literal>[Neighbor]</literal> sections to configure
-+      several static neighbors.</para>
-+
-+      <variablelist class='network-directives'>
-+        <varlistentry>
-+          <term><varname>Address=</varname></term>
-+          <listitem>
-+            <para>The IP address of the neighbor.</para>
-+          </listitem>
-+        </varlistentry>
-+        <varlistentry>
-+          <term><varname>MACAddress=</varname></term>
-+          <listitem>
-+            <para>The hardware address of the neighbor.</para>
-+          </listitem>
-+        </varlistentry>
-+      </variablelist>
-+  </refsect1>
-+
-     <refsect1>
-     <title>[IPv6AddressLabel] Section Options</title>
- 
-diff --git a/src/network/meson.build b/src/network/meson.build
-index 8f5544ea04..900130ed6a 100644
---- a/src/network/meson.build
-+++ b/src/network/meson.build
-@@ -62,6 +62,8 @@ sources = files('''
-         networkd-manager.h
-         networkd-ndisc.c
-         networkd-ndisc.h
-+        networkd-neighbor.c
-+        networkd-neighbor.h
-         networkd-radv.c
-         networkd-radv.h
-         networkd-network-bus.c
-diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
-index 71b92185cd..51f95ac55e 100644
---- a/src/network/networkd-link.c
-+++ b/src/network/networkd-link.c
-@@ -17,6 +17,7 @@
- #include "networkd-lldp-tx.h"
- #include "networkd-manager.h"
- #include "networkd-ndisc.h"
-+#include "networkd-neighbor.h"
- #include "networkd-radv.h"
- #include "networkd-routing-policy-rule.h"
- #include "set.h"
-@@ -731,6 +732,9 @@ void link_check_ready(Link *link) {
-         if (!link->addresses_configured)
-                 return;
- 
-+        if (!link->neighbors_configured)
-+                return;
-+
-         if (!link->static_routes_configured)
-                 return;
- 
-@@ -883,6 +887,34 @@ int link_route_remove_handler(sd_netlink *rtnl, sd_netlink_message *m, void *use
-         return 1;
- }
- 
-+static int link_request_set_neighbors(Link *link) {
-+        Neighbor *neighbor;
-+        int r;
-+
-+        assert(link);
-+        assert(link->network);
-+        assert(link->state != _LINK_STATE_INVALID);
-+
-+        link_set_state(link, LINK_STATE_CONFIGURING);
-+
-+        LIST_FOREACH(neighbors, neighbor, link->network->neighbors) {
-+                r = neighbor_configure(neighbor, link, NULL);
-+                if (r < 0) {
-+                        log_link_warning_errno(link, r, "Could not set neighbor: %m");
-+                        link_enter_failed(link);
-+                        return r;
-+                }
-+        }
-+
-+        if (link->neighbor_messages == 0) {
-+                link->neighbors_configured = true;
-+                link_check_ready(link);
-+        } else
-+                log_link_debug(link, "Setting neighbors");
-+
-+        return 0;
-+}
-+
- static int address_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userdata) {
-         _cleanup_(link_unrefp) Link *link = userdata;
-         int r;
-@@ -1068,6 +1100,8 @@ static int link_request_set_addresses(Link *link) {
- 
-         link_set_state(link, LINK_STATE_CONFIGURING);
- 
-+        link_request_set_neighbors(link);
-+
-         LIST_FOREACH(addresses, ad, link->network->static_addresses) {
-                 r = address_configure(ad, link, address_handler, false);
-                 if (r < 0) {
-diff --git a/src/network/networkd-link.h b/src/network/networkd-link.h
-index 5fd81be5a5..464e93d982 100644
---- a/src/network/networkd-link.h
-+++ b/src/network/networkd-link.h
-@@ -68,6 +68,7 @@ typedef struct Link {
- 
-         unsigned address_messages;
-         unsigned address_label_messages;
-+        unsigned neighbor_messages;
-         unsigned route_messages;
-         unsigned routing_policy_rule_messages;
-         unsigned routing_policy_rule_remove_messages;
-@@ -95,6 +96,8 @@ typedef struct Link {
-         bool ipv4ll_address:1;
-         bool ipv4ll_route:1;
- 
-+        bool neighbors_configured;
-+
-         bool static_routes_configured;
-         bool routing_policy_rules_configured;
-         bool setting_mtu;
-diff --git a/src/network/networkd-neighbor.c b/src/network/networkd-neighbor.c
-new file mode 100644
-index 0000000000..db69d310d3
---- /dev/null
-+++ b/src/network/networkd-neighbor.c
-@@ -0,0 +1,234 @@
-+/* SPDX-License-Identifier: LGPL-2.1+ */
-+
-+#include "sd-netlink.h"
-+
-+#include "alloc-util.h"
-+#include "conf-parser.h"
-+#include "ether-addr-util.h"
-+#include "hashmap.h"
-+#include "in-addr-util.h"
-+#include "netlink-util.h"
-+#include "networkd-link.h"
-+#include "networkd-manager.h"
-+#include "networkd-neighbor.h"
-+
-+void neighbor_free(Neighbor *neighbor) {
-+        if (!neighbor)
-+                return;
-+
-+        if (neighbor->network) {
-+                LIST_REMOVE(neighbors, neighbor->network->neighbors, neighbor);
-+                assert(neighbor->network->n_neighbors > 0);
-+                neighbor->network->n_neighbors--;
-+
-+                if (neighbor->section) {
-+                        hashmap_remove(neighbor->network->neighbors_by_section, neighbor->section);
-+                        network_config_section_free(neighbor->section);
-+                }
-+        }
-+
-+        free(neighbor);
-+}
-+
-+static int neighbor_new_static(Network *network, const char *filename, unsigned section_line, Neighbor **ret) {
-+        _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL;
-+        _cleanup_(neighbor_freep) Neighbor *neighbor = NULL;
-+        int r;
-+
-+        assert(network);
-+        assert(ret);
-+        assert(!!filename == (section_line > 0));
-+
-+        if (filename) {
-+                r = network_config_section_new(filename, section_line, &n);
-+                if (r < 0)
-+                        return r;
-+
-+                neighbor = hashmap_get(network->neighbors_by_section, n);
-+                if (neighbor) {
-+                        *ret = TAKE_PTR(neighbor);
-+
-+                        return 0;
-+                }
-+        }
-+
-+        neighbor = new(Neighbor, 1);
-+        if (!neighbor)
-+                return -ENOMEM;
-+
-+        *neighbor = (Neighbor) {
-+                .network = network,
-+                .family = AF_UNSPEC,
-+        };
-+
-+        LIST_APPEND(neighbors, network->neighbors, neighbor);
-+        network->n_neighbors++;
-+
-+        if (filename) {
-+                neighbor->section = TAKE_PTR(n);
-+
-+                r = hashmap_put(network->neighbors_by_section, neighbor->section, neighbor);
-+                if (r < 0)
-+                        return r;
-+        }
-+
-+        *ret = TAKE_PTR(neighbor);
-+
-+        return 0;
-+}
-+
-+static int neighbor_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userdata) {
-+        _cleanup_(link_unrefp) Link *link = userdata;
-+        int r;
-+
-+        assert(link);
-+        assert(link->neighbor_messages > 0);
-+
-+        link->neighbor_messages--;
-+
-+        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
-+                return 1;
-+
-+        r = sd_netlink_message_get_errno(m);
-+        if (r < 0 && r != -EEXIST)
-+                log_link_warning_errno(link, r, "Could not set neighbor: %m");
-+
-+        if (link->neighbor_messages == 0) {
-+                log_link_debug(link, "Neighbors set");
-+                link->neighbors_configured = true;
-+                link_check_ready(link);
-+        }
-+
-+        return 1;
-+}
-+
-+int neighbor_configure(Neighbor *neighbor, Link *link, sd_netlink_message_handler_t callback) {
-+        _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
-+        int r;
-+
-+        assert(neighbor);
-+        assert(link);
-+        assert(link->ifindex > 0);
-+        assert(link->manager);
-+        assert(link->manager->rtnl);
-+
-+        if (neighbor->family == AF_UNSPEC)
-+                return log_error_errno(EINVAL, "Neighbor without Address= configured");
-+        if (!neighbor->mac_configured)
-+                return log_error_errno(EINVAL, "Neighbor without MACAddress= configured");
-+
-+        r = sd_rtnl_message_new_neigh(link->manager->rtnl, &req, RTM_NEWNEIGH,
-+                                          link->ifindex, neighbor->family);
-+        if (r < 0)
-+                return log_error_errno(r, "Could not allocate RTM_NEWNEIGH message: %m");
-+
-+        r = sd_rtnl_message_neigh_set_state(req, NUD_PERMANENT);
-+        if (r < 0)
-+                return log_error_errno(r, "Could not set state: %m");
-+
-+        r = sd_netlink_message_set_flags(req, NLM_F_REQUEST | NLM_F_CREATE | NLM_F_REPLACE);
-+        if (r < 0)
-+                return log_error_errno(r, "Could not set flags: %m");
-+
-+        r = sd_netlink_message_append_ether_addr(req, NDA_LLADDR, &neighbor->mac);
-+        if (r < 0)
-+                return log_error_errno(r, "Could not append NDA_LLADDR attribute: %m");
-+
-+        switch (neighbor->family) {
-+        case AF_INET6:
-+                r = sd_netlink_message_append_in6_addr(req, NDA_DST, &neighbor->in_addr.in6);
-+                if (r < 0)
-+                        return log_error_errno(r, "Could not append NDA_DST attribute: %m");
-+                break;
-+        case AF_INET:
-+                r = sd_netlink_message_append_in_addr(req, NDA_DST, &neighbor->in_addr.in);
-+                if (r < 0)
-+                        return log_error_errno(r, "Could not append NDA_DST attribute: %m");
-+                break;
-+        default:
-+                return log_error_errno(EINVAL, "Neighbor with invalid address family");
-+        }
-+
-+        r = sd_netlink_call_async(link->manager->rtnl, req, callback ?: neighbor_handler,
-+                                  link, 0, NULL);
-+        if (r < 0)
-+                return log_error_errno(r, "Could not send rtnetlink message: %m");
-+
-+        link->neighbor_messages++;
-+        link_ref(link);
-+
-+        return 0;
-+}
-+
-+int config_parse_neighbor_address(const char *unit,
-+                                  const char *filename,
-+                                  unsigned line,
-+                                  const char *section,
-+                                  unsigned section_line,
-+                                  const char *lvalue,
-+                                  int ltype,
-+                                  const char *rvalue,
-+                                  void *data,
-+                                  void *userdata) {
-+
-+        Network *network = userdata;
-+        _cleanup_(neighbor_freep) Neighbor *n = NULL;
-+        int r;
-+
-+        assert(filename);
-+        assert(section);
-+        assert(lvalue);
-+        assert(rvalue);
-+        assert(data);
-+
-+        r = neighbor_new_static(network, filename, section_line, &n);
-+        if (r < 0)
-+                return r;
-+
-+        r = in_addr_from_string_auto(rvalue, &n->family, &n->in_addr);
-+        if (r < 0) {
-+                log_syntax(unit, LOG_ERR, filename, line, r, "Neighbor Address is invalid, ignoring assignment: %s", rvalue);
-+                return 0;
-+        }
-+
-+        TAKE_PTR(n);
-+
-+        return 0;
-+}
-+
-+int config_parse_neighbor_hwaddr(const char *unit,
-+                                 const char *filename,
-+                                 unsigned line,
-+                                 const char *section,
-+                                 unsigned section_line,
-+                                 const char *lvalue,
-+                                 int ltype,
-+                                 const char *rvalue,
-+                                 void *data,
-+                                 void *userdata) {
-+
-+        Network *network = userdata;
-+        _cleanup_(neighbor_freep) Neighbor *n = NULL;
-+        int r;
-+
-+        assert(filename);
-+        assert(section);
-+        assert(lvalue);
-+        assert(rvalue);
-+        assert(data);
-+
-+        r = neighbor_new_static(network, filename, section_line, &n);
-+        if (r < 0)
-+                return r;
-+
-+        r = ether_addr_from_string(rvalue, &n->mac);
-+        if (r < 0) {
-+                log_syntax(unit, LOG_ERR, filename, line, r, "Neighbor MACAddress is invalid, ignoring assignment: %s", rvalue);
-+                return 0;
-+        }
-+
-+        n->mac_configured = true;
-+        TAKE_PTR(n);
-+
-+        return 0;
-+}
-diff --git a/src/network/networkd-neighbor.h b/src/network/networkd-neighbor.h
-new file mode 100644
-index 0000000000..30a1f8fe27
---- /dev/null
-+++ b/src/network/networkd-neighbor.h
-@@ -0,0 +1,37 @@
-+/* SPDX-License-Identifier: LGPL-2.1+ */
-+#pragma once
-+
-+#include "sd-netlink.h"
-+
-+#include "conf-parser.h"
-+#include "ether-addr-util.h"
-+#include "in-addr-util.h"
-+#include "list.h"
-+#include "macro.h"
-+
-+typedef struct Neighbor Neighbor;
-+
-+#include "networkd-link.h"
-+#include "networkd-network.h"
-+
-+struct Neighbor {
-+        Network *network;
-+        Link *link;
-+        NetworkConfigSection *section;
-+
-+        int family;
-+        union in_addr_union in_addr;
-+        bool mac_configured;
-+        struct ether_addr mac;
-+
-+        LIST_FIELDS(Neighbor, neighbors);
-+};
-+
-+void neighbor_free(Neighbor *neighbor);
-+
-+DEFINE_TRIVIAL_CLEANUP_FUNC(Neighbor*, neighbor_free);
-+
-+int neighbor_configure(Neighbor *neighbor, Link *link, sd_netlink_message_handler_t callback);
-+
-+CONFIG_PARSER_PROTOTYPE(config_parse_neighbor_address);
-+CONFIG_PARSER_PROTOTYPE(config_parse_neighbor_hwaddr);
-diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf
-index 6ad5257f79..18405149a4 100644
---- a/src/network/networkd-network-gperf.gperf
-+++ b/src/network/networkd-network-gperf.gperf
-@@ -93,6 +93,8 @@ Address.AutoJoin,                       config_parse_address_flags,
- Address.Scope,                          config_parse_address_scope,                     0,                             0
- IPv6AddressLabel.Prefix,                config_parse_address_label_prefix,              0,                             0
- IPv6AddressLabel.Label,                 config_parse_address_label,                     0,                             0
-+Neighbor.Address,                       config_parse_neighbor_address,                  0,                             0
-+Neighbor.MACAddress,                    config_parse_neighbor_hwaddr,                   0,                             0
- RoutingPolicyRule.TypeOfService,        config_parse_routing_policy_rule_tos,           0,                             0
- RoutingPolicyRule.Priority,             config_parse_routing_policy_rule_priority,      0,                             0
- RoutingPolicyRule.Table,                config_parse_routing_policy_rule_table,         0,                             0
-diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c
-index 429aac5e6c..a3b8f0cec4 100644
---- a/src/network/networkd-network.c
-+++ b/src/network/networkd-network.c
-@@ -158,6 +158,10 @@ static int network_load_one(Manager *manager, const char *filename) {
-         if (!network->fdb_entries_by_section)
-                 return log_oom();
- 
-+        network->neighbors_by_section = hashmap_new(&network_config_hash_ops);
-+        if (!network->neighbors_by_section)
-+                log_oom();
-+
-         network->address_labels_by_section = hashmap_new(&network_config_hash_ops);
-         if (!network->address_labels_by_section)
-                 log_oom();
-@@ -256,6 +260,7 @@ static int network_load_one(Manager *manager, const char *filename) {
-                               "Link\0"
-                               "Network\0"
-                               "Address\0"
-+                              "Neighbor\0"
-                               "IPv6AddressLabel\0"
-                               "RoutingPolicyRule\0"
-                               "Route\0"
-@@ -340,6 +345,7 @@ void network_free(Network *network) {
-         IPv6ProxyNDPAddress *ipv6_proxy_ndp_address;
-         RoutingPolicyRule *rule;
-         FdbEntry *fdb_entry;
-+        Neighbor *neighbor;
-         AddressLabel *label;
-         Prefix *prefix;
-         Address *address;
-@@ -393,6 +399,9 @@ void network_free(Network *network) {
-         while ((ipv6_proxy_ndp_address = network->ipv6_proxy_ndp_addresses))
-                 ipv6_proxy_ndp_address_free(ipv6_proxy_ndp_address);
- 
-+        while ((neighbor = network->neighbors))
-+                neighbor_free(neighbor);
-+
-         while ((label = network->address_labels))
-                 address_label_free(label);
- 
-@@ -405,6 +414,7 @@ void network_free(Network *network) {
-         hashmap_free(network->addresses_by_section);
-         hashmap_free(network->routes_by_section);
-         hashmap_free(network->fdb_entries_by_section);
-+        hashmap_free(network->neighbors_by_section);
-         hashmap_free(network->address_labels_by_section);
-         hashmap_free(network->prefixes_by_section);
-         hashmap_free(network->rules_by_section);
-diff --git a/src/network/networkd-network.h b/src/network/networkd-network.h
-index 2d46d393ac..8df18326bb 100644
---- a/src/network/networkd-network.h
-+++ b/src/network/networkd-network.h
-@@ -16,6 +16,7 @@
- #include "networkd-fdb.h"
- #include "networkd-ipv6-proxy-ndp.h"
- #include "networkd-lldp-tx.h"
-+#include "networkd-neighbor.h"
- #include "networkd-radv.h"
- #include "networkd-route.h"
- #include "networkd-routing-policy-rule.h"
-@@ -229,6 +230,7 @@ struct Network {
-         LIST_HEAD(Route, static_routes);
-         LIST_HEAD(FdbEntry, static_fdb_entries);
-         LIST_HEAD(IPv6ProxyNDPAddress, ipv6_proxy_ndp_addresses);
-+        LIST_HEAD(Neighbor, neighbors);
-         LIST_HEAD(AddressLabel, address_labels);
-         LIST_HEAD(Prefix, static_prefixes);
-         LIST_HEAD(RoutingPolicyRule, rules);
-@@ -237,6 +239,7 @@ struct Network {
-         unsigned n_static_routes;
-         unsigned n_static_fdb_entries;
-         unsigned n_ipv6_proxy_ndp_addresses;
-+        unsigned n_neighbors;
-         unsigned n_address_labels;
-         unsigned n_static_prefixes;
-         unsigned n_rules;
-@@ -244,6 +247,7 @@ struct Network {
-         Hashmap *addresses_by_section;
-         Hashmap *routes_by_section;
-         Hashmap *fdb_entries_by_section;
-+        Hashmap *neighbors_by_section;
-         Hashmap *address_labels_by_section;
-         Hashmap *prefixes_by_section;
-         Hashmap *rules_by_section;
--- 
-2.20.1.97.g81188d93c3-goog
-
diff --git a/recipes-core/systemd/systemd/0006-core-fix-the-check-if-CONFIG_CGROUP_BPF-is-on.patch b/recipes-core/systemd/systemd/0006-core-fix-the-check-if-CONFIG_CGROUP_BPF-is-on.patch
deleted file mode 100644
index 3645100..0000000
--- a/recipes-core/systemd/systemd/0006-core-fix-the-check-if-CONFIG_CGROUP_BPF-is-on.patch
+++ /dev/null
@@ -1,86 +0,0 @@
-From 4ea79c18f1e2081d59eaa0f1df479dbc7700779e Mon Sep 17 00:00:00 2001
-From: Ed Tanous <ed.tanous@intel.com>
-Date: Sun, 16 Dec 2018 18:27:06 -0800
-Subject: [PATCH] core: fix the check if CONFIG_CGROUP_BPF is on
-
-Since the commit torvalds/linux@fdb5c4531c1e0e50e609df83f736b6f3a02896e2
-the syscall BPF_PROG_ATTACH return EBADF when CONFIG_CGROUP_BPF is
-turned off and as result the bpf_firewall_supported() returns the
-incorrect value.
-
-This commmit replaces the syscall BPF_PROG_ATTACH with BPF_PROG_DETACH
-which is still work as expected.
-
-Resolves openbmc/linux#159
-See also systemd/systemd#7054
-
-Originally written by:
-Alexander Filippov <a.filippov@yadro.com>
-
-Signed-off-by: Ed Tanous <ed.tanous@intel.com>
----
- src/core/bpf-firewall.c | 14 +++++++-------
- 1 file changed, 7 insertions(+), 7 deletions(-)
-
-diff --git a/src/core/bpf-firewall.c b/src/core/bpf-firewall.c
-index 8b66ef73d..e68b70d0c 100644
---- a/src/core/bpf-firewall.c
-+++ b/src/core/bpf-firewall.c
-@@ -660,7 +660,7 @@ int bpf_firewall_supported(void) {
-          * b) whether the unified hierarchy is being used
-          * c) the BPF implementation in the kernel supports BPF LPM TRIE maps, which we require
-          * d) the BPF implementation in the kernel supports BPF_PROG_TYPE_CGROUP_SKB programs, which we require
--         * e) the BPF implementation in the kernel supports the BPF_PROG_ATTACH call, which we require
-+         * e) the BPF implementation in the kernel supports the BPF_PROG_DETACH call, which we require
-          *
-          */
- 
-@@ -714,7 +714,7 @@ int bpf_firewall_supported(void) {
-          * is turned off at kernel compilation time. This sucks of course: why does it allow us to create a cgroup BPF
-          * program if we can't do a thing with it later?
-          *
--         * We detect this case by issuing the BPF_PROG_ATTACH bpf() call with invalid file descriptors: if
-+         * We detect this case by issuing the BPF_PROG_DETACH bpf() call with invalid file descriptors: if
-          * CONFIG_CGROUP_BPF is turned off, then the call will fail early with EINVAL. If it is turned on the
-          * parameters are validated however, and that'll fail with EBADF then. */
- 
-@@ -724,15 +724,15 @@ int bpf_firewall_supported(void) {
-                 .attach_bpf_fd = -1,
-         };
- 
--        if (bpf(BPF_PROG_ATTACH, &attr, sizeof(attr)) < 0) {
-+        if (bpf(BPF_PROG_DETACH, &attr, sizeof(attr)) < 0) {
-                 if (errno != EBADF) {
--                        log_debug_errno(errno, "Didn't get EBADF from BPF_PROG_ATTACH, BPF firewalling is not supported: %m");
-+                        log_debug_errno(errno, "Didn't get EBADF from BPF_PROG_DETACH, BPF firewalling is not supported: %m");
-                         return supported = BPF_FIREWALL_UNSUPPORTED;
-                 }
- 
-                 /* YAY! */
-         } else {
--                log_debug("Wut? Kernel accepted our invalid BPF_PROG_ATTACH call? Something is weird, assuming BPF firewalling is broken and hence not supported.");
-+                log_debug("Wut? Kernel accepted our invalid BPF_PROG_DETACH call? Something is weird, assuming BPF firewalling is broken and hence not supported.");
-                 return supported = BPF_FIREWALL_UNSUPPORTED;
-         }
- 
-@@ -748,7 +748,7 @@ int bpf_firewall_supported(void) {
-                 .attach_flags = BPF_F_ALLOW_MULTI,
-         };
- 
--        if (bpf(BPF_PROG_ATTACH, &attr, sizeof(attr)) < 0) {
-+        if (bpf(BPF_PROG_DETACH, &attr, sizeof(attr)) < 0) {
-                 if (errno == EBADF) {
-                         log_debug_errno(errno, "Got EBADF when using BPF_F_ALLOW_MULTI, which indicates it is supported. Yay!");
-                         return supported = BPF_FIREWALL_SUPPORTED_WITH_MULTI;
-@@ -761,7 +761,7 @@ int bpf_firewall_supported(void) {
- 
-                 return supported = BPF_FIREWALL_SUPPORTED;
-         } else {
--                log_debug("Wut? Kernel accepted our invalid BPF_PROG_ATTACH+BPF_F_ALLOW_MULTI call? Something is weird, assuming BPF firewalling is broken and hence not supported.");
-+                log_debug("Wut? Kernel accepted our invalid BPF_PROG_DETACH+BPF_F_ALLOW_MULTI call? Something is weird, assuming BPF firewalling is broken and hence not supported.");
-                 return supported = BPF_FIREWALL_UNSUPPORTED;
-         }
- }
--- 
-2.17.1
-
diff --git a/recipes-core/systemd/systemd_%.bbappend b/recipes-core/systemd/systemd_%.bbappend
index 680f4f6..fa6a7ed 100644
--- a/recipes-core/systemd/systemd_%.bbappend
+++ b/recipes-core/systemd/systemd_%.bbappend
@@ -1,23 +1,13 @@
 FILES_${PN}-catalog-extralocales = \
             "${exec_prefix}/lib/systemd/catalog/*.*.catalog"
 PACKAGES =+ "${PN}-catalog-extralocales"
-PACKAGECONFIG_remove = "backlight binfmt firstboot hibernate ima \
-                        localed logind machined polkit quotacheck smack utmp \
-                        vconsole"
+PACKAGECONFIG_remove = "backlight binfmt firstboot gshadow hibernate ima \
+                        localed logind machined nss nss-mymachines nss-resolve \
+                        polkit quotacheck smack utmp vconsole"
+
 FILESEXTRAPATHS_append := "${THISDIR}/${PN}:"
 SRC_URI += "file://default.network"
 SRC_URI += "file://0001-sd-bus-Don-t-automatically-add-ObjectManager.patch"
-SRC_URI += "file://0006-core-fix-the-check-if-CONFIG_CGROUP_BPF-is-on.patch"
-
-# Static neighbor support included in v240 so remove when updated
-SRC_URI += "file://0001-networkd-Track-address-configuration.patch"
-SRC_URI += "file://0002-networkd-Use-only-a-generic-CONFIGURING-state.patch"
-SRC_URI += "file://0003-networkd-Static-neighbor-support.patch"
-
-# Fixes from upstream for openbmc/openbmc#3459
-SRC_URI += "file://0001-timedate-defer-the-property-changed-signal-until-job.patch"
-SRC_URI += "file://0001-timedate-treat-activating-or-inactivating-NTP-client.patch"
-SRC_URI += "file://0002-timedate-refuse-to-set-time-when-previous-request-is.patch"
 
 RRECOMMENDS_${PN} += "obmc-targets"
 FILES_${PN} += "${systemd_unitdir}/network/default.network"
