Lines Matching refs:msg
46 static int dmsg_state_msgrx(dmsg_msg_t *msg, int mstate);
47 static void dmsg_state_cleanuptx(dmsg_iocom_t *iocom, dmsg_msg_t *msg);
48 static void dmsg_msg_free_locked(dmsg_msg_t *msg);
90 dmsg_msg_t *msg; in dmsg_ioq_done() local
92 while ((msg = TAILQ_FIRST(&ioq->msgq)) != NULL) { in dmsg_ioq_done()
94 TAILQ_REMOVE(&ioq->msgq, msg, qentry); in dmsg_ioq_done()
95 dmsg_msg_free(msg); in dmsg_ioq_done()
97 if ((msg = ioq->msg) != NULL) { in dmsg_ioq_done()
98 ioq->msg = NULL; in dmsg_ioq_done()
99 dmsg_msg_free(msg); in dmsg_ioq_done()
112 void (*rcvmsg_func)(dmsg_msg_t *msg), in dmsg_iocom_init() argument
113 void (*usrmsg_func)(dmsg_msg_t *msg, int unmanaged), in dmsg_iocom_init() argument
194 void (*rcvmsg_func)(dmsg_msg_t *msg)) in dmsg_iocom_restate() argument
261 dmsg_msg_t *msg; in dmsg_msg_alloc() local
264 msg = dmsg_msg_alloc_locked(state, aux_size, cmd, func, data); in dmsg_msg_alloc()
267 return msg; in dmsg_msg_alloc()
277 dmsg_msg_t *msg; in dmsg_msg_alloc_locked() local
334 msg = malloc(offsetof(struct dmsg_msg, any.head) + hbytes); in dmsg_msg_alloc_locked()
335 bzero(msg, offsetof(struct dmsg_msg, any.head)); in dmsg_msg_alloc_locked()
342 if (msg->aux_size != aux_size) { in dmsg_msg_alloc_locked()
343 if (msg->aux_data) { in dmsg_msg_alloc_locked()
344 free(msg->aux_data); in dmsg_msg_alloc_locked()
345 msg->aux_data = NULL; in dmsg_msg_alloc_locked()
346 msg->aux_size = 0; in dmsg_msg_alloc_locked()
349 msg->aux_data = malloc(aligned_size); in dmsg_msg_alloc_locked()
350 msg->aux_size = aux_size; in dmsg_msg_alloc_locked()
352 bzero(msg->aux_data + aux_size, in dmsg_msg_alloc_locked()
370 bzero(&msg->any.head, hbytes); in dmsg_msg_alloc_locked()
371 msg->hdr_size = hbytes; in dmsg_msg_alloc_locked()
372 msg->any.head.magic = DMSG_HDR_MAGIC; in dmsg_msg_alloc_locked()
373 msg->any.head.cmd = cmd; in dmsg_msg_alloc_locked()
374 msg->any.head.aux_descr = 0; in dmsg_msg_alloc_locked()
375 msg->any.head.aux_crc = 0; in dmsg_msg_alloc_locked()
376 msg->any.head.msgid = state->msgid; in dmsg_msg_alloc_locked()
377 msg->any.head.circuit = pstate->msgid; in dmsg_msg_alloc_locked()
378 msg->state = state; in dmsg_msg_alloc_locked()
380 return (msg); in dmsg_msg_alloc_locked()
390 dmsg_msg_free_locked(dmsg_msg_t *msg) in dmsg_msg_free_locked() argument
394 if ((state = msg->state) != NULL) { in dmsg_msg_free_locked()
396 msg->state = NULL; /* safety */ in dmsg_msg_free_locked()
398 if (msg->aux_data) { in dmsg_msg_free_locked()
399 free(msg->aux_data); in dmsg_msg_free_locked()
400 msg->aux_data = NULL; /* safety */ in dmsg_msg_free_locked()
402 msg->aux_size = 0; in dmsg_msg_free_locked()
403 free (msg); in dmsg_msg_free_locked()
407 dmsg_msg_free(dmsg_msg_t *msg) in dmsg_msg_free() argument
409 dmsg_iocom_t *iocom = msg->state->iocom; in dmsg_msg_free()
412 dmsg_msg_free_locked(msg); in dmsg_msg_free()
426 dmsg_msg_t *msg; in dmsg_iocom_core() local
548 (msg = dmsg_ioq_read(iocom)) != NULL) { in dmsg_iocom_core()
550 dmsg_msg_str(msg)); in dmsg_iocom_core()
551 iocom->rcvmsg_callback(msg); in dmsg_iocom_core()
553 dmsg_state_cleanuprx(iocom, msg); in dmsg_iocom_core()
617 dmsg_msg_t *msg; in dmsg_ioq_read() local
632 if ((msg = TAILQ_FIRST(&ioq->msgq)) != NULL) { in dmsg_ioq_read()
633 TAILQ_REMOVE(&ioq->msgq, msg, qentry); in dmsg_ioq_read()
635 if (msg->state == &iocom->state0) { in dmsg_ioq_read()
641 return (msg); in dmsg_ioq_read()
657 msg = ioq->msg; in dmsg_ioq_read()
667 nmax = dmsg_ioq_makeroom(ioq, sizeof(msg->any.head)); in dmsg_ioq_read()
668 if (bytes < sizeof(msg->any.head)) { in dmsg_ioq_read()
711 assert(msg == NULL); in dmsg_ioq_read()
712 if (bytes < sizeof(msg->any.head)) in dmsg_ioq_read()
748 if (ioq->hbytes < sizeof(msg->any.head) || in dmsg_ioq_read()
749 ioq->hbytes > sizeof(msg->any) || in dmsg_ioq_read()
766 msg = dmsg_msg_alloc(&iocom->state0, aux_size, in dmsg_ioq_read()
769 ioq->msg = msg; in dmsg_ioq_read()
786 assert(msg != NULL); in dmsg_ioq_read()
823 msg = NULL; in dmsg_ioq_read()
846 dmsg_msg_str(msg)); in dmsg_ioq_read()
860 bcopy(head, &msg->any, ioq->hbytes); in dmsg_ioq_read()
892 bcopy(ioq->buf + ioq->fifo_beg, msg->aux_data, in dmsg_ioq_read()
894 msg->aux_size = ioq->abytes; in dmsg_ioq_read()
900 bcopy(ioq->buf + ioq->fifo_beg, msg->aux_data, in dmsg_ioq_read()
902 msg->aux_size = bytes; in dmsg_ioq_read()
910 msg->aux_size = 0; in dmsg_ioq_read()
918 assert(msg); in dmsg_ioq_read()
919 nmax = dmsg_ioq_makeroom(ioq, ioq->abytes - msg->aux_size); in dmsg_ioq_read()
924 if (msg->aux_size < ioq->abytes) { in dmsg_ioq_read()
956 if (bytes > ioq->abytes - msg->aux_size) in dmsg_ioq_read()
957 bytes = ioq->abytes - msg->aux_size; in dmsg_ioq_read()
961 msg->aux_data + msg->aux_size, in dmsg_ioq_read()
963 msg->aux_size += bytes; in dmsg_ioq_read()
974 if (msg->aux_size < ioq->abytes) { in dmsg_ioq_read()
975 msg = NULL; in dmsg_ioq_read()
978 assert(msg->aux_size == ioq->abytes); in dmsg_ioq_read()
979 msg->aux_size = ioq->unaligned_aux_size; in dmsg_ioq_read()
986 xcrc32 = dmsg_icrc32(msg->aux_data, ioq->abytes); in dmsg_ioq_read()
987 if (xcrc32 != msg->any.head.aux_crc) { in dmsg_ioq_read()
993 msg->any.head.aux_crc, in dmsg_ioq_read()
994 (intmax_t)msg->any.head.msgid, in dmsg_ioq_read()
995 msg->any.head.cmd, in dmsg_ioq_read()
996 msg->any.head.aux_bytes); in dmsg_ioq_read()
1006 assert(msg == NULL); in dmsg_ioq_read()
1021 if (msg && ioq->error == 0) { in dmsg_ioq_read()
1022 if ((msg->any.head.salt & 255) != (ioq->seq & 255)) { in dmsg_ioq_read()
1047 assert(ioq->msg == msg); in dmsg_ioq_read()
1048 if (msg) { in dmsg_ioq_read()
1049 dmsg_msg_free(msg); in dmsg_ioq_read()
1050 ioq->msg = NULL; in dmsg_ioq_read()
1051 msg = NULL; in dmsg_ioq_read()
1091 if (msg) in dmsg_ioq_read()
1094 } else if (msg == NULL) { in dmsg_ioq_read()
1125 ioq->msg = NULL; in dmsg_ioq_read()
1136 msg->any.head.cmd, in dmsg_ioq_read()
1137 (intmax_t)msg->any.head.circuit); in dmsg_ioq_read()
1139 error = dmsg_state_msgrx(msg, 0); in dmsg_ioq_read()
1147 dmsg_msg_free(msg); in dmsg_ioq_read()
1163 return (msg); in dmsg_ioq_read()
1180 dmsg_msg_t *msg; in dmsg_iocom_flush1() local
1189 while ((msg = TAILQ_FIRST(&iocom->txmsgq)) != NULL) { in dmsg_iocom_flush1()
1190 TAILQ_REMOVE(&iocom->txmsgq, msg, qentry); in dmsg_iocom_flush1()
1191 TAILQ_INSERT_TAIL(&tmpq, msg, qentry); in dmsg_iocom_flush1()
1199 while ((msg = TAILQ_FIRST(&tmpq)) != NULL) { in dmsg_iocom_flush1()
1203 TAILQ_REMOVE(&tmpq, msg, qentry); in dmsg_iocom_flush1()
1205 TAILQ_INSERT_TAIL(&ioq->msgq, msg, qentry); in dmsg_iocom_flush1()
1215 msg->any.head.magic = DMSG_HDR_MAGIC; in dmsg_iocom_flush1()
1216 msg->any.head.salt = (random() << 8) | (ioq->seq & 255); in dmsg_iocom_flush1()
1227 if (msg->aux_size && msg->any.head.aux_crc == 0) { in dmsg_iocom_flush1()
1228 abytes = DMSG_DOALIGN(msg->aux_size); in dmsg_iocom_flush1()
1229 xcrc32 = dmsg_icrc32(msg->aux_data, abytes); in dmsg_iocom_flush1()
1230 msg->any.head.aux_crc = xcrc32; in dmsg_iocom_flush1()
1232 msg->any.head.aux_bytes = msg->aux_size; in dmsg_iocom_flush1()
1234 hbytes = (msg->any.head.cmd & DMSGF_SIZE) * in dmsg_iocom_flush1()
1236 msg->any.head.hdr_crc = 0; in dmsg_iocom_flush1()
1237 msg->any.head.hdr_crc = dmsg_icrc32(&msg->any.head, hbytes); in dmsg_iocom_flush1()
1243 TAILQ_INSERT_TAIL(&ioq->msgq, msg, qentry); in dmsg_iocom_flush1()
1258 dmsg_msg_t *msg; in dmsg_iocom_flush2() local
1286 TAILQ_FOREACH(msg, &ioq->msgq, qentry) { in dmsg_iocom_flush2()
1287 hbytes = (msg->any.head.cmd & DMSGF_SIZE) * in dmsg_iocom_flush2()
1289 abytes = DMSG_DOALIGN(msg->aux_size); in dmsg_iocom_flush2()
1296 iov[iovcnt].iov_base = (char *)&msg->any.head + hoff; in dmsg_iocom_flush2()
1310 assert(msg->aux_data != NULL); in dmsg_iocom_flush2()
1311 iov[iovcnt].iov_base = (char *)msg->aux_data + aoff; in dmsg_iocom_flush2()
1417 while ((msg = TAILQ_FIRST(&ioq->msgq)) != NULL) { in dmsg_iocom_flush2()
1418 hbytes = (msg->any.head.cmd & DMSGF_SIZE) * in dmsg_iocom_flush2()
1420 abytes = DMSG_DOALIGN(msg->aux_size); in dmsg_iocom_flush2()
1439 msg->any.head.cmd, in dmsg_iocom_flush2()
1440 (intmax_t)msg->any.head.circuit); in dmsg_iocom_flush2()
1445 if (msg->any.head.cmd & (DMSGF_CREATE | DMSGF_DELETE)) { in dmsg_iocom_flush2()
1446 if ((msg->state->flags & DMSG_STATE_ROOT) == 0) { in dmsg_iocom_flush2()
1447 tcmd = (msg->state->icmd & DMSGF_BASECMDMASK) | in dmsg_iocom_flush2()
1448 (msg->any.head.cmd & (DMSGF_CREATE | in dmsg_iocom_flush2()
1455 tcmd = msg->any.head.cmd & DMSGF_CMDSWMASK; in dmsg_iocom_flush2()
1463 biocount, msg->any.head.msgid, in dmsg_iocom_flush2()
1464 msg->any.blk_read.bytes, in dmsg_iocom_flush2()
1465 msg->any.blk_read.offset); in dmsg_iocom_flush2()
1471 biocount, msg->any.head.msgid, in dmsg_iocom_flush2()
1472 msg->any.blk_read.bytes, in dmsg_iocom_flush2()
1473 msg->any.blk_read.offset); in dmsg_iocom_flush2()
1480 TAILQ_REMOVE(&ioq->msgq, msg, qentry); in dmsg_iocom_flush2()
1484 dmsg_msg_free(msg); in dmsg_iocom_flush2()
1536 dmsg_msg_t *msg; in dmsg_iocom_drain() local
1542 while ((msg = TAILQ_FIRST(&ioq->msgq)) != NULL) { in dmsg_iocom_drain()
1543 TAILQ_REMOVE(&ioq->msgq, msg, qentry); in dmsg_iocom_drain()
1545 dmsg_msg_free(msg); in dmsg_iocom_drain()
1553 dmsg_msg_write(dmsg_msg_t *msg) argument
1555 dmsg_iocom_t *iocom = msg->state->iocom;
1560 state = msg->state;
1565 msg->any.head.cmd, msg->any.head.msgid,
1567 msg->any.head.error);
1580 dmsg_state_cleanuptx(iocom, msg);
1581 dmsg_msg_free(msg);
1602 if ((msg->any.head.cmd & (DMSGF_CREATE | DMSGF_REPLY)) ==
1604 state->txcmd = msg->any.head.cmd & ~DMSGF_DELETE;
1608 msg->any.head.msgid = state->msgid;
1610 if (msg->any.head.cmd & DMSGF_CREATE) {
1611 state->txcmd = msg->any.head.cmd & ~DMSGF_DELETE;
1622 msg->any.head.cmd, state);
1623 dmsg_msg_free(msg);
1653 dmsg_state_cleanuptx(iocom, msg);
1658 dmsg_msg_free(msg);
1667 dmsg_state_cleanuptx(iocom, msg);
1668 TAILQ_INSERT_TAIL(&iocom->txmsgq, msg, qentry);
1744 dmsg_msg_t *msg; local
1775 msg = dmsg_msg_alloc_locked(state, 0, DMSG_LNK_ERROR,
1778 msg->any.head.cmd |= DMSGF_CREATE;
1779 msg->any.head.cmd |= DMSGF_DELETE |
1781 msg->any.head.cmd ^= (DMSGF_REVTRANS | DMSGF_REVCIRC);
1782 msg->any.head.error = DMSG_ERR_LOSTLINK;
1783 msg->any.head.cmd |= DMSGF_ABORT;
1792 dmsg_state_msgrx(msg, 1);
1794 iocom->rcvmsg_callback(msg);
1796 dmsg_state_cleanuprx(iocom, msg);
1798 TAILQ_INSERT_TAIL(&iocom->ioq_rx.msgq, msg, qentry);
1838 dmsg_msg_reply(dmsg_msg_t *msg, uint32_t error) argument
1840 dmsg_state_t *state = msg->state;
1865 if ((msg->any.head.cmd & DMSGF_REPLY) == 0)
1891 dmsg_msg_result(dmsg_msg_t *msg, uint32_t error) argument
1893 dmsg_state_t *state = msg->state;
1919 if ((msg->any.head.cmd & DMSGF_REPLY) == 0)
2081 dmsg_state_msgrx(dmsg_msg_t *msg, int mstate) argument
2083 dmsg_iocom_t *iocom = msg->state->iocom;
2095 msg->any.head.cmd,
2096 msg->any.head.msgid,
2097 msg->any.head.circuit,
2098 msg->any.head.error);
2112 pstate = msg->state->parent;
2113 } else if (msg->any.head.circuit) {
2114 sdummy.msgid = msg->any.head.circuit;
2116 if (msg->any.head.cmd & DMSGF_REVCIRC) {
2137 dmsg_msg_str(msg));
2160 state = msg->state;
2162 sdummy.msgid = msg->any.head.msgid;
2163 if (msg->any.head.cmd & DMSGF_REVTRANS) {
2190 dmsg_state_drop(msg->state);
2192 msg->state = state;
2207 switch(msg->any.head.cmd & (DMSGF_CREATE | DMSGF_DELETE |
2222 dmsg_msg_str(msg));
2241 state->msgid = msg->any.head.msgid;
2243 state->rxcmd = msg->any.head.cmd & ~DMSGF_DELETE;
2246 msg->state = state;
2277 if (msg->any.head.cmd & DMSGF_ABORT) {
2282 dmsg_msg_str(msg));
2294 if (msg->any.head.cmd & DMSGF_ABORT) {
2299 dmsg_msg_str(msg));
2312 if (msg->any.head.cmd & DMSGF_ABORT) {
2329 dmsg_msg_str(msg));
2334 assert(((state->rxcmd ^ msg->any.head.cmd) & DMSGF_REPLY) == 0);
2335 state->rxcmd = msg->any.head.cmd & ~DMSGF_DELETE;
2344 if (msg->any.head.cmd & DMSGF_ABORT) {
2349 dmsg_msg_str(msg));
2362 if (msg->any.head.cmd & DMSGF_ABORT) {
2367 dmsg_msg_str(msg));
2379 if (msg->any.head.cmd & DMSGF_ABORT) {
2400 if (msg->any.head.cmd & (DMSGF_CREATE | DMSGF_DELETE)) {
2401 if ((msg->state->flags & DMSG_STATE_ROOT) == 0) {
2402 msg->tcmd = (state->icmd & DMSGF_BASECMDMASK) |
2403 (msg->any.head.cmd & (DMSGF_CREATE |
2407 msg->tcmd = 0;
2410 msg->tcmd = msg->any.head.cmd & DMSGF_CMDSWMASK;
2414 switch (msg->tcmd) {
2419 biocount, msg->any.head.msgid,
2420 msg->any.blk_read.bytes,
2421 msg->any.blk_read.offset);
2427 biocount, msg->any.head.msgid,
2428 msg->any.blk_read.bytes,
2429 msg->any.blk_read.offset);
2441 assert(msg->state->iocom == iocom);
2442 assert(msg->state == state);
2448 } else if (msg->any.head.cmd & DMSGF_DELETE) {
2460 assert(msg->any.head.cmd & DMSGF_REPLY);
2464 assert((msg->any.head.cmd & DMSGF_REPLY) == 0);
2590 dmsg_state_cleanuprx(dmsg_iocom_t *iocom, dmsg_msg_t *msg) argument
2594 assert(msg->state->iocom == iocom);
2595 state = msg->state;
2601 dmsg_msg_free(msg);
2613 dmsg_msg_free(msg);
2619 dmsg_msg_free(msg);
2630 dmsg_state_cleanuptx(dmsg_iocom_t *iocom, dmsg_msg_t *msg) argument
2634 assert(iocom == msg->state->iocom);
2635 state = msg->state;
2641 } else if (msg->any.head.cmd & DMSGF_DELETE) {
2664 assert(msg->any.head.cmd & DMSGF_REPLY);
2668 assert((msg->any.head.cmd & DMSGF_REPLY) == 0);