You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
4.8 KiB
131 lines
4.8 KiB
// Copyright 2020 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef DISCOVERY_COMMON_CONFIG_H_
|
|
#define DISCOVERY_COMMON_CONFIG_H_
|
|
|
|
#include <vector>
|
|
|
|
#include "platform/base/interface_info.h"
|
|
|
|
namespace openscreen {
|
|
namespace discovery {
|
|
|
|
// This struct provides parameters needed to initialize the discovery pipeline.
|
|
struct Config {
|
|
struct NetworkInfo {
|
|
enum AddressFamilies : uint8_t {
|
|
kNoAddressFamily = 0,
|
|
kUseIpV4 = 0x01 << 0,
|
|
kUseIpV6 = 0x01 << 1
|
|
};
|
|
|
|
// Network Interface on which discovery should be run.
|
|
InterfaceInfo interface;
|
|
|
|
// IP Address Families supported by this network interface and on which the
|
|
// mDNS Service should listen for and/or publish records.
|
|
AddressFamilies supported_address_families;
|
|
};
|
|
|
|
/*****************************************
|
|
* Common Settings
|
|
*****************************************/
|
|
|
|
// Interfaces on which services should be published, and on which discovery
|
|
// should listen for announced service instances.
|
|
std::vector<NetworkInfo> network_info;
|
|
|
|
// Maximum allowed size in bytes for the rdata in an incoming record. All
|
|
// received records with rdata size exceeding this size will be dropped.
|
|
// The default value is taken from RFC 6763 section 6.2.
|
|
int maximum_valid_rdata_size = 1300;
|
|
|
|
/*****************************************
|
|
* Publisher Settings
|
|
*****************************************/
|
|
|
|
// Determines whether publishing of services is enabled.
|
|
bool enable_publication = true;
|
|
|
|
// Number of times new mDNS records should be announced, using an exponential
|
|
// back off. See RFC 6762 section 8.3 for further details. Per RFC, this value
|
|
// is expected to be in the range of 2 to 8.
|
|
int new_record_announcement_count = 8;
|
|
|
|
// Maximum number of truncated messages that the receiver may receive for a
|
|
// single query from any given host.
|
|
// The supported record type with the largest expected data size is a TXT
|
|
// record. RFC 6763 section 6.1 states that the "maximum sensible size" for
|
|
// one such record is "a few hundred bytes". Given that an mDNS Message's size
|
|
// is bounded by 9000 bytes, each message can be expected to hold at least 30
|
|
// records, meaning that the default value of 8 allows for 240 records, or
|
|
// more in the case of non-TXT records.
|
|
int maximum_truncated_messages_per_query = 8;
|
|
|
|
// Maximum number of concurrent truncated queries that may be tracked by a
|
|
// single network interface.
|
|
// By the same logic stated in the above config value, truncated queries
|
|
// should be relatively rare. Each truncated query lives for at most one
|
|
// second after the last truncated packet is received, so receiving 64 such
|
|
// queries in a short timespan is unlinkely.
|
|
int maximum_concurrent_truncated_queries_per_interface = 64;
|
|
|
|
// Maximum number of known answers allowed for a given truncated query.
|
|
// A default value of 256 is used because this is the maximum number of
|
|
// devices on a LAN.
|
|
int maximum_known_answer_records_per_query = 256;
|
|
|
|
/*****************************************
|
|
* Querier Settings
|
|
*****************************************/
|
|
|
|
// Determines whether querying is enabled.
|
|
bool enable_querying = true;
|
|
|
|
// Number of times new mDNS records should be announced, using an exponential
|
|
// back off. -1 signifies that there should be no maximum.
|
|
int new_query_announcement_count = -1;
|
|
|
|
// Limit on the size to which the mDNS Querier Cache may grow. This is used to
|
|
// prevent a malicious or misbehaving mDNS client from causing the memory
|
|
// used by mDNS to grow in an unbounded fashion.
|
|
int querier_max_records_cached = 1024;
|
|
|
|
// Sets the querier to ignore all NSEC negative response records received as
|
|
// responses to outgoing queries.
|
|
bool ignore_nsec_responses = false;
|
|
};
|
|
|
|
inline Config::NetworkInfo::AddressFamilies operator&(
|
|
Config::NetworkInfo::AddressFamilies lhs,
|
|
Config::NetworkInfo::AddressFamilies rhs) {
|
|
return static_cast<Config::NetworkInfo::AddressFamilies>(
|
|
static_cast<uint8_t>(lhs) & static_cast<uint8_t>(rhs));
|
|
}
|
|
|
|
inline Config::NetworkInfo::AddressFamilies operator|(
|
|
Config::NetworkInfo::AddressFamilies lhs,
|
|
Config::NetworkInfo::AddressFamilies rhs) {
|
|
return static_cast<Config::NetworkInfo::AddressFamilies>(
|
|
static_cast<uint8_t>(lhs) | static_cast<uint8_t>(rhs));
|
|
}
|
|
|
|
inline Config::NetworkInfo::AddressFamilies operator|=(
|
|
Config::NetworkInfo::AddressFamilies& lhs,
|
|
Config::NetworkInfo::AddressFamilies rhs) {
|
|
return lhs = lhs | rhs;
|
|
}
|
|
|
|
inline Config::NetworkInfo::AddressFamilies operator&=(
|
|
Config::NetworkInfo::AddressFamilies& lhs,
|
|
Config::NetworkInfo::AddressFamilies rhs) {
|
|
return lhs = lhs & rhs;
|
|
}
|
|
|
|
} // namespace discovery
|
|
} // namespace openscreen
|
|
|
|
#endif // DISCOVERY_COMMON_CONFIG_H_
|