INET Framework for OMNeT++/OMNEST
inet::NetworkNamespaceContext Class Reference

#include <NetworkNamespaceContext.h>

Public Member Functions

 NetworkNamespaceContext (const char *networkNamespace)
 
 ~NetworkNamespaceContext ()
 

Protected Attributes

int oldNs = -1
 
int newNs = -1
 

Constructor & Destructor Documentation

◆ NetworkNamespaceContext()

inet::NetworkNamespaceContext::NetworkNamespaceContext ( const char *  networkNamespace)
17 {
18  if (networkNamespace != nullptr && *networkNamespace != '\0') {
19 #ifdef __linux__
20  oldNs = open("/proc/self/ns/net", O_RDONLY);
21  std::string namespaceAsString = "/var/run/netns/";
22  namespaceAsString += networkNamespace;
23  newNs = open(namespaceAsString.c_str(), O_RDONLY);
24  if (newNs == -1)
25  throw cRuntimeError("Cannot open network namespace");
26  if (setns(newNs, 0) == -1)
27  throw cRuntimeError("Cannot change network namespace");
28 #else
29  throw cRuntimeError("Network namespaces are only supported on Linux");
30 #endif
31  }
32 }

◆ ~NetworkNamespaceContext()

inet::NetworkNamespaceContext::~NetworkNamespaceContext ( )
35 {
36  if (newNs != -1) {
37 #ifdef __linux__
38  setns(oldNs, 0);
39  close(oldNs);
40  close(newNs);
41  oldNs = -1;
42  newNs = -1;
43 #endif
44  }
45 }

Member Data Documentation

◆ newNs

int inet::NetworkNamespaceContext::newNs = -1
protected

◆ oldNs

int inet::NetworkNamespaceContext::oldNs = -1
protected

The documentation for this class was generated from the following files:
inet::NetworkNamespaceContext::newNs
int newNs
Definition: NetworkNamespaceContext.h:19
inet::NetworkNamespaceContext::oldNs
int oldNs
Definition: NetworkNamespaceContext.h:18
inet::math::close
bool close(double one, double two)
Tests whether two doubles are close enough to be declared equal.
Definition: INETMath.h:123