--- /dev/null
+From: Sven Eckelmann <sven@narfation.org>
+Date: Mon, 15 Feb 2021 20:52:17 +0100
+Subject: alfred: Allow start of server without valid interface
+
+The alfred server always needs interfaces to operate on. But these
+interfaces might not exist at the moment when the daemon process is
+started. This caused an error and stopped the process.
+
+But alfred is able to deal with interfaces which disappeared at runtime but
+existed at startup. To force a similar behavior for the alfred startup, the
+parameter "--force" or "-f" is introduced.
+
+Signed-off-by: Sven Eckelmann <sven@narfation.org>
+Forwarded: https://patchwork.open-mesh.org/project/b.a.t.m.a.n./patch/20210215200126.140253-4-sven@narfation.org/
+
+diff --git a/alfred.h b/alfred.h
+index c64ff17ab9be8a16b3e1c86070b93235c226a004..ac082536bd6565756835489194be9b80fe0dd653 100644
+--- a/alfred.h
++++ b/alfred.h
+@@ -117,6 +117,7 @@ struct globals {
+ int clientmode_version;
+ uint8_t verbose:1;
+ uint8_t ipv4mode:1;
++ uint8_t force:1;
+
+ int unix_sock;
+ const char *unix_path;
+diff --git a/main.c b/main.c
+index f25b6cc11975b8523abf6c59b77a86e94684b03b..e190d4274a0fe2abdb2c462a5bdefb3e199d4797 100644
+--- a/main.c
++++ b/main.c
+@@ -164,6 +164,7 @@ static struct globals *alfred_init(int argc, char *argv[])
+ {"version", no_argument, NULL, 'v'},
+ {"verbose", no_argument, NULL, 'd'},
+ {"sync-period", required_argument, NULL, 'p'},
++ {"force", no_argument, NULL, 'f'},
+ {NULL, 0, NULL, 0},
+ };
+
+@@ -184,6 +185,7 @@ static struct globals *alfred_init(int argc, char *argv[])
+ globals->unix_path = ALFRED_SOCK_PATH_DEFAULT;
+ globals->verbose = false;
+ globals->ipv4mode = false;
++ globals->force = false;
+ globals->update_command = NULL;
+ globals->sync_period.tv_sec = ALFRED_INTERVAL;
+ globals->sync_period.tv_nsec = 0;
+@@ -191,7 +193,7 @@ static struct globals *alfred_init(int argc, char *argv[])
+
+ time_random_seed();
+
+- while ((opt = getopt_long(argc, argv, "ms:r:hi:b:vV:M:I:u:dc:p:4:", long_options,
++ while ((opt = getopt_long(argc, argv, "ms:r:hi:b:vV:M:I:u:dc:p:4:f", long_options,
+ &opt_ind)) != -1) {
+ switch (opt) {
+ case 'r':
+@@ -273,6 +275,9 @@ static struct globals *alfred_init(int argc, char *argv[])
+ inet_pton(AF_INET, optarg, &alfred_mcast.ipv4);
+ printf(" ** IPv4 Multicast Mode: %x\n", alfred_mcast.ipv4.s_addr);
+ break;
++ case 'f':
++ globals->force = true;
++ break;
+ case 'h':
+ default:
+ alfred_usage();
+diff --git a/man/alfred.8 b/man/alfred.8
+index 25591be9ece1f8de572be8f639576861e318005f..e965db8260086cc83bc78ad95f97bc368a6cb170 100644
+--- a/man/alfred.8
++++ b/man/alfred.8
+@@ -72,6 +72,9 @@ Collect data from the network and prints it on the network
+ \fB\-d\fP, \fB\-\-verbose\fP
+ Show extra information in the data output
+ .TP
++\fB\-d\fP, \fB\-\-force\fP
++Start server even when batman-adv or interface(s) are not yet available.
++.TP
+ \fB\-V\fP, \fB\-\-req\-version\fP \fIversion\fP
+ Specify the data version set for \fB\-s\fP
+
+diff --git a/server.c b/server.c
+index eb2bc8aeb787e4bf028c8f9e3a523a18c6992be1..b4925e7e16ba7465662a5dbf12432916fed8bd03 100644
+--- a/server.c
++++ b/server.c
+@@ -386,14 +386,15 @@ int alfred_server(struct globals *globals)
+ }
+
+ if (strcmp(globals->mesh_iface, "none") != 0 &&
+- batadv_interface_check(globals->mesh_iface) < 0) {
++ batadv_interface_check(globals->mesh_iface) < 0 &&
++ !globals->force) {
+ fprintf(stderr, "Can't start server: batman-adv interface %s not found\n",
+ globals->mesh_iface);
+ return -1;
+ }
+
+ num_socks = netsock_open_all(globals);
+- if (num_socks <= 0) {
++ if (num_socks <= 0 && !globals->force) {
+ fprintf(stderr, "Failed to open interfaces\n");
+ return -1;
+ }