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 <[email protected]>
---
 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

_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to