17 #ifndef __PORT_MAPPING_ISOLATOR_HPP__
18 #define __PORT_MAPPING_ISOLATOR_HPP__
22 #include <sys/types.h>
72 return "/var/run/mesos/netns";
89 size_t _portsPerContainer)
91 portsPerContainer_(_portsPerContainer) {}
112 return (free + used).contains(ports);
118 static uint32_t nextMultipleOf(uint32_t x, uint32_t m);
124 size_t portsPerContainer_;
155 const std::list<mesos::slave::ContainerState>& states,
159 const ContainerID& containerId,
160 const mesos::slave::ContainerConfig& containerConfig);
163 const ContainerID& containerId,
167 const ContainerID& containerId);
170 const ContainerID& containerId,
174 const ContainerID& containerId);
177 const ContainerID& containerId);
185 : nonEphemeralPorts(_nonEphemeralPorts),
186 ephemeralPorts(_ephemeralPorts),
249 PortMappingIsolatorProcess(
251 const std::string& _bindMountRoot,
252 const std::string& _eth0,
253 const std::string& _lo,
256 const size_t _hostEth0MTU,
257 const net::IP& _hostDefaultGateway,
263 const std::set<uint16_t>& _flowIDs)
266 bindMountRoot(_bindMountRoot),
270 hostIPNetwork(_hostIPNetwork),
271 hostEth0MTU(_hostEth0MTU),
272 hostDefaultGateway(_hostDefaultGateway),
273 hostTxFqCodelHandle(_hostTxFqCodelHandle),
274 hostNetworkConfigurations(_hostNetworkConfigurations),
275 egressRateLimitPerContainer(_egressRateLimitPerContainer),
276 managedNonEphemeralPorts(_managedNonEphemeralPorts),
277 ephemeralPortsAllocator(_ephemeralPortsAllocator),
278 freeFlowIds(_flowIDs) {}
285 const ContainerID& containerId,
289 const ResourceStatistics& result,
293 ResourceStatistics result,
300 const std::string& veth);
304 const std::string& veth,
305 bool removeFiltersOnVeth =
true);
308 std::string scripts(Info* info);
310 uint16_t getNextFlowId();
313 const std::string bindMountRoot;
315 const std::string eth0;
316 const std::string lo;
319 const size_t hostEth0MTU;
320 const net::IP hostDefaultGateway;
338 std::set<uint16_t> freeFlowIds;
408 #endif // __PORT_MAPPING_ISOLATOR_HPP__
virtual process::Future< Nothing > cleanup(const ContainerID &containerId)
std::string generate(const std::string &prefix="")
Returns 'prefix(N)' where N represents the number of instances where the same prefix (wrt...
Option< std::string > lo_name
Definition: port_mapping.hpp:360
EphemeralPortsAllocator(const IntervalSet< uint16_t > &total, size_t _portsPerContainer)
Definition: port_mapping.hpp:87
Option< std::string > eth0_name
Definition: port_mapping.hpp:359
std::vector< routing::filter::ip::PortRange > getPortRanges(const IntervalSet< uint16_t > &ports)
ProcessBase(const std::string &id="")
constexpr char NET_ISOLATOR_BLOAT_REDUCTION[]
Definition: port_mapping.hpp:79
virtual process::Future< Nothing > isolate(const ContainerID &containerId, pid_t pid)
virtual process::Future< Nothing > recover(const std::list< mesos::slave::ContainerState > &states, const hashset< ContainerID > &orphans)
bool enable_snmp_statistics
Definition: port_mapping.hpp:392
Flags flags
Definition: port_mapping.hpp:368
PortMappingUpdate()
Definition: port_mapping.hpp:366
Definition: port_mapping.hpp:384
Definition: handle.hpp:38
Definition: resources.hpp:79
constexpr char NET_ISOLATOR_BW_LIMIT[]
Definition: port_mapping.hpp:78
virtual process::Future< ContainerStatus > status(const ContainerID &containerId)
Definition: isolator.hpp:135
virtual process::Future< ResourceStatistics > usage(const ContainerID &containerId)
bool enable_socket_statistics_details
Definition: port_mapping.hpp:391
PortMappingStatistics()
Definition: port_mapping.hpp:395
std::string PORT_MAPPING_BIND_MOUNT_SYMLINK_ROOT()
Definition: port_mapping.hpp:70
Definition: counter.hpp:26
Definition: port_mapping.hpp:350
Flags flags
Definition: port_mapping.hpp:397
Represents a fork() exec()ed subprocess.
Definition: subprocess.hpp:43
DWORD pid_t
Definition: windows.hpp:187
virtual flags::FlagsBase * getFlags()
Definition: port_mapping.hpp:372
Definition: port_mapping.hpp:84
virtual flags::FlagsBase * getFlags()
Definition: port_mapping.hpp:401
Definition: subcommand.hpp:41
Option< JSON::Object > ports_to_add
Definition: port_mapping.hpp:362
Definition: port_mapping.hpp:379
size_t portsPerContainer() const
Definition: port_mapping.hpp:94
Option< pid_t > pid
Definition: port_mapping.hpp:361
static const char * NAME
Definition: port_mapping.hpp:353
Option< pid_t > pid
Definition: port_mapping.hpp:389
Definition: port_mapping.hpp:355
Definition: isolator.hpp:80
static const char * NAME
Definition: port_mapping.hpp:382
Definition: port_mapping.hpp:147
bool enable_socket_statistics_summary
Definition: port_mapping.hpp:390
Result< Process > process(pid_t pid)
Definition: freebsd.hpp:30
Option< std::string > eth0_name
Definition: port_mapping.hpp:388
virtual process::Future< Nothing > update(const ContainerID &containerId, const Resources &resources)
void deallocate(const Interval< uint16_t > &ports)
std::string PORT_MAPPING_BIND_MOUNT_ROOT()
Definition: port_mapping.hpp:65
std::string PORT_MAPPING_VETH_PREFIX()
Definition: port_mapping.hpp:57
bool isManaged(const Interval< uint16_t > &ports)
Definition: port_mapping.hpp:110
Try< Interval< uint16_t > > allocate()
virtual ~PortMappingIsolatorProcess()
Definition: port_mapping.hpp:152
static Try< mesos::slave::Isolator * > create(const Flags &flags)
virtual process::Future< mesos::slave::ContainerLimitation > watch(const ContainerID &containerId)
virtual process::Future< Option< mesos::slave::ContainerLaunchInfo > > prepare(const ContainerID &containerId, const mesos::slave::ContainerConfig &containerConfig)
Option< JSON::Object > ports_to_remove
Definition: port_mapping.hpp:363