bgpd will get a new process for RTR handling. Because of this it makes
sense to cleanup the startup code a bit and not use flags to indicate
which process to run but instead use the enum bgpd_process.
Additionally change the PFD_PIPE_ROUTE to PFD_PIPE_RDE. The latter is less
confusing since there is also PFD_SOCK_ROUTE.
OK?
--
:wq Claudio
Index: bgpd.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/bgpd.c,v
retrieving revision 1.232
diff -u -p -r1.232 bgpd.c
--- bgpd.c 30 Dec 2020 07:00:54 -0000 1.232
+++ bgpd.c 4 Jan 2021 16:00:30 -0000
@@ -90,7 +90,7 @@ usage(void)
}
#define PFD_PIPE_SESSION 0
-#define PFD_PIPE_ROUTE 1
+#define PFD_PIPE_RDE 1
#define PFD_SOCK_ROUTE 2
#define PFD_SOCK_PFKEY 3
#define POLL_MAX 4
@@ -102,6 +102,7 @@ int
main(int argc, char *argv[])
{
struct bgpd_config *conf;
+ enum bgpd_process proc = PROC_MAIN;
struct rde_rib *rr;
struct peer *p;
struct pollfd pfd[POLL_MAX];
@@ -110,7 +111,6 @@ main(int argc, char *argv[])
char *conffile;
char *saved_argv0;
int debug = 0;
- int rflag = 0, sflag = 0;
int rfd, keyfd;
int ch, status;
int pipe_m2s[2];
@@ -151,10 +151,10 @@ main(int argc, char *argv[])
cmd_opts |= BGPD_OPT_VERBOSE;
break;
case 'R':
- rflag = 1;
+ proc = PROC_RDE;
break;
case 'S':
- sflag = 1;
+ proc = PROC_SE;
break;
default:
usage();
@@ -164,7 +164,7 @@ main(int argc, char *argv[])
argc -= optind;
argv += optind;
- if (argc > 0 || (sflag && rflag))
+ if (argc > 0)
usage();
if (cmd_opts & BGPD_OPT_NOACTION) {
@@ -184,10 +184,16 @@ main(int argc, char *argv[])
exit(0);
}
- if (rflag)
+ switch (proc) {
+ case PROC_MAIN:
+ break;
+ case PROC_RDE:
rde_main(debug, cmd_opts & BGPD_OPT_VERBOSE);
- else if (sflag)
+ /* NOTREACHED */
+ case PROC_SE:
session_main(debug, cmd_opts & BGPD_OPT_VERBOSE);
+ /* NOTREACHED */
+ }
if (geteuid())
errx(1, "need root privileges");
@@ -278,7 +284,7 @@ BROKEN if (pledge("stdio rpath wpath cpa
pfd[PFD_SOCK_PFKEY].events = POLLIN;
set_pollfd(&pfd[PFD_PIPE_SESSION], ibuf_se);
- set_pollfd(&pfd[PFD_PIPE_ROUTE], ibuf_rde);
+ set_pollfd(&pfd[PFD_PIPE_RDE], ibuf_rde);
if (timeout < 0 || timeout > MAX_TIMEOUT)
timeout = MAX_TIMEOUT;
@@ -300,14 +306,14 @@ BROKEN if (pledge("stdio rpath wpath cpa
quit = 1;
}
- if (handle_pollfd(&pfd[PFD_PIPE_ROUTE], ibuf_rde) == -1) {
+ if (handle_pollfd(&pfd[PFD_PIPE_RDE], ibuf_rde) == -1) {
log_warnx("main: Lost connection to RDE");
msgbuf_clear(&ibuf_rde->w);
free(ibuf_rde);
ibuf_rde = NULL;
quit = 1;
} else {
- if (dispatch_imsg(ibuf_rde, PFD_PIPE_ROUTE, conf) ==
+ if (dispatch_imsg(ibuf_rde, PFD_PIPE_RDE, conf) ==
-1)
quit = 1;
}
@@ -713,7 +719,7 @@ dispatch_imsg(struct imsgbuf *ibuf, int
switch (imsg.hdr.type) {
case IMSG_KROUTE_CHANGE:
- if (idx != PFD_PIPE_ROUTE)
+ if (idx != PFD_PIPE_RDE)
log_warnx("route request not from RDE");
else if (imsg.hdr.len != IMSG_HEADER_SIZE +
sizeof(struct kroute_full))
@@ -723,7 +729,7 @@ dispatch_imsg(struct imsgbuf *ibuf, int
rv = -1;
break;
case IMSG_KROUTE_DELETE:
- if (idx != PFD_PIPE_ROUTE)
+ if (idx != PFD_PIPE_RDE)
log_warnx("route request not from RDE");
else if (imsg.hdr.len != IMSG_HEADER_SIZE +
sizeof(struct kroute_full))
@@ -733,7 +739,7 @@ dispatch_imsg(struct imsgbuf *ibuf, int
rv = -1;
break;
case IMSG_KROUTE_FLUSH:
- if (idx != PFD_PIPE_ROUTE)
+ if (idx != PFD_PIPE_RDE)
log_warnx("route request not from RDE");
else if (imsg.hdr.len != IMSG_HEADER_SIZE)
log_warnx("wrong imsg len");
@@ -741,7 +747,7 @@ dispatch_imsg(struct imsgbuf *ibuf, int
rv = -1;
break;
case IMSG_NEXTHOP_ADD:
- if (idx != PFD_PIPE_ROUTE)
+ if (idx != PFD_PIPE_RDE)
log_warnx("nexthop request not from RDE");
else if (imsg.hdr.len != IMSG_HEADER_SIZE +
sizeof(struct bgpd_addr))
@@ -751,7 +757,7 @@ dispatch_imsg(struct imsgbuf *ibuf, int
rv = -1;
break;
case IMSG_NEXTHOP_REMOVE:
- if (idx != PFD_PIPE_ROUTE)
+ if (idx != PFD_PIPE_RDE)
log_warnx("nexthop request not from RDE");
else if (imsg.hdr.len != IMSG_HEADER_SIZE +
sizeof(struct bgpd_addr))
@@ -761,7 +767,7 @@ dispatch_imsg(struct imsgbuf *ibuf, int
conf);
break;
case IMSG_PFTABLE_ADD:
- if (idx != PFD_PIPE_ROUTE)
+ if (idx != PFD_PIPE_RDE)
log_warnx("pftable request not from RDE");
else
if (imsg.hdr.len != IMSG_HEADER_SIZE +
@@ -771,7 +777,7 @@ dispatch_imsg(struct imsgbuf *ibuf, int
rv = -1;
break;
case IMSG_PFTABLE_REMOVE:
- if (idx != PFD_PIPE_ROUTE)
+ if (idx != PFD_PIPE_RDE)
log_warnx("pftable request not from RDE");
else
if (imsg.hdr.len != IMSG_HEADER_SIZE +
@@ -781,7 +787,7 @@ dispatch_imsg(struct imsgbuf *ibuf, int
rv = -1;
break;
case IMSG_PFTABLE_COMMIT:
- if (idx != PFD_PIPE_ROUTE)
+ if (idx != PFD_PIPE_RDE)
log_warnx("pftable request not from RDE");
else if (imsg.hdr.len != IMSG_HEADER_SIZE)
log_warnx("wrong imsg len");