This patch adds SCTP protcol support for socket activation. SCTP socket can be configured via the conf parameter 'ListenStreamControlTrans' which is kind of too long. --- man/systemd.socket.xml | 3 ++- src/core/load-fragment-gperf.gperf.m4 | 1 + src/core/load-fragment.c | 5 ++++- src/core/socket.c | 8 ++++++-- 4 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/man/systemd.socket.xml b/man/systemd.socket.xml index ddd74a6..934a45e 100644 --- a/man/systemd.socket.xml +++ b/man/systemd.socket.xml @@ -168,10 +168,11 @@ <term><varname>ListenStream=</varname></term> <term><varname>ListenDatagram=</varname></term> <term><varname>ListenSequentialPacket=</varname></term> + <term><varname>ListenStreamControlTrans=</varname></term> <listitem><para>Specifies an address to listen on for a stream (<constant>SOCK_STREAM</constant>), datagram (<constant>SOCK_DGRAM</constant>), - or sequential packet + SCTP (<constant>IPPROTO_SCTP</constant>),or sequential packet (<constant>SOCK_SEQPACKET</constant>) socket, respectively. The address can be written in various formats:</para> diff --git a/src/core/load-fragment-gperf.gperf.m4 b/src/core/load-fragment-gperf.gperf.m4 index f4acdda..a295923 100644 --- a/src/core/load-fragment-gperf.gperf.m4 +++ b/src/core/load-fragment-gperf.gperf.m4 @@ -211,6 +211,7 @@ KILL_CONTEXT_CONFIG_ITEMS(Service)m4_dnl m4_dnl Socket.ListenStream, config_parse_socket_listen, SOCKET_SOCKET, 0 Socket.ListenDatagram, config_parse_socket_listen, SOCKET_SOCKET, 0 +Socket.ListenStreamControlTrans, config_parse_socket_listen, SOCKET_SOCKET, 0 Socket.ListenSequentialPacket, config_parse_socket_listen, SOCKET_SOCKET, 0 Socket.ListenFIFO, config_parse_socket_listen, SOCKET_FIFO, 0 Socket.ListenNetlink, config_parse_socket_listen, SOCKET_SOCKET, 0 diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c index 81f1379..0ae116b 100644 --- a/src/core/load-fragment.c +++ b/src/core/load-fragment.c @@ -358,7 +358,10 @@ int config_parse_socket_listen(const char *unit, p->address.type = SOCK_STREAM; else if (streq(lvalue, "ListenDatagram")) p->address.type = SOCK_DGRAM; - else { + else if (streq(lvalue, "ListenStreamControlTrans")) { + p->address.type = SOCK_STREAM; + p->address.protocol = IPPROTO_SCTP; + } else { assert(streq(lvalue, "ListenSequentialPacket")); p->address.type = SOCK_SEQPACKET; } diff --git a/src/core/socket.c b/src/core/socket.c index 7070bd7..82d8eaf 100644 --- a/src/core/socket.c +++ b/src/core/socket.c @@ -445,11 +445,14 @@ static int socket_load(Unit *u) { return socket_verify(s); } -_const_ static const char* listen_lookup(int family, int type) { +_const_ static const char* listen_lookup(int family, int type, int protocol) { if (family == AF_NETLINK) return "ListenNetlink"; + if (protocol == IPPROTO_SCTP) + return "ListenStreamControlTrans"; + if (type == SOCK_STREAM) return "ListenStream"; else if (type == SOCK_DGRAM) @@ -607,7 +610,8 @@ static void socket_dump(Unit *u, FILE *f, const char *prefix) { else t = k; - fprintf(f, "%s%s: %s\n", prefix, listen_lookup(socket_address_family(&p->address), p->address.type), t); + fprintf(f, "%s%s: %s\n", prefix, listen_lookup(socket_address_family(&p->address), + p->address.type, p->address.protocol), t); free(k); } else if (p->type == SOCKET_SPECIAL) fprintf(f, "%sListenSpecial: %s\n", prefix, p->path); -- 1.9.3 _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel