/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (C) 2005-2007 Takahiro Hirofuchi */ #ifndef __USBIP_COMMON_H #define __USBIP_COMMON_H #include <libudev.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <syslog.h> #include <unistd.h> #include <linux/usb/ch9.h> #include <linux/usbip.h> #ifndef USBIDS_FILE #define USBIDS_FILE "/usr/share/hwdata/usb.ids" #endif #ifndef VHCI_STATE_PATH #define VHCI_STATE_PATH "/var/run/vhci_hcd" #endif #define VUDC_DEVICE_DESCR_FILE "dev_desc" /* kernel module names */ #define USBIP_CORE_MOD_NAME "usbip-core" #define USBIP_HOST_DRV_NAME "usbip-host" #define USBIP_DEVICE_DRV_NAME "usbip-vudc" #define USBIP_VHCI_DRV_NAME "vhci_hcd" /* sysfs constants */ #define SYSFS_MNT_PATH "/sys" #define SYSFS_BUS_NAME "bus" #define SYSFS_BUS_TYPE "usb" #define SYSFS_DRIVERS_NAME "drivers" #define SYSFS_PATH_MAX 256 #define SYSFS_BUS_ID_SIZE 32 /* Defines for op_code status in server/client op_common PDUs */ #define ST_OK 0x00 #define ST_NA 0x01 /* Device requested for import is not available */ #define ST_DEV_BUSY 0x02 /* Device requested for import is in error state */ #define ST_DEV_ERR 0x03 #define ST_NODEV 0x04 #define ST_ERROR 0x05 extern int usbip_use_syslog; extern int usbip_use_stderr; extern int usbip_use_debug ; #define PROGNAME "usbip" #define pr_fmt(fmt) "%s: %s: " fmt "\n", PROGNAME #define dbg_fmt(fmt) pr_fmt("%s:%d:[%s] " fmt), "debug", \ __FILE__, __LINE__, __func__ #define err(fmt, args...) \ do { \ if (usbip_use_syslog) { \ syslog(LOG_ERR, pr_fmt(fmt), "error", ##args); \ } \ if (usbip_use_stderr) { \ fprintf(stderr, pr_fmt(fmt), "error", ##args); \ } \ } while (0) #define info(fmt, args...) \ do { \ if (usbip_use_syslog) { \ syslog(LOG_INFO, pr_fmt(fmt), "info", ##args); \ } \ if (usbip_use_stderr) { \ fprintf(stderr, pr_fmt(fmt), "info", ##args); \ } \ } while (0) #define dbg(fmt, args...) \ do { \ if (usbip_use_debug) { \ if (usbip_use_syslog) { \ syslog(LOG_DEBUG, dbg_fmt(fmt), ##args); \ } \ if (usbip_use_stderr) { \ fprintf(stderr, dbg_fmt(fmt), ##args); \ } \ } \ } while (0) #define BUG() \ do { \ err("sorry, it's a bug!"); \ abort(); \ } while (0) struct usbip_usb_interface { uint8_t bInterfaceClass; uint8_t bInterfaceSubClass; uint8_t bInterfaceProtocol; uint8_t padding; /* alignment */ } __attribute__((packed)); struct usbip_usb_device { char path[SYSFS_PATH_MAX]; char busid[SYSFS_BUS_ID_SIZE]; uint32_t busnum; uint32_t devnum; uint32_t speed; uint16_t idVendor; uint16_t idProduct; uint16_t bcdDevice; uint8_t bDeviceClass; uint8_t bDeviceSubClass; uint8_t bDeviceProtocol; uint8_t bConfigurationValue; uint8_t bNumConfigurations; uint8_t bNumInterfaces; } __attribute__((packed)); #define to_string(s) #s void dump_usb_interface(struct usbip_usb_interface *); void dump_usb_device(struct usbip_usb_device *); int read_usb_device(struct udev_device *sdev, struct usbip_usb_device *udev); int read_attr_value(struct udev_device *dev, const char *name, const char *format); int read_usb_interface(struct usbip_usb_device *udev, int i, struct usbip_usb_interface *uinf); const char *usbip_speed_string(int num); const char *usbip_status_string(int32_t status); const char *usbip_op_common_status_string(int status); int usbip_names_init(char *); void usbip_names_free(void); void usbip_names_get_product(char *buff, size_t size, uint16_t vendor, uint16_t product); void usbip_names_get_class(char *buff, size_t size, uint8_t class, uint8_t subclass, uint8_t protocol); #endif /* __USBIP_COMMON_H */