]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
util: helper functions for fibre channel devices
authorBjoern Walk <bwalk@linux.vnet.ibm.com>
Mon, 22 May 2017 06:38:24 +0000 (08:38 +0200)
committerJohn Ferlan <jferlan@redhat.com>
Fri, 26 May 2017 14:44:05 +0000 (10:44 -0400)
We will need some convenient helper functions for managing sysfs-entries
for fibre channel-backed devices. Let's implement them and make them
available in the private API.

Signed-off-by: Bjoern Walk <bwalk@linux.vnet.ibm.com>
po/POTFILES.in
src/Makefile.am
src/libvirt_private.syms
src/util/virfcp.c [new file with mode: 0644]
src/util/virfcp.h [new file with mode: 0644]

index 5077857b0f4ec9688ff7f29bc810eeec58fa1c3a..142b4d3373b78dc6ad22273f9b50a482151cf012 100644 (file)
@@ -206,6 +206,7 @@ src/util/virdnsmasq.c
 src/util/virerror.c
 src/util/virerror.h
 src/util/vireventpoll.c
+src/util/virfcp.c
 src/util/virfdstream.c
 src/util/virfile.c
 src/util/virfirewall.c
index f95f30e2fd8d08d6db79a63e0f7182b167004cc3..0b7cfc89a9a699a2d1da76b2e0c7f7ed47f86e19 100644 (file)
@@ -117,6 +117,7 @@ UTIL_SOURCES =                                                      \
                util/virerror.c util/virerror.h                 \
                util/virevent.c util/virevent.h                 \
                util/vireventpoll.c util/vireventpoll.h         \
+               util/virfcp.c util/virfcp.h                     \
                util/virfdstream.c util/virfdstream.h           \
                util/virfile.c util/virfile.h                   \
                util/virfirewall.c util/virfirewall.h           \
index d361454d5c81349a10165578ca895e09b29f2a40..429b095bb1058800b231ab0da97b650e887566a5 100644 (file)
@@ -1586,6 +1586,11 @@ virEventPollUpdateHandle;
 virEventPollUpdateTimeout;
 
 
+# util/virfcp.h
+virFCIsCapableRport;
+virFCReadRportValue;
+
+
 # util/virfdstream.h
 virFDStreamConnectUNIX;
 virFDStreamCreateFile;
diff --git a/src/util/virfcp.c b/src/util/virfcp.c
new file mode 100644 (file)
index 0000000..3c7fab9
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * virfcp.c: Utility functions for the Fibre Channel Protocol
+ *
+ * Copyright (C) 2017 IBM Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library.  If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Author: Bjoern Walk <bwalk@linux.vnet.ibm.com>
+ */
+
+#include <config.h>
+
+#include "internal.h"
+
+#include "viralloc.h"
+#include "virfile.h"
+#include "virstring.h"
+
+#include "virfcp.h"
+
+#define VIR_FROM_THIS VIR_FROM_NONE
+
+#ifdef __linux__
+
+# define SYSFS_FC_RPORT_PATH "/sys/class/fc_remote_ports"
+
+bool
+virFCIsCapableRport(const char *rport)
+{
+    bool ret = false;
+    char *path = NULL;
+
+    if (virBuildPath(&path, SYSFS_FC_RPORT_PATH, rport) < 0)
+        return false;
+
+    ret = virFileExists(path);
+    VIR_FREE(path);
+
+    return ret;
+}
+
+int
+virFCReadRportValue(const char *rport,
+                    const char *entry,
+                    char **result)
+{
+    int ret = -1;
+    char *buf = NULL, *p = NULL;
+
+    if (virFileReadValueString(&buf, "%s/%s/%s",
+                               SYSFS_FC_RPORT_PATH, rport, entry) < 0) {
+        return -1;
+    }
+
+    if ((p = strchr(buf, '\n')))
+        *p = '\0';
+
+    if (VIR_STRDUP(*result, buf) < 0)
+        goto cleanup;
+
+    ret = 0;
+
+ cleanup:
+    VIR_FREE(buf);
+    return ret;
+}
+
+#else
+
+bool
+virSysfsIsCapableFCRport(const char *rport ATTRIBUTE_UNUSED)
+{
+    virReportSystemError(ENOSYS, "%s", _("Not supported on this platform"));
+    return false;
+}
+
+int
+virSysfsReadFCRport(const char *rport ATTRIBUTE_UNUSED,
+                    const char *entry ATTRIBUTE_UNUSED,
+                    char **result ATTRIBUTE_UNUSED)
+{
+    virReportSystemError(ENOSYS, "%s", _("Not supported on this platform"));
+    return -1;
+}
+
+#endif
diff --git a/src/util/virfcp.h b/src/util/virfcp.h
new file mode 100644 (file)
index 0000000..2bc0538
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * virfcp.h: Utility functions for the Fibre Channel Protocol
+ *
+ * Copyright (C) 2017 IBM Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library.  If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Author: Bjoern Walk <bwalk@linux.vnet.ibm.com>
+ */
+
+#ifndef __VIR_FCP_H__
+# define __VIR_FCP_H__
+
+bool
+virFCIsCapableRport(const char *rport);
+
+int
+virFCReadRportValue(const char *rport,
+                    const char *entry,
+                    char **result);
+
+#endif