int usbip_net_recv_op_common(int sockfd, uint16_t *code, int *status) { struct op_common op_common; int rc; memset(&op_common, 0, sizeof(op_common)); rc = usbip_net_recv(sockfd, &op_common, sizeof(op_common)); if (rc < 0) { dbg("usbip_net_recv failed: %d", rc); goto err; } PACK_OP_COMMON(0, &op_common); if (op_common.version != USBIP_VERSION) { err("USBIP Kernel and tool version mismatch: %d %d:", op_common.version, USBIP_VERSION); goto err; } switch (*code) { case OP_UNSPEC: break; default: if (op_common.code != *code) { dbg("unexpected pdu %#0x for %#0x", op_common.code, *code); /* return error status */ *status = ST_ERROR; goto err; } } *status = op_common.status; if (op_common.status != ST_OK) { dbg("request failed at peer: %d", op_common.status); goto err; } *code = op_common.code; return 0; err: return -1; }
int usbip_recv_op_common(int sockfd, uint16_t *code) { int ret; struct op_common op_common; bzero(&op_common, sizeof(op_common)); ret = usbip_recv(sockfd, (void *) &op_common, sizeof(op_common)); if (ret < 0) { err("recv op_common, %d", ret); goto err; } PACK_OP_COMMON(0, &op_common); if (op_common.version != USBIP_VERSION) { err("version mismatch, %d %d", op_common.version, USBIP_VERSION); goto err; } switch(*code) { case OP_UNSPEC: break; default: if (op_common.code != *code) { info("unexpected pdu %d for %d", op_common.code, *code); goto err; } } if (op_common.status != ST_OK) { info("request failed at peer, %d", op_common.status); goto err; } *code = op_common.code; return 0; err: return -1; }
int usbip_send_op_common(int sockfd, uint32_t code, uint32_t status) { int ret; struct op_common op_common; bzero(&op_common, sizeof(op_common)); op_common.version = USBIP_VERSION; op_common.code = code; op_common.status = status; PACK_OP_COMMON(1, &op_common); ret = usbip_send(sockfd, (void *) &op_common, sizeof(op_common)); if (ret < 0) { err("send op_common"); return -1; } return 0; }
int usbip_net_send_op_common(int sockfd, uint32_t code, uint32_t status) { struct op_common op_common; int rc; memset(&op_common, 0, sizeof(op_common)); op_common.version = USBIP_VERSION; op_common.code = code; op_common.status = status; PACK_OP_COMMON(1, &op_common); rc = usbip_net_send(sockfd, &op_common, sizeof(op_common)); if (rc < 0) { dbg("usbip_net_send failed: %d", rc); return -1; } return 0; }