* $Id: ortemanager.c,v 0.0.0.1 2003/10/07
*
* DEBUG: section Manager
- * AUTHOR: Petr Smolik petr.smolik@wo.cz
*
- * ORTE - OCERA Real-Time Ethernet http://www.ocera.org/
+ * -------------------------------------------------------------------
+ * ORTE
+ * Open Real-Time Ethernet
+ *
+ * Copyright (C) 2001-2006
+ * Department of Control Engineering FEE CTU Prague, Czech Republic
+ * http://dce.felk.cvut.cz
+ * http://www.ocera.org
+ *
+ * Author: Petr Smolik petr.smolik@wo.cz
+ * Advisor: Pavel Pisa
+ * Project Responsible: Zdenek Hanzalek
* --------------------------------------------------------------------
*
* This program is free software; you can redistribute it and/or modify
*
*/
-#include "orte.h"
+#include "orte_all.h"
+#include <sys/stat.h>
#ifndef CONFIG_ORTE_RT
//global variables
return 0;
}
int managerStart(void) {
- ORTEDomainStart(d,ORTE_TRUE,ORTE_FALSE,ORTE_TRUE);
+ ORTEDomainStart(d,ORTE_TRUE,ORTE_FALSE,ORTE_FALSE,ORTE_FALSE,ORTE_TRUE);
return 0;
}
int managerStop(void) {
#endif
#ifdef CONFIG_ORTE_UNIX
+#ifdef HAVE_SYS_STAT_H
+ #include <sys/stat.h> /* For umask() */
+#endif
//Unix daemon support
-pthread_mutex_t mutex;
-void sig_usr(int signo) {
- if ((signo==SIGTERM) || (signo==SIGINT)) {
- pthread_mutex_unlock(&mutex);
- }
-}
void waitForEndingCommand(void) {
- pthread_mutex_init(&mutex, NULL);
- pthread_mutex_lock(&mutex);
- signal(SIGTERM,sig_usr);
- signal(SIGINT,sig_usr);
- pthread_mutex_lock(&mutex);
+ sigset_t sigset;
+ int sig;
+ sigemptyset(&sigset);
+ sigaddset(&sigset, SIGINT);
+ sigaddset(&sigset, SIGTERM);
+ sigwait(&sigset, &sig);
}
static int daemonInit(void) {
pid_t pid;
printf(" ORTEManager -v ALL.7 all sections up to level 7\n");
printf(" -R, --refresh <s> refresh period in second(s)\n");
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
{ "verbosity",1,0, 'v' },
{ "refresh",1,0, 'R' },
{ "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: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: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.mgrs=strdup(optarg);
+ dp.mgrs=optarg;
break;
case 'k':
- dp.keys=strdup(optarg);
+ dp.keys=optarg;
break;
case 'd':
domain=strtol(optarg,NULL,0);
case 'P':
NtpTimeAssembFromMs(dp.baseProp.purgeTime,strtol(optarg,NULL,0),0);
break;
+ case 'I':
+ 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;
case 'E':
NtpTimeAssembFromMs(dp.baseProp.expirationTime,strtol(optarg,NULL,0),0);
break;
ORTEVerbositySetLogFile(optarg);
break;
case 'V':
- printf("Ocera Real-Time Ethernet (%s).\n",dp.version);
+ printf("Open Real-Time Ethernet (%s).\n",dp.version);
exit(0);
break;
case 'D':
}
d=ORTEDomainMgrCreate(domain,&dp,events,ORTE_TRUE);
- if (!d)
+ if (!d) {
+ perror("ORTEDomainMgrCreate");
exit(1);
+ }
#ifdef CONFIG_ORTE_UNIX
if (orteDaemon)
daemonInit();
#endif
- ORTEDomainStart(d,ORTE_TRUE,ORTE_FALSE,ORTE_FALSE);
+ ORTEDomainStart(d,ORTE_TRUE,ORTE_FALSE,ORTE_FALSE,ORTE_FALSE,ORTE_TRUE);
#ifndef CONFIG_ORTE_UNIX
- d->taskSend.terminate=ORTE_FALSE;
- ORTEAppSendThread(d);
+ while(1) ORTESleepMs(1000);
#endif
- ORTEDomainStart(d,ORTE_FALSE,ORTE_FALSE,ORTE_TRUE);
#ifdef CONFIG_ORTE_UNIX
waitForEndingCommand();
ORTEDomainMgrDestroy(d);
- if (dp.mgrs)
- free(dp.mgrs);
- if (dp.keys)
- free(dp.keys);
if (events)
free(events);
#endif
ORTEDomain *d=NULL;
pthread_t thread;
+void *
+domainInit(void *arg) {
+ ORTEDomainProp dp;
+
+ ORTEDomainPropDefaultGet(&dp);
+ ORTEVerbositySetOptions(verbosity);
+ dp.mgrs=peer;
+ d=ORTEDomainMgrCreate(ORTE_DEFAULT_DOMAIN,&dp,NULL,ORTE_TRUE);
+ return arg;
+}
+
void *
domainDestroy(void *arg) {
if (!d) return NULL;
return arg;
}
-
int
init_module(void) {
- ORTEDomainProp dp;
-
ORTEInit();
- ORTEDomainPropDefaultGet(&dp);
- ORTEVerbositySetOptions(verbosity);
- dp.mgrs=peer;
- d=ORTEDomainMgrCreate(ORTE_DEFAULT_DOMAIN,&dp,NULL,ORTE_FALSE);
+ pthread_create(&thread,NULL,&domainInit,NULL); //allocate resources in RT
+ pthread_join(thread,NULL);
+ if (d)
+ ORTEDomainStart(d,ORTE_TRUE,ORTE_FALSE,ORTE_FALSE,ORTE_FALSE,ORTE_TRUE); //manager start
return 0;
}
void