Merge pull request #7695 from yuwata/transient-socket
DBus-API: implement transient socket unit
This commit is contained in:
Executable
+5
@@ -0,0 +1,5 @@
|
||||
#!/bin/sh -eu
|
||||
|
||||
$1 -dM -include netinet/in.h - </dev/null | \
|
||||
awk '/^#define[ \t]+IPPROTO_[^ \t]+[ \t]+[^ \t]/ { print $2; }' | \
|
||||
sed -e 's/IPPROTO_//'
|
||||
+11
-1
@@ -176,6 +176,8 @@ basic_sources_plain = files('''
|
||||
smack-util.c
|
||||
smack-util.h
|
||||
socket-label.c
|
||||
socket-protocol-list.c
|
||||
socket-protocol-list.h
|
||||
socket-util.c
|
||||
socket-util.h
|
||||
sparse-endian.h
|
||||
@@ -255,11 +257,19 @@ errno_list_txt = custom_target(
|
||||
command : [generate_errno_list, cpp],
|
||||
capture : true)
|
||||
|
||||
generate_socket_protocol_list = find_program('generate-socket-protocol-list.sh')
|
||||
socket_protocol_list_txt = custom_target(
|
||||
'socket-protocol-list.txt',
|
||||
output : 'socket-protocol-list.txt',
|
||||
command : [generate_socket_protocol_list, cpp],
|
||||
capture : true)
|
||||
|
||||
generated_gperf_headers = []
|
||||
foreach item : [['af', af_list_txt, 'af', ''],
|
||||
['arphrd', arphrd_list_txt, 'arphrd', 'ARPHRD_'],
|
||||
['cap', cap_list_txt, 'capability', ''],
|
||||
['errno', errno_list_txt, 'errno', '']]
|
||||
['errno', errno_list_txt, 'errno', ''],
|
||||
['socket-protocol', socket_protocol_list_txt, 'socket_protocol', 'IPPROTO_']]
|
||||
|
||||
fname = '@0@-from-name.gperf'.format(item[0])
|
||||
gperf_file = custom_target(
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1+ */
|
||||
/***
|
||||
This file is part of systemd.
|
||||
|
||||
Copyright 2014 Lennart Poettering
|
||||
|
||||
systemd 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.
|
||||
|
||||
systemd 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 systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
#include <netinet/in.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "socket-protocol-list.h"
|
||||
#include "macro.h"
|
||||
|
||||
static const struct socket_protocol_name* lookup_socket_protocol(register const char *str, register GPERF_LEN_TYPE len);
|
||||
|
||||
#include "socket-protocol-from-name.h"
|
||||
#include "socket-protocol-to-name.h"
|
||||
|
||||
const char *socket_protocol_to_name(int id) {
|
||||
|
||||
if (id < 0)
|
||||
return NULL;
|
||||
|
||||
if (id >= (int) ELEMENTSOF(socket_protocol_names))
|
||||
return NULL;
|
||||
|
||||
return socket_protocol_names[id];
|
||||
}
|
||||
|
||||
int socket_protocol_from_name(const char *name) {
|
||||
const struct socket_protocol_name *sc;
|
||||
|
||||
assert(name);
|
||||
|
||||
sc = lookup_socket_protocol(name, strlen(name));
|
||||
if (!sc)
|
||||
return 0;
|
||||
|
||||
return sc->id;
|
||||
}
|
||||
|
||||
int socket_protocol_max(void) {
|
||||
return ELEMENTSOF(socket_protocol_names);
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1+ */
|
||||
#pragma once
|
||||
|
||||
/***
|
||||
This file is part of systemd.
|
||||
|
||||
Copyright 2014 Lennart Poettering
|
||||
|
||||
systemd 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.
|
||||
|
||||
systemd 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 systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
const char *socket_protocol_to_name(int id);
|
||||
int socket_protocol_from_name(const char *name);
|
||||
|
||||
int socket_protocol_max(void);
|
||||
@@ -0,0 +1,9 @@
|
||||
BEGIN{
|
||||
print "static const char* const socket_protocol_names[] = { "
|
||||
}
|
||||
!/HOPOPTS/ {
|
||||
printf " [IPPROTO_%s] = \"%s\",\n", $1, tolower($1)
|
||||
}
|
||||
END{
|
||||
print "};"
|
||||
}
|
||||
@@ -55,6 +55,17 @@
|
||||
# define IDN_FLAGS 0
|
||||
#endif
|
||||
|
||||
static const char* const socket_address_type_table[] = {
|
||||
[SOCK_STREAM] = "Stream",
|
||||
[SOCK_DGRAM] = "Datagram",
|
||||
[SOCK_RAW] = "Raw",
|
||||
[SOCK_RDM] = "ReliableDatagram",
|
||||
[SOCK_SEQPACKET] = "SequentialPacket",
|
||||
[SOCK_DCCP] = "DatagramCongestionControl",
|
||||
};
|
||||
|
||||
DEFINE_STRING_TABLE_LOOKUP(socket_address_type, int);
|
||||
|
||||
int socket_address_parse(SocketAddress *a, const char *s) {
|
||||
char *e, *n;
|
||||
unsigned u;
|
||||
|
||||
@@ -72,6 +72,9 @@ typedef enum SocketAddressBindIPv6Only {
|
||||
|
||||
#define socket_address_family(a) ((a)->sockaddr.sa.sa_family)
|
||||
|
||||
const char* socket_address_type_to_string(int t) _const_;
|
||||
int socket_address_type_from_string(const char *s) _pure_;
|
||||
|
||||
int socket_address_parse(SocketAddress *a, const char *s);
|
||||
int socket_address_parse_and_warn(SocketAddress *a, const char *s);
|
||||
int socket_address_parse_netlink(SocketAddress *a, const char *s);
|
||||
|
||||
Reference in New Issue
Block a user