|  | What:		/sys/class/rnbd-client | 
|  | Date:		Feb 2020 | 
|  | KernelVersion:	5.7 | 
|  | Contact:	Jack Wang <jinpu.wang@cloud.ionos.com> Danil Kipnis <danil.kipnis@cloud.ionos.com> | 
|  | Description:	Provide information about RNBD-client. | 
|  | All sysfs files that are not read-only provide the usage information on read: | 
|  |  | 
|  | Example:: | 
|  |  | 
|  | # cat /sys/class/rnbd-client/ctl/map_device | 
|  |  | 
|  | > Usage: echo "sessname=<name of the rtrs session> path=<[srcaddr,]dstaddr> | 
|  | > [path=<[srcaddr,]dstaddr>] device_path=<full path on remote side> | 
|  | > [access_mode=<ro|rw|migration>] > map_device | 
|  | > | 
|  | > addr ::= [ ip:<ipv4> | ip:<ipv6> | gid:<gid> ] | 
|  |  | 
|  | What:		/sys/class/rnbd-client/ctl/map_device | 
|  | Date:		Feb 2020 | 
|  | KernelVersion:	5.7 | 
|  | Contact:	Jack Wang <jinpu.wang@cloud.ionos.com> Danil Kipnis <danil.kipnis@cloud.ionos.com> | 
|  | Description:	Expected format is the following:: | 
|  |  | 
|  | sessname=<name of the rtrs session> | 
|  | path=<[srcaddr,]dstaddr> [path=<[srcaddr,]dstaddr> ...] | 
|  | device_path=<full path on remote side> | 
|  | [access_mode=<ro|rw|migration>] | 
|  |  | 
|  | Where: | 
|  |  | 
|  | sessname: | 
|  | accepts a string not bigger than 256 chars, which identifies | 
|  | a given session on the client and on the server. | 
|  | I.e. "clt_hostname-srv_hostname" could be a natural choice. | 
|  |  | 
|  | path: | 
|  | describes a connection between the client and the server by | 
|  | specifying destination and, when required, the source address. | 
|  | The addresses are to be provided in the following format:: | 
|  |  | 
|  | ip:<IPv6> | 
|  | ip:<IPv4> | 
|  | gid:<GID> | 
|  |  | 
|  | for example:: | 
|  |  | 
|  | path=ip:10.0.0.66 | 
|  |  | 
|  | The single addr is treated as the destination. | 
|  | The connection will be established to this server from any client IP address. | 
|  |  | 
|  | :: | 
|  |  | 
|  | path=ip:10.0.0.66,ip:10.0.1.66 | 
|  |  | 
|  | First addr is the source address and the second is the destination. | 
|  |  | 
|  | If multiple "path=" options are specified multiple connection | 
|  | will be established and data will be sent according to | 
|  | the selected multipath policy (see RTRS mp_policy sysfs entry description). | 
|  |  | 
|  | device_path: | 
|  | Path to the block device on the server side. Path is specified | 
|  | relative to the directory on server side configured in the | 
|  | 'dev_search_path' module parameter of the rnbd_server. | 
|  | The rnbd_server prepends the <device_path> received from client | 
|  | with <dev_search_path> and tries to open the | 
|  | <dev_search_path>/<device_path> block device.  On success, | 
|  | a /dev/rnbd<N> device file, a /sys/block/rnbd<N>/ | 
|  | directory and an entry in /sys/class/rnbd-client/ctl/devices | 
|  | will be created. | 
|  |  | 
|  | If 'dev_search_path' contains '%SESSNAME%', then each session can | 
|  | have different devices namespace, e.g. server was configured with | 
|  | the following parameter "dev_search_path=/run/rnbd-devs/%SESSNAME%", | 
|  | client has this string "sessname=blya device_path=sda", then server | 
|  | will try to open: /run/rnbd-devs/blya/sda. | 
|  |  | 
|  | access_mode: | 
|  | the access_mode parameter specifies if the device is to be | 
|  | mapped as "ro" read-only or "rw" read-write. The server allows | 
|  | a device to be exported in rw mode only once. The "migration" | 
|  | access mode has to be specified if a second mapping in read-write | 
|  | mode is desired. | 
|  |  | 
|  | By default "rw" is used. | 
|  |  | 
|  | nr_poll_queues | 
|  | specifies the number of poll-mode queues. If the IO has HIPRI flag, | 
|  | the block-layer will send the IO via the poll-mode queue. | 
|  | For fast network and device the polling is faster than interrupt-base | 
|  | IO handling because it saves time for context switching, switching to | 
|  | another process, handling the interrupt and switching back to the | 
|  | issuing process. | 
|  |  | 
|  | Set -1 if you want to set it as the number of CPUs | 
|  | By default rnbd client creates only irq-mode queues. | 
|  |  | 
|  | NOTICE: MUST make a unique session for a device using the poll-mode queues. | 
|  |  | 
|  | Exit Codes: | 
|  |  | 
|  | If the device is already mapped it will fail with EEXIST. If the input | 
|  | has an invalid format it will return EINVAL. If the device path cannot | 
|  | be found on the server, it will fail with ENOENT. | 
|  |  | 
|  | Finding device file after mapping | 
|  | --------------------------------- | 
|  |  | 
|  | After mapping, the device file can be found by: | 
|  | o  The symlink /sys/class/rnbd-client/ctl/devices/<device_id>@<session_name> | 
|  | points to /sys/block/<dev-name>. The last part of the symlink destination | 
|  | is the same as the device name.  By extracting the last part of the | 
|  | path the path to the device /dev/<dev-name> can be build. | 
|  |  | 
|  | * /dev/block/$(cat /sys/class/rnbd-client/ctl/devices/<device_id>@<session_name>/dev) | 
|  |  | 
|  | How to find the <device_id> of the device is described on the next | 
|  | section. | 
|  |  | 
|  | What:		/sys/class/rnbd-client/ctl/devices/ | 
|  | Date:		Feb 2020 | 
|  | KernelVersion:	5.7 | 
|  | Contact:	Jack Wang <jinpu.wang@cloud.ionos.com> Danil Kipnis <danil.kipnis@cloud.ionos.com> | 
|  | Description:	For each device mapped on the client a new symbolic link is created as | 
|  | /sys/class/rnbd-client/ctl/devices/<device_id>@<session_name>, which points | 
|  | to the block device created by rnbd (/sys/block/rnbd<N>/). | 
|  | The <device_id> of each device is created as follows: | 
|  |  | 
|  | - If the 'device_path' provided during mapping contains slashes ("/"), | 
|  | they are replaced by exclamation mark ("!") and used as as the | 
|  | <device_id>. Otherwise, the <device_id> will be the same as the | 
|  | "device_path" provided. |