1 /* 2 * Copyright (c) 2020, The OpenThread Authors. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 3. Neither the name of the copyright holder nor the 13 * names of its contributors may be used to endorse or promote products 14 * derived from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 /** 30 * @file 31 * This file includes compile-time configurations for the SRP (Service Registration Protocol) Client. 32 * 33 */ 34 35 #ifndef CONFIG_SRP_CLIENT_H_ 36 #define CONFIG_SRP_CLIENT_H_ 37 38 #include "config/misc.h" 39 40 /** 41 * @def OPENTHREAD_CONFIG_SRP_CLIENT_ENABLE 42 * 43 * Define to 1 to enable SRP Client support. 44 * 45 */ 46 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_ENABLE 47 #define OPENTHREAD_CONFIG_SRP_CLIENT_ENABLE 0 48 #endif 49 50 /** 51 * @def OPENTHREAD_CONFIG_SRP_CLIENT_AUTO_START_API_ENABLE 52 * 53 * Define to 1 to enable SRP Client auto-start feature and its APIs. 54 * 55 * When enabled, the SRP client can be configured to automatically start when it detects the presence of an SRP server 56 * (by monitoring the Thread Network Data for SRP Server Service entries). 57 * 58 */ 59 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_AUTO_START_API_ENABLE 60 #define OPENTHREAD_CONFIG_SRP_CLIENT_AUTO_START_API_ENABLE 1 61 #endif 62 63 /** 64 * @def OPENTHREAD_CONFIG_SRP_CLIENT_AUTO_START_DEFAULT_MODE 65 * 66 * Define the default mode (enabled or disabled) of auto-start mode. 67 * 68 * This config is applicable only when `OPENTHREAD_CONFIG_SRP_CLIENT_AUTO_START_API_ENABLE` is enabled. 69 * 70 */ 71 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_AUTO_START_DEFAULT_MODE 72 #define OPENTHREAD_CONFIG_SRP_CLIENT_AUTO_START_DEFAULT_MODE 0 73 #endif 74 75 /** 76 * @def OPENTHREAD_CONFIG_SRP_CLIENT_SWITCH_SERVER_ON_FAILURE 77 * 78 * Define to 1 to enable SRP client to switch server on failure (when auto-start feature is used). 79 * 80 * This config is only used when `OPENTHREAD_CONFIG_SRP_CLIENT_AUTO_START_API_ENABLE` is enabled. 81 * 82 * When enabled, the client will try to select the next server from entries in Thread Network Data when the current 83 * server rejects an SRP update or there is no response (timeout waiting for response from server). 84 * 85 */ 86 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_SWITCH_SERVER_ON_FAILURE 87 #define OPENTHREAD_CONFIG_SRP_CLIENT_SWITCH_SERVER_ON_FAILURE 1 88 #endif 89 90 /** 91 * @def OPENTHREAD_CONFIG_SRP_CLIENT_DISALLOW_SERVER_SWITCH_WITH_REGISTERED_HOST 92 * 93 * Define to 1 to disallow SRP client to switch server (when auto-start is used) on failure if host (or any services) 94 * were previously successfully registered with the currently selected server. 95 * 96 * This config is only applicable when `OPENTHREAD_CONFIG_SRP_CLIENT_SWITCH_SERVER_ON_FAILURE` is enabled. 97 * 98 * If this is enabled, once SRP client successfully registers with an auto-start selected SRP server, it stays with 99 * the selected SRP server (even if future SRP updates fail or timeout) while the related server entry remains present 100 * in the Thread Network Data. If the entry is removed from Network Data, then SRP client will try to select a new 101 * server. 102 * 103 * Enabling this behavior would be useful allowing more aggressive switch logic (e.g., switch after fewer timeouts 104 * `OPENTHREAD_CONFIG_SRP_CLIENT_MAX_TIMEOUT_FAILURES_TO_SWITCH_SERVER`) while not allowing switch due to temporary 105 * failures on the currently selected server. This can help avoid situation where the old server may still remember the 106 * registered host/service info and client switching to a new server then failing due to name conflict (when new server 107 * probes for the host/service name original server would not allow new registration). 108 * 109 */ 110 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_DISALLOW_SERVER_SWITCH_WITH_REGISTERED_HOST 111 #define OPENTHREAD_CONFIG_SRP_CLIENT_DISALLOW_SERVER_SWITCH_WITH_REGISTERED_HOST 1 112 #endif 113 114 /** 115 * @def OPENTHREAD_CONFIG_SRP_CLIENT_MAX_TIMEOUT_FAILURES_TO_SWITCH_SERVER 116 * 117 * Specifies number of timeout failures to trigger a switch of server. 118 * 119 * This is applicable only when `OPENTHREAD_CONFIG_SRP_CLIENT_SWITCH_SERVER_ON_FAILURE` is used. 120 * 121 */ 122 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_MAX_TIMEOUT_FAILURES_TO_SWITCH_SERVER 123 #define OPENTHREAD_CONFIG_SRP_CLIENT_MAX_TIMEOUT_FAILURES_TO_SWITCH_SERVER 3 124 #endif 125 126 /** 127 * @def OPENTHREAD_CONFIG_SRP_CLIENT_DOMAIN_NAME_API_ENABLE 128 * 129 * Define to 1 for the SRP client implementation to provide APIs that get/set the domain name. 130 * 131 */ 132 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_DOMAIN_NAME_API_ENABLE 133 #define OPENTHREAD_CONFIG_SRP_CLIENT_DOMAIN_NAME_API_ENABLE 0 134 #endif 135 136 /** 137 * @def OPENTHREAD_CONFIG_SRP_CLIENT_SAVE_SELECTED_SERVER_ENABLE 138 * 139 * Define to 1 to enable SRP client feature to save the selected server in non-volatile settings. 140 * 141 * When enabled, the SRP client will save the selected server info by auto-start feature in the non-volatile settings 142 * and on a client restart (e.g., due to a device reset) it will select the same server when searching to discover and 143 * pick one from the Thread Network Data service entries. The server info is saved only after the host info is 144 * successfully registered with the server and if it is selected by auto-start from a network data SRP *unicast* 145 * service entry. 146 * 147 */ 148 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_SAVE_SELECTED_SERVER_ENABLE 149 #define OPENTHREAD_CONFIG_SRP_CLIENT_SAVE_SELECTED_SERVER_ENABLE 1 150 #endif 151 152 /** 153 * @def OPENTHREAD_CONFIG_SRP_CLIENT_DEFAULT_LEASE 154 * 155 * Specifies the default requested lease interval (in seconds). Set to two hours. 156 * 157 */ 158 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_DEFAULT_LEASE 159 #define OPENTHREAD_CONFIG_SRP_CLIENT_DEFAULT_LEASE (2 * 60 * 60) 160 #endif 161 162 /** 163 * @def OPENTHREAD_CONFIG_SRP_CLIENT_DEFAULT_KEY_LEASE 164 * 165 * Specifies the default requested key lease interval (in seconds). Set to 14 days. 166 * 167 */ 168 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_DEFAULT_KEY_LEASE 169 #define OPENTHREAD_CONFIG_SRP_CLIENT_DEFAULT_KEY_LEASE (14 * 24 * 60 * 60) 170 #endif 171 172 /** 173 * @def OPENTHREAD_CONFIG_SRP_CLIENT_LEASE_RENEW_GUARD_INTERVAL 174 * 175 * Specifies the guard interval (in seconds) for lease renew time. The guard interval determines how much earlier 176 * (relative to the lease expiration time) the SRP client will send an SRP update for lease renewal. 177 * 178 */ 179 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_LEASE_RENEW_GUARD_INTERVAL 180 #define OPENTHREAD_CONFIG_SRP_CLIENT_LEASE_RENEW_GUARD_INTERVAL 120 // two minutes in seconds 181 #endif 182 183 /** 184 * @def OPENTHREAD_CONFIG_SRP_CLIENT_EARLY_LEASE_RENEW_FACTOR_NUMERATOR 185 * 186 * Specifies the numerator of early lease renewal factor. 187 * 188 * This value is used for opportunistic early refresh behave. When sending an SRP update, the services that are not yet 189 * expired but are close, are allowed to refresh early and are included in the SRP update. 190 * 191 * The "early lease renewal interval" is used to determine if a service can renew early. The interval is calculated by 192 * multiplying the accepted lease interval by the "early lease renewal factor" which is given as a fraction (numerator 193 * and denominator). 194 * 195 * If the factor is set to zero (numerator=0, denominator=1), the opportunistic early refresh behavior is disabled. 196 * If denominator is set to zero (the factor is set to infinity), then all services (including previously registered 197 * ones) are always included in SRP update message. 198 * 199 * Default value is 1/2 (i.e., services that are within half of the lease interval are allowed to refresh early). 200 * 201 */ 202 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_EARLY_LEASE_RENEW_FACTOR_NUMERATOR 203 #define OPENTHREAD_CONFIG_SRP_CLIENT_EARLY_LEASE_RENEW_FACTOR_NUMERATOR 1 204 #endif 205 206 /** 207 * @def OPENTHREAD_CONFIG_SRP_CLIENT_EARLY_LEASE_RENEW_FACTOR_DENOMINATOR 208 * 209 * Specifies the denominator of early lease renewal factor. 210 * 211 * Please see OPENTHREAD_CONFIG_SRP_CLIENT_EARLY_LEASE_RENEW_FACTOR_NUMERATOR for more details. 212 * 213 */ 214 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_EARLY_LEASE_RENEW_FACTOR_DENOMINATOR 215 #define OPENTHREAD_CONFIG_SRP_CLIENT_EARLY_LEASE_RENEW_FACTOR_DENOMINATOR 2 216 #endif 217 218 /** 219 * @def OPENTHREAD_CONFIG_SRP_CLIENT_UPDATE_TX_MIN_DELAY 220 * 221 * Specifies the minimum value (in msec) for the short random delay wait time before sending an update message. 222 * 223 * The random delay is chosen uniformly from the min up to max value `OPENTHREAD_CONFIG_SRP_CLIENT_UPDATE_TX_MAX_DELAY`. 224 * 225 * When there is a change (e.g., a new service is added/removed) that requires an update, the SRP client will wait for 226 * a short delay before preparing and sending an SRP update message to server. This allows user to provide more change 227 * that are then all sent in same update message. The delay is only applied on the first change that triggers an 228 * update message transmission. Subsequent changes (API calls) while waiting for the tx to start will not reset the 229 * delay timer. 230 * 231 */ 232 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_UPDATE_TX_MIN_DELAY 233 #define OPENTHREAD_CONFIG_SRP_CLIENT_UPDATE_TX_MIN_DELAY 10 234 #endif 235 236 /** 237 * @def OPENTHREAD_CONFIG_SRP_CLIENT_UPDATE_TX_MIN_DELAY 238 * 239 * Specifies the maximum value (in msec) for the short random delay wait time before sending an update message. 240 * 241 * The random delay is chosen uniformly from the min `OPENTHREAD_CONFIG_SRP_CLIENT_UPDATE_TX_MIN_DELAY` up to max value. 242 * 243 * See `OPENTHREAD_CONFIG_SRP_CLIENT_UPDATE_TX_MIN_DELAY` for more details. 244 * 245 */ 246 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_UPDATE_TX_MAX_DELAY 247 #define OPENTHREAD_CONFIG_SRP_CLIENT_UPDATE_TX_MAX_DELAY 700 248 #endif 249 250 /** 251 * @def OPENTHREAD_CONFIG_SRP_CLIENT_MIN_RETRY_WAIT_INTERVAL 252 * 253 * Specifies the minimum wait interval (in msec) between SRP update message retries. 254 * 255 * The update message is retransmitted if there is no response from server or if server rejects the update. The wait 256 * interval starts from the minimum value and is increased by the growth factor every failure up to the max value. 257 * 258 */ 259 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_MIN_RETRY_WAIT_INTERVAL 260 #define OPENTHREAD_CONFIG_SRP_CLIENT_MIN_RETRY_WAIT_INTERVAL 1800 261 #endif 262 263 /** 264 * @def OPENTHREAD_CONFIG_SRP_CLIENT_MAX_RETRY_WAIT_INTERVAL 265 * 266 * Specifies the maximum wait interval (in msec) between SRP update message retries. 267 * 268 */ 269 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_MAX_RETRY_WAIT_INTERVAL 270 #define OPENTHREAD_CONFIG_SRP_CLIENT_MAX_RETRY_WAIT_INTERVAL (1 * 60 * 60 * 1000) // 1 hour in ms. 271 #endif 272 273 /** 274 * @def OPENTHREAD_CONFIG_SRP_CLIENT_RETRY_WAIT_INTERVAL_JITTER 275 * 276 * Specifies jitter (in msec) for retry wait interval. If the current retry wait interval is smaller than the jitter 277 * then the the wait interval itself is used as jitter (e.g., with jitter 500 msec and if retry interval is 300ms 278 * the retry interval is then randomly selected from [0, 2*300] ms). 279 * 280 */ 281 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_RETRY_WAIT_INTERVAL_JITTER 282 #define OPENTHREAD_CONFIG_SRP_CLIENT_RETRY_WAIT_INTERVAL_JITTER 500 283 #endif 284 285 /** 286 * @def OPENTHREAD_CONFIG_SRP_CLIENT_RETRY_INTERVAL_GROWTH_FACTOR_NUMERATOR 287 * 288 * Specifies the numerator of the retry wait interval growth factor fraction. The growth factor is represented as 289 * a fraction (e.g., for 1.5, we can use 15 as the numerator and 10 as the denominator). 290 * 291 */ 292 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_RETRY_INTERVAL_GROWTH_FACTOR_NUMERATOR 293 #define OPENTHREAD_CONFIG_SRP_CLIENT_RETRY_INTERVAL_GROWTH_FACTOR_NUMERATOR 17 294 #endif 295 296 /** 297 * @def OPENTHREAD_CONFIG_SRP_CLIENT_RETRY_INTERVAL_GROWTH_FACTOR_DENOMINATOR 298 * 299 * Specifies the denominator of the retry wait interval growth factor fraction. 300 * 301 */ 302 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_RETRY_INTERVAL_GROWTH_FACTOR_DENOMINATOR 303 #define OPENTHREAD_CONFIG_SRP_CLIENT_RETRY_INTERVAL_GROWTH_FACTOR_DENOMINATOR 10 304 #endif 305 306 /** 307 * @def OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_ENABLE 308 * 309 * Define to 1 to enable SRP Client buffers and service pool feature. 310 * 311 */ 312 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_ENABLE 313 #define OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_ENABLE OPENTHREAD_CONFIG_SRP_CLIENT_ENABLE 314 #endif 315 316 /** 317 * @def OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_MAX_SERVICES 318 * 319 * Specifies number of service entries in the SRP client service pool. 320 * 321 * This config is applicable only when `OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_ENABLE` is enabled. 322 * 323 */ 324 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_MAX_SERVICES 325 #define OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_MAX_SERVICES 2 326 #endif 327 328 /** 329 * @def OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_MAX_HOST_ADDRESSES 330 * 331 * Specifies number of host IPv6 address entries in the SRP client buffers and service pool. 332 * 333 * This config is applicable only when `OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_ENABLE` is enabled. 334 * 335 */ 336 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_MAX_HOST_ADDRESSES 337 #if OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE 338 #define OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_MAX_HOST_ADDRESSES 10 339 #else 340 #define OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_MAX_HOST_ADDRESSES 2 341 #endif 342 #endif 343 344 /** 345 * @def OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_HOST_NAME_SIZE 346 * 347 * Specifies the size (number of chars) of host name string buffer in the SRP client buffers and service pool. 348 * 349 * This config is applicable only when `OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_ENABLE` is enabled. 350 * 351 */ 352 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_HOST_NAME_SIZE 353 #define OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_HOST_NAME_SIZE 64 354 #endif 355 356 /** 357 * @def OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_SERVICE_NAME_SIZE 358 * 359 * Specifies the size (number of chars) of service name string buffer in the SRP client buffers and service pool. 360 * 361 * This config is applicable only when `OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_ENABLE` is enabled. 362 * 363 */ 364 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_SERVICE_NAME_SIZE 365 #define OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_SERVICE_NAME_SIZE 96 366 #endif 367 368 /** 369 * @def OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_SERVICE_MAX_SUB_TYPES 370 * 371 * Specifies the maximum number of service subtype labels (array length) in the SRP client buffers and service pool. 372 * 373 * This config is applicable only when `OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_ENABLE` is enabled. 374 * 375 */ 376 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_SERVICE_MAX_SUB_TYPES 377 #define OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_SERVICE_MAX_SUB_TYPES 6 378 #endif 379 380 /** 381 * @def OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_SERVICE_INSTANCE_NAME_SIZE 382 * 383 * Specifies the size (number of chars) of service instance name string buffer in the SRP client buffers and service 384 * pool. 385 * 386 * This config is applicable only when `OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_ENABLE` is enabled. 387 * 388 */ 389 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_SERVICE_INSTANCE_NAME_SIZE 390 #define OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_SERVICE_INSTANCE_NAME_SIZE 64 391 #endif 392 393 /** 394 * @def OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_TXT_BUFFER_SIZE 395 * 396 * Specifies the size (number of bytes) of TXT record value buffer in the SRP client buffers and service pool. 397 * 398 * This config is applicable only when `OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_ENABLE` is enabled. 399 * 400 */ 401 #ifndef OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_TXT_BUFFER_SIZE 402 #define OPENTHREAD_CONFIG_SRP_CLIENT_BUFFERS_TXT_BUFFER_SIZE 64 403 #endif 404 405 #endif // CONFIG_SRP_CLIENT_H_ 406