vn516726 / libiscsi Goto Github PK
View Code? Open in Web Editor NEWThis project forked from sahlberg/libiscsi
iscsi client library and utilities
License: Other
This project forked from sahlberg/libiscsi
iscsi client library and utilities
License: Other
Libiscsi is a clientside library to implement the iSCSI protocol that can be used to access resource of an iSCSI Target. The library is fully async with regards to iscsi commands and scsi tasks, but a sync layer is also provided for ease of use for simpler applications. The src directory contain a handful of useful iscsi utilities such as logging in to and enumerating all targets on a portal and all devices of a target. The examples directory contain example implementation of how to access both the sync and acync api of libiscsi. Libiscsi is a work in progress. It aims to become a full async library for iscsi functionality, including all features required to establish and maintain a iscsi session, as well as a low level scsi library to create scsi cdb's and parse/unmarshall data-in structures. Installation ============ ./autogen.sh ./configure make sudo make install Build RPM ========= To build RPMs run the following script from the libiscsi root directory ./packaging/RPM/makerpms.sh iSCSI URL Format ================ iSCSI devices are specified by a URL format on the following form : iscsi://[<username>[%<password>]@]<host>[:<port>]/<target-iqn>/<lun> Example: iscsi://server/iqn.ronnie.test/1 When using CHAP authentication, username and password can be specified as part of the URL iscsi://ronnie%password@server/iqn.ronnie.test/1 but this may make the user and password visible in log files as well as in ps aux output. So it is also possible to provide either just the password or both the password and username via environment variables. The username and/or password can be set via LIBISCSI_CHAP_USERNAME=ronnie LIBISCSI_CHAP_PASSWORD=password Example: LIBISCSI_CHAP_PASSWORD=password iscsi-inq iscsi://[email protected]/iqn.ronnie.test/1 IPv6 support ============ Libiscsi supports IPv6, either as names resolving into IPv6 addresses or when IPv6 addresses are explicitely set in the URL. When specifying IPv6 addresses in the URL, they have to be specified in [...] bracket form. Example: iscsi://[fec0:2727::3]:3260/iqn.ronnie.test/1 Header Digest ============= Libiscsi supports HeaderDigest. By default, libiscsi will offer None,CRC32C and let the target pick whether Header digest is to be used or not. This can be overridden by an application by calling iscsi_set_header_digest() if the application wants to force a specific setting. Patches ======= The patches subdirectory contains patches to make some external packages iscsi aware and make them use libiscsi. Currently we have SG3-UTILS and MTX. Patches for other packages would be welcome. ISCSI-TEST-CU ============= iscsi-test-cu is a CUnit based test tool for scsi and iscsi. iscsi-test-cu -l to list all tests. iscsi-test-cu -t <test-suite> <iscsi-url> to run a test suite iscsi-test-cu -t <test-suite>.<test> <iscsi-url> to run a specific test The tests are all self-documented to describe what they test and how they test. Use -V with a test to print the documentation for a test. ISCSI-TEST ========== iscsi-test is depreciated and is being replaced by iscsi-test-cu. No new tests will be developed for iscsi-test. The test-tool subdirectory contains a iscsi/scsi test tool. This is a tool that is aimed at providing a comprehensive iscsi and scsi emulation test suite. Run 'make iscsi-test' to compile it. Run ./test-tool/iscsi-test --help and Run ./test-tool/iscsi-test --list for instructions Example: $ ./test-tool/iscsi-test --initiator-name=iqn.ronnie.test --test=T0105_read10_invalid iscsi://127.0.0.1/iqn.ronnie.test/1 ========= Running test T0105_read10_invalid Read10 1 block but with iscsi ExpectedDataTransferLength==0 ... [FAILED] Read10 of 1 block with iscsi ExpectedDataTransferLength==0 should fail. TEST T0105_read10_invalid [FAILED] LD_PRELOAD FUN ============== There is a small LD_PRELOAD hack in the src directory that intercepts a handful of system calls and converts ISCSI URLs to look and behave as if they are normal read-only files. This allows using standard unix tools to become iscsi aware with no modifications. For example: The stat command: this shows the size of the iSCSI LUN as if it was a normal file: $ LD_PRELOAD=./bin/ld_iscsi.so stat iscsi://127.0.0.1:3262/iqn.ronnie.test/2 File: `iscsi://127.0.0.1:3262/iqn.ronnie.test/2' Size: 3431540736 Blocks: 0 IO Block: 0 regular file Device: 0h/0d Inode: 0 Links: 0 Access: (0444/-r--r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 1970-01-01 10:00:00.000000000 +1000 Modify: 1970-01-01 10:00:00.000000000 +1000 Change: 1970-01-01 10:00:00.000000000 +1000 The cat command, which allows you to read/dump a iSCSI LUN to a file : $ LD_PRELOAD=./bin/ld_iscsi.so cat iscsi://127.0.0.1:3262/iqn.ronnie.test/2 >copy_of_iscsi_lun Or using dd even : LD_PRELOAD=./bin/ld_iscsi.so dd if=iscsi://127.0.0.1:3262/iqn.ronnie.test/2 of=copy_of_LUN bs=10M count=1 The LD_PRELOAD hack is incomplete and needs more functions to be intercepted before becomming fully functional. Patches welcome! For now, it is sufficiently complete for trivial commands like stat and cat. You probably need to implement at least lseek, pread, pwrite before it becomes really useful. SUPPORTED PLATFORMS =================== libiscsi is pure posix and should with some tweaks run on any host that provides a posix-like environment. Libiscsi has been tested on: * Linux (32 and 64 bit) * Cygwin * FreeBSD * Windows (Win7-VisualStudio10) * OpenSolaris * Solaris 11 : Use "gmake" to build. * OS X RELEASE TARBALLS ================ Release tarballs are available at https://sites.google.com/site/libiscsitarballs/libiscsitarballs/ MAILINGLIST =========== A libiscsi mailinglist is available at http://groups.google.com/group/libiscsi Announcements of new versions of libiscsi will be posted to this list.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.