* http://dce.felk.cvut.cz
* http://www.ocera.org
*
- * Author: Petr Smolik petr.smolik@wo.cz
+ * Author: Petr Smolik petr@smoliku.cz
* Advisor: Pavel Pisa
* Project Responsible: Zdenek Hanzalek
* --------------------------------------------------------------------
#include "orte_all.h"
+#ifdef HAVE_INTTYPES_H
+ #include <inttypes.h>
+ #if defined(PRIx32) && !defined(ORTE_PRI_HostId)
+ #define ORTE_PRI_HostId PRIx32
+ #define ORTE_PRI_AppId PRIx32
+ #endif
+#endif /*HAVE_INTTYPES_H*/
+
+#ifndef ORTE_PRI_HostId
+ #define ORTE_PRI_HostId x
+ #define ORTE_PRI_AppId x
+#endif
+
+#ifdef MAIN_RENAMED
+#define main ortemanager_main
+#define exit return
+#endif
+
#ifndef CONFIG_ORTE_RT
//global variables
-ORTEDomain *d;
-ORTEDomainProp dp;
-int32_t opt,domain=ORTE_DEFAULT_DOMAIN;
-Boolean orteDaemon=ORTE_FALSE;
-Boolean orteWinService=ORTE_FALSE;
-ORTEDomainAppEvents *events=NULL;
+static ORTEDomain *d;
+static ORTEDomainProp dp;
+static int32_t opt,domain=ORTE_DEFAULT_DOMAIN;
+static Boolean orteDaemon=ORTE_FALSE;
+static Boolean orteWinService=ORTE_FALSE;
+static ORTEDomainAppEvents *events=NULL;
//event system
Boolean
onMgrAppRemoteNew(const struct ORTEAppInfo *appInfo, void *param) {
- printf("%s 0x%x-0x%x was accepted\n",
+ printf("%s 0x%"ORTE_PRI_HostId"-0x%"ORTE_PRI_AppId" was accepted\n",
(appInfo->appId & 0x3)==MANAGER ? "manager" : "application",
appInfo->hostId,appInfo->appId);
return ORTE_TRUE;
void
onMgrAppDelete(const struct ORTEAppInfo *appInfo, void *param) {
- printf("%s 0x%x-0x%x was deleted\n",
+ printf("%s 0x%"ORTE_PRI_HostId"-0x%"ORTE_PRI_AppId" was deleted\n",
(appInfo->appId & 0x3)==MANAGER ? "manager" : "application",
appInfo->hostId,appInfo->appId);
}
#endif
#ifdef CONFIG_ORTE_UNIX
+#ifdef HAVE_SYS_STAT_H
+ #include <sys/stat.h> /* For umask() */
+#endif
//Unix daemon support
-pthread_mutex_t mutex; //for wake up
-pthread_cond_t cond; //for wake up
-int cvalue;
-void sig_usr(int signo) {
- if ((signo==SIGTERM) || (signo==SIGINT)) {
- pthread_mutex_lock(&mutex);
- cvalue=1;
- pthread_cond_signal(&cond);
- pthread_mutex_unlock(&mutex);
- }
-}
void waitForEndingCommand(void) {
- pthread_mutex_init(&mutex, NULL);
- pthread_cond_init(&cond, NULL);
- cvalue=0;
- signal(SIGTERM,sig_usr);
- signal(SIGINT,sig_usr);
- pthread_mutex_lock(&mutex);
- while(cvalue==0)
- pthread_cond_wait(&cond,&mutex);
- pthread_mutex_unlock(&mutex);
- pthread_mutex_destroy(&mutex);
- pthread_cond_destroy(&cond);
+ sigset_t sigset;
+ sigemptyset(&sigset);
+ sigaddset(&sigset, SIGINT);
+ sigaddset(&sigset, SIGTERM);
+ {
+ #ifdef HAVE_SIGWAITINFO
+ sigwaitinfo(&sigset, NULL);
+ #else /*HAVE_SIGWAITINFO*/
+ int sig;
+ sigwait(&sigset, &sig);
+ #endif /*HAVE_SIGWAITINFO*/
+ }
}
static int daemonInit(void) {
pid_t pid;
printf(" -P, --purge <s> purge time in second(s)\n");
printf(" -I, --metaMulticast <IPAdd> use multicast IPAddr for metatraffic comm.\n");
printf(" -t, --timetolive <number> time-to-live for multicast packets\n");
+ printf(" -L, --listen <IPAdd> IP address to listen on\n");
#ifdef CONFIG_ORTE_UNIX
printf(" -D, --daemon start program like daemon\n");
#endif
{ "purge",1,0, 'P' },
{ "metaMulticast",1,0, 'I' },
{ "timetolive",1,0, 't' },
+ { "listen",1,0, 'L' },
#ifdef CONFIG_ORTE_UNIX
{ "daemon",1,0, 'D' },
#endif
ORTEDomainPropDefaultGet(&dp);
#if defined HAVE_GETOPT_LONG || defined HAVE_GETOPT_LONG_ORTE
- while ((opt = getopt_long(argc, argv, "k:p:d:v:R:E:P:I:t:l:VhDesir",&long_opts[0], NULL)) != EOF) {
+ while ((opt = getopt_long(argc, argv, "k:p:d:v:R:E:P:I:t:L:l:VhDesir",&long_opts[0], NULL)) != EOF) {
#else
- while ((opt = getopt(argc, argv, "k:p:d:v:R:E:P:I:t:l:VhDesir")) != EOF) {
+ while ((opt = getopt(argc, argv, "k:p:d:v:R:E:P:I:t:L:l:VhDesir")) != EOF) {
#endif
switch (opt) {
case 'p':
dp.multicast.enabled=ORTE_TRUE;
dp.multicast.ipAddress=StringToIPAddress(optarg);
break;
+ case 'L':
+ dp.listen=StringToIPAddress(optarg);
+ break;
case 't':
dp.multicast.ttl=strtol(optarg,NULL,0);
break;
}
d=ORTEDomainMgrCreate(domain,&dp,events,ORTE_TRUE);
- if (!d)
+ if (!d) {
+ perror("ORTEDomainMgrCreate");
exit(1);
+ }
#ifdef CONFIG_ORTE_UNIX
if (orteDaemon)