brintos

brintos / linux-shallow public Read only

0
0
Text · 5.0 KiB · 83b4c53 Raw
179 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/*3 * Copyright (C) 2005-2007 Takahiro Hirofuchi4 */5 6#ifndef __USBIP_NETWORK_H7#define __USBIP_NETWORK_H8 9#ifdef HAVE_CONFIG_H10#include "../config.h"11#endif12 13#include <sys/types.h>14 15#include <stdint.h>16 17extern int usbip_port;18extern char *usbip_port_string;19void usbip_setup_port_number(char *arg);20 21/* ---------------------------------------------------------------------- */22/* Common header for all the kinds of PDUs. */23struct op_common {24	uint16_t version;25 26#define OP_REQUEST	(0x80 << 8)27#define OP_REPLY	(0x00 << 8)28	uint16_t code;29 30	/* status codes defined in usbip_common.h */31	uint32_t status; /* op_code status (for reply) */32 33} __attribute__((packed));34 35/* ---------------------------------------------------------------------- */36/* Dummy Code */37#define OP_UNSPEC	0x0038#define OP_REQ_UNSPEC	OP_UNSPEC39#define OP_REP_UNSPEC	OP_UNSPEC40 41/* ---------------------------------------------------------------------- */42/* Retrieve USB device information. (still not used) */43#define OP_DEVINFO	0x0244#define OP_REQ_DEVINFO	(OP_REQUEST | OP_DEVINFO)45#define OP_REP_DEVINFO	(OP_REPLY   | OP_DEVINFO)46 47struct op_devinfo_request {48	char busid[SYSFS_BUS_ID_SIZE];49} __attribute__((packed));50 51struct op_devinfo_reply {52	struct usbip_usb_device udev;53	struct usbip_usb_interface uinf[];54} __attribute__((packed));55 56/* ---------------------------------------------------------------------- */57/* Import a remote USB device. */58#define OP_IMPORT	0x0359#define OP_REQ_IMPORT	(OP_REQUEST | OP_IMPORT)60#define OP_REP_IMPORT   (OP_REPLY   | OP_IMPORT)61 62struct op_import_request {63	char busid[SYSFS_BUS_ID_SIZE];64} __attribute__((packed));65 66struct op_import_reply {67	struct usbip_usb_device udev;68//	struct usbip_usb_interface uinf[];69} __attribute__((packed));70 71#define PACK_OP_IMPORT_REQUEST(pack, request)  do {\72} while (0)73 74#define PACK_OP_IMPORT_REPLY(pack, reply)  do {\75	usbip_net_pack_usb_device(pack, &(reply)->udev);\76} while (0)77 78/* ---------------------------------------------------------------------- */79/* Export a USB device to a remote host. */80#define OP_EXPORT	0x0681#define OP_REQ_EXPORT	(OP_REQUEST | OP_EXPORT)82#define OP_REP_EXPORT	(OP_REPLY   | OP_EXPORT)83 84struct op_export_request {85	struct usbip_usb_device udev;86} __attribute__((packed));87 88struct op_export_reply {89	int returncode;90} __attribute__((packed));91 92 93#define PACK_OP_EXPORT_REQUEST(pack, request)  do {\94	usbip_net_pack_usb_device(pack, &(request)->udev);\95} while (0)96 97#define PACK_OP_EXPORT_REPLY(pack, reply)  do {\98} while (0)99 100/* ---------------------------------------------------------------------- */101/* un-Export a USB device from a remote host. */102#define OP_UNEXPORT	0x07103#define OP_REQ_UNEXPORT	(OP_REQUEST | OP_UNEXPORT)104#define OP_REP_UNEXPORT	(OP_REPLY   | OP_UNEXPORT)105 106struct op_unexport_request {107	struct usbip_usb_device udev;108} __attribute__((packed));109 110struct op_unexport_reply {111	int returncode;112} __attribute__((packed));113 114#define PACK_OP_UNEXPORT_REQUEST(pack, request)  do {\115	usbip_net_pack_usb_device(pack, &(request)->udev);\116} while (0)117 118#define PACK_OP_UNEXPORT_REPLY(pack, reply)  do {\119} while (0)120 121/* ---------------------------------------------------------------------- */122/* Negotiate IPSec encryption key. (still not used) */123#define OP_CRYPKEY	0x04124#define OP_REQ_CRYPKEY	(OP_REQUEST | OP_CRYPKEY)125#define OP_REP_CRYPKEY	(OP_REPLY   | OP_CRYPKEY)126 127struct op_crypkey_request {128	/* 128bit key */129	uint32_t key[4];130} __attribute__((packed));131 132struct op_crypkey_reply {133	uint32_t __reserved;134} __attribute__((packed));135 136 137/* ---------------------------------------------------------------------- */138/* Retrieve the list of exported USB devices. */139#define OP_DEVLIST	0x05140#define OP_REQ_DEVLIST	(OP_REQUEST | OP_DEVLIST)141#define OP_REP_DEVLIST	(OP_REPLY   | OP_DEVLIST)142 143struct op_devlist_request {144} __attribute__((packed));145 146struct op_devlist_reply {147	uint32_t ndev;148	/* followed by reply_extra[] */149} __attribute__((packed));150 151struct op_devlist_reply_extra {152	struct usbip_usb_device    udev;153	struct usbip_usb_interface uinf[];154} __attribute__((packed));155 156#define PACK_OP_DEVLIST_REQUEST(pack, request)  do {\157} while (0)158 159#define PACK_OP_DEVLIST_REPLY(pack, reply)  do {\160	(reply)->ndev = usbip_net_pack_uint32_t(pack, (reply)->ndev);\161} while (0)162 163uint32_t usbip_net_pack_uint32_t(int pack, uint32_t num);164uint16_t usbip_net_pack_uint16_t(int pack, uint16_t num);165void usbip_net_pack_usb_device(int pack, struct usbip_usb_device *udev);166void usbip_net_pack_usb_interface(int pack, struct usbip_usb_interface *uinf);167 168ssize_t usbip_net_recv(int sockfd, void *buff, size_t bufflen);169ssize_t usbip_net_send(int sockfd, void *buff, size_t bufflen);170int usbip_net_send_op_common(int sockfd, uint32_t code, uint32_t status);171int usbip_net_recv_op_common(int sockfd, uint16_t *code, int *status);172int usbip_net_set_reuseaddr(int sockfd);173int usbip_net_set_nodelay(int sockfd);174int usbip_net_set_keepalive(int sockfd);175int usbip_net_set_v6only(int sockfd);176int usbip_net_tcp_connect(char *hostname, char *port);177 178#endif /* __USBIP_NETWORK_H */179