diff options
Diffstat (limited to '')
9 files changed, 101 insertions, 0 deletions
diff --git a/nvmf-autoconnect/dracut-conf/70-nvmf-autoconnect.conf.in b/nvmf-autoconnect/dracut-conf/70-nvmf-autoconnect.conf.in new file mode 100644 index 0000000..ba96116 --- /dev/null +++ b/nvmf-autoconnect/dracut-conf/70-nvmf-autoconnect.conf.in @@ -0,0 +1 @@ +install_items+=" @UDEVRULESDIR@/70-nvmf-autoconnect.rules " diff --git a/nvmf-autoconnect/systemd/nvmefc-boot-connections.service.in b/nvmf-autoconnect/systemd/nvmefc-boot-connections.service.in new file mode 100644 index 0000000..7036625 --- /dev/null +++ b/nvmf-autoconnect/systemd/nvmefc-boot-connections.service.in @@ -0,0 +1,13 @@ +[Unit] +Description=Auto-connect to subsystems on FC-NVME devices found during boot +ConditionPathExists=/sys/class/fc/fc_udev_device/nvme_discovery +DefaultDependencies=no +After=systemd-udevd.service +Before=local-fs-pre.target + +[Service] +Type=oneshot +ExecStart=/bin/sh -c "echo add > /sys/class/fc/fc_udev_device/nvme_discovery" + +[Install] +WantedBy=default.target diff --git a/nvmf-autoconnect/systemd/nvmf-autoconnect.service.in b/nvmf-autoconnect/systemd/nvmf-autoconnect.service.in new file mode 100644 index 0000000..92960cd --- /dev/null +++ b/nvmf-autoconnect/systemd/nvmf-autoconnect.service.in @@ -0,0 +1,15 @@ +[Unit] +Description=Connect NVMe-oF subsystems automatically during boot +ConditionPathExists=|@SYSCONFDIR@/nvme/config.json +ConditionPathExists=|@SYSCONFDIR@/nvme/discovery.conf +Wants=modprobe@nvme_fabrics.service +After=modprobe@nvme_fabrics.service +After=network-online.target +Before=remote-fs-pre.target + +[Service] +Type=oneshot +ExecStart=@SBINDIR@/nvme connect-all --context=autoconnect + +[Install] +WantedBy=default.target diff --git a/nvmf-autoconnect/systemd/nvmf-connect-nbft.service.in b/nvmf-autoconnect/systemd/nvmf-connect-nbft.service.in new file mode 100644 index 0000000..820e6ce --- /dev/null +++ b/nvmf-autoconnect/systemd/nvmf-connect-nbft.service.in @@ -0,0 +1,14 @@ +# This unit is meant to be started by network management software +# after a network interface defined in the NBFT gets set up +[Unit] +Description=Connect NBFT-defined NVMe-oF subsystems automatically +ConditionPathExists=|/sys/firmware/acpi/tables/NBFT +ConditionPathExists=|/sys/firmware/acpi/tables/NBFT1 +Wants=modprobe@nvme_fabrics.service +After=modprobe@nvme_fabrics.service +After=network-online.target +Before=remote-fs-pre.target + +[Service] +Type=oneshot +ExecStart=@SBINDIR@/nvme connect-all --nbft diff --git a/nvmf-autoconnect/systemd/nvmf-connect.target.in b/nvmf-autoconnect/systemd/nvmf-connect.target.in new file mode 100644 index 0000000..f64a37c --- /dev/null +++ b/nvmf-autoconnect/systemd/nvmf-connect.target.in @@ -0,0 +1,2 @@ +[Unit] +Description=All instances of nvmf-autoconnect daemon diff --git a/nvmf-autoconnect/systemd/nvmf-connect@.service.in b/nvmf-autoconnect/systemd/nvmf-connect@.service.in new file mode 100644 index 0000000..5ba7086 --- /dev/null +++ b/nvmf-autoconnect/systemd/nvmf-connect@.service.in @@ -0,0 +1,16 @@ +# +# Unit file used by 70-nvmf-autoconnect.rules. +# + +[Unit] +Description=NVMf auto-connect scan upon nvme discovery controller Events +DefaultDependencies=no +After=systemd-udevd.service +Before=local-fs-pre.target +PartOf=nvmf-connect.target +Requires=nvmf-connect.target + +[Service] +Type=simple +Environment="CONNECT_ARGS=%i" +ExecStart=/bin/sh -c "@SBINDIR@/nvme connect-all --context=autoconnect --quiet `/bin/echo -e '${CONNECT_ARGS}'`" diff --git a/nvmf-autoconnect/udev-rules/65-persistent-net-nbft.rules.in b/nvmf-autoconnect/udev-rules/65-persistent-net-nbft.rules.in new file mode 100644 index 0000000..344942b --- /dev/null +++ b/nvmf-autoconnect/udev-rules/65-persistent-net-nbft.rules.in @@ -0,0 +1,2 @@ +# Avoid renaming nbft$X interfaces +SUBSYSTEM=="net", ACTION!="remove", ENV{INTERFACE}=="nbft*", NAME:="%E{INTERFACE}" diff --git a/nvmf-autoconnect/udev-rules/70-nvmf-autoconnect.rules.in b/nvmf-autoconnect/udev-rules/70-nvmf-autoconnect.rules.in new file mode 100644 index 0000000..9235a5c --- /dev/null +++ b/nvmf-autoconnect/udev-rules/70-nvmf-autoconnect.rules.in @@ -0,0 +1,32 @@ +# +# nvmf-autoconnect.rules: +# Handles udev events which invoke automatically scan via discovery +# controller and connect to elements in the discovery log. +# +# +ACTION!="change", GOTO="autoconnect_end" + +# For backwards compatibility. Make sure HOST_IFACE is not an empty string. +ENV{NVME_HOST_IFACE}=="", ENV{NVME_HOST_IFACE}="none" + +# Events from persistent discovery controllers or nvme-fc transport events +# NVME_AEN: +# type 0x2 (NOTICE) info 0xf0 (DISCOVERY_LOG_CHANGE) log-page-id 0x70 (DISCOVERY_LOG_PAGE) +ACTION=="change", SUBSYSTEM=="nvme", ENV{NVME_AEN}=="0x70f002", \ + ENV{NVME_TRTYPE}=="*", ENV{NVME_TRADDR}=="*", \ + ENV{NVME_TRSVCID}=="*", ENV{NVME_HOST_TRADDR}=="*", ENV{NVME_HOST_IFACE}=="*", \ + RUN+="@SYSTEMCTL@ --no-block restart nvmf-connect@--device=$kernel\t--transport=$env{NVME_TRTYPE}\t--traddr=$env{NVME_TRADDR}\t--trsvcid=$env{NVME_TRSVCID}\t--host-traddr=$env{NVME_HOST_TRADDR}\t--host-iface=$env{NVME_HOST_IFACE}.service" + +# nvme-fc transport generated events (old-style for compatibility) +ACTION=="change", SUBSYSTEM=="fc", ENV{FC_EVENT}=="nvmediscovery", \ + ENV{NVMEFC_HOST_TRADDR}=="*", ENV{NVMEFC_TRADDR}=="*", \ + RUN+="@SYSTEMCTL@ --no-block restart nvmf-connect@--device=none\t--transport=fc\t--traddr=$env{NVMEFC_TRADDR}\t--trsvcid=none\t--host-traddr=$env{NVMEFC_HOST_TRADDR}.service" + +# A discovery controller just (re)connected, re-read the discovery log change to +# check if there were any changes since it was last connected. +ACTION=="change", SUBSYSTEM=="nvme", ENV{NVME_EVENT}=="rediscover", ATTR{cntrltype}=="discovery", \ + ENV{NVME_TRTYPE}=="*", ENV{NVME_TRADDR}=="*", \ + ENV{NVME_TRSVCID}=="*", ENV{NVME_HOST_TRADDR}=="*", ENV{NVME_HOST_IFACE}=="*", \ + RUN+="@SYSTEMCTL@ --no-block restart nvmf-connect@--device=$kernel\t--transport=$env{NVME_TRTYPE}\t--traddr=$env{NVME_TRADDR}\t--trsvcid=$env{NVME_TRSVCID}\t--host-traddr=$env{NVME_HOST_TRADDR}\t--host-iface=$env{NVME_HOST_IFACE}.service" + +LABEL="autoconnect_end" diff --git a/nvmf-autoconnect/udev-rules/71-nvmf-netapp.rules.in b/nvmf-autoconnect/udev-rules/71-nvmf-netapp.rules.in new file mode 100644 index 0000000..99b6a8b --- /dev/null +++ b/nvmf-autoconnect/udev-rules/71-nvmf-netapp.rules.in @@ -0,0 +1,6 @@ +# Enable round-robin for NetApp ONTAP and NetApp E-Series +ACTION=="add", SUBSYSTEM=="nvme-subsystem", ATTR{subsystype}=="nvm", ATTR{model}=="NetApp ONTAP Controller", ATTR{iopolicy}="round-robin" +ACTION=="add", SUBSYSTEM=="nvme-subsystem", ATTR{subsystype}=="nvm", ATTR{model}=="NetApp E-Series", ATTR{iopolicy}="round-robin" + +# Set ctrl_loss_tmo to -1 for NetApp ONTAP NVMe/TCP +ACTION!="remove", SUBSYSTEM=="nvme", KERNEL=="nvme*", ATTR{transport}=="tcp", ATTR{model}=="NetApp ONTAP Controller", ATTR{ctrl_loss_tmo}="-1" |