1aa4d16e4SJack WangWhat:		/sys/class/rnbd-client
2aa4d16e4SJack WangDate:		Feb 2020
3aa4d16e4SJack WangKernelVersion:	5.7
4aa4d16e4SJack WangContact:	Jack Wang <jinpu.wang@cloud.ionos.com> Danil Kipnis <danil.kipnis@cloud.ionos.com>
5aa4d16e4SJack WangDescription:	Provide information about RNBD-client.
6aa4d16e4SJack Wang		All sysfs files that are not read-only provide the usage information on read:
7aa4d16e4SJack Wang
8002a9c2fSMauro Carvalho Chehab		Example::
9002a9c2fSMauro Carvalho Chehab
10aa4d16e4SJack Wang		    # cat /sys/class/rnbd-client/ctl/map_device
11aa4d16e4SJack Wang
12aa4d16e4SJack Wang		    > Usage: echo "sessname=<name of the rtrs session> path=<[srcaddr,]dstaddr>
13aa4d16e4SJack Wang		    > [path=<[srcaddr,]dstaddr>] device_path=<full path on remote side>
14aa4d16e4SJack Wang		    > [access_mode=<ro|rw|migration>] > map_device
15aa4d16e4SJack Wang		    >
16aa4d16e4SJack Wang		    > addr ::= [ ip:<ipv4> | ip:<ipv6> | gid:<gid> ]
17aa4d16e4SJack Wang
18aa4d16e4SJack WangWhat:		/sys/class/rnbd-client/ctl/map_device
19aa4d16e4SJack WangDate:		Feb 2020
20aa4d16e4SJack WangKernelVersion:	5.7
21aa4d16e4SJack WangContact:	Jack Wang <jinpu.wang@cloud.ionos.com> Danil Kipnis <danil.kipnis@cloud.ionos.com>
22002a9c2fSMauro Carvalho ChehabDescription:	Expected format is the following::
23aa4d16e4SJack Wang
24aa4d16e4SJack Wang		    sessname=<name of the rtrs session>
25aa4d16e4SJack Wang		    path=<[srcaddr,]dstaddr> [path=<[srcaddr,]dstaddr> ...]
26aa4d16e4SJack Wang		    device_path=<full path on remote side>
27aa4d16e4SJack Wang		    [access_mode=<ro|rw|migration>]
28aa4d16e4SJack Wang
29aa4d16e4SJack Wang		Where:
30aa4d16e4SJack Wang
31002a9c2fSMauro Carvalho Chehab		sessname:
32002a9c2fSMauro Carvalho Chehab		    accepts a string not bigger than 256 chars, which identifies
33aa4d16e4SJack Wang		    a given session on the client and on the server.
34aa4d16e4SJack Wang		    I.e. "clt_hostname-srv_hostname" could be a natural choice.
35aa4d16e4SJack Wang
36002a9c2fSMauro Carvalho Chehab		path:
37002a9c2fSMauro Carvalho Chehab		    describes a connection between the client and the server by
38aa4d16e4SJack Wang		    specifying destination and, when required, the source address.
39002a9c2fSMauro Carvalho Chehab		    The addresses are to be provided in the following format::
40aa4d16e4SJack Wang
41aa4d16e4SJack Wang			ip:<IPv6>
42aa4d16e4SJack Wang			ip:<IPv4>
43aa4d16e4SJack Wang			gid:<GID>
44aa4d16e4SJack Wang
45002a9c2fSMauro Carvalho Chehab		for example::
46aa4d16e4SJack Wang
47aa4d16e4SJack Wang		    path=ip:10.0.0.66
48002a9c2fSMauro Carvalho Chehab
49aa4d16e4SJack Wang		The single addr is treated as the destination.
50aa4d16e4SJack Wang		The connection will be established to this server from any client IP address.
51aa4d16e4SJack Wang
52002a9c2fSMauro Carvalho Chehab		::
53002a9c2fSMauro Carvalho Chehab
54aa4d16e4SJack Wang		    path=ip:10.0.0.66,ip:10.0.1.66
55002a9c2fSMauro Carvalho Chehab
56aa4d16e4SJack Wang		First addr is the source address and the second is the destination.
57aa4d16e4SJack Wang
58aa4d16e4SJack Wang		If multiple "path=" options are specified multiple connection
59aa4d16e4SJack Wang		will be established and data will be sent according to
60aa4d16e4SJack Wang		the selected multipath policy (see RTRS mp_policy sysfs entry description).
61aa4d16e4SJack Wang
62002a9c2fSMauro Carvalho Chehab		device_path:
63002a9c2fSMauro Carvalho Chehab		    Path to the block device on the server side. Path is specified
64aa4d16e4SJack Wang		    relative to the directory on server side configured in the
65aa4d16e4SJack Wang		    'dev_search_path' module parameter of the rnbd_server.
66aa4d16e4SJack Wang		    The rnbd_server prepends the <device_path> received from client
67aa4d16e4SJack Wang		    with <dev_search_path> and tries to open the
68aa4d16e4SJack Wang		    <dev_search_path>/<device_path> block device.  On success,
69*47479b79SGioh Kim		    a /dev/rnbd<N> device file, a /sys/block/rnbd<N>/
70aa4d16e4SJack Wang		    directory and an entry in /sys/class/rnbd-client/ctl/devices
71aa4d16e4SJack Wang		    will be created.
72aa4d16e4SJack Wang
73aa4d16e4SJack Wang		If 'dev_search_path' contains '%SESSNAME%', then each session can
74aa4d16e4SJack Wang		have different devices namespace, e.g. server was configured with
75aa4d16e4SJack Wang		the following parameter "dev_search_path=/run/rnbd-devs/%SESSNAME%",
76aa4d16e4SJack Wang		client has this string "sessname=blya device_path=sda", then server
77aa4d16e4SJack Wang		will try to open: /run/rnbd-devs/blya/sda.
78aa4d16e4SJack Wang
79002a9c2fSMauro Carvalho Chehab		access_mode:
80002a9c2fSMauro Carvalho Chehab		    the access_mode parameter specifies if the device is to be
81aa4d16e4SJack Wang		    mapped as "ro" read-only or "rw" read-write. The server allows
82aa4d16e4SJack Wang		    a device to be exported in rw mode only once. The "migration"
83aa4d16e4SJack Wang		    access mode has to be specified if a second mapping in read-write
84aa4d16e4SJack Wang		    mode is desired.
85aa4d16e4SJack Wang
86aa4d16e4SJack Wang		By default "rw" is used.
87aa4d16e4SJack Wang
88aa4d16e4SJack Wang		Exit Codes:
89aa4d16e4SJack Wang
90aa4d16e4SJack Wang		If the device is already mapped it will fail with EEXIST. If the input
91aa4d16e4SJack Wang		has an invalid format it will return EINVAL. If the device path cannot
92aa4d16e4SJack Wang		be found on the server, it will fail with ENOENT.
93aa4d16e4SJack Wang
94aa4d16e4SJack Wang		Finding device file after mapping
95aa4d16e4SJack Wang		---------------------------------
96aa4d16e4SJack Wang
97aa4d16e4SJack Wang		After mapping, the device file can be found by:
98aa4d16e4SJack Wang		o  The symlink /sys/class/rnbd-client/ctl/devices/<device_id>
99aa4d16e4SJack Wang		points to /sys/block/<dev-name>. The last part of the symlink destination
100aa4d16e4SJack Wang		is the same as the device name.  By extracting the last part of the
101aa4d16e4SJack Wang		path the path to the device /dev/<dev-name> can be build.
102aa4d16e4SJack Wang
103002a9c2fSMauro Carvalho Chehab		* /dev/block/$(cat /sys/class/rnbd-client/ctl/devices/<device_id>/dev)
104aa4d16e4SJack Wang
105aa4d16e4SJack Wang		How to find the <device_id> of the device is described on the next
106aa4d16e4SJack Wang		section.
107aa4d16e4SJack Wang
108aa4d16e4SJack WangWhat:		/sys/class/rnbd-client/ctl/devices/
109aa4d16e4SJack WangDate:		Feb 2020
110aa4d16e4SJack WangKernelVersion:	5.7
111aa4d16e4SJack WangContact:	Jack Wang <jinpu.wang@cloud.ionos.com> Danil Kipnis <danil.kipnis@cloud.ionos.com>
112aa4d16e4SJack WangDescription:	For each device mapped on the client a new symbolic link is created as
113aa4d16e4SJack Wang		/sys/class/rnbd-client/ctl/devices/<device_id>, which points
114aa4d16e4SJack Wang		to the block device created by rnbd (/sys/block/rnbd<N>/).
115aa4d16e4SJack Wang		The <device_id> of each device is created as follows:
116aa4d16e4SJack Wang
117aa4d16e4SJack Wang		- If the 'device_path' provided during mapping contains slashes ("/"),
118aa4d16e4SJack Wang		  they are replaced by exclamation mark ("!") and used as as the
119aa4d16e4SJack Wang		  <device_id>. Otherwise, the <device_id> will be the same as the
120aa4d16e4SJack Wang		  "device_path" provided.
121