connman.lists.linux.dev archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] Support to disable IPv4LL fallback
@ 2023-06-04  4:58 Adinath Mhatre
  2023-06-04  4:58 ` [PATCH 1/2] service:config: " Adinath Mhatre
  2023-06-04  4:58 ` [PATCH 2/2] commands: IPv4LL fallback config support Adinath Mhatre
  0 siblings, 2 replies; 3+ messages in thread
From: Adinath Mhatre @ 2023-06-04  4:58 UTC (permalink / raw)
  To: connman

From: Adinath Mhatre <adinath.mhatre@philips.com>

In current design of connman, if a client fails to discover
DHCP server, it will fallback to IPv4LL address.
In some systems it is not desirable.
Therefore, added config, D-Bus API and connmanctl option to disable IPv4LL fallback.

Adinath Mhatre (2):
  service:config: Support to disable IPv4LL fallback
  commands: IPv4LL fallback config support

 client/commands.c               | 50 ++++++++++++++++++---
 doc/config-format.txt           |  5 +++
 doc/connman-service.config.5.in |  6 +++
 doc/connmanctl.1.in             | 10 +++--
 doc/service-api.txt             | 10 +++++
 src/config.c                    | 23 ++++++++++
 src/connman.h                   |  2 +
 src/dhcp.c                      |  7 +++
 src/ipconfig.c                  | 80 +++++++++++++++++++++++++++++++--
 test/set-ipv4-method            | 34 +++++++++++---
 10 files changed, 206 insertions(+), 21 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH 1/2] service:config: Support to disable IPv4LL fallback
  2023-06-04  4:58 [PATCH 0/2] Support to disable IPv4LL fallback Adinath Mhatre
@ 2023-06-04  4:58 ` Adinath Mhatre
  2023-06-04  4:58 ` [PATCH 2/2] commands: IPv4LL fallback config support Adinath Mhatre
  1 sibling, 0 replies; 3+ messages in thread
From: Adinath Mhatre @ 2023-06-04  4:58 UTC (permalink / raw)
  To: connman

From: Adinath Mhatre <adinath.mhatre@philips.com>

In current design of connman, if a client fails to discover
DHCP server, it will fallback to IPv4LL address.
In some systems it is not desirable.
Therefore, added config and D-Bus API to disable IPv4LL fallback.

Signed-off-by: Adinath Mhatre <adinath.mhatre@philips.com>
---
 doc/config-format.txt           |  5 +++
 doc/connman-service.config.5.in |  6 +++
 doc/service-api.txt             | 10 +++++
 src/config.c                    | 23 ++++++++++
 src/connman.h                   |  2 +
 src/dhcp.c                      |  7 +++
 src/ipconfig.c                  | 80 +++++++++++++++++++++++++++++++--
 test/set-ipv4-method            | 34 +++++++++++---
 8 files changed, 157 insertions(+), 10 deletions(-)

diff --git a/doc/config-format.txt b/doc/config-format.txt
index cdde9cbc..a870a68c 100644
--- a/doc/config-format.txt
+++ b/doc/config-format.txt
@@ -42,6 +42,11 @@ Allowed fields:
   Example: 192.168.1.2/24/192.168.1.1
            192.168.200.100/255.255.255.0/192.168.200.1
            10.0.0.2/24
+- IPv4.FallbackIPv4LL: Option to disable IPv4LL fallback.
+  IPv4LL fallback is applied when an IPv4 address could not be assigned
+  using DHCP method.
+  If set "false", an IPv4LL address will not be assigned if DHCP failed.
+  Default value is "true".
 - IPv6: The IPv6 address, prefix length and gateway. Format of the entry
   is network/prefixlen/gateway. For IPv6 addresses only prefix length is
   accepted. The gateway can be omitted if necessary.
diff --git a/doc/connman-service.config.5.in b/doc/connman-service.config.5.in
index 701f61f9..e83f9d25 100644
--- a/doc/connman-service.config.5.in
+++ b/doc/connman-service.config.5.in
@@ -48,6 +48,12 @@ If set to \fBdhcp\fP, dhcp will be used to obtain the network settings.
 \fInetmask\fP can be specified as length of the mask rather than the
 mask itself. The gateway can be omitted when using a static IP.
 .TP
