diff --git a/linux/src/daemon/lad.c b/linux/src/daemon/lad.c
index 1cbd314253790d53b08a10ec846f19ba54c11db9..170c3ec6c783ae402b8cff9a869a8b8052375e1c 100644 (file)
--- a/linux/src/daemon/lad.c
+++ b/linux/src/daemon/lad.c
h : print this help message\n\
g : enable GateMP support \n\
l <logfile> : name of logfile for LAD\n\
+ n <nprocs> : total number of processors in the system\n\
p <oct value>: set LAD's directory permissions\n\
+ r <nreserve> : number of reserved queues\n\
+ s <synctype> : type of Ipc_ProcSync (ALL|PAIR|NONE)\n\
b <value> : Processor's base cluster id \n\
\n\
Examples:\n\
int main(int argc, char * argv[])
{
MessageQ_Handle handle;
+ Ipc_Config ipcCfg;
UInt16 *procIdPtr;
Int statusIO;
Int clientId;
/* process command line args */
while (1) {
- c = getopt(argc, argv, "b:ghl:p:");
+ c = getopt(argc, argv, "b:ghl:n:p:r:s:");
if (c == -1) {
break;
}
#endif
break;
case 'b':
- if (_MultiProc_cfg.id == 0xFFFF &&
- _MultiProc_cfg.baseIdOfCluster == 0xFFFF) {
- printf("\nSetting base cluster id to %s\n", optarg);
- _MultiProc_cfg.id = atoi(optarg);
- _MultiProc_cfg.baseIdOfCluster = atoi(optarg);
- }
- else {
- printf("\nBase cluster id in the MultiProcCfg file must be\n"
- "set to MultiProc_INVALIDID(0xFFFF) when using -b option\n");
- exit(EXIT_FAILURE);
- }
+ printf("\nSet LAD's base cluster id to %s\n", optarg);
+ _MultiProc_cfg.id = atoi(optarg);
+ _MultiProc_cfg.baseIdOfCluster = atoi(optarg);
break;
case 'h':
printf("%s", LAD_USAGE);
}
}
break;
+ case 'n':
+ printf("\nSet LAD's number of processors to %s\n", optarg);
+ _MultiProc_cfg.numProcessors = atoi(optarg);
+ break;
case 'p':
printf("\nSet LAD's directory permissions to '%s'\n", optarg);
chmod(LAD_ROOTDIR, strtol(optarg, NULL, 8));
chmod(LAD_WORKINGDIR, strtol(optarg, NULL, 8));
break;
+ case 'r':
+ printf("\nSet LAD's number of reserved queues to %s\n", optarg);
+ _MessageQ_setNumReservedEntries(atoi(optarg));
+ break;
+ case 's':
+ printf("\nSet LAD's synchronization scheme to ProcSync_%s\n",
+ optarg);
+
+ Ipc_getConfig(&ipcCfg);
+
+ if (!strcmp(optarg, "ALL")) {
+ ipcCfg.procSync = Ipc_ProcSync_ALL;
+ }
+ else if (!strcmp(optarg, "PAIR")) {
+ ipcCfg.procSync = Ipc_ProcSync_PAIR;
+ }
+ else if (!strcmp(optarg, "NONE")) {
+ ipcCfg.procSync = Ipc_ProcSync_NONE;
+ }
+ else {
+ printf("Error: bad synchronization specified, must be "
+ "ALL|PAIR|NONE\n");
+ exit(EXIT_FAILURE);
+ }
+
+ Ipc_setConfig(&ipcCfg);
+ break;
default:
fprintf (stderr, "\nUnrecognized argument\n");
exit(EXIT_FAILURE);
}
/* Check to ensure id and baseId are not invalid */
- printf ("id = %d baseId= %d\n", _MultiProc_cfg.id, _MultiProc_cfg.baseIdOfCluster);
- if (_MultiProc_cfg.id == 0xFFFF || _MultiProc_cfg.baseIdOfCluster == 0xFFFF){
+ printf ("\nnumProcessors = %d id = %d baseId = %d\n",
+ _MultiProc_cfg.numProcessors, _MultiProc_cfg.id,
+ _MultiProc_cfg.baseIdOfCluster);
+
+ if (_MultiProc_cfg.id == 0xFFFF ||
+ _MultiProc_cfg.baseIdOfCluster == 0xFFFF) {
printf("\nBase cluster id is set to an INVALID value\n");
printf("Use -b option to set value or modify the MultiProcCfg file\n");
exit(EXIT_FAILURE);
}
+ if ((_MultiProc_cfg.baseIdOfCluster + _MultiProc_cfg.numProcsInCluster) >
+ _MultiProc_cfg.numProcessors) {
+ printf("\nNumber of processors (%d) must be >= base cluster id + "
+ "number of processors in cluster (%d + %d)\n",
+ _MultiProc_cfg.numProcessors, _MultiProc_cfg.baseIdOfCluster,
+ _MultiProc_cfg.numProcsInCluster);
+ exit(EXIT_FAILURE);
+ }
#if DAEMON
break;
+ case LAD_RPROC_SETID:
+ rsp.status = MultiProc_rprocSetId(cmd.args.rprocSetId.procId,
+ cmd.args.rprocSetId.rprocId);
+ break;
+
case LAD_IPC_GETCONFIG:
Ipc_getConfig(&rsp.ipcConfig);
break;
break;
case LAD_NAMESERVER_DELETE:
- LOG1("LAD_NAMESERVER_DELETE: calling NameServer_delete(%p)...\n", cmd.args.delete.handle)
+ LOG1("LAD_NAMESERVER_DELETE: calling NameServer_delete(%p)...\n",
+ cmd.args.nsdelete.handle)
- rsp.delete.handle = cmd.args.delete.handle;
- rsp.delete.status = NameServer_delete(&rsp.delete.handle);
+ rsp.nsdelete.handle = cmd.args.nsdelete.handle;
+ rsp.nsdelete.status = NameServer_delete(&rsp.nsdelete.handle);
- LOG1(" status = %d\n", rsp.status)
+ LOG1(" status = %d\n", rsp.nsdelete.status)
LOG0("DONE\n")
break;
case LAD_NAMESERVER_GET:
LOG2("LAD_NAMESERVER_GET: calling NameServer_get(%p, '%s'",
- cmd.args.get.handle, cmd.args.get.name)
+ cmd.args.get.handle, cmd.args.get.name)
LOG0(")...\n")
if (cmd.args.get.procId[0] == (UInt16)-1) {
else {
procIdPtr = cmd.args.get.procId;
}
- rsp.status = NameServer_get(
+ rsp.get.status = NameServer_get(
cmd.args.get.handle,
cmd.args.get.name,
rsp.get.buf,
rsp.get.len = cmd.args.get.len;
LOG1(" value = 0x%x\n", rsp.get.len)
- LOG1(" status = %d\n", rsp.status)
+ LOG1(" status = %d\n", rsp.get.status)
LOG0("DONE\n")
break;
case LAD_NAMESERVER_ADDUINT32:
- LOG1("LAD_NAMESERVER_ADDUINT32: calling NameServer_addUInt32(%p, ", cmd.args.addUInt32.handle)
- LOG2("'%s', 0x%x)...\n", cmd.args.addUInt32.name, cmd.args.addUInt32.val)
+ LOG3("LAD_NAMESERVER_ADDUINT32: calling NameServer_addUInt32"
+ "(%p, '%s', 0x%x)...\n", cmd.args.addUInt32.handle,
+ cmd.args.addUInt32.name, cmd.args.addUInt32.val)
rsp.entryPtr = NameServer_addUInt32(
cmd.args.addUInt32.handle,
break;
case LAD_NAMESERVER_GETUINT32:
- LOG2("LAD_NAMESERVER_GETUINT32: calling NameServer_getUInt32(%p, '%s')...\n", cmd.args.getUInt32.handle, cmd.args.getUInt32.name)
+ LOG2("LAD_NAMESERVER_GETUINT32: calling NameServer_getUInt32"
+ "(%p, '%s')...\n", cmd.args.getUInt32.handle,
+ cmd.args.getUInt32.name)
if (cmd.args.getUInt32.procId[0] == (UInt16)-1) {
procIdPtr = NULL;
else {
procIdPtr = cmd.args.getUInt32.procId;
}
- rsp.status = NameServer_getUInt32(
+ rsp.getUInt32.status = NameServer_getUInt32(
cmd.args.getUInt32.handle,
cmd.args.getUInt32.name,
&rsp.getUInt32.val,
procIdPtr);
LOG1(" value = 0x%x\n", rsp.getUInt32.val)
- LOG1(" status = %d\n", rsp.status)
+ LOG1(" status = %d\n", rsp.getUInt32.status)
LOG0("DONE\n")
break;
case LAD_DISCONNECT:
break;
+ case LAD_RPROC_SETID:
case LAD_IPC_GETCONFIG:
case LAD_NAMESERVER_SETUP:
case LAD_NAMESERVER_DESTROY: