diff options
Diffstat (limited to 'usr.sbin')
-rw-r--r-- | usr.sbin/bgpctl/Makefile | 15 | ||||
-rw-r--r-- | usr.sbin/bgpctl/bgpctl.8 | 48 | ||||
-rw-r--r-- | usr.sbin/bgpctl/bgpctl.c | 88 |
3 files changed, 151 insertions, 0 deletions
diff --git a/usr.sbin/bgpctl/Makefile b/usr.sbin/bgpctl/Makefile new file mode 100644 index 00000000000..8a4e9f014f0 --- /dev/null +++ b/usr.sbin/bgpctl/Makefile @@ -0,0 +1,15 @@ +# $OpenBSD: Makefile,v 1.1 2004/01/02 02:22:52 henning Exp $ + +.PATH: ${.CURDIR}/../bgpd/ + +PROG= bgpctl +SRCS= bgpctl.c buffer.c imsg.c log.c +CFLAGS+= -Wall +CFLAGS+= -Wstrict-prototypes -Wmissing-prototypes +CLFAGS+= -Wmissing-declarations -Wredundant-decls +CFLAGS+= -Wshadow -Wpointer-arith -Wcast-qual +CFLAGS+= -Wsign-compare +CFLAGS+= -I${.CURDIR}/../bgpd/ +MAN= bgpctl.8 + +.include <bsd.prog.mk> diff --git a/usr.sbin/bgpctl/bgpctl.8 b/usr.sbin/bgpctl/bgpctl.8 new file mode 100644 index 00000000000..d0adb9b4037 --- /dev/null +++ b/usr.sbin/bgpctl/bgpctl.8 @@ -0,0 +1,48 @@ +.\" $OpenBSD: bgpctl.8,v 1.1 2004/01/02 02:22:52 henning Exp $ +.\" +.\" Copyright (c) 2003 Henning Brauer <henning@openbsd.org> +.\" +.\" Permission to use, copy, modify, and distribute this software for any +.\" purpose with or without fee is hereby granted, provided that the above +.\" copyright notice and this permission notice appear in all copies. +.\" +.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +.\" +.Dd December 22, 2003 +.Dt BGPCTL 8 +.Os +.Sh NAME +.Nm bgpctl +.Nd "control the Border Gateway Protocol daemon" +.Sh SYNOPSIS +.Nm bgpctl +.Bk -words +.Ek +.Sh DESCRIPTION +The +.Nm +program controls the +.Xr bgpd +daemon. +The options are as follows: +.Bl -tag -width Ds +.El +.Sh SEE ALSO +.Xr bgpd 8 +.Sh FILES +.Bl -tag -width "/etc/bgpd.conf" -compact +.It Pa /etc/bgpd.conf +.Nm +configuration file. +.El +.Sh HISTORY +The +.Nm +program first appeared in +.Ox 3.5 . diff --git a/usr.sbin/bgpctl/bgpctl.c b/usr.sbin/bgpctl/bgpctl.c new file mode 100644 index 00000000000..49406b259d8 --- /dev/null +++ b/usr.sbin/bgpctl/bgpctl.c @@ -0,0 +1,88 @@ +/* $OpenBSD: bgpctl.c,v 1.1 2004/01/02 02:22:52 henning Exp $ */ + +/* + * Copyright (c) 2003 Henning Brauer <henning@openbsd.org> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <sys/types.h> +#include <sys/socket.h> +#include <sys/un.h> +#include <err.h> +#include <stdio.h> +#include <string.h> +#include <unistd.h> + +#include "bgpd.h" + +int main(int, char *[]); + +struct imsgbuf ibuf; + +static const char *statenames[] = { + "None", + "Idle", + "Connect", + "Active", + "OpenSent", + "OpenConfirm", + "Established" +}; + +int +main(int argc, char *argv[]) +{ + struct sockaddr_un sun; + int fd, n; + struct imsg imsg; + struct peer *p; + + if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { + err(1, "control_init: socket"); + exit(1); + } + + bzero(&sun, sizeof(sun)); + sun.sun_family = AF_UNIX; + strlcpy(sun.sun_path, SOCKET_NAME, sizeof(sun.sun_path)); + if (connect(fd, (struct sockaddr *)&sun, sizeof(sun)) == -1) { + err(1, "connect: %s", SOCKET_NAME); + exit(1); + } + + imsg_init(&ibuf, fd); + imsg_compose(&ibuf, IMSG_CTL_SHOW_NEIGHBOR, 0, NULL, 0); + imsg_read(&ibuf); + + for (;;) { + if ((n = imsg_get(&ibuf, &imsg)) == -1) + errx(1, "imsg_get error"); + + if (n == 0) + break; + + switch (imsg.hdr.type) { + case IMSG_CTL_SHOW_NEIGHBOR: + p = imsg.data; + printf("%s: %s\n", + inet_ntoa(p->conf.remote_addr.sin_addr), + statenames[p->state]); + break; + default: + break; + } + } + + close(fd); +} |