void BAR(TPSVCINFO * svcinfo) #endif { test_req_t *req = (test_req_t *) svcinfo->data; test_req_t *resp = (test_req_t *) tpalloc((char*) "X_C_TYPE", (char*) "test_req", 0); product_t *p = products; btlogger_debug( "TxLog %s service %s running", __FUNCTION__, TXTEST_SVC_NAME); resp->status = -1; inject_fault(O_XA_COMMIT, req->txtype); for (p = products; p->id != -1; p++) { if (req->prod == p->id) { int rv; strncpy(req->db, p->dbname, sizeof(req->db)); btlogger_debug("TxLog Service %s %4d: prod=%8s (id=%d) op=%c tx=0x%x data=%s", TXTEST_SVC_NAME, req->id, p->pname, p->id, req->op, req->txtype, req->data); rv = p->access(req, resp); btlogger_debug("TxLog Service %s %4d: resp->status=%d rv=%d", TXTEST_SVC_NAME, req->id, resp->status, rv); break; } } tpreturn(TPSUCCESS, resp->status, (char *) resp, sizeof (test_req_t), 0); }
/** * Attempt to transmit PeerDist discovery requests on all sockets * * @v uuid Message UUID string * @v id Segment identifier string */ static void peerdisc_socket_tx ( const char *uuid, const char *id ) { struct peerdisc_socket *socket; struct net_device *netdev; struct xfer_metadata meta; union { struct sockaddr sa; struct sockaddr_tcpip st; } address; char *request; size_t len; int rc; /* Construct discovery request */ request = peerdist_discovery_request ( uuid, id ); if ( ! request ) goto err_request; len = strlen ( request ); /* Initialise data transfer metadata */ memset ( &meta, 0, sizeof ( meta ) ); meta.dest = &address.sa; /* Send message on each socket */ for_each_table_entry ( socket, PEERDISC_SOCKETS ) { /* Initialise socket address */ memcpy ( &address.sa, &socket->address.sa, sizeof ( address.sa ) ); /* Send message on each open network device */ for_each_netdev ( netdev ) { /* Skip unopened network devices */ if ( ! netdev_is_open ( netdev ) ) continue; address.st.st_scope_id = netdev->index; /* Discard request (for test purposes) if applicable */ if ( inject_fault ( PEERDISC_DISCARD_RATE ) ) continue; /* Transmit request */ if ( ( rc = xfer_deliver_raw_meta ( &socket->xfer, request, len, &meta ) ) != 0 ) { DBGC ( socket, "PEERDISC %s could not transmit " "via %s: %s\n", socket->name, netdev->name, strerror ( rc ) ); /* Contine to try other net devices/sockets */ continue; } } }
void tapdisk_filter_iocbs(struct tfilter *filter, struct iocb **iocbs, int num) { int i; if (!filter) return; for (i = 0; i < num; i++) { struct iocb *io = iocbs[i]; if (filter->mode & TD_INJECT_FAULTS) { if ((random() % 100) <= TD_FAULT_RATE) { inject_fault(filter, io); continue; } } if (filter->mode & TD_CHECK_INTEGRITY) check_data(filter, PRE_CHECK, io); } }