luaCtx.writeFunction("LuaFFIPerThreadResponseAction", [](std::string code) {
return dnsdist::actions::getLuaFFIPerThreadResponseAction(code);
});
+luaCtx.writeFunction("SetEDNSOptionResponseAction", [](uint32_t code, std::string data) {
+ return dnsdist::actions::getSetEDNSOptionResponseAction(code, data);
+});
luaCtx.writeFunction("SetExtendedDNSErrorResponseAction", [](uint16_t info_code, boost::optional<std::string> extra_text) {
return dnsdist::actions::getSetExtendedDNSErrorResponseAction(info_code, extra_text ? *extra_text : "");
});
description: "A list of ``name``=``key`` pairs, for meta-data to be added to Protocol Buffer message"
- name: "SetEDNSOption"
description: "Add arbitrary EDNS option and data to the response. Any existing EDNS content with the same option code will be overwritten. Subsequent rules are processed after this action"
- skip-rust: true
parameters:
- name: "code"
type: "u32"
{
return std::shared_ptr<DNSResponseAction>(new LuaFFIPerThreadResponseAction(code));
}
+std::shared_ptr<DNSResponseAction> getSetEDNSOptionResponseAction(uint32_t code, const std::string& data)
+{
+ return std::shared_ptr<DNSResponseAction>(new SetEDNSOptionResponseAction(code, data));
+}
std::shared_ptr<DNSResponseAction> getSetExtendedDNSErrorResponseAction(uint16_t info_code, const std::string& extra_text)
{
return std::shared_ptr<DNSResponseAction>(new SetExtendedDNSErrorResponseAction(info_code, extra_text));
std::shared_ptr<DNSResponseAction> getDropResponseAction();
std::shared_ptr<DNSResponseAction> getLogResponseAction(const std::string& file_name, bool append, bool buffered, bool verbose_only, bool include_timestamp);
std::shared_ptr<DNSResponseAction> getLuaFFIPerThreadResponseAction(const std::string& code);
+std::shared_ptr<DNSResponseAction> getSetEDNSOptionResponseAction(uint32_t code, const std::string& data);
std::shared_ptr<DNSResponseAction> getSetExtendedDNSErrorResponseAction(uint16_t info_code, const std::string& extra_text);
std::shared_ptr<DNSResponseAction> getSetReducedTTLResponseAction(uint8_t percentage);
std::shared_ptr<DNSResponseAction> getSetSkipCacheResponseAction();
auto action = dnsdist::actions::getLuaFFIPerThreadResponseAction(std::string(config.code));
return newDNSResponseActionWrapper(std::move(action), config.name);
}
+std::shared_ptr<DNSResponseActionWrapper> getSetEDNSOptionResponseAction(const SetEDNSOptionResponseActionConfiguration& config)
+{
+ auto action = dnsdist::actions::getSetEDNSOptionResponseAction(config.code, std::string(config.data));
+ return newDNSResponseActionWrapper(std::move(action), config.name);
+}
std::shared_ptr<DNSResponseActionWrapper> getSetExtendedDNSErrorResponseAction(const SetExtendedDNSErrorResponseActionConfiguration& config)
{
auto action = dnsdist::actions::getSetExtendedDNSErrorResponseAction(config.info_code, std::string(config.extra_text));
std::shared_ptr<DNSResponseActionWrapper> getLuaFFIPerThreadResponseAction(const LuaFFIPerThreadResponseActionConfiguration& config);
struct RemoteLogResponseActionConfiguration;
std::shared_ptr<DNSResponseActionWrapper> getRemoteLogResponseAction(const RemoteLogResponseActionConfiguration& config);
+struct SetEDNSOptionResponseActionConfiguration;
+std::shared_ptr<DNSResponseActionWrapper> getSetEDNSOptionResponseAction(const SetEDNSOptionResponseActionConfiguration& config);
struct SetExtendedDNSErrorResponseActionConfiguration;
std::shared_ptr<DNSResponseActionWrapper> getSetExtendedDNSErrorResponseAction(const SetExtendedDNSErrorResponseActionConfiguration& config);
struct SetMaxReturnedTTLResponseActionConfiguration;
metas: Vec<ProtoBufMetaConfiguration>,
}
+ #[derive(Deserialize, Serialize, Debug, PartialEq)]
+ #[serde(deny_unknown_fields)]
+ struct SetEDNSOptionResponseActionConfiguration {
+ #[serde(default, skip_serializing_if = "crate::is_default")]
+ name: String,
+ code: u32,
+ data: String,
+ }
+
#[derive(Deserialize, Serialize, Debug, PartialEq)]
#[serde(deny_unknown_fields)]
struct SetExtendedDNSErrorResponseActionConfiguration {
fn getLuaFFIResponseAction(config: &LuaFFIResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
fn getLuaFFIPerThreadResponseAction(config: &LuaFFIPerThreadResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
fn getRemoteLogResponseAction(config: &RemoteLogResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
+ fn getSetEDNSOptionResponseAction(config: &SetEDNSOptionResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
fn getSetExtendedDNSErrorResponseAction(config: &SetExtendedDNSErrorResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
fn getSetMaxReturnedTTLResponseAction(config: &SetMaxReturnedTTLResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
fn getSetMaxTTLResponseAction(config: &SetMaxTTLResponseActionConfiguration) -> Result<SharedPtr<DNSResponseActionWrapper>>;
LuaFFI(dnsdistsettings::LuaFFIResponseActionConfiguration),
LuaFFIPerThread(dnsdistsettings::LuaFFIPerThreadResponseActionConfiguration),
RemoteLog(dnsdistsettings::RemoteLogResponseActionConfiguration),
+ SetEDNSOption(dnsdistsettings::SetEDNSOptionResponseActionConfiguration),
SetExtendedDNSError(dnsdistsettings::SetExtendedDNSErrorResponseActionConfiguration),
SetMaxReturnedTTL(dnsdistsettings::SetMaxReturnedTTLResponseActionConfiguration),
SetMaxTTL(dnsdistsettings::SetMaxTTLResponseActionConfiguration),
action: dnsdistsettings::getRemoteLogResponseAction(&config)?,
});
}
+ ResponseAction::SetEDNSOption(config) => {
+ return Ok(dnsdistsettings::SharedDNSResponseAction {
+ action: dnsdistsettings::getSetEDNSOptionResponseAction(&config)?,
+ });
+ }
ResponseAction::SetExtendedDNSError(config) => {
return Ok(dnsdistsettings::SharedDNSResponseAction {
action: dnsdistsettings::getSetExtendedDNSErrorResponseAction(&config)?,