diff options
Diffstat (limited to 'sysdep/unix')
-rw-r--r-- | sysdep/unix/io.c | 20 | ||||
-rw-r--r-- | sysdep/unix/main.c | 2 | ||||
-rw-r--r-- | sysdep/unix/unix.h | 2 |
3 files changed, 24 insertions, 0 deletions
diff --git a/sysdep/unix/io.c b/sysdep/unix/io.c index 4030b86..ed5b89f 100644 --- a/sysdep/unix/io.c +++ b/sysdep/unix/io.c @@ -1194,3 +1194,23 @@ io_loop(void) } } } + +void +test_old_bird(char *path) +{ + int fd; + struct sockaddr_un sa; + + fd = socket(AF_UNIX, SOCK_STREAM, 0); + + if (fd < 0) + die("Cannot create socket: %m"); + bzero(&sa, sizeof(sa)); + sa.sun_family = AF_UNIX; + strcpy(sa.sun_path, path); + if (connect(fd, (struct sockaddr *) &sa, SUN_LEN(&sa)) == 0) + die("I found another BIRD running."); + close(fd); +} + + diff --git a/sysdep/unix/main.c b/sysdep/unix/main.c index ec8802b..335f42a 100644 --- a/sysdep/unix/main.c +++ b/sysdep/unix/main.c @@ -412,6 +412,8 @@ main(int argc, char **argv) log_init_debug(""); log_init(debug_flag, 1); + test_old_bird(path_control_socket); + DBG("Initializing.\n"); resource_init(); olock_init(); diff --git a/sysdep/unix/unix.h b/sysdep/unix/unix.h index 72b6ef5..997a408 100644 --- a/sysdep/unix/unix.h +++ b/sysdep/unix/unix.h @@ -46,6 +46,8 @@ void fill_in_sockaddr(sockaddr *sa, ip_addr a, unsigned port); void get_sockaddr(sockaddr *sa, ip_addr *a, unsigned *port, int check); int sk_open_unix(struct birdsock *s, char *name); void *tracked_fopen(struct pool *, char *name, char *mode); +void test_old_bird(char *path); + /* krt.c bits */ |