ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/gvpe/src/util.C
(Generate patch)

Comparing gvpe/src/util.C (file contents):
Revision 1.8 by pcg, Tue Oct 14 15:48:15 2003 UTC vs.
Revision 1.15 by pcg, Fri Jun 11 15:56:34 2004 UTC

1/* 1/*
2 util.C -- process management and other utility functions 2 util.C -- process management and other utility functions
3 Copyright (C) 2003-2004 Marc Lehmann <pcg@goof.com>
3 4
4 Some of these are taken from tinc, see the AUTHORS file. 5 Some of these are taken from tinc, see the AUTHORS file.
5 6
6 This program is free software; you can redistribute it and/or modify 7 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 8 it under the terms of the GNU General Public License as published by
19*/ 20*/
20 21
21#include "config.h" 22#include "config.h"
22 23
23#include <cstdio> 24#include <cstdio>
25#include <cstdlib>
24#include <cstring> 26#include <cstring>
25 27
26#include <errno.h> 28#include <errno.h>
27#include <signal.h> 29#include <signal.h>
28#include <sys/types.h> 30#include <sys/types.h>
29#include <sys/wait.h> 31#include <sys/wait.h>
30#include <unistd.h> 32#include <unistd.h>
31#include <time.h> 33#include <time.h>
32 34
33#include <sys/mman.h>
34
35#include "netcompat.h" 35#include "netcompat.h"
36 36
37#include "gettext.h" 37#include "gettext.h"
38#include "pidfile.h" 38#include "pidfile.h"
39#include "dropin.h" 39#include "dropin.h"
46int 46int
47write_pidfile (void) 47write_pidfile (void)
48{ 48{
49 int pid; 49 int pid;
50 50
51 pid = check_pid (pidfilename); 51 pid = check_pid (conf.pidfilename);
52 52
53 if (pid) 53 if (pid)
54 { 54 {
55 fprintf (stderr, _("A vped is already running with pid %d.\n"), pid); 55 fprintf (stderr, _("A gvpe daemon is already running with pid %d.\n"), pid);
56 return 1; 56 return 1;
57 } 57 }
58 58
59 /* if it's locked, write-protected, or whatever */ 59 /* if it's locked, write-protected, or whatever */
60 if (!write_pid (pidfilename)) 60 if (!write_pid (conf.pidfilename))
61 return 1; 61 return 1;
62 62
63 return 0; 63 return 0;
64} 64}
65 65
66int 66int
67kill_other (int signal) 67kill_other (int signal)
68{ 68{
69 int pid; 69 int pid;
70 70
71 pid = read_pid (pidfilename); 71 pid = read_pid (conf.pidfilename);
72 72
73 if (!pid) 73 if (!pid)
74 { 74 {
75 fprintf (stderr, _("No other vped is running.\n")); 75 fprintf (stderr, _("No other gvpe daemon is running.\n"));
76 return 1; 76 return 1;
77 } 77 }
78 78
79 errno = 0; /* No error, sometimes errno is only changed on error */ 79 errno = 0; /* No error, sometimes errno is only changed on error */
80 80
81 /* ESRCH is returned when no process with that pid is found */ 81 /* ESRCH is returned when no process with that pid is found */
82 if (kill (pid, signal) && errno == ESRCH) 82 if (kill (pid, signal) && errno == ESRCH)
83 { 83 {
84 fprintf (stderr, _("The vped is no longer running. ")); 84 fprintf (stderr, _("The gvpe daemon is no longer running. "));
85 85
86 fprintf (stderr, _("Removing stale lock file.\n")); 86 fprintf (stderr, _("Removing stale lock file.\n"));
87 remove_pid (pidfilename); 87 remove_pid (conf.pidfilename);
88 } 88 }
89 89
90 return 0; 90 return 0;
91} 91}
92 92
112 return -1; 112 return -1;
113 } 113 }
114 114
115 /* Now UPDATE the pid in the pidfile, because we changed it... */ 115 /* Now UPDATE the pid in the pidfile, because we changed it... */
116 116
117 if (!write_pid (pidfilename)) 117 if (!write_pid (conf.pidfilename))
118 return -1; 118 return -1;
119 119
120 log_to (LOGTO_SYSLOG); 120 log_to (LOGTO_SYSLOG);
121 } 121 }
122 else 122 else
123 log_to (LOGTO_SYSLOG | LOGTO_STDERR); 123 log_to (LOGTO_SYSLOG | LOGTO_STDERR);
124 124
125 slog (L_INFO, _("vped %s (%s %s) starting"), VERSION, __DATE__, __TIME__); 125 slog (L_INFO, _("gvpe daemon %s (%s %s) starting"), VERSION, __DATE__, __TIME__);
126 126
127 return 0; 127 return 0;
128}
129
130void
131make_names (void)
132{
133 if (!pidfilename)
134 pidfilename = LOCALSTATEDIR "/run/vped.pid";
135
136 if (!confbase)
137 asprintf (&confbase, "%s/vpe", CONFDIR);
138} 128}
139 129
140void run_script (const run_script_cb &cb, bool wait) 130void run_script (const run_script_cb &cb, bool wait)
141{ 131{
142 int pid; 132 int pid;
144 if ((pid = fork ()) == 0) 134 if ((pid = fork ()) == 0)
145 { 135 {
146 char *filename; 136 char *filename;
147 asprintf (&filename, "%s/%s", confbase, cb()); 137 asprintf (&filename, "%s/%s", confbase, cb());
148 execl (filename, filename, (char *) 0); 138 execl (filename, filename, (char *) 0);
149 exit (255); 139 exit (126);
150 } 140 }
151 else if (pid > 0) 141 else if (pid > 0)
152 { 142 {
153 if (wait) 143 if (wait)
154 { 144 {
204 194
205 return res; 195 return res;
206} 196}
207#endif 197#endif
208 198
199void
200id2mac (unsigned int id, void *m)
201{
202 mac &p = *(mac *)m;
203
204 if (id)
205 {
206 p[0] = 0xfe;
207 p[1] = 0xfd;
208 p[2] = 0x80;
209 p[3] = 0x00;
210 p[4] = id >> 8;
211 p[5] = id;
212 }
213 else
214 {
215 p[0] = 0xff;
216 p[1] = 0xff;
217 p[2] = 0xff;
218 p[3] = 0xff;
219 p[4] = 0xff;
220 p[5] = 0xff;
221 }
222}
223

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines