[PATCH] zcip: add support for DoIP/ISO 13400 timings

Ricardo Leite ricardo.leite at criticaltechworks.com
Wed Mar 10 09:23:33 UTC 2021


DoIP requires fast IP assignment, faster than what RFC 3927 can
guarantee, and so it defines its' own AutoIP timing parameters

Add a compile-time option to use DoIP timing parameters instead of
default RFC 3927 parameters. This option is useful for use of zcip in
automotive use-cases. In pratice, it decreases AutoIP allocation time
from ~10s to ~2s, at the expense of less resilience to collisions

Signed-off-by: Ricardo Leite <ricardo.leite at criticaltechworks.com>
---
 configs/TEST_nommu_defconfig    |  1 +
 configs/TEST_noprintf_defconfig |  1 +
 configs/TEST_rh9_defconfig      |  1 +
 configs/android2_defconfig      |  1 +
 configs/android_502_defconfig   |  1 +
 configs/android_defconfig       |  1 +
 configs/android_ndk_defconfig   |  1 +
 configs/cygwin_defconfig        |  1 +
 configs/freebsd_defconfig       |  1 +
 networking/zcip.c               | 25 ++++++++++++++++++++++++-
 10 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/configs/TEST_nommu_defconfig b/configs/TEST_nommu_defconfig
index 415f5a802..3f8ca40d7 100644
--- a/configs/TEST_nommu_defconfig
+++ b/configs/TEST_nommu_defconfig
@@ -769,6 +769,7 @@ CONFIG_FEATURE_WGET_STATUSBAR=y
 CONFIG_FEATURE_WGET_AUTHENTICATION=y
 CONFIG_FEATURE_WGET_LONG_OPTIONS=y
 CONFIG_ZCIP=y
+# CONFIG_ZCIP_USE_ISO_13400_TIMINGS is not set
 CONFIG_TCPSVD=y
 CONFIG_TUNCTL=y
 CONFIG_FEATURE_TUNCTL_UG=y
diff --git a/configs/TEST_noprintf_defconfig b/configs/TEST_noprintf_defconfig
index 9b378fd55..5cfd5b3d7 100644
--- a/configs/TEST_noprintf_defconfig
+++ b/configs/TEST_noprintf_defconfig
@@ -781,6 +781,7 @@ CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS=""
 # CONFIG_FEATURE_WGET_AUTHENTICATION is not set
 # CONFIG_FEATURE_WGET_LONG_OPTIONS is not set
 # CONFIG_ZCIP is not set
+# CONFIG_ZCIP_USE_ISO_13400_TIMINGS is not set
 
 #
 # Print Utilities
diff --git a/configs/TEST_rh9_defconfig b/configs/TEST_rh9_defconfig
index 4ac62b9da..1fe074e79 100644
--- a/configs/TEST_rh9_defconfig
+++ b/configs/TEST_rh9_defconfig
@@ -791,6 +791,7 @@ CONFIG_FEATURE_WGET_AUTHENTICATION=y
 CONFIG_FEATURE_WGET_LONG_OPTIONS=y
 CONFIG_FEATURE_WGET_TIMEOUT=y
 CONFIG_ZCIP=y
+# CONFIG_ZCIP_USE_ISO_13400_TIMINGS is not set
 
 #
 # Print Utilities
diff --git a/configs/android2_defconfig b/configs/android2_defconfig
index d4b8f1616..eceabbc20 100644
--- a/configs/android2_defconfig
+++ b/configs/android2_defconfig
@@ -828,6 +828,7 @@ CONFIG_FEATURE_WGET_AUTHENTICATION=y
 # CONFIG_FEATURE_WGET_LONG_OPTIONS is not set
 CONFIG_FEATURE_WGET_TIMEOUT=y
 # CONFIG_ZCIP is not set
+# CONFIG_ZCIP_USE_ISO_13400_TIMINGS is not set
 
 #
 # Print Utilities
diff --git a/configs/android_502_defconfig b/configs/android_502_defconfig
index 503157c12..c5600fecc 100644
--- a/configs/android_502_defconfig
+++ b/configs/android_502_defconfig
@@ -970,6 +970,7 @@ CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="-R -n"
 CONFIG_UDPSVD=y
 CONFIG_VCONFIG=y
 # CONFIG_ZCIP is not set
+# CONFIG_ZCIP_USE_ISO_13400_TIMINGS is not set
 
 #
 # Print Utilities
diff --git a/configs/android_defconfig b/configs/android_defconfig
index 92a66048a..c1d38328b 100644
--- a/configs/android_defconfig
+++ b/configs/android_defconfig
@@ -858,6 +858,7 @@ CONFIG_FEATURE_WGET_AUTHENTICATION=y
 # CONFIG_FEATURE_WGET_LONG_OPTIONS is not set
 CONFIG_FEATURE_WGET_TIMEOUT=y
 # CONFIG_ZCIP is not set
+# CONFIG_ZCIP_USE_ISO_13400_TIMINGS is not set
 
 #
 # Print Utilities
diff --git a/configs/android_ndk_defconfig b/configs/android_ndk_defconfig
index 03d497d2e..641807585 100644
--- a/configs/android_ndk_defconfig
+++ b/configs/android_ndk_defconfig
@@ -885,6 +885,7 @@ CONFIG_FEATURE_WGET_AUTHENTICATION=y
 # CONFIG_FEATURE_WGET_LONG_OPTIONS is not set
 CONFIG_FEATURE_WGET_TIMEOUT=y
 # CONFIG_ZCIP is not set
+# CONFIG_ZCIP_USE_ISO_13400_TIMINGS is not set
 
 #
 # Print Utilities
diff --git a/configs/cygwin_defconfig b/configs/cygwin_defconfig
index c09bc9281..30c90d587 100644
--- a/configs/cygwin_defconfig
+++ b/configs/cygwin_defconfig
@@ -831,6 +831,7 @@ CONFIG_FEATURE_WGET_AUTHENTICATION=y
 CONFIG_FEATURE_WGET_LONG_OPTIONS=y
 CONFIG_FEATURE_WGET_TIMEOUT=y
 # CONFIG_ZCIP is not set
+# CONFIG_ZCIP_USE_ISO_13400_TIMINGS is not set
 
 #
 # Print Utilities
diff --git a/configs/freebsd_defconfig b/configs/freebsd_defconfig
index 6cbd54895..c09197be3 100644
--- a/configs/freebsd_defconfig
+++ b/configs/freebsd_defconfig
@@ -810,6 +810,7 @@ CONFIG_FEATURE_WGET_AUTHENTICATION=y
 CONFIG_FEATURE_WGET_LONG_OPTIONS=y
 CONFIG_FEATURE_WGET_TIMEOUT=y
 # CONFIG_ZCIP is not set
+# CONFIG_ZCIP_USE_ISO_13400_TIMINGS is not set
 
 #
 # Print Utilities
diff --git a/networking/zcip.c b/networking/zcip.c
index 311dfbe4c..5116483d9 100644
--- a/networking/zcip.c
+++ b/networking/zcip.c
@@ -24,6 +24,15 @@
 //config:
 //config:	See http://www.zeroconf.org for further details, and "zcip.script"
 //config:	in the busybox examples.
+//config:
+//config:config ZCIP_USE_ISO_13400_TIMINGS
+//config:	bool "Use ISO 13400 (DoIP) timings"
+//config:	default y
+//config:	depends on ZCIP
+//config:	help
+//config:	Use timings from ISO 13400-2 (for DoIP) instead of RFC 3927,
+//config:	which dramatically speeds up AutoIP allocation time at the cost
+//config:	of less resilience to collisions.
 
 //applet:IF_ZCIP(APPLET(zcip, BB_DIR_SBIN, BB_SUID_DROP))
 
@@ -73,12 +82,26 @@ struct arp_packet {
 enum {
 	/* 0-1 seconds before sending 1st probe */
 	PROBE_WAIT = 1,
+
+#if ENABLE_ZCIP_USE_ISO_13400_TIMINGS
+	/**
+	 * DoIP-specific timings, see ISO 13400-2, Section 9.1.2.2, Table 15
+	 */
+	/* 0-1 seconds between probes */
+	PROBE_MIN = 0,
+	PROBE_MAX = 1,
+	PROBE_NUM = 1,		/* total probes to send */
+	ANNOUNCE_INTERVAL = 1,  /* 1 seconds between announces */
+	ANNOUNCE_NUM = 1,	/* announces to send */
+#else
 	/* 1-2 seconds between probes */
 	PROBE_MIN = 1,
 	PROBE_MAX = 2,
 	PROBE_NUM = 3,		/* total probes to send */
-	ANNOUNCE_INTERVAL = 2,  /* 2 seconds between announces */
+	ANNOUNCE_INTERVAL = 2,	/* 2 seconds between announces */
 	ANNOUNCE_NUM = 3,	/* announces to send */
+#endif
+
 	/* if probe/announce sees a conflict, multiply RANDOM(NUM_CONFLICT) by... */
 	CONFLICT_MULTIPLIER = 2,
 	/* if we monitor and see a conflict, how long is defend state? */
-- 
2.30.0



More information about the busybox mailing list