#[derive(Default, Debug, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)]
#[derive(Deserialize, Serialize)]
#[serde(default, deny_unknown_fields)]
pub struct GlobalTransmissionControlProtocolConfiguration
{
pub tcp_global_minimum_default_and_maximum_send_buffer_size_in_bytes: Option<(SendBufferSizeInBytes, SendBufferSizeInBytes, SendBufferSizeInBytes)>,
pub tcp_global_minimum_default_and_maximum_receive_buffer_size_in_bytes: Option<(ReceiveBufferSizeInBytes, ReceiveBufferSizeInBytes, ReceiveBufferSizeInBytes)>,
pub tcp_keep_alive_interval_seconds: Option<KeepAliveIntervalSeconds>,
pub tcp_idles_before_keep_alive_seconds: Option<IdlesBeforeKeepAliveSeconds>,
pub tcp_maximum_keep_alive_probes: Option<MaximumKeepAliveProbes>,
pub tcp_finish_timeout_seconds: Option<FinishTimeoutSeconds>,
pub tcp_maximum_syn_retransmits: Option<MaximumSynRetransmits>,
pub tcp_maximum_syn_ack_retransmits: Option<MaximumSynAckRetransmits>,
pub tcp_maximum_syn_back_log: Option<BackLog>,
pub tcp_maximum_orphans: Option<NumberOfSockets>,
pub tcp_maximum_time_wait: Option<NumberOfSockets>,
pub tcp_congestion_control_algorithm: Option<CongestionControlAlgorithm>,
pub tcp_retries_1: Option<Retries1>,
pub tcp_retries_2: Option<Retries2>,
pub tcp_retries_orphan: Option<RetriesOrphan>,
pub tcp_reordering_threshold: Option<ReorderingThreshold>,
pub tcp_memory_pressure: Option<MemoryPressure>,
pub tcp_high_order_allocations: Option<bool>,
}
impl GlobalTransmissionControlProtocolConfiguration
{
pub fn configure(&self, proc_path: &ProcPath) -> Result<(), GlobalTransmissionControlProtocolConfigurationError>
{
use self::GlobalTransmissionControlProtocolConfigurationError::*;
set_value(proc_path, SendBufferSizeInBytes::set_global_tcp_minimum_default_and_maximum, self.tcp_global_minimum_default_and_maximum_send_buffer_size_in_bytes, CouldNotChangeGlobalMinimumDefaultAndMaximumSendBufferSize)?;
set_value(proc_path, ReceiveBufferSizeInBytes::set_global_tcp_minimum_default_and_maximum, self.tcp_global_minimum_default_and_maximum_receive_buffer_size_in_bytes, CouldNotChangeGlobalMinimumDefaultAndMaximumReceiveBufferSize)?;
instance_set_value(proc_path, KeepAliveIntervalSeconds::set_global_default, self.tcp_keep_alive_interval_seconds, CouldNotChangeGlobalDefaultKeepAliveIntervalSeconds)?;
instance_set_value(proc_path, IdlesBeforeKeepAliveSeconds::set_global_default, self.tcp_idles_before_keep_alive_seconds, CouldNotChangeGlobalDefaultIdlesBeforeKeepAliveSeconds)?;
instance_set_value(proc_path, MaximumKeepAliveProbes::set_global_default, self.tcp_maximum_keep_alive_probes, CouldNotChangeGlobalDefaultMaximumKeepAliveProbes)?;
instance_set_value(proc_path, FinishTimeoutSeconds::set_global_default, self.tcp_finish_timeout_seconds, CouldNotChangeGlobalDefaultFinishTimeout)?;
instance_set_value(proc_path, MaximumSynRetransmits::set_global_maximum, self.tcp_maximum_syn_retransmits, CouldNotChangeGlobalDefaultMaximumSynRetransmits)?;
instance_set_value(proc_path, MaximumSynAckRetransmits::set_global_maximum, self.tcp_maximum_syn_ack_retransmits, CouldNotChangeGlobalDefaultMaximumSynAckRetransmits)?;
instance_set_value(proc_path, BackLog::set_global_maximum_syn, self.tcp_maximum_syn_back_log, CouldNotChangeGlobalMaximumSynBackLog)?;
instance_set_value(proc_path, NumberOfSockets::set_global_maximum_orphans, self.tcp_maximum_orphans, CouldNotChangeGlobalMaximumOrphans)?;
instance_set_value(proc_path, NumberOfSockets::set_global_maximum_time_wait, self.tcp_maximum_time_wait, CouldNotChangeGlobalMaximumTimeWait)?;
instance_set_value(proc_path, CongestionControlAlgorithm::set_global_default, self.tcp_congestion_control_algorithm, CouldNotChangeGlobalDefaultCongestionControlAlgorithm)?;
instance_set_value(proc_path, Retries1::set_global_default, self.tcp_retries_1, CouldNotChangeGlobalDefaultRetries1)?;
instance_set_value(proc_path, Retries2::set_global_default, self.tcp_retries_2, CouldNotChangeGlobalDefaultRetries2)?;
instance_set_value(proc_path, RetriesOrphan::set_global_default, self.tcp_retries_orphan, CouldNotChangeGlobalDefaultRetriesOrphan)?;
instance_set_value(proc_path, ReorderingThreshold::set_global_maximum, self.tcp_reordering_threshold, CouldNotChangeGlobalDefaultReorderingThreshold)?;
instance_set_value(proc_path, MemoryPressure::set_global, self.tcp_memory_pressure.as_ref(), CouldNotChangeMemoryPressure)?;
set_proc_sys_net_core_value(proc_path, "high_order_alloc_disable", self.tcp_high_order_allocations, CouldNotChangeHighOrderAllocations)?;
Ok(())
}
}