xref: /aosp_15_r20/external/openscreen/discovery/common/config.h (revision 3f982cf4871df8771c9d4abe6e9a6f8d829b2736)
1*3f982cf4SFabien Sanglard // Copyright 2020 The Chromium Authors. All rights reserved.
2*3f982cf4SFabien Sanglard // Use of this source code is governed by a BSD-style license that can be
3*3f982cf4SFabien Sanglard // found in the LICENSE file.
4*3f982cf4SFabien Sanglard 
5*3f982cf4SFabien Sanglard #ifndef DISCOVERY_COMMON_CONFIG_H_
6*3f982cf4SFabien Sanglard #define DISCOVERY_COMMON_CONFIG_H_
7*3f982cf4SFabien Sanglard 
8*3f982cf4SFabien Sanglard #include <vector>
9*3f982cf4SFabien Sanglard 
10*3f982cf4SFabien Sanglard #include "platform/base/interface_info.h"
11*3f982cf4SFabien Sanglard 
12*3f982cf4SFabien Sanglard namespace openscreen {
13*3f982cf4SFabien Sanglard namespace discovery {
14*3f982cf4SFabien Sanglard 
15*3f982cf4SFabien Sanglard // This struct provides parameters needed to initialize the discovery pipeline.
16*3f982cf4SFabien Sanglard struct Config {
17*3f982cf4SFabien Sanglard   /*****************************************
18*3f982cf4SFabien Sanglard    * Common Settings
19*3f982cf4SFabien Sanglard    *****************************************/
20*3f982cf4SFabien Sanglard 
21*3f982cf4SFabien Sanglard   // Interfaces on which services should be published, and on which discovery
22*3f982cf4SFabien Sanglard   // should listen for announced service instances.
23*3f982cf4SFabien Sanglard   std::vector<InterfaceInfo> network_info;
24*3f982cf4SFabien Sanglard 
25*3f982cf4SFabien Sanglard   // Maximum allowed size in bytes for the rdata in an incoming record. All
26*3f982cf4SFabien Sanglard   // received records with rdata size exceeding this size will be dropped.
27*3f982cf4SFabien Sanglard   // The default value is taken from RFC 6763 section 6.2.
28*3f982cf4SFabien Sanglard   int maximum_valid_rdata_size = 1300;
29*3f982cf4SFabien Sanglard 
30*3f982cf4SFabien Sanglard   /*****************************************
31*3f982cf4SFabien Sanglard    * Publisher Settings
32*3f982cf4SFabien Sanglard    *****************************************/
33*3f982cf4SFabien Sanglard 
34*3f982cf4SFabien Sanglard   // Determines whether publishing of services is enabled.
35*3f982cf4SFabien Sanglard   bool enable_publication = true;
36*3f982cf4SFabien Sanglard 
37*3f982cf4SFabien Sanglard   // Number of times new mDNS records should be announced, using an exponential
38*3f982cf4SFabien Sanglard   // back off. See RFC 6762 section 8.3 for further details. Per RFC, this value
39*3f982cf4SFabien Sanglard   // is expected to be in the range of 2 to 8.
40*3f982cf4SFabien Sanglard   int new_record_announcement_count = 8;
41*3f982cf4SFabien Sanglard 
42*3f982cf4SFabien Sanglard   // Maximum number of truncated messages that the receiver may receive for a
43*3f982cf4SFabien Sanglard   // single query from any given host.
44*3f982cf4SFabien Sanglard   // The supported record type with the largest expected data size is a TXT
45*3f982cf4SFabien Sanglard   // record. RFC 6763 section 6.1 states that the "maximum sensible size" for
46*3f982cf4SFabien Sanglard   // one such record is "a few hundred bytes". Given that an mDNS Message's size
47*3f982cf4SFabien Sanglard   // is bounded by 9000 bytes, each message can be expected to hold at least 30
48*3f982cf4SFabien Sanglard   // records, meaning that the default value of 8 allows for 240 records, or
49*3f982cf4SFabien Sanglard   // more in the case of non-TXT records.
50*3f982cf4SFabien Sanglard   int maximum_truncated_messages_per_query = 8;
51*3f982cf4SFabien Sanglard 
52*3f982cf4SFabien Sanglard   // Maximum number of concurrent truncated queries that may be tracked by a
53*3f982cf4SFabien Sanglard   // single network interface.
54*3f982cf4SFabien Sanglard   // By the same logic stated in the above config value, truncated queries
55*3f982cf4SFabien Sanglard   // should be relatively rare. Each truncated query lives for at most one
56*3f982cf4SFabien Sanglard   // second after the last truncated packet is received, so receiving 64 such
57*3f982cf4SFabien Sanglard   // queries in a short timespan is unlinkely.
58*3f982cf4SFabien Sanglard   int maximum_concurrent_truncated_queries_per_interface = 64;
59*3f982cf4SFabien Sanglard 
60*3f982cf4SFabien Sanglard   // Maximum number of known answers allowed for a given truncated query.
61*3f982cf4SFabien Sanglard   // A default value of 256 is used because this is the maximum number of
62*3f982cf4SFabien Sanglard   // devices on a LAN.
63*3f982cf4SFabien Sanglard   int maximum_known_answer_records_per_query = 256;
64*3f982cf4SFabien Sanglard 
65*3f982cf4SFabien Sanglard   /*****************************************
66*3f982cf4SFabien Sanglard    * Querier Settings
67*3f982cf4SFabien Sanglard    *****************************************/
68*3f982cf4SFabien Sanglard 
69*3f982cf4SFabien Sanglard   // Determines whether querying is enabled.
70*3f982cf4SFabien Sanglard   bool enable_querying = true;
71*3f982cf4SFabien Sanglard 
72*3f982cf4SFabien Sanglard   // Number of times new mDNS records should be announced, using an exponential
73*3f982cf4SFabien Sanglard   // back off. -1 signifies that there should be no maximum.
74*3f982cf4SFabien Sanglard   int new_query_announcement_count = -1;
75*3f982cf4SFabien Sanglard 
76*3f982cf4SFabien Sanglard   // Limit on the size to which the mDNS Querier Cache may grow. This is used to
77*3f982cf4SFabien Sanglard   // prevent a malicious or misbehaving mDNS client from causing the memory
78*3f982cf4SFabien Sanglard   // used by mDNS to grow in an unbounded fashion.
79*3f982cf4SFabien Sanglard   int querier_max_records_cached = 1024;
80*3f982cf4SFabien Sanglard 
81*3f982cf4SFabien Sanglard   // Sets the querier to ignore all NSEC negative response records received as
82*3f982cf4SFabien Sanglard   // responses to outgoing queries.
83*3f982cf4SFabien Sanglard   bool ignore_nsec_responses = false;
84*3f982cf4SFabien Sanglard };
85*3f982cf4SFabien Sanglard 
86*3f982cf4SFabien Sanglard }  // namespace discovery
87*3f982cf4SFabien Sanglard }  // namespace openscreen
88*3f982cf4SFabien Sanglard 
89*3f982cf4SFabien Sanglard #endif  // DISCOVERY_COMMON_CONFIG_H_
90