+.B IPv4.FallbackIPv4LL=true \fR|\fB false
+IPv4LL fallback is applied when an IPv4 address could not be assigned
+using DHCP method.
+If set \fBfalse\fP, an IPv4LL address will not be assigned if DHCP failed.
+Default value is \fBtrue\fP.
+.TP
 .BI IPv6=off \ \fR|\  auto\ \fR|\  network / prefixlength / gateway
 IPv6 settings for the service. If set to \fBoff\fP, IPv6 won't be used.
 If set to \fBauto\fP, settings will be obtained from the network.
diff --git a/doc/service-api.txt b/doc/service-api.txt
index c0d5adbb..4f329903 100644
--- a/doc/service-api.txt
+++ b/doc/service-api.txt
@@ -340,6 +340,16 @@ Properties	string State [readonly]
 
 				The current configured IPv4 gateway.
 
+			boolean FallbackIPv4LL [readonly]
+
+				The current IPv4LL fallback configuration. The
+				value has only meaning if Method is set to "dhcp".
+
+				Value "false" means an IPv4LL address will
+				not be assigned if DHCP failed.
+
+				Default value is "true".
+
 		dict IPv4.Configuration [readwrite]
 
 			Same values as IPv4 property. The IPv4 represents
diff --git a/src/config.c b/src/config.c
index 33fdc737..476e0d37 100644
--- a/src/config.c
+++ b/src/config.c
@@ -67,6 +67,7 @@ struct connman_config_service {
 	char *ipv4_address;
 	char *ipv4_netmask;
 	char *ipv4_gateway;
+	bool ipv4_fallback_ll;
 	char *ipv6_address;
 	unsigned char ipv6_prefix_length;
 	char *ipv6_gateway;
@@ -117,6 +118,7 @@ static bool cleanup = false;
 #define SERVICE_KEY_MDNS               "mDNS"
 
 #define SERVICE_KEY_IPv4               "IPv4"
+#define SERVICE_KEY_IPv4_FALLBACK_LL   "IPv4.FallbackIPv4LL"
 #define SERVICE_KEY_IPv6               "IPv6"
 #define SERVICE_KEY_IPv6_PRIVACY       "IPv6.Privacy"
 #define SERVICE_KEY_MAC                "MAC"
@@ -153,6 +155,7 @@ static const char *service_possible_keys[] = {
 	SERVICE_KEY_SECURITY,
 	SERVICE_KEY_HIDDEN,
 	SERVICE_KEY_IPv4,
+	SERVICE_KEY_IPv4_FALLBACK_LL,
 	SERVICE_KEY_IPv6,
 	SERVICE_KEY_IPv6_PRIVACY,
 	SERVICE_KEY_MAC,
@@ -444,6 +447,17 @@ static bool load_service_generic(GKeyFile *keyfile,
 		g_free(str);
 	}
 
+	service->ipv4_fallback_ll = true;
+	str = g_key_file_get_value(keyfile, group, SERVICE_KEY_IPv4_FALLBACK_LL, NULL);
+
+	if (str) {
+		str = g_strchomp(str);
+		if (strcmp(str, "false") == 0)
+			service->ipv4_fallback_ll = false;
+
+		g_free(str);
+	}
+
 	str =  __connman_config_get_string(keyfile, group, SERVICE_KEY_IPv6, NULL);
 	if (str && check_address(str, &service->ipv6_address)) {
 		long int value;
@@ -1380,6 +1394,15 @@ static int try_provision_service(struct connman_config_service *config,
 		connman_ipaddress_free(address);
 	}
 
+	if (g_ascii_strcasecmp(config->ipv4_address, "dhcp") == 0) {
+		struct connman_ipconfig *ipconfig;
+
+		ipconfig = __connman_service_get_ip4config(service);
+		if (ipconfig)
+			__connman_ipconfig_set_ipv4_fallback_ll(ipconfig,
+							config->ipv4_fallback_ll);
+	}
+
 	__connman_service_disconnect(service);
 
 	service_id = connman_service_get_identifier(service);
diff --git a/src/connman.h b/src/connman.h
index b955d98b..dae79162 100644
--- a/src/connman.h
+++ b/src/connman.h
@@ -435,6 +435,8 @@ bool __connman_ipconfig_ipv6_is_enabled(struct connman_ipconfig *ipconfig);
 
 int __connman_ipconfig_set_rp_filter();
 void __connman_ipconfig_unset_rp_filter(int old_value);
+bool __connman_ipconfig_get_ipv4_fallback_ll(struct connman_ipconfig *ipconfig);
+int __connman_ipconfig_set_ipv4_fallback_ll(struct connman_ipconfig *ipconfig, bool val);
 
 #include <connman/utsname.h>
 
diff --git a/src/dhcp.c b/src/dhcp.c
index 18dbab27..2766252e 100644
--- a/src/dhcp.c
+++ b/src/dhcp.c
@@ -252,6 +252,7 @@ static gboolean dhcp_retry_cb(gpointer user_data)
 static void no_lease_cb(GDHCPClient *dhcp_client, gpointer user_data)
 {
 	struct connman_dhcp *dhcp = user_data;
+	struct connman_service *service;
 	int err;
 
 	DBG("No lease available ipv4ll %d client %p", dhcp->ipv4ll_running,
@@ -266,6 +267,12 @@ static void no_lease_cb(GDHCPClient *dhcp_client, gpointer user_data)
 	if (dhcp->ipv4ll_running)
 		return;
 
+	if (!__connman_ipconfig_get_ipv4_fallback_ll(dhcp->ipconfig)) {
+		service = connman_service_lookup_from_network(dhcp->network);
+		__connman_service_save(service);
+		return;
+	}
+
 	err = ipv4ll_start_client(dhcp);
 	if (err < 0)
 		DBG("Cannot start ipv4ll client (%d/%s)", err, strerror(-err));
diff --git a/src/ipconfig.c b/src/ipconfig.c
index 34b1724a..577d7a28 100644
--- a/src/ipconfig.c
+++ b/src/ipconfig.c
@@ -55,6 +55,7 @@ struct connman_ipconfig {
 	int ipv6_privacy_config;
 	char *last_dhcp_address;
 	char **last_dhcpv6_prefixes;
+	bool ipv4_fallback_ll;
 };
 
 struct connman_ipdevice {
@@ -451,6 +452,24 @@ bool __connman_ipconfig_ipv6_privacy_enabled(struct connman_ipconfig *ipconfig)
 	return ipconfig->ipv6_privacy_config == 0 ? FALSE : TRUE;
 }
 
+bool __connman_ipconfig_get_ipv4_fallback_ll(struct connman_ipconfig *ipconfig)
+{
+	if (!ipconfig)
+		return true;
+
+	return ipconfig->ipv4_fallback_ll;
+}
+
+int __connman_ipconfig_set_ipv4_fallback_ll(struct connman_ipconfig *ipconfig, bool val)
+{
+	if (!ipconfig)
+		return -EINVAL;
+
+	ipconfig->ipv4_fallback_ll = val;
+
+	return 0;
+}
+
 bool __connman_ipconfig_ipv6_is_enabled(struct connman_ipconfig *ipconfig)
 {
 	struct connman_ipdevice *ipdevice;
@@ -1299,6 +1318,7 @@ struct connman_ipconfig *__connman_ipconfig_create(int index,
 	}
 
 	ipconfig->system = connman_ipaddress_alloc(AF_INET);
+	ipconfig->ipv4_fallback_ll = true;
 
 	ipconfig_set_p2p(index, ipconfig);
 
@@ -1921,8 +1941,14 @@ void __connman_ipconfig_append_ipv4(struct connman_ipconfig *ipconfig,
 
 	case CONNMAN_IPCONFIG_METHOD_AUTO:
 	case CONNMAN_IPCONFIG_METHOD_MANUAL:
+		append_addr = ipconfig->system;
+		break;
+
 	case CONNMAN_IPCONFIG_METHOD_DHCP:
 		append_addr = ipconfig->system;
+
+		connman_dbus_dict_append_basic(iter, "FallbackIPv4LL",
+						DBUS_TYPE_BOOLEAN, &ipconfig->ipv4_fallback_ll);
 		break;
 	}
 
@@ -2063,9 +2089,14 @@ void __connman_ipconfig_append_ipv4config(struct connman_ipconfig *ipconfig,
 	switch (ipconfig->method) {
 	case CONNMAN_IPCONFIG_METHOD_UNKNOWN:
 	case CONNMAN_IPCONFIG_METHOD_OFF:
-	case CONNMAN_IPCONFIG_METHOD_DHCP:
 	case CONNMAN_IPCONFIG_METHOD_AUTO:
 		return;
+
+	case CONNMAN_IPCONFIG_METHOD_DHCP:
+		connman_dbus_dict_append_basic(iter, "FallbackIPv4LL",
+						DBUS_TYPE_BOOLEAN, &ipconfig->ipv4_fallback_ll);
+		return;
+
 	case CONNMAN_IPCONFIG_METHOD_FIXED:
 	case CONNMAN_IPCONFIG_METHOD_MANUAL:
 		break;
@@ -2103,6 +2134,7 @@ int __connman_ipconfig_set_config(struct connman_ipconfig *ipconfig,
 	int prefix_length = 0, privacy = 0;
 	DBusMessageIter dict;
 	int type = -1;
+	dbus_bool_t fallback_ipv4ll = 1;
 
 	if (dbus_message_iter_get_arg_type(array) != DBUS_TYPE_ARRAY)
 		return -EINVAL;
@@ -2166,15 +2198,20 @@ int __connman_ipconfig_set_config(struct connman_ipconfig *ipconfig,
 
 			dbus_message_iter_get_basic(&value, &privacy_string);
 			privacy = string2privacy(privacy_string);
+		} else if (g_str_equal(key, "FallbackIPv4LL")) {
+			if (type != DBUS_TYPE_BOOLEAN)
+				return -EINVAL;
+
+			dbus_message_iter_get_basic(&value, &fallback_ipv4ll);
 		}
 
 		dbus_message_iter_next(&dict);
 	}
 
 	DBG("method %d address %s netmask %s gateway %s prefix_length %d "
-		"privacy %s",
+		"privacy %s fallback_ipv4ll %s",
 		method, address, netmask, gateway, prefix_length,
-		privacy_string);
+		privacy_string, fallback_ipv4ll ? "true" : "false");
 
 	switch (method) {
 	case CONNMAN_IPCONFIG_METHOD_UNKNOWN:
@@ -2237,6 +2274,7 @@ int __connman_ipconfig_set_config(struct connman_ipconfig *ipconfig,
 			return -EOPNOTSUPP;
 
 		ipconfig->method = method;
+		ipconfig->ipv4_fallback_ll = fallback_ipv4ll;
 		break;
 	}
 
@@ -2283,6 +2321,7 @@ void __connman_ipconfig_load(struct connman_ipconfig *ipconfig,
 	struct ipconfig_store is = { .file = keyfile,
 				     .group = identifier,
 				     .prefix = prefix };
+	bool skip_fallback_ipv4ll = false;
 
 	DBG("ipconfig %p identifier %s", ipconfig, identifier);
 
@@ -2364,6 +2403,13 @@ void __connman_ipconfig_load(struct connman_ipconfig *ipconfig,
 		 */
 		__connman_ipconfig_set_method(ipconfig,
 					CONNMAN_IPCONFIG_METHOD_DHCP);
+
+		/*
+		 * If IPv4 method is AUTO then we enable
+		 * IPv4LL fallback.
+		 */
+		ipconfig->ipv4_fallback_ll = true;
+		skip_fallback_ipv4ll = true;
 		/* fall through */
 
 	case CONNMAN_IPCONFIG_METHOD_DHCP:
@@ -2373,6 +2419,26 @@ void __connman_ipconfig_load(struct connman_ipconfig *ipconfig,
 			ipconfig->last_dhcp_address = str;
 		}
 
+		if (skip_fallback_ipv4ll)
+			break;
+
+		ipconfig->ipv4_fallback_ll = true;
+
+		char *pk, *valstr;
+
+		pk = g_strdup_printf("%s%s", is.prefix, "fallback_ipv4ll");
+		valstr = g_key_file_get_value(is.file, is.group, pk, NULL);
+		if (!valstr) {
+			g_free(pk);
+			break;
+		}
+
+		valstr = g_strchomp(valstr);
+		if (strcmp(valstr, "false") == 0)
+			ipconfig->ipv4_fallback_ll = false;
+
+		g_free(valstr);
+		g_free(pk);
 		break;
 	}
 }
@@ -2407,6 +2473,14 @@ void __connman_ipconfig_save(struct connman_ipconfig *ipconfig,
 		break;
 
 	case CONNMAN_IPCONFIG_METHOD_DHCP:
+		if (ipconfig->type == CONNMAN_IPCONFIG_TYPE_IPV4) {
+			char *pk;
+
+			pk = g_strdup_printf("%s%s", is.prefix, "fallback_ipv4ll");
+			g_key_file_set_boolean(is.file, is.group, pk, ipconfig->ipv4_fallback_ll);
+			g_free(pk);
+		}
+
 		store_set_str(&is, "DHCP.LastAddress",
 				ipconfig->last_dhcp_address);
 		/* fall through */
diff --git a/test/set-ipv4-method b/test/set-ipv4-method
index 09c194d7..3e949681 100755
--- a/test/set-ipv4-method
+++ b/test/set-ipv4-method
@@ -6,8 +6,20 @@ import dbus
 def make_variant(string):
 	return dbus.String(string, variant_level=1)
 
+def make_bool_variant(string):
+        if string == "true":
+                return dbus.Boolean(1)
+        if string == "false":
+                return dbus.Boolean(0)
+        else:
+                print("Invalid argument")
+                sys.exit(1)
+
 def print_usage():
-	print("Usage: %s <service> [off|dhcp|manual <address> [netmask] [gateway]]" % (sys.argv[0]))
+	print(
+                "Usage: %s <service> [off|dhcp|manual [fallback_ipv4ll=true|false] "\
+                "[<address> [netmask] [gateway]]]" % (sys.argv[0])
+        )
 
 
 if (len(sys.argv) < 3):
@@ -24,12 +36,20 @@ properties = service.GetProperties()
 print("Setting method %s for %s" % (sys.argv[2], sys.argv[1]))
 
 ipv4_configuration = { "Method": make_variant(sys.argv[2]) }
-if (len(sys.argv) > 3):
-	ipv4_configuration["Address"] = make_variant(sys.argv[3])
-if (len(sys.argv) > 4):
-	ipv4_configuration["Netmask"] = make_variant(sys.argv[4])
-if (len(sys.argv) > 5):
-        ipv4_configuration["Gateway"] = make_variant(sys.argv[5])
+if (sys.argv[2] == "dhcp") and (len(sys.argv) > 3):
+        if "fallback_ipv4ll=" in sys.argv[3]:
+                bool_val = sys.argv[3].split("fallback_ipv4ll=", 1)[1]
+                ipv4_configuration["FallbackIPv4LL"] = make_bool_variant(bool_val)
+        else:
+                print("Invalid argument")
+                sys.exit(1)
+else:
+	if (len(sys.argv) > 3):
+		ipv4_configuration["Address"] = make_variant(sys.argv[3])
+	if (len(sys.argv) > 4):
+		ipv4_configuration["Netmask"] = make_variant(sys.argv[4])
+	if (len(sys.argv) > 5):
+		ipv4_configuration["Gateway"] = make_variant(sys.argv[5])
 
 service.SetProperty("IPv4.Configuration", ipv4_configuration)
 print("New IPv4.Configuration: ", ipv4_configuration)
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH 2/2] commands: IPv4LL fallback config support
  2023-06-04  4:58 [PATCH 0/2] Support to disable IPv4LL fallback Adinath Mhatre
  2023-06-04  4:58 ` [PATCH 1/2] service:config: " Adinath Mhatre
@ 2023-06-04  4:58 ` Adinath Mhatre
  1 sibling, 0 replies; 3+ messages in thread
From: Adinath Mhatre @ 2023-06-04  4:58 UTC (permalink / raw)
  To: connman

From: Adinath Mhatre <adinath.mhatre@philips.com>

Added support to set IPv4LL fallback configuration
from connmanctl.

Signed-off-by: Adinath Mhatre <adinath.mhatre@philips.com>
---
 client/commands.c   | 50 ++++++++++++++++++++++++++++++++++++++-------
 doc/connmanctl.1.in | 10 +++++----
 2 files changed, 49 insertions(+), 11 deletions(-)

diff --git a/client/commands.c b/client/commands.c
index 53cc14c8..c967102f 100644
--- a/client/commands.c
+++ b/client/commands.c
@@ -985,18 +985,53 @@ static void config_append_ipv4(DBusMessageIter *iter,
 {
 	struct config_append *append = user_data;
 	char **opts = append->opts;
-	int i = 0;
 
 	if (!opts)
 		return;
 
-	while (opts[i] && ipv4[i]) {
-		__connmanctl_dbus_append_dict_entry(iter, ipv4[i],
-				DBUS_TYPE_STRING, &opts[i]);
-		i++;
+	append->values = 1;
+
+	if (g_strcmp0(opts[0], "dhcp") == 0) {
+		dbus_bool_t val;
+
+		append->values = 2;
+
+		if (opts[1]) {
+			switch (parse_boolean(opts[1])) {
+			case 1:
+				val = TRUE;
+				break;
+			case 0:
+				val = FALSE;
+				break;
+			default:
+				fprintf(stderr, "Error %s: %s\n", opts[1], strerror(EINVAL));
+				return;
+			}
+
+			__connmanctl_dbus_append_dict_entry(iter, "FallbackIPv4LL",
+						DBUS_TYPE_BOOLEAN, &val);
+		}
+
+	} else if (g_strcmp0(opts[0], "manual") == 0) {
+		int i = 1;
+
+		while (opts[i] && ipv4[i]) {
+			__connmanctl_dbus_append_dict_entry(iter, ipv4[i],
+						DBUS_TYPE_STRING, &opts[i]);
+			i++;
+		}
+
+		append->values = i;
+
+	} else if (g_strcmp0(opts[0], "off") != 0) {
+		fprintf(stderr, "Error %s: %s\n", opts[0], strerror(EINVAL));
+
+		return;
 	}
 
-	append->values = i;
+	__connmanctl_dbus_append_dict_entry(iter, "Method", DBUS_TYPE_STRING,
+				&opts[0]);
 }
 
 static void config_append_ipv6(DBusMessageIter *iter, void *user_data)
@@ -2435,7 +2470,8 @@ static struct connman_option config_options[] = {
 	{"proxy", 'x', "direct|auto <URL>|manual <URL1> [<URL2>] [...]\n"
 	               "\t\t\t[exclude <exclude1> [<exclude2>] [...]]"},
 	{"autoconnect", 'a', "yes|no"},
-	{"ipv4", 'i', "off|dhcp|manual <address> <netmask> <gateway>"},
+	{"ipv4", 'i', "off|dhcp [true|false]|\n"
+		      "\t\t\tmanual <address> <netmask> <gateway>"},
 	{"remove", 'r', "                 Remove service"},
 	{ NULL, }
 };
diff --git a/doc/connmanctl.1.in b/doc/connmanctl.1.in
index d87472c3..00fa4208 100644
--- a/doc/connmanctl.1.in
+++ b/doc/connmanctl.1.in
@@ -164,11 +164,13 @@ Config Options:
 Sets the autoconnect property of the service.
 .PP
 .TP
-.BR ipv4\ off \ |\  dhcp \ |\  manual\ \fIaddress\ netmask\ gateway
+.BR ipv4\ off \ |\  dhcp \ <\fIfallback-ipv4ll\fR>\ |\  manual\ \fIaddress\ netmask\ gateway
 Configures the IPv4 settings for the service. The argument
-\fBoff\fR means that IPv4 won't be used, \fBdhcp\fR means that
-dhcp will be used to get the settings and \fBmanual\fR means
-that the given arguments will be used as IPv4 settings.
+\fBoff\fR means that IPv4 won't be used, \fBdhcp\fR means that dhcp will be used
+to get the settings. \fIfallback-ipv4ll\fR is boolean parameter.
+if set \fBfalse\fR, an IPv4LL address will not be assigned if DHCP failed.
+Default is \fBtrue\fR. \fBmanual\fR means that the given arguments will be
+used as IPv4 settings.
 .IR address ,\  netmask " and " gateway
 must be valid IPv4 addresses. See the \fBEXAMPLE\fR section
 of this man page for details.
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2023-06-04  4:58 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-06-04  4:58 [PATCH 0/2] Support to disable IPv4LL fallback Adinath Mhatre
2023-06-04  4:58 ` [PATCH 1/2] service:config: " Adinath Mhatre
2023-06-04  4:58 ` [PATCH 2/2] commands: IPv4LL fallback config support Adinath Mhatre

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).