Manages a set of virtual POSIX processes within the same address space. More...
#include <dce-manager.h>
Public Types | |
enum | ProcessEndCause { PEC_EXIT, PEC_NS3_END, PEC_NS3_STOP } |
typedef Callback< void > | Runnable |
Public Member Functions | |
DceManager () | |
virtual | ~DceManager () |
uint16_t | Clone (Thread *thread) |
struct Process * | CreateProcess (std::string name, std::string stdinfilename, std::vector< std::string > args, std::vector< std::pair< std::string, std::string > > envs, int pid) |
struct Thread * | CreateThread (struct Process *process) |
void | DeleteProcess (struct Process *process, ProcessEndCause type) |
void | DeleteThread (struct Thread *thread) |
int | Execve (const char *path, const char *argv0, char *const argv[], char *const envp[]) |
void | Exit (void) |
void | FinishChild (uint16_t pid) |
std::map< uint16_t, Process * > | GetProcs () |
std::string | GetVirtualPath () const |
void | ResumeTemporaryTask (uint16_t pid) |
Process * | SearchProcess (uint16_t pid) |
Thread * | SearchThread (uint16_t pid, uint16_t tid) |
void | SetFinishedCallback (uint16_t pid, Callback< void, uint16_t, int > cb) |
void | SetVirtualPath (std::string p) |
uint16_t | Start (std::string name, std::string stdinfilename, std::vector< std::string > args, std::vector< std::pair< std::string, std::string > > envs, uid_t uid, uid_t euid, uid_t gid, uid_t egid) |
uint16_t | Start (std::string name, std::string stdinfilename, uint32_t stackSize, std::vector< std::string > args, std::vector< std::pair< std::string, std::string > > envs, uid_t uid, uid_t euid, uid_t gid, uid_t egid) |
uint16_t | StartInternalTask () |
uint16_t | StartTemporaryTask () |
void | Stop (uint16_t pid) |
void | StopTemporaryTask (uint16_t pid) |
void | SuspendTemporaryTask (uint16_t pid) |
void | Wait (void) |
Time | Wait (Time timeout) |
void | Wakeup (Thread *thread) |
void | Yield (void) |
Static Public Member Functions | |
static void | AppendProcFile (Process *p) |
static void | AppendStatusFile (uint16_t pid, uint32_t nodeId, std::string &line) |
static TypeId | GetTypeId (void) |
Private Member Functions | |
uint16_t | AllocatePid (void) |
uint16_t | AllocateTid (const struct Process *process) const |
bool | CheckProcessContext (void) const |
void | ChildFinished (uint16_t pid) |
void | CleanupThread (struct Thread *thread) |
std::vector< std::string > | CopyArgs (char *const argv[]) |
int | CopyEnv (char *const envp[], std::vector< std::pair< std::string, std::string > > &res) |
virtual void | DoDispose (void) |
void | SetArgv (struct Process *process, std::string filename, std::vector< std::string > args) |
void | SetEnvp (struct Process *process, std::vector< std::pair< std::string, std::string > > envp) |
bool | ThreadExists (Thread *thread) |
bool | WakeupChildWaiters (struct Process *p) |
Static Private Member Functions | |
static int | CreatePidFile (struct Thread *current, std::string prefix) |
static void | DoExecProcess (void *c) |
static void | DoStartProcess (void *context) |
static void | EnsureDirectoryExists (struct Thread *current, std::string dirName) |
static struct::Libc * | GetLibc (void) |
static void * | LoadMain (Loader *ld, std::string filename, Process *proc, int &err) |
static void | SetDefaultSigHandler (std::vector< SignalHandler > &signalHandlers) |
static void | SigabrtHandler (int signal) |
static void | SigkillHandler (int signal) |
static void | StartProcessDebugHook (void) |
static void | TaskSwitch (enum Task::SwitchType type, void *context) |
Private Attributes | |
bool | m_minimizeFiles |
uint16_t | m_nextPid |
std::map< uint16_t, Process * > | m_processes |
TracedCallback< uint16_t, int > | m_processExit |
std::string | m_virtualPath |
Static Private Attributes | |
static int(*)(int, char **) | PrepareDoStartProcess (Thread *current) |
Manages a set of virtual POSIX processes within the same address space.
Functionality provided by this class:
A couple of applications which you can try with this loader:
Definition at line 73 of file dce-manager.h.
typedef Callback<void> ns3::DceManager::Runnable |
Definition at line 76 of file dce-manager.h.
Definition at line 77 of file dce-manager.h.
ns3::DceManager::DceManager | ( | ) |
Definition at line 91 of file dce-manager.cc.
|
virtual |
Definition at line 95 of file dce-manager.cc.
|
private |
Definition at line 475 of file dce-manager.cc.
References m_nextPid, and SearchProcess().
Referenced by Clone(), and CreateProcess().
|
private |
Definition at line 494 of file dce-manager.cc.
References ns3::Process::threads, and ns3::Thread::tid.
Referenced by CreateThread().
|
static |
Definition at line 1049 of file dce-manager.cc.
References ns3::ProcessActivity::cmdLine, ns3::ProcessActivity::exitValue, ns3::Process::nodeId, ns3::ProcessActivity::ns3End, ns3::ProcessActivity::ns3Start, ns3::Process::pid, ns3::ProcessActivity::realEnd, ns3::ProcessActivity::realStart, and ns3::Process::timing.
Referenced by dce_exit().
|
static |
Definition at line 1028 of file dce-manager.cc.
References ns3::GetTimeStamp().
Referenced by dce_exit(), DoDispose(), Execve(), and Stop().
|
private |
Definition at line 943 of file dce-manager.cc.
References ns3::Current().
Referenced by SearchThread().
|
private |
Definition at line 1093 of file dce-manager.cc.
References ns3::Process::children, m_processes, ns3::Process::ppid, SearchProcess(), and WakeupChildWaiters().
Referenced by DeleteProcess().
|
private |
Definition at line 721 of file dce-manager.cc.
References ns3::PollTable::FreeWait(), ns3::Thread::ioWait, and ns3::Thread::pollTable.
Referenced by DeleteProcess(), and Execve().
uint16_t ns3::DceManager::Clone | ( | Thread * | thread | ) |
Definition at line 585 of file dce-manager.cc.
References ns3::Process::alloc, AllocatePid(), ns3::Process::children, KingsleyAlloc::Clone(), ns3::Loader::Clone(), CreateThread(), ns3::Current(), ns3::Process::cwd, ns3::Process::egid, ns3::Process::euid, ns3::ProcessActivity::exitValue, ns3::FileUsage::GetFile(), ns3::UnixFd::IncFdCount(), ns3::Process::loader, m_processes, ns3::Process::manager, ns3::Process::name, ns3::Process::nextCid, ns3::Process::nextMid, ns3::Process::nextSid, ns3::ProcessActivity::ns3End, ns3::ProcessActivity::ns3Start, ns3::Process::openFiles, ns3::Process::originalArgc, ns3::Process::originalArgv, ns3::Process::originalEnvp, ns3::Process::pendingSignals, ns3::Process::penvp, ns3::Process::pgid, ns3::Process::pid, ns3::Process::ppid, ns3::Thread::process, ns3::Process::pstderr, ns3::Process::pstdin, ns3::Process::pstdout, ns3::ProcessActivity::realEnd, ns3::ProcessActivity::realStart, ns3::Process::rgid, ns3::Process::rndVarible, ns3::Process::ruid, ns3::Task::SetContext(), SetDefaultSigHandler(), ns3::Task::SetSwitchNotifier(), ns3::Process::sgid, ns3::Process::signalHandlers, ns3::Process::suid, ns3::Thread::task, TaskSwitch(), and ns3::Process::timing.
Referenced by dce_fork().
|
private |
Definition at line 1141 of file dce-manager.cc.
Referenced by Execve().
|
private |
Definition at line 1162 of file dce-manager.cc.
References ns3::Current(), and ns3::Thread::err.
Referenced by Execve().
|
staticprivate |
Definition at line 154 of file dce-manager.cc.
References dce_creat(), EnsureDirectoryExists(), ns3::Process::pid, and ns3::Thread::process.
|
read |
Definition at line 292 of file dce-manager.cc.
References ns3::Process::alloc, AllocatePid(), ns3::ProcessActivity::cmdLine, ns3::Process::cwd, ns3::Process::egid, ns3::Process::euid, ns3::ProcessActivity::exitValue, ns3::Process::loader, m_minimizeFiles, m_processes, ns3::Process::manager, ns3::Process::minimizeFiles, ns3::Process::name, ns3::Process::nextCid, ns3::Process::nextMid, ns3::Process::nextSid, ns3::Process::nodeId, ns3::ProcessActivity::ns3End, ns3::ProcessActivity::ns3Start, ns3::Process::originalArgc, ns3::Process::originalArgv, ns3::Process::originalEnvp, ns3::Process::pendingSignals, ns3::Process::penvp, ns3::Process::pgid, ns3::Process::pid, ns3::Process::ppid, ns3::Process::pstderr, ns3::Process::pstdin, ns3::Process::pstdout, ns3::ProcessActivity::realEnd, ns3::ProcessActivity::realStart, ns3::Process::rgid, ns3::Process::rndVarible, ns3::Process::ruid, SetArgv(), SetDefaultSigHandler(), SetEnvp(), ns3::Process::sgid, ns3::Process::signalHandlers, ns3::Process::stdinFilename, ns3::Process::suid, ns3::Process::timing, ns3::Process::uMask, and ns3::UtilsGetNodeId().
Referenced by Start(), StartInternalTask(), and StartTemporaryTask().
Definition at line 519 of file dce-manager.cc.
References AllocateTid(), ns3::Thread::childWaiter, ns3::Thread::err, ns3::Thread::hasExitValue, ns3::Thread::ioWait, ns3::Thread::isDetached, ns3::Thread::joinWaiter, ns3::Thread::keyValues, ns3::Thread::lastTime, ns3::Thread::pollTable, ns3::Thread::process, ns3::Thread::signalMask, ns3::Process::threads, and ns3::Thread::tid.
Referenced by Clone(), dce_pthread_create(), Execve(), Start(), StartInternalTask(), and StartTemporaryTask().
void ns3::DceManager::DeleteProcess | ( | struct Process * | process, |
ProcessEndCause | type | ||
) |
Definition at line 772 of file dce-manager.cc.
References ns3::Process::alloc, ns3::Process::allocated, ChildFinished(), ns3::Process::children, CleanupThread(), dce_close(), dce_fclose_unconditional(), ns3::dce_internalClosedir(), DeleteThread(), KingsleyAlloc::Dispose(), ns3::ProcessActivity::exitValue, ns3::Process::finished, ns3::Process::itimer, ns3::Process::loader, m_processes, m_processExit, ns3::Process::mutexes, ns3::FileUsage::NullifyUsage(), ns3::Process::openDirs, ns3::Process::openFiles, ns3::Process::openStreams, PEC_EXIT, PEC_NS3_STOP, ns3::Process::pid, ns3::Process::ppid, SearchProcess(), ns3::Process::semaphores, ns3::Process::threads, and ns3::Process::timing.
Referenced by dce_exit(), DoDispose(), Stop(), and StopTemporaryTask().
void ns3::DceManager::DeleteThread | ( | struct Thread * | thread | ) |
Definition at line 743 of file dce-manager.cc.
References ns3::Thread::childWaiter, ns3::Thread::process, Stop(), ns3::Thread::task, and ns3::Process::threads.
Referenced by dce_pthread_exit(), dce_pthread_join(), DeleteProcess(), and Execve().
|
privatevirtual |
Definition at line 100 of file dce-manager.cc.
References AppendStatusFile(), DeleteProcess(), m_processes, ns3::Process::nodeId, PEC_NS3_END, and ns3::Process::pid.
|
staticprivate |
Definition at line 1284 of file dce-manager.cc.
References ns3::Current(), dce_exit(), main(), ns3::Process::originalArgc, ns3::Process::originalArgv, ns3::Thread::process, and StartProcessDebugHook().
Referenced by Execve().
|
staticprivate |
Definition at line 272 of file dce-manager.cc.
References dce_exit(), main(), ns3::Process::originalArgc, ns3::Process::originalArgv, PrepareDoStartProcess, ns3::Thread::process, and StartProcessDebugHook().
Referenced by Start().
|
staticprivate |
Definition at line 131 of file dce-manager.cc.
References dce_close(), dce_mkdir(), dce_open(), and ns3::Thread::err.
Referenced by CreatePidFile().
int ns3::DceManager::Execve | ( | const char * | path, |
const char * | argv0, | ||
char *const | argv[], | ||
char *const | envp[] | ||
) |
Definition at line 1313 of file dce-manager.cc.
References ns3::Process::alloc, ns3::Process::allocated, AppendStatusFile(), ns3::Process::atExitHandlers, ns3::CheckShellScript(), CleanupThread(), ns3::Process::conditions, CopyArgs(), CopyEnv(), CreateThread(), ns3::Current(), ns3::TaskManager::Current(), dce_fclose_onexec(), DeleteThread(), KingsleyAlloc::Dispose(), DoExecProcess(), ns3::Thread::err, ns3::Process::loader, LoadMain(), main(), ns3::Process::mainHandle, ns3::Process::mutexes, ns3::Process::name, ns3::Process::nextCid, ns3::Process::nextMid, ns3::Process::nextSid, ns3::Process::nodeId, ns3::Process::openStreams, ns3::Process::originalArgc, ns3::Process::originalArgv, ns3::Process::originalEnvp, ns3::Process::originalProgname, ns3::Process::penvp, ns3::Process::pid, ns3::Thread::process, ns3::Process::pstderr, ns3::Process::pstdin, ns3::Process::pstdout, ns3::SearchExecFile(), ns3::seek_env(), ns3::Process::semaphores, SetArgv(), ns3::Task::SetContext(), SetDefaultSigHandler(), SetEnvp(), ns3::Task::SetSwitchNotifier(), ns3::Process::signalHandlers, ns3::Thread::task, TaskSwitch(), and ns3::Process::threads.
Referenced by dce_execl(), dce_execle(), dce_execlp(), dce_execv(), dce_execve(), and dce_execvp().
void ns3::DceManager::Exit | ( | void | ) |
Definition at line 552 of file dce-manager.cc.
References ns3::Current().
void ns3::DceManager::FinishChild | ( | uint16_t | pid | ) |
Definition at line 1130 of file dce-manager.cc.
References m_processes, and SearchProcess().
Referenced by dce_waitpid().
|
staticprivate |
Definition at line 119 of file dce-manager.cc.
References libc_dce().
Referenced by LoadMain().
std::map< uint16_t, Process * > ns3::DceManager::GetProcs | ( | ) |
Definition at line 1087 of file dce-manager.cc.
References m_processes.
|
static |
Definition at line 70 of file dce-manager.cc.
References m_minimizeFiles, m_nextPid, and m_processExit.
std::string ns3::DceManager::GetVirtualPath | ( | ) | const |
Definition at line 1534 of file dce-manager.cc.
References m_virtualPath.
Referenced by ns3::SearchExecFile().
|
staticprivate |
Definition at line 1192 of file dce-manager.cc.
References GetLibc(), ns3::Loader::Load(), ns3::Loader::Lookup(), and ns3::Process::mainHandle.
Referenced by Execve().
void ns3::DceManager::ResumeTemporaryTask | ( | uint16_t | pid | ) |
Definition at line 443 of file dce-manager.cc.
References ns3::Current(), ns3::TaskManager::Current(), ns3::TaskManager::CurrentTask(), ns3::Process::pid, SearchProcess(), ns3::Thread::task, and ns3::Process::threads.
Process * ns3::DceManager::SearchProcess | ( | uint16_t | pid | ) |
Definition at line 970 of file dce-manager.cc.
References m_processes.
Referenced by AllocatePid(), ChildFinished(), dce_kill(), dce_waitpid(), DeleteProcess(), FinishChild(), ResumeTemporaryTask(), SearchThread(), SetFinishedCallback(), Stop(), StopTemporaryTask(), and SuspendTemporaryTask().
Thread * ns3::DceManager::SearchThread | ( | uint16_t | pid, |
uint16_t | tid | ||
) |
Definition at line 949 of file dce-manager.cc.
References CheckProcessContext(), SearchProcess(), ns3::Process::threads, and ns3::Thread::tid.
Referenced by dce_pthread_detach(), dce_pthread_join(), and dce_pthread_kill().
|
private |
Definition at line 984 of file dce-manager.cc.
References ns3::Process::allocated, ns3::Process::originalArgc, ns3::Process::originalArgv, and ns3::Process::originalProgname.
Referenced by CreateProcess(), and Execve().
|
staticprivate |
Definition at line 1295 of file dce-manager.cc.
References ns3::SignalHandler::flags, ns3::SignalHandler::handler, ns3::SignalHandler::mask, SigabrtHandler(), SigkillHandler(), and ns3::SignalHandler::signal.
Referenced by Clone(), CreateProcess(), and Execve().
|
private |
Definition at line 1006 of file dce-manager.cc.
References ns3::Process::allocated, and ns3::Process::originalEnvp.
Referenced by CreateProcess(), and Execve().
void ns3::DceManager::SetFinishedCallback | ( | uint16_t | pid, |
Callback< void, uint16_t, int > | cb | ||
) |
Definition at line 685 of file dce-manager.cc.
References ns3::Process::finished, and SearchProcess().
void ns3::DceManager::SetVirtualPath | ( | std::string | p | ) |
Definition at line 1529 of file dce-manager.cc.
References m_virtualPath.
|
staticprivate |
Definition at line 715 of file dce-manager.cc.
References dce_exit().
Referenced by SetDefaultSigHandler().
|
staticprivate |
Definition at line 709 of file dce-manager.cc.
References dce_exit().
Referenced by SetDefaultSigHandler().
uint16_t ns3::DceManager::Start | ( | std::string | name, |
std::string | stdinfilename, | ||
std::vector< std::string > | args, | ||
std::vector< std::pair< std::string, std::string > > | envs, | ||
uid_t | uid, | ||
uid_t | euid, | ||
uid_t | gid, | ||
uid_t | egid | ||
) |
Definition at line 380 of file dce-manager.cc.
References CreateProcess(), CreateThread(), ns3::Current(), DoStartProcess(), ns3::Process::egid, ns3::Process::euid, ns3::Process::pid, ns3::Process::rgid, ns3::Process::ruid, ns3::Task::SetContext(), ns3::Task::SetSwitchNotifier(), ns3::Thread::task, and TaskSwitch().
uint16_t ns3::DceManager::Start | ( | std::string | name, |
std::string | stdinfilename, | ||
uint32_t | stackSize, | ||
std::vector< std::string > | args, | ||
std::vector< std::pair< std::string, std::string > > | envs, | ||
uid_t | uid, | ||
uid_t | euid, | ||
uid_t | gid, | ||
uid_t | egid | ||
) |
Definition at line 398 of file dce-manager.cc.
References CreateProcess(), CreateThread(), ns3::Current(), DoStartProcess(), ns3::Process::egid, ns3::Process::euid, ns3::Process::pid, ns3::Process::rgid, ns3::Process::ruid, ns3::Task::SetContext(), ns3::Task::SetSwitchNotifier(), ns3::Thread::task, and TaskSwitch().
uint16_t ns3::DceManager::StartInternalTask | ( | ) |
Definition at line 417 of file dce-manager.cc.
References CreateProcess(), CreateThread(), ns3::Process::pid, and ns3::Task::SetContext().
|
staticprivate |
Definition at line 287 of file dce-manager.cc.
Referenced by DoExecProcess(), and DoStartProcess().
uint16_t ns3::DceManager::StartTemporaryTask | ( | ) |
Definition at line 428 of file dce-manager.cc.
References CreateProcess(), CreateThread(), ns3::Current(), ns3::TaskManager::Current(), ns3::TaskManager::CurrentTask(), ns3::Process::pid, ns3::Task::SetContext(), and ns3::Thread::task.
void ns3::DceManager::Stop | ( | uint16_t | pid | ) |
Definition at line 695 of file dce-manager.cc.
References AppendStatusFile(), DeleteProcess(), ns3::Process::nodeId, PEC_NS3_STOP, ns3::Process::pid, and SearchProcess().
Referenced by DeleteThread(), and ns3::DceApplication::StopApplication().
void ns3::DceManager::StopTemporaryTask | ( | uint16_t | pid | ) |
Definition at line 462 of file dce-manager.cc.
References ns3::Current(), ns3::TaskManager::Current(), ns3::TaskManager::CurrentTask(), DeleteProcess(), PEC_EXIT, ns3::Process::pid, SearchProcess(), ns3::Thread::task, and ns3::Process::threads.
void ns3::DceManager::SuspendTemporaryTask | ( | uint16_t | pid | ) |
Definition at line 453 of file dce-manager.cc.
References ns3::Current(), ns3::TaskManager::Current(), ns3::TaskManager::CurrentTask(), ns3::Process::pid, SearchProcess(), ns3::Thread::task, and ns3::Process::threads.
Referenced by ns3::LinuxSocketImpl::LeaveFakeTask().
|
staticprivate |
Definition at line 365 of file dce-manager.cc.
References ns3::Process::alloc, ns3::Task::FROM, ns3::Process::loader, ns3::Loader::NotifyEndExecute(), ns3::Loader::NotifyStartExecute(), KingsleyAlloc::SwitchTo(), and ns3::Task::TO.
Referenced by Clone(), Execve(), and Start().
|
private |
Definition at line 558 of file dce-manager.cc.
References ns3::Thread::process, and ns3::Process::threads.
Referenced by Wakeup().
void ns3::DceManager::Wait | ( | void | ) |
Definition at line 666 of file dce-manager.cc.
References ns3::Current().
Referenced by dce_nanosleep(), dce_pthread_cond_timedwait(), dce_pthread_cond_wait(), dce_pthread_join(), dce_pthread_mutex_lock(), dce_sem_timedwait(), dce_sem_wait(), dce_sigwait(), dce_sleep(), dce_usleep(), ns3::LinuxSocketImpl::Poll(), ns3::UnixTimerFd::Read(), ns3::UtilsAdvanceTime(), ns3::Waiter::Wait(), and ns3::WaitPoint::Wait().
Time ns3::DceManager::Wait | ( | Time | timeout | ) |
Definition at line 672 of file dce-manager.cc.
References ns3::Current().
void ns3::DceManager::Wakeup | ( | Thread * | thread | ) |
Definition at line 678 of file dce-manager.cc.
References ns3::Current(), ns3::Thread::task, and ThreadExists().
Referenced by ns3::UnixTimerFd::Close(), dce_pthread_cond_broadcast(), dce_pthread_cond_signal(), dce_pthread_exit(), dce_pthread_kill(), dce_pthread_mutex_unlock(), dce_sem_post(), ns3::UnixTimerFd::TimerExpired(), ns3::UtilsSendSignal(), ns3::Waiter::Wakeup(), and ns3::WaitPoint::WakeUpCallback().
|
private |
Definition at line 1113 of file dce-manager.cc.
References ns3::Thread::childWaiter, ns3::Process::threads, and ns3::Waiter::Wakeup().
Referenced by ChildFinished().
void ns3::DceManager::Yield | ( | void | ) |
Definition at line 660 of file dce-manager.cc.
References ns3::Current().
Referenced by dce_pthread_mutex_unlock(), dce_sched_yield(), and dce_sem_post().
|
private |
Definition at line 162 of file dce-manager.h.
Referenced by CreateProcess(), and GetTypeId().
|
private |
Definition at line 159 of file dce-manager.h.
Referenced by AllocatePid(), and GetTypeId().
|
private |
Definition at line 158 of file dce-manager.h.
Referenced by ChildFinished(), Clone(), CreateProcess(), DeleteProcess(), DoDispose(), FinishChild(), GetProcs(), and SearchProcess().
|
private |
Definition at line 160 of file dce-manager.h.
Referenced by DeleteProcess(), and GetTypeId().
|
private |
Definition at line 163 of file dce-manager.h.
Referenced by GetVirtualPath(), and SetVirtualPath().
|
staticprivate |
Definition at line 133 of file dce-manager.h.
Referenced by DoStartProcess().