NAME¶
isnsadm - iSNS client utility
SYNOPSIS¶
isnsadm [
options...] --register
object...
isnsadm [
...] --query
attr[=
value]
isnsadm [
...] --deregister
attr=value
isnsadm [
...] --list
type attr=value
isnsadm [
...] --dd-register
attr=value
isnsadm [
...] --dd-deregister
dd-id attr=value
isnsadm [
...] --enroll
client-name attr=value
isnsadm [
...] --edit-policy
attr=value
DESCRIPTION¶
Isnsadm is a command line utility for interacting with an iSNS server. It
operates in one of several modes, which are mutually exclusive. Currently,
isnsadm supports registration, query, and deregistration.
OPTIONS¶
By default,
isnsadm will take most of its settings from the configuration
file
/etc/isns/isnsadm.conf, with the exception of the following
options:
- --config filename, -c filename
- This option overrides the default configuration file.
- --debug facility, -d facility
- enables debugging. Valid facilities are
socket |
network send/receive |
|
auth |
authentication and security related information |
|
message |
iSNS protocol layer |
|
state |
database state |
|
scn |
SCN (state change notification) messages |
|
esi |
ESI (entity status inquiry) messages |
|
all |
all of the above |
|
- --local
- makes isnsadm use a Local (aka Unix) socket when talking to the
iSNS server. This can be used by the administrator to perform management
tasks, such as enrolling new clients, editing access control and so on.
Local mode is only available to the super user.
- --server servername, -s servername
- specifies the server to use (if not specified in the configuration
file).
- --control
- makes isnsadm assume the identity of a control node. Control nodes
are special in that they have more rights in accessing and modifying the
database than normal storage nodes have.
When using this option,
isnsadm will use the source name and DSA key
specified by the
Control.SourceName and
Control.AuthKeyFile
configuration options, respectively.
- --key attr=value
- This option is recognized in registration mode only, and lets you specify
an object key. For a more detailed explanation, refer to section
Registration mode.
- --keyfile=filename
- When creating a policy for a new iSNS client, isnsadm is able to
generate a DSA key for the client. The public part of the key is stored in
a policy object in the iSNS server's database, whereas the private portion
is stored in the file specified by the keyfile option.
- --help
- This will print a help message and exit.
Built-in help¶
Isnsadm has built-in help functions. When invoked with
--help, it
will print a general help message showing all supported command modes, and
exit. Specific help on an individual command mode is available by invoking
that mode with a single argument of
help, like this:
isnsadm --register help
This will print a help message describing how to use this command mode, followed
by a list of attributes this command supports and a help text describing the
attribute.
Supported attributes¶
Most command modes take a list of attributes as arguments on the command line.
The naming and syntax of these attributes are the same for all commands modes,
however certain modes support only a limited set of attributes.
Attributes are usually given as
name=value pairs. Where
empty (or NIL) attributes are supported, the attribute name by itself can be
given.
The syntax of attribute
value depends on the attribute type. For strings
and numeric values, no special conventions apply, but bitfields have a special
syntax described below.
The attribute name is usually preceded by the object type it applies to (such as
entity), followed by a hyphen and the name itself. However, where the
context clearly determines a specific object type, the prefix can be omitted.
For instance, when editing a policy object using
--edit-policy, it is
acceptable to use
node-type as shorthand for
policy-node-type.
Likewise, in a query command, it is not permitted to mix attributes from
different object types. Thus, the first attribute of a query string
establishes a type context, so that the following two invocations are
equivalent:
isnsadm --query pg-name=iqn.com.foo pg-addr=10.1.1.1 pg-port=860/tcp
isnsadm --query pg-name=iqn.com.foo addr=10.1.1.1 port=860/tcp
Isnsadm currently supports the following attributes:
Context |
Attribute |
iSNS tag |
Aliases |
|
Network Entity |
entity-id |
1 |
eid |
|
entity-prot |
2 |
|
|
entity-index |
7 |
|
iSCSI Storage Node |
iscsi-name |
32 |
|
|
iscsi-node-type |
33 |
|
|
iscsi-alias |
34 |
|
|
iscsi-idx |
36 |
|
|
iscsi-authmethod |
42 |
|
Portal |
portal-addr |
16 |
|
|
portal-port |
17 |
|
|
portal-name |
18 |
|
|
portal-esi-port |
20 |
|
|
portal-esi-interval |
21 |
|
|
portal-idx |
22 |
|
|
portal-scn-port |
23 |
|
Portal Group |
portal-group-index |
52 |
|
|
pg-name |
48 |
|
|
pg-addr |
49 |
|
|
pg-port |
50 |
|
|
pg-tag |
51 |
pgt |
|
pg-idx |
52 |
|
Discovery Domain |
dd-id |
2065 |
|
|
dd-name |
2066 |
|
|
dd-member-iscsi-idx |
2067 |
|
|
dd-member-name |
2068 |
|
|
dd-member-fc-name |
2069 |
|
|
dd-member-portal-idx |
2070 |
|
|
dd-member-addr |
2071 |
|
|
dd-member-port |
2072 |
|
|
dd-features |
2078 |
|
Policy Object |
policy-name |
- |
spi |
|
policy-key |
- |
|
|
policy-entity |
- |
|
|
policy-node-type |
- |
|
|
policy-object-type |
- |
|
|
policy-functions |
- |
|
Portal attributes¶
Portal information is conveyed by two separate attributes in iSNS; an address
attribute holding the IP address, and a TCP/UDP port attribute holding the
port number and an indication of the protocol to be used (TCP or UDP).
When parsing a TCP/UDP port, Open-iSNS will expect a port number, optionally
followed by a slash and the protocol. Port names such as
"iscsi-target" are not supported.
As a convenience,
isnsadm supports a notation representing a portal as
one pseudo-attribute. Separating address and port by a colon. Thus, the
following two are equivalent, with the latter being the shorthand
representation of the former:
addr=<address>
port=<port>[/protocol].
portal=<adress>:port[/protocol]
This notation can be used in any context where an
addr/
port
attribute pair can appear, and may be prefixed by a type name, as in
pg-portal=....
When using literal IPv6 addresses, the address has to be surrounded by square
brackets, otherwise the embedded colons would create ambiguity:
portal=[2001:5c0:0:2::24]:860/tcp
Bitfield attributes¶
Some iSNS attributes are words representing a bit field.
Isnsadm displays
and parses these attributes in human-readable form rather than using the
numerical value. The names of the bit values are displayed by built-in help
facilities. When specifying a bitfield attribute on the command line, you can
combine them using the plus (
+) or comma (
,) character, like
this:
node-type=control+initiator
Registration mode¶
Registration mode is selected by using the
--register option, followed by
a list of one or more objects to register with the iSNS server. By default,
this will create a network entity for the client (if none exists), and place
the new objects inside it. Usually, you register all objects for a network
entity in one operation, rather than each one separately.
Each object is specified as a type, optionally followed by a comma-separated
list of attributes, such as this:
target=iqn.2005-01.org.open-iscsi.foo:disk1,alias=disk1
The following object types are currently supported:
- entity=name
- Tells the server to group all objects in the specified Network Entity
container object. Normally, the iSNS server will automatically assign an
entity name that is in line with its policies, and there is no need to
specify it explicitly.
- initiator[=name]
- This will register an iSCSI storage node of type initiator. By default,
the name is set to the iSNS source name.
- This can be followed by any number of iSCSI storage node attributes.
- target[=name]
- This will register an iSCSI storage node of type target. By default, the
name is set to the iSNS source name.
- This object accepts the same set of attributes as initiator.
- control[=name]
- This will register an iSCSI storage node of type control. By default, the
name is set to the iSNS source name. Only management nodes should be
registered as control nodes, as this gives a node complete control over
the iSNS database.
- This object accepts the same set of attributes as initiator.
- portal=[address:port/proto]
- This will register a portal using the given address, port and protocol
triple. If the triple is omitted, isnsadm will use the client
host's IP address. If the portal is preceded by an initiator registration
(on the command line), the port defaults to 860/tcp; if it is preceded by
a target registration, the port defaults to 3260/tcp. For multi-homed
hosts, the choice of address is implementation dependent.
- This can be followed by any number of portal attributes.
- pg
- This will register a portal group joining the preceding portal and node.
Portal groups can be used to describe the preferred portals for a given
node; please refer to RFC 4171 for details.
- This can be followed by any number of portal group attributes. The
attribute list must specify a portal group tag (PGT) via the pgt
attribute.
There are two additional command line options of interest, which are used
exclusively with Registration mode. One is
--replace. Normally,
registration mode will
add new objects to the network entity associated
with the client host. If you specify
--replace on the command line, the
server will wipe the network entity completely, and remove all portals and
storage nodes it contained. Then it will create a new network entity, and
place the portals and storage nodes provided by the caller inside.
In addition, it is possible to replace just parts of a network entity. This is
achieved by using the command line option
--key to specify the object
that should be replaced.
For instance, assume a network entity contains the portal
10.1.1.1:860,
and the client's network address changed to
10.2.7.7. Then the
following command will atomically update the database, replacing just the
portal without touching the registered storage nodes:
isnsadm --replace --key portal=10.1.1.1:860 portal=10.2.7.7:860
The
--key option recognizes only a subset of the usual attributes:
Object type |
Syntax |
|
Entity |
eid=identifier |
Portal |
portal=address:port |
iSCSI Node |
iscsi-name=name |
To get a list of supported attributes, invoke
isnsadm --register help.
Query mode¶
Query mode is selected by using the
--query option. A query consists of a
list of
attr=
value pairs. All attributes must
belong to the same object type, i.e. queries that mix a Network Entity
attribute with e.g. a Portal attribute will be rejected.
It is also possible to specify an attribute name without value (i.e. just
attr), which will will match any object that has such an attribute,
regardless of its value. This is useful when you want to query for all objects
of a given type.
To obtain a list of supported attributes, invoke
isnsadm --query help.
List Mode¶
In this mode,
isnsadm will display all objects of a given type,
optionally restricted to those matching certain attribute values.
The arguments to list mode are a
type name, optionally followed by one or
more
attr=value pairs. Only attributes pertaining to the
given type are permitted; for instance, if you specify a type name of
portals, only portal attributes are permitted.
Possible type names are:
entities,
nodes,
portals,
dds,
ddsets,
portal-groups, and
policies.
Additional information is available via
isnsadm --list help.
Deregistration mode¶
In this mode, you can deregister objects previously registered. Only the node
which registered an entity in the first place is permitted to remove it, or
any of its child objects. (Control nodes are not bound by this restriction).
In deregistration mode, the argument list consists of a list of
attr=value pairs. Deregistration supports the same set of
attributes as query mode.
Discovery Domain Registration¶
This mode allows one to register a discovery domain or to add new members to an
existing discovery domain. Again, attributes are specified as a list of
attr=value pairs. Only discovery domain attributes are
recognized.
Note, in order to add members to an existing domain, you must specify the
domain's numeric ID. The domain's symbolic name is not a valid handle when
referring to a discovery domain.
Discovery Domain Deregistration mode¶
In this mode, you can deregister a discoery domain previously registered. Only
the node which registered a discovery domain in the first place is permitted
to remove it, or any of its members. (Control nodes are not bound by this
restriction).
In Discovery Domain deregistration mode, the argument list consists of the
Discovery Domain ID, followed by a list of
attr=value
pairs. Discovery Domain Deregistration supports the same set of attributes as
query mode.
Client Enrollment¶
This mode only works when the server recognizes the client as having control
node capabilities, which is possible in two ways:
- Invoke
- isnsadm --local as super user on the host isnsd is running
on. The --local options tells it to communicate with the server
through the local control socket.
- Invoke
- isnsadm --control, which tells it to assume the identity of a
control node. When given this option, isnsadm will use the source
name and DSA key specified by the Control.SourceName and
Control.AuthKeyFile configuration options, respectively. The server
must be configured to grant this identity control node status.
To enroll a client, use the
--enroll option, followed by the (source)
name of the client to enroll. This string will be used as the name of the
security policy the client will use to identify itself.
This is followed by a list of attribute/value pairs, where the following set of
attributes is supported:
Attribute |
Description |
Aliases |
|
|
name |
Policy Name |
spi |
|
key |
Client's DSA public key |
|
|
entity |
Assigned Entity Identifier |
|
|
node-type |
Permitted node type(s) |
|
|
node-name |
Permitted node name(s) |
|
|
functions |
Bitmap of permitted functions |
|
|
object-type |
Object access mask |
|
|
The
key attribute is used to specify the DSA public key that the server
should use to authenticate messages from this client. You can either provide a
file name; in which case
isnsadm will try to read the PEM encoded
public key from that file. If no
key attribute is given, or when using
key=gen,
isnsadm will generate a DSA key. The private portion of
the newly generated key will be stored in the file specified by
--keyfile=filename.
The
object-type attribute is used to specify which object types the
client is permitted to access. This is a comma separated list of
type:perm pairs, where
type can be any of
entity,
iscsi-node,
portal,
portal-group,
dd,
ddset, and
policy. The permissions can be either
rw, or
r.
The
functions attribute can be used to restrict which functions the
client is permitted to invoke. This is a bitfield, using the standard function
names from RFC 4171, such as
DevAttrReg,
DevAttrQry, etc.
For a description of the open-isns security model and policies, please refer to
the
isns_config(5) manual page.
Important note: In order to generate a DSA key, you have to have a set of
DSA parameters installed. By default,
isnsadm expects to find them in
/etc/isns/dsa.params. These parameters are created by calling
isnsd
--init once on the server machine. Alternatively, you can use the
following command:
openssl dsaparam 1024 -out /etc/isns/dsa.params
where 1024 is the chosen DSA key size, in bits.
EXAMPLES¶
If you want to use Open-iSNS in authenticated mode, you first need to initialize
the server's DSA key and DSA parameters. This can be done conveniently by
using
isnsd --init
This will create the server's private and public key, and place them in
/etc/isns/auth_key and
auth_key.pub, respectively.
The following command will create a policy object for a node named
isns.control , and grant it control privileges:
isnsadm --local --keyfile=control.key --enroll isns.control \
node-type=ALL functions=ALL object-type=ALL
In the process of entrolling the client, this will generate a DSA key pair, and
place the private key portion in the file
control.key. This file must
be installed as
/etc/isns/control.key on the host you wish to use as an
iSNS management station.
Next, you need to create a storage node object for the management station:
isnsadm --local --register control
On the management station, you can then enroll additional hosts:
isnsadm --control --keyfile=somehost.key --enroll
iqn.2005-01.org.open-iscsi.somehost \
node-type=target+initiator
Again, this will generate a DSA key pair and store the private key portion in
auth_key. Note the use of the
--control option that tells
isnsadm to use the identity of the control node instead of the default
key and source name.
You then need to copy
somehost.key to the client host and install it as
/etc/isns/auth_key. Likewise, the server's public key (which resides in
/etc/isns/auth_key.pub on the server) needs to be copied to the client
machine, and placed in
/etc/isns/server_key.pub.
By default, when a client registers a storage node (be it initiator or target)
with iSNS, the client will not be able to see any other storage nodes. In
order for targets to be visible to a given initiator, you need to create
so-called Discovery Domains (or DDs for short).
Currently, domain membership operations require administrator privilege. Future
extensions may allow iSNS clients to add themselves to one or more DDs upon
registration.
To create a discovery domain, and add nodes to it, you can use
isnsadm --control --dd-register dd-name=mydomain \
member-name=iqn.org.bozo.client iqn.org.bozo.jbod ...
In order to add members to an existing DD, you have to specify the numeric
domain ID - using the DD name is not sufficient, unfortunately (this is a
requirement of the RFC, not an implementation issue):
isnsadm --control --dd-register dd-id=42 \
member-name=iqn.com.foo member-name=iqn.com.bar
The DD ID can be obtained by doing a query for the DD name:
isnsadm --control --query dd-name=mydomain
In management mode, you can also register and deregister nodes and portals
manually, in case you want to fix up an inconsisteny in the database. For
instance, this will register a node and portal on a host named
client.bozo.org:
isnsadm --control --register entity=client.bozo.org \
initiator=iqn.org.bozo.client portal=191.168.7.1:860
Note that this registration explicitly specifies the network entity in which to
place the new objects. If you omit this, the new objects will be placed in an
entity named
CONTROL, which is decidedly not what you want.
SEE ALSO¶
RFC 4171,
isnsd(8),
isns_config(5).
AUTHORS¶
Olaf Kirch <olaf.kirch@oracle.com>