48 static void exitHandler();
50 static void sigHandler();
54 static void exitHandler()
59 static void sigHandler()
64 static qdb_sBuffer* inPool(
pwr_tStatus* sts,
void* p)
71 bp = (qdb_sBuffer*)p - 1;
72 if (bp->b.cookie != qdb_cCookie)
75 br = pool_InPool(sts, &qdb->pool, bp, bp->b.size +
sizeof(*bp));
87 qdb_sBuffer* bp = NULL;
88 pwr_dStatus(sts, status, QCOM__SUCCESS);
92 bp = qdb_Alloc(sts, qdb_eBuffer_base, size);
97 qdb->ap->call_count++;
98 qdb->ap->alloc_count++;
105 return (
void*)(bp + 1);
114 pwr_dStatus(sts, status, QCOM__SUCCESS);
117 pwr_Return(NO, sts, QCOM__NOTINITED);
121 qdb->ap->call_count++;
122 qdb->g->call_count++;
124 qp = qdb_Que(sts, qid, NULL);
126 pwr_StatusBreak(*sts, QCOM__NOQ);
129 pwr_StatusBreak(*sts, QCOM__ALLRATTACHED);
130 if (qp->type != qdb_eQue_private)
131 pwr_StatusBreak(*sts, QCOM__NOTATTACHABLE);
133 qdb_AttachQue(sts, qp, qdb->ap);
143 pwr_dStatus(sts, status, QCOM__SUCCESS);
146 pwr_Return(NO, sts, QCOM__NOTINITED);
150 qdb->ap->call_count++;
151 qdb->g->call_count++;
153 qp = qdb_Que(sts, qid, NULL);
155 pwr_StatusBreak(*sts, QCOM__NOQ);
157 qp->aid.aix = qdb->my_aix;
174 qdb_sQbond* bp = NULL;
177 pwr_dStatus(sts, status, QCOM__SUCCESS);
182 pwr_StatusBreak(*sts, QCOM__NOTINITED);
183 qdb->ap->call_count++;
184 qdb->g->call_count++;
186 sq = qdb_Que(sts, sqid, NULL);
188 pwr_StatusBreak(*sts, QCOM__NOQ);
190 if (sq->type != qdb_eQue_forward)
191 pwr_StatusBreak(*sts, QCOM__NOTBINDABLE);
193 tq = qdb_Que(sts, tqid, NULL);
195 pwr_StatusBreak(*sts, QCOM__NOQ);
197 if (tq->type != qdb_eQue_private)
198 pwr_StatusBreak(*sts, QCOM__NOTBINDABLE);
200 if (qdb_GetBond(sts, sq, tq) != NULL)
201 pwr_StatusBreak(*sts, QCOM__ALRBOUND);
203 bp = qdb_AddBond(sts, sq, tq);
220 pwr_dStatus(sts, status, QCOM__SUCCESS);
223 pwr_Return(NO, sts, QCOM__NOTINITED);
231 switch (attr->type) {
232 case qcom_eQtype_private:
233 type = qdb_eQue_private;
235 case qcom_eQtype_forward:
236 type = qdb_eQue_forward;
238 case qcom_eQtype_broadcast:
239 type = qdb_eQue_forward;
240 flags.b.broadcast = 1;
242 case qcom_eQtype_event:
243 type = qdb_eQue_forward;
247 pwr_Return(NO, sts, QCOM__QTYPE);
250 type = qdb_eQue_private;
255 qdb->ap->call_count++;
256 qdb->g->call_count++;
258 qp = qdb_AddQue(sts, qid->
qix);
262 qid->
nid = qdb->my_nid;
264 qp->flags.m = flags.m;
266 qp->in_quota = attr->quota;
267 qp = qdb_AttachQue(sts, qp, qdb->ap);
270 if (flags.b.broadcast) {
271 qdb_AddBond(sts, qp, qdb->exportque);
275 strncpy(qp->name, qname,
sizeof(qp->name) - 1);
276 qp->name[
sizeof(qp->name) - 1] =
'\0';
278 strcpy(qp->name,
"\"unknown name\"");
292 pwr_dStatus(sts, status, QCOM__SUCCESS);
295 pwr_Return(NO, sts, QCOM__NOTINITED);
299 qdb->ap->call_count++;
300 qdb->g->call_count++;
302 qp = qdb_Que(sts, qid, NULL);
304 pwr_StatusBreak(*sts, QCOM__NOQ);
307 if (qp->flags.b.broadcast) {
310 if ((bp = qdb_GetBond(sts, qp, qdb->exportque)) != NULL) {
311 pool_Qremove(sts, &qdb->pool, &bp->tgt_ll);
312 pool_Qremove(sts, &qdb->pool, &bp->src_ll);
313 pool_Free(sts, &qdb->pool, bp);
317 qdb_RemoveQue(sts, qp);
333 qdb_sAppl* ap = qdb->ap;
334 pwr_dStatus(sts, status, QCOM__SUCCESS);
341 qdb->ap->call_count++;
342 qdb->g->call_count++;
344 qdb_RemoveAppl(sts, ap);
359 pwr_dStatus(sts, status, QCOM__SUCCESS);
362 pwr_Return(NO, sts, QCOM__NULLBUFF);
364 pwr_Return(NO, sts, QCOM__NOTINITED);
366 bp = (qdb_sBuffer*)p - 1;
367 if (bp->c.type != qdb_eBuffer_base)
368 pwr_Return(NO, sts, QCOM__NOTALLOC);
369 if (bp->b.cookie != qdb_cCookie)
370 pwr_Return(NO, sts, QCOM__NOTALLOC);
374 qdb->ap->call_count++;
375 qdb->g->call_count++;
377 br = pool_InPool(sts, &qdb->pool, bp, bp->b.size +
sizeof(*bp));
378 if (br == pool_cNRef)
381 qdb->ap->free_count++;
385 return (br != pool_cNRef) &&
ODD(*sts);
403 qdb_sBuffer* bp = NULL;
404 qdb_sBuffer* bbp = NULL;
407 pwr_dStatus(sts, status, QCOM__SUCCESS);
410 pwr_Return(NULL, sts, QCOM__NOTINITED);
414 qdb->ap->call_count++;
415 qdb->g->call_count++;
420 if (gp != NULL && gp->data != NULL) {
421 br = pool_InPool(&lsts, &qdb->pool, gp->data, gp->size);
422 if (br != pool_cNRef)
426 qp = qdb_Que(sts, qid, NULL);
430 if (qp->aid.aix != qdb->my_aix)
431 pwr_StatusBreak(*sts, QCOM__NOTOWNED);
432 if (qp->type != qdb_eQue_private)
433 pwr_StatusBreak(*sts, QCOM__NOTOWNED);
435 bp = qdb_Get(sts, qp, tmo, gp, 0);
438 qdb->ap->get_count++;
451 }
else if (gp->data == NULL) {
454 if (bp->c.type == qdb_eBuffer_reference)
455 bbp = pool_Address(sts, &qdb->pool, bp->r.src);
459 dp = qdb_CopyBufferData(sts, bbp, gp);
463 if (bp->c.type == qdb_eBuffer_reference)
465 qdb_Free(&lsts, bbp);
466 qdb->ap->free_count++;
482 pwr_dStatus(sts, status, QCOM__SUCCESS);
498 pwr_dStatus(sts, status, QCOM__SUCCESS);
501 pwr_Return(NO, sts, QCOM__BADARG);
505 qdb_NodeInfo(NULL, node, qdb->my_node);
517 static char name[80];
525 strncpy(name, node.
name,
sizeof(name));
535 qdb_sNode* np = NULL;
536 pwr_dStatus(sts, status, QCOM__SUCCESS);
539 pwr_Return(NO, sts, QCOM__BADARG);
543 np = hash_Search(sts, &qdb->nid_ht, &nid);
545 *sts = QCOM__NOSUCHNODE;
547 qdb_NodeInfo(NULL, node, np);
568 pool_sQlink* nl = NULL;
569 qdb_sNode* np = NULL;
570 pwr_dStatus(sts, status, QCOM__SUCCESS);
573 pwr_Return(NO, sts, QCOM__BADARG);
577 if (nid == pwr_cNNodeId) {
578 nl = pool_Qsucc(NULL, &qdb->pool, &qdb->g->node_lh);
579 if (nl == &qdb->g->node_lh) {
580 *sts = QCOM__NO_NODE;
583 np = pool_Qitem(nl, qdb_sNode, node_ll);
587 qdb_NodeInfo(NULL, node, np);
591 np = hash_Search(sts, &qdb->nid_ht, &nid);
593 *sts = QCOM__NOSUCHNODE;
605 nl = pool_Qsucc(NULL, &qdb->pool, nl);
606 if (nl == &qdb->g->node_lh) {
607 *sts = QCOM__NO_NODE;
610 np = pool_Qitem(nl, qdb_sNode, node_ll);
611 if (np->nid == pwr_cNNodeId) {
622 qdb_NodeInfo(NULL, node, np);
645 qdb_sAppl* ap = NULL;
651 pwr_dStatus(sts, status, QCOM__SUCCESS);
654 memset(&laid, 0,
sizeof(laid));
658 qdb = qdb_MapDb(sts);
659 if (qdb == NULL || (
EVEN(*sts) && *sts != QDB__ALRMAP))
664 qdb->g->call_count++;
666 if (qdb->ap == NULL) {
667 ap = hash_Search(sts, &qdb->pid_ht, &qdb->my_pid);
670 qdb_RemoveAppl(&lsts, ap);
674 ap = qdb_AddAppl(sts, NO);
682 strncpy(ap->name, aname,
sizeof(ap->name) - 1);
683 ap->name[
sizeof(ap->name) - 1] =
'\0';
685 strcpy(ap->name,
"\"unknown name\"");
703 errh_Info(
"Adding application. aix: %d", ap->aid.aix);
705 sa.sa_handler = sigHandler;
707 sigemptyset(&sa.sa_mask);
708 sigaction(SIGHUP, &sa, NULL);
709 sigaction(SIGINT, &sa, NULL);
711 sigaddset(&ss, qdb_cSigMsg);
712 sigprocmask(SIG_BLOCK, &ss, NULL);
716 qdb_ApplEvent(NULL, ap, qcom_eStype_applConnect);
749 qdb_sBuffer* bp = NULL;
750 qdb_sNode* np = NULL;
752 pwr_dStatus(sts, status, QCOM__SUCCESS);
755 pwr_Assert(pp != NULL);
758 pwr_Return(NO, sts, QCOM__NOTINITED);
762 qdb->ap->call_count++;
763 qdb->g->call_count++;
765 qp = qdb_Que(sts, qidp, &np);
770 bp = inPool(sts, pp->data);
771 if (pp->allocate || bp == NULL) {
772 bp = qdb_Alloc(sts, qdb_eBuffer_base, pp->size);
774 *sts = QDB__QUOTAEXCEEDED;
777 memcpy((
char*)(bp + 1), pp->data, pp->size);
782 qdb_PutInfo(bp, pp, qidp, 0);
784 if (qp->qix == qdb_cIexport) {
785 bp->c.flags.b.remote = 1;
786 bp->b.noderef = pool_Reference(sts, &qdb->pool, np);
787 bp->b.msg_id = pp->msg_id;
788 bp->b.prio = pp->prio;
790 bp->b.msg_id = pp->msg_id;
791 bp->b.prio = pp->prio;
794 qdb_Put(sts, bp, qp);
795 if (*sts == QDB__QUOTAEXCEEDED)
798 qdb->ap->put_count++;
817 pwr_dStatus(sts, status, QCOM__SUCCESS);
820 pwr_Return(NO, sts, QCOM__NOTINITED);
824 qdb->ap->call_count++;
825 qdb->g->call_count++;
829 sq = qdb_Que(sts, sqid, NULL);
831 pwr_StatusBreak(*sts, QCOM__NOQ);
833 tq = qdb_Que(sts, tqid, NULL);
835 pwr_StatusBreak(*sts, QCOM__NOQ);
837 if ((bp = qdb_GetBond(sts, sq, tq)) == NULL)
838 pwr_StatusBreak(*sts, QCOM__NOTBOUND);
840 pool_Qremove(sts, &qdb->pool, &bp->tgt_ll);
841 pool_Qremove(sts, &qdb->pool, &bp->src_ll);
842 pool_Free(sts, &qdb->pool, bp);
863 else if (q1->
qix < q2->
qix)
867 }
else if (q1->
nid < q2->
nid)
907 return (q->
nid == qcom_cNQid.nid) && (q->
qix == qcom_cNQid.qix);
920 return (q->
nid != qcom_cNQid.nid) || (q->
qix != qcom_cNQid.qix);
937 else if (a1->
aix < a2->
aix)
941 }
else if (a1->
nid < a2->
nid)
983 return (a->
nid == qcom_cNAid.nid) && (a->
aix == qcom_cNAid.aix);
995 return (a->
nid != qcom_cNAid.nid) || (a->
aix != qcom_cNAid.aix);
1026 qdb_sNode* np = NULL;
1027 qdb_sQue* pqp = NULL;
1029 qdb_sQue* gqp = NULL;
1030 qdb_sBuffer* gbp = NULL;
1031 qdb_sBuffer* gbbp = NULL;
1034 pwr_dStatus(sts, status, QCOM__SUCCESS);
1036 pwr_Assert(pp != NULL);
1039 pwr_Return(NULL, sts, QCOM__HIGHTMO);
1042 if (qdb->ap == NULL)
1043 pwr_Return(NULL, sts, QCOM__NOTINITED);
1047 qdb->ap->call_count++;
1048 qdb->g->call_count++;
1050 pqp = qdb_Que(sts, pqid, &np);
1057 if (gp != NULL && gp->data != NULL) {
1058 gbr = pool_InPool(&lsts, &qdb->pool, gp->data, gp->size);
1059 if (gbr != pool_cNRef)
1063 gqp = qdb_Que(sts, gqid, NULL);
1067 if (gqp->aid.aix != qdb->my_aix)
1068 pwr_StatusBreak(*sts, QCOM__NOTOWNED);
1069 if (gqp->type != qdb_eQue_private)
1070 pwr_StatusBreak(*sts, QCOM__NOTOWNED);
1072 pbp = inPool(sts, pp->data);
1074 pbp = qdb_Alloc(sts, qdb_eBuffer_base, pp->size);
1075 memcpy((
char*)(pbp + 1), pp->data, pp->size);
1080 pbp->c.flags.b.request = 1;
1081 qdb_PutInfo(pbp, pp, pqid, 0);
1083 if (pqp->qix == qdb_cIexport) {
1084 pbp->c.flags.b.remote = 1;
1085 pbp->b.noderef = pool_Reference(sts, &qdb->pool, np);
1088 gbp = qdb_Request(sts, pbp, pqp, gqp, tmo, gp, flags);
1090 qdb->ap->request_count++;
1101 }
else if (gp->data == NULL) {
1104 if (gbp->c.type == qdb_eBuffer_reference)
1105 gbbp = pool_Address(sts, &qdb->pool, gbp->r.src);
1109 dp = qdb_CopyBufferData(sts, gbbp, gp);
1113 if (gbp->c.type == qdb_eBuffer_reference)
1114 qdb_Free(&lsts, gbp);
1115 qdb_Free(&lsts, gbbp);
1116 qdb->ap->free_count++;
1134 qdb_sNode* np = NULL;
1135 qdb_sQue* qp = NULL;
1136 pwr_dStatus(sts, status, QCOM__SUCCESS);
1138 pwr_Assert(gp != NULL);
1139 pwr_Assert(pp != NULL);
1141 if (qdb->ap == NULL)
1142 pwr_Return(NO, sts, QCOM__NOTINITED);
1146 qdb->ap->call_count++;
1147 qdb->g->call_count++;
1149 qp = qdb_Que(sts, &gp->reply, &np);
1153 bp = inPool(sts, pp->data);
1155 bp = qdb_Alloc(sts, qdb_eBuffer_base, pp->size);
1156 memcpy((
char*)(bp + 1), pp->data, pp->size);
1161 qdb_PutInfo(bp, pp, &gp->reply, 0);
1163 bp->c.flags.b.reply = 1;
1164 bp->c.flags.b.request = 0;
1165 bp->b.info.rid = gp->rid;
1166 bp->b.info.flags.b.reply = 1;
1167 bp->b.info.flags.b.request = 0;
1168 bp->b.info.status = QCOM__SUCCESS;
1170 if (qp->qix == qdb_cIexport) {
1171 bp->c.flags.b.remote = 1;
1172 bp->b.noderef = pool_Reference(sts, &qdb->pool, np);
1175 qdb_Put(sts, bp, qp);
1177 qdb->ap->reply_count++;
1202 static char ls[
sizeof(
"_Q255.255.255.255:4294967295")];
1207 sprintf(ls,
"%s%u.%u.%u.%u:%u", (prefix ?
"_Q" :
""), loid.
o.
vid_3,
1208 loid.
o.vid_2, loid.
o.vid_1, loid.
o.vid_0, loid.
o.oix);
1211 return strcat(s, ls);
1229 const qcom_sQid* eid,
int mask,
int tmo,
int* event)
1234 pwr_dStatus(sts, status, QCOM__SUCCESS);
1238 qp = qdb_Que(sts, qid, NULL);
1241 ep = qdb_Que(sts, eid, NULL);
1245 if (qp->aid.aix != qdb->my_aix)
1246 pwr_StatusBreak(*sts, QCOM__NOTOWNED);
1247 if (qp->type != qdb_eQue_private)
1248 pwr_StatusBreak(*sts, QCOM__NOTOWNED);
1250 result = ep->mask & mask;
1256 result = qdb_Wait(sts, qp, ep, tmo);
1257 *
event = ep->mask & mask;
1277 const qcom_sQid* eid,
int mask,
int tmo)
1282 pwr_dStatus(sts, status, QCOM__SUCCESS);
1286 qp = qdb_Que(sts, qid, NULL);
1289 ep = qdb_Que(sts, eid, NULL);
1293 if (qp->aid.aix != qdb->my_aix)
1294 pwr_StatusBreak(*sts, QCOM__NOTOWNED);
1295 if (qp->type != qdb_eQue_private)
1296 pwr_StatusBreak(*sts, QCOM__NOTOWNED);
1298 result = (ep->mask & mask) == mask;
1304 result = qdb_Wait(sts, qp, ep, tmo);
1315 pwr_dStatus(sts, status, QCOM__SUCCESS);
1319 ep = qdb_Que(sts, eid, NULL);
1326 qdb_Signal(sts, ep);
1337 pwr_dStatus(sts, status, QCOM__SUCCESS);
1341 ep = qdb_Que(sts, eid, NULL);
1348 qdb_Signal(sts, ep);
1359 pwr_dStatus(sts, status, QCOM__SUCCESS);
1363 ep = qdb_Que(sts, eid, NULL);
1374 void qcom_SetRedundancyState(pwr_eRedundancyState state)
1376 qdb->my_node->redundancy_state = state;
1386 qcom_sQid qmon_qid = { qcom_cImonAction, 0 };
1388 memset(&put, 0,
sizeof(put));
1389 put.type.b = (qcom_eBtype)qmon_cMsgClassAction;
1390 put.type.s = (qcom_eStype)qmon_eMsgTypeAction_Connect;
1406 qcom_sQid qmon_qid = { qcom_cImonAction, 0 };
1408 memset(&put, 0,
sizeof(put));
1409 put.type.b = (qcom_eBtype)qmon_cMsgClassAction;
1410 put.type.s = (qcom_eStype)qmon_eMsgTypeAction_Disconnect;
1423 bool_t xdr_qcom_sAid(XDR* xdrs,
qcom_sAid* objp)
1425 if (!xdr_int(xdrs, &objp->
aix))
1427 if (!xdr_int(xdrs, (
int*)&objp->
nid))
1433 bool_t xdr_qcom_sQid(XDR* xdrs,
qcom_sQid* objp)
1435 if (!xdr_int(xdrs, &objp->
qix))
1437 if (!xdr_int(xdrs, (
int*)&objp->
nid))
void errh_Info(const char *msg,...)
Log an info message. The function has a variable argument list similar to sprintf.
int qcom_QidCompare(const qcom_sQid *q1, const qcom_sQid *q2)
Compare two queue identities;.
pwr_tBoolean qcom_Reply(pwr_tStatus *status, qcom_sGet *gp, qcom_sPut *pp)
Reply to a qcom_Request. The qcom_Reply() call looks almost like a qcom_Put(), but the queue id is re...
pwr_tBoolean qcom_WaitAnd(pwr_tStatus *status, const qcom_sQid *qid, const qcom_sQid *eid, int mask, int tmo)
Wait for an event or a message.
pwr_tBoolean qcom_AttachQ(pwr_tStatus *status, const qcom_sQid *qid)
Attach to an allready created queue.
pwr_tBoolean qcom_AidIsNotEqual(const qcom_sAid *a1, const qcom_sAid *a2)
Test if two application identities are different.
pwr_tBoolean qcom_NextNode(pwr_tStatus *status, qcom_sNode *node, pwr_tNodeId nid)
Get the next qcom node. If nid is pwr_cNNodeId the first node is returned.
void qcom_LinkConnect(pwr_tNodeId nid)
pwr_tBoolean qcom_AidIsEqual(const qcom_sAid *a1, const qcom_sAid *a2)
Test if two application identities are equal.
pwr_tBoolean qcom_QidIsEqual(const qcom_sQid *q1, const qcom_sQid *q2)
Test if two queue identities are equal.
pwr_tBoolean qcom_MyNode(pwr_tStatus *status, qcom_sNode *node)
Get the local qcom node.
qcom_tBus qcom_MyBus(pwr_tStatus *status)
Get the current qcom bus number.
pwr_tBoolean qcom_Unbind(pwr_tStatus *status, const qcom_sQid *sqid, const qcom_sQid *tqid)
Disconnect a target queue from a bound source queue.
pwr_tBoolean qcom_Exit(pwr_tStatus *status)
Disconnect from QCom. Disconnects an application from the Qcom message bus, all resources such as,...
pwr_tBoolean qcom_QidIsNotNull(const qcom_sQid *q)
Test if queue identity is not null.
pwr_tBoolean qcom_Put(pwr_tStatus *status, const qcom_sQid *qidp, qcom_sPut *pp)
Put a new message.
pwr_tBoolean qcom_Bind(pwr_tStatus *status, const qcom_sQid *tqid, const qcom_sQid *sqid)
Bind one queue to another.
pwr_tBoolean qcom_CreateQ(pwr_tStatus *status, qcom_sQid *qid, qcom_sQattr *attr, const char *qname)
Create a queue and make an implicit connect to it.
pwr_tBoolean qcom_WaitOr(pwr_tStatus *status, const qcom_sQid *qid, const qcom_sQid *eid, int mask, int tmo, int *event)
Wait for an event or a message.
pwr_tBoolean qcom_Node(pwr_tStatus *status, qcom_sNode *node, pwr_tNodeId nid)
Get qcom node from node identity.
pwr_tBoolean qcom_QidIsNull(const qcom_sQid *q)
Test if queue identity is null.
pwr_tBoolean qcom_Free(pwr_tStatus *status, void *p)
Free a previously allocated buffer.
void * qcom_Request(pwr_tStatus *status, const qcom_sQid *pqid, qcom_sPut *pp, const qcom_sQid *gqid, qcom_sGet *gp, int tmo, pwr_tBitMask flags)
Put a request and return the reply.
int qcom_AidCompare(const qcom_sAid *a1, const qcom_sAid *a2)
Compare two application identities;.
void * qcom_Get(pwr_tStatus *status, const qcom_sQid *qid, qcom_sGet *gp, int tmo)
Get a new message.
void qcom_LinkDisconnect(pwr_tNodeId nid)
pwr_tBoolean qcom_QidIsNotEqual(const qcom_sQid *q1, const qcom_sQid *q2)
Test if two queue identities are different.
pwr_tBoolean qcom_Init(pwr_tStatus *status, qcom_sAid *aid, const char *aname)
Connect to QCom.
pwr_tBoolean qcom_AidIsNotNull(const qcom_sAid *a)
Test if application identity is not null.
pwr_tBoolean qcom_DeleteQ(pwr_tStatus *status, const qcom_sQid *qid)
Delete a queue. Delete a queue and release all resources held by the queue.
void * qcom_Alloc(pwr_tStatus *status, unsigned int size)
Allocate a buffer in the qcom pool.
char * qcom_QidToString(char *s, qcom_sQid *qid, int prefix)
Converts a queue identifier, 'qid' to a string.
pwr_tBoolean qcom_AidIsNull(const qcom_sAid *a)
Test if application identity is null.
char * qcom_NodeName(pwr_tNodeId nid)
Get the name of a qcom node.
#define EVEN(a)
Check if value is even.
pwr_tNid pwr_tNodeId
Node identity type.
pwr_tOix pwr_tObjectIx
Object index type.
unsigned int pwr_tBitMask
Bitmask type.
unsigned int pwr_tBoolean
Boolean type.
int pwr_tStatus
Status type.
pwr_tVid pwr_tVolumeId
Volume identity type.
#define ODD(a)
Check if value is odd.
Include file for Errh System log messages.
unsigned int vid_3
Object index.
Type for representions of object identity.
cdh_mObjid o
Common object representation.
pwr_tOid pwr
Extern representation.