From 5fee772b1935f3aef6eb46ddc4ba3fb9229793c8 Mon Sep 17 00:00:00 2001 From: Marco van Wieringen Date: Tue, 17 Mar 2015 17:05:23 +0100 Subject: [PATCH] Add small README on how to add additional storage backends. --- README.storagebackend | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 README.storagebackend diff --git a/README.storagebackend b/README.storagebackend new file mode 100644 index 00000000000..013248f8c9b --- /dev/null +++ b/README.storagebackend @@ -0,0 +1,41 @@ +Adding additional storage backends: + +- Creating a new backend: + - Create a new derived class of DEVICE e.g. + + class whatever_device: public DEVICE { + private: + POOLMEM *m_virtual_filename; + boffset_t m_offset; + + public: + whatever_device(); + ~whatever_device(); + + /* + * Interface from DEVICE + */ + int d_close(int); + int d_open(const char *pathname, int flags, int mode); + int d_ioctl(int fd, ioctl_req_t request, char *mt = NULL); + boffset_t d_lseek(DCR *dcr, boffset_t offset, int whence); + ssize_t d_read(int fd, void *buffer, size_t count); + ssize_t d_write(int fd, const void *buffer, size_t count); + bool d_truncate(DCR *dcr); + }; + + In file src/stored/backends/whatever_device.h + - Create a new class implementing the pure virtual methods. + In file src/stored/backends/whatever_device.c + + There are plenty of examples. + - Add build rules to src/stored/backends/Makefile.in + - Add new backend to AVAILABLE_DEVICE_API_SRCS in src/stored/Makefile.in for non dynamic loading. + +- Glue code for loading and using the new backend + - Add new enum value to Device types enum in src/stored/dev.h + - Add new enum value to is_file() method of DEVICE class. + - Add new enum mapping to dev_types array in src/stored/stored_conf.c + - For static allocation of new backend add code to m_init_dev() in src/stored/dev.c + (In switch (device->dev_type) which dispatches based on device type) + - Add mapping for dynamic loading of backend to src/stored/sd_backends.h