mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-07-29 05:27:41 +00:00
tap-vsockd: add a --pidfile <pidfile> argument
Signed-off-by: David Scott <dave.scott@docker.com>
This commit is contained in:
parent
a4a8d02560
commit
f74d52574e
@ -304,11 +304,41 @@ static void server(GUID serviceid, const char *tap)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void write_pidfile(const char *pidfile) {
|
||||||
|
pid_t pid = getpid();
|
||||||
|
char * pid_s;
|
||||||
|
FILE *file;
|
||||||
|
int len;
|
||||||
|
|
||||||
|
if (asprintf(&pid_s, "%lld", (long long) pid) == -1) {
|
||||||
|
syslog(LOG_CRIT, "Failed to allocate pidfile string");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
len = strlen(pid_s);
|
||||||
|
file = fopen(pidfile, "w");
|
||||||
|
if (file == NULL) {
|
||||||
|
syslog(LOG_CRIT, "Failed to open pidfile %s", pidfile);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fwrite(pid_s, 1, len, file) != len) {
|
||||||
|
syslog(LOG_CRIT, "Failed to write pid to pidfile");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
fclose(file);
|
||||||
|
free(pid_s);
|
||||||
|
}
|
||||||
|
|
||||||
void usage(char *name)
|
void usage(char *name)
|
||||||
{
|
{
|
||||||
printf("%s: --debug | --service id <id> | --tap <tap>\n", name);
|
printf("%s: [--debug] [--tap <name>] [--serviceid <guid>] [--pid <file>]\n", name);
|
||||||
printf("<id>: Hyper-V socket serviceId to bind\n");
|
printf("\t[--listen | --connect]\n\n");
|
||||||
printf("<tap>: tap device to connect to\n");
|
printf("--debug: log to stderr as well as syslog\n");
|
||||||
|
printf("--tap <name>: create a tap device with the given name (defaults to eth1)\n");
|
||||||
|
printf("--serviceid <guid>: use <guid> as the well-known service GUID\n");
|
||||||
|
printf("--pid <file>: write a pid to the given file\n");
|
||||||
|
printf("--listen: listen forever for incoming AF_HVSOCK connections\n");
|
||||||
|
printf("--connect: connect to the parent partition\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
int __cdecl main(int argc, char **argv)
|
int __cdecl main(int argc, char **argv)
|
||||||
@ -319,6 +349,7 @@ int __cdecl main(int argc, char **argv)
|
|||||||
/* Defaults to a testing GUID */
|
/* Defaults to a testing GUID */
|
||||||
char *serviceid = "3049197C-9A4E-4FBF-9367-97F792F16994";
|
char *serviceid = "3049197C-9A4E-4FBF-9367-97F792F16994";
|
||||||
char *tap = "eth1";
|
char *tap = "eth1";
|
||||||
|
char *pidfile = NULL;
|
||||||
|
|
||||||
opterr = 0;
|
opterr = 0;
|
||||||
while (1) {
|
while (1) {
|
||||||
@ -327,12 +358,13 @@ int __cdecl main(int argc, char **argv)
|
|||||||
{"debug", no_argument, &debug_flag, 1},
|
{"debug", no_argument, &debug_flag, 1},
|
||||||
{"serviceid", required_argument, NULL, 's'},
|
{"serviceid", required_argument, NULL, 's'},
|
||||||
{"tap", required_argument, NULL, 't'},
|
{"tap", required_argument, NULL, 't'},
|
||||||
|
{"pidfile", required_argument, NULL, 'p'},
|
||||||
|
|
||||||
{0, 0, 0, 0}
|
{0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
int option_index = 0;
|
int option_index = 0;
|
||||||
|
|
||||||
c = getopt_long (argc, argv, "ds:t:", long_options, &option_index);
|
c = getopt_long (argc, argv, "ds:t:p:", long_options, &option_index);
|
||||||
if (c == -1) break;
|
if (c == -1) break;
|
||||||
|
|
||||||
switch (c) {
|
switch (c) {
|
||||||
@ -345,6 +377,9 @@ int __cdecl main(int argc, char **argv)
|
|||||||
case 't':
|
case 't':
|
||||||
tap = optarg;
|
tap = optarg;
|
||||||
break;
|
break;
|
||||||
|
case 'p':
|
||||||
|
pidfile = optarg;
|
||||||
|
break;
|
||||||
case 0:
|
case 0:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -365,6 +400,9 @@ int __cdecl main(int argc, char **argv)
|
|||||||
usage(argv[0]);
|
usage(argv[0]);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
if (pidfile) {
|
||||||
|
write_pidfile(pidfile);
|
||||||
|
}
|
||||||
|
|
||||||
server(sid, tap);
|
server(sid, tap);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user