|
|
6bbb925 |
From b923362bb847eab5856fa3593f053e670d90e0fd Mon Sep 17 00:00:00 2001
|
|
|
6bbb925 |
From: Chris Leech <cleech@redhat.com>
|
|
|
6bbb925 |
Date: Wed, 19 Dec 2012 21:39:06 -0800
|
|
|
6bbb925 |
Subject: iscsiuio systemd socket activation support
|
|
|
6bbb925 |
|
|
|
6bbb925 |
---
|
|
|
6bbb925 |
src/unix/iscsid_ipc.c | 28 ++++++++++++++++++++++++++++
|
|
|
6bbb925 |
1 file changed, 28 insertions(+)
|
|
|
6bbb925 |
|
|
|
6bbb925 |
diff --git a/src/unix/iscsid_ipc.c b/src/unix/iscsid_ipc.c
|
|
|
6bbb925 |
index d7372fc..1c28822 100644
|
|
|
6bbb925 |
--- a/src/unix/iscsid_ipc.c
|
|
|
6bbb925 |
+++ b/src/unix/iscsid_ipc.c
|
|
|
6bbb925 |
@@ -948,6 +948,30 @@ static void *iscsid_loop(void *arg)
|
|
|
6bbb925 |
pthread_exit(NULL);
|
|
|
6bbb925 |
}
|
|
|
6bbb925 |
|
|
|
6bbb925 |
+#define SD_SOCKET_FDS_START 3
|
|
|
6bbb925 |
+
|
|
|
6bbb925 |
+static int ipc_systemd(void)
|
|
|
6bbb925 |
+{
|
|
|
6bbb925 |
+ char *env;
|
|
|
6bbb925 |
+
|
|
|
6bbb925 |
+ env = getenv("LISTEN_PID");
|
|
|
6bbb925 |
+
|
|
|
6bbb925 |
+ if (!env || (strtoul(env, NULL, 10) != getpid()))
|
|
|
6bbb925 |
+ return -EINVAL;
|
|
|
6bbb925 |
+
|
|
|
6bbb925 |
+ env = getenv("LISTEN_FDS");
|
|
|
6bbb925 |
+
|
|
|
6bbb925 |
+ if (!env)
|
|
|
6bbb925 |
+ return -EINVAL;
|
|
|
6bbb925 |
+
|
|
|
6bbb925 |
+ if (strtoul(env, NULL, 10) != 1) {
|
|
|
6bbb925 |
+ LOG_ERR("Did not receive exactly one IPC socket from systemd");
|
|
|
6bbb925 |
+ return -EINVAL;
|
|
|
6bbb925 |
+ }
|
|
|
6bbb925 |
+
|
|
|
6bbb925 |
+ return SD_SOCKET_FDS_START;
|
|
|
6bbb925 |
+}
|
|
|
6bbb925 |
+
|
|
|
6bbb925 |
/******************************************************************************
|
|
|
6bbb925 |
* Initialize/Cleanup routines
|
|
|
6bbb925 |
******************************************************************************/
|
|
|
6bbb925 |
@@ -961,6 +985,10 @@ int iscsid_init()
|
|
|
6bbb925 |
int rc;
|
|
|
6bbb925 |
struct sockaddr_un addr;
|
|
|
6bbb925 |
|
|
|
6bbb925 |
+ iscsid_opts.fd = ipc_systemd();
|
|
|
6bbb925 |
+ if (iscsid_opts.fd >= 0)
|
|
|
6bbb925 |
+ return 0;
|
|
|
6bbb925 |
+
|
|
|
6bbb925 |
iscsid_opts.fd = socket(AF_LOCAL, SOCK_STREAM, 0);
|
|
|
6bbb925 |
if (iscsid_opts.fd < 0) {
|
|
|
6bbb925 |
LOG_ERR(PFX "Can not create IPC socket");
|
|
|
6bbb925 |
--
|
|
|
6bbb925 |
1.7.11.7
|
|
|
6bbb925 |
|