Download raw body.
bgpd: increase ibuf message size to 128k
To support extended bgp messages of up to 65k bump the maximum imsg size
to 128k on all channels.
On top of this remove the READ_BUF_SIZE define and replace its only use
with IBUF_READ_SIZE since the MAX_SOCK_BUF is used to scale up the imsg
socketpairs.
--
:wq Claudio
Index: bgpctl/bgpctl.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpctl/bgpctl.c,v
diff -u -p -r1.311 bgpctl.c
--- bgpctl/bgpctl.c 21 Nov 2024 13:38:14 -0000 1.311
+++ bgpctl/bgpctl.c 2 Dec 2024 13:54:23 -0000
@@ -176,7 +176,8 @@ main(int argc, char *argv[])
if ((imsgbuf = malloc(sizeof(struct imsgbuf))) == NULL)
err(1, NULL);
- if (imsgbuf_init(imsgbuf, fd) == -1)
+ if (imsgbuf_init(imsgbuf, fd) == -1 ||
+ imsgbuf_set_maxsize(imsgbuf, MAX_BGPD_IMSGSIZE) == -1)
err(1, NULL);
done = 0;
Index: bgpd/bgpd.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/bgpd.c,v
diff -u -p -r1.277 bgpd.c
--- bgpd/bgpd.c 21 Nov 2024 13:38:14 -0000 1.277
+++ bgpd/bgpd.c 2 Dec 2024 13:54:23 -0000
@@ -277,8 +277,11 @@ main(int argc, char *argv[])
(ibuf_rtr = malloc(sizeof(struct imsgbuf))) == NULL)
fatal(NULL);
if (imsgbuf_init(ibuf_se, pipe_m2s[0]) == -1 ||
+ imsgbuf_set_maxsize(ibuf_se, MAX_BGPD_IMSGSIZE) == -1 ||
imsgbuf_init(ibuf_rde, pipe_m2r[0]) == -1 ||
- imsgbuf_init(ibuf_rtr, pipe_m2roa[0]) == -1)
+ imsgbuf_set_maxsize(ibuf_rde, MAX_BGPD_IMSGSIZE) == -1 ||
+ imsgbuf_init(ibuf_rtr, pipe_m2roa[0]) == -1 ||
+ imsgbuf_set_maxsize(ibuf_rtr, MAX_BGPD_IMSGSIZE) == -1)
fatal(NULL);
imsgbuf_allow_fdpass(ibuf_se);
imsgbuf_allow_fdpass(ibuf_rde);
Index: bgpd/bgpd.h
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/bgpd.h,v
diff -u -p -r1.500 bgpd.h
--- bgpd/bgpd.h 21 Nov 2024 13:29:52 -0000 1.500
+++ bgpd/bgpd.h 2 Dec 2024 13:54:23 -0000
@@ -50,8 +50,8 @@
#define MAX_PKTSIZE 4096
#define MIN_HOLDTIME 3
-#define READ_BUF_SIZE 65535
-#define MAX_SOCK_BUF (4 * READ_BUF_SIZE)
+#define MAX_BGPD_IMSGSIZE (128 * 1024)
+#define MAX_SOCK_BUF (4 * IBUF_READ_SIZE)
#define RT_BUF_SIZE 16384
#define MAX_RTSOCK_BUF (2 * 1024 * 1024)
#define MAX_COMM_MATCH 3
Index: bgpd/control.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/control.c,v
diff -u -p -r1.131 control.c
--- bgpd/control.c 21 Nov 2024 13:38:14 -0000 1.131
+++ bgpd/control.c 2 Dec 2024 13:54:23 -0000
@@ -180,8 +180,10 @@ control_accept(int listenfd, int restric
return (0);
}
- if (imsgbuf_init(&ctl_conn->imsgbuf, connfd) == -1) {
+ if (imsgbuf_init(&ctl_conn->imsgbuf, connfd) == -1 ||
+ imsgbuf_set_maxsize(&ctl_conn->imsgbuf, MAX_BGPD_IMSGSIZE) == -1) {
log_warn("control_accept");
+ imsgbuf_clear(&ctl_conn->imsgbuf);
close(connfd);
free(ctl_conn);
return (0);
Index: bgpd/rde.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/rde.c,v
diff -u -p -r1.641 rde.c
--- bgpd/rde.c 2 Dec 2024 13:46:11 -0000 1.641
+++ bgpd/rde.c 2 Dec 2024 13:54:23 -0000
@@ -201,7 +201,8 @@ rde_main(int debug, int verbose)
if ((ibuf_main = malloc(sizeof(struct imsgbuf))) == NULL)
fatal(NULL);
- if (imsgbuf_init(ibuf_main, 3) == -1)
+ if (imsgbuf_init(ibuf_main, 3) == -1 ||
+ imsgbuf_set_maxsize(ibuf_main, MAX_BGPD_IMSGSIZE) == -1)
fatal(NULL);
imsgbuf_allow_fdpass(ibuf_main);
@@ -844,7 +845,8 @@ rde_dispatch_imsg_parent(struct imsgbuf
}
if ((i = malloc(sizeof(struct imsgbuf))) == NULL)
fatal(NULL);
- if (imsgbuf_init(i, fd) == -1)
+ if (imsgbuf_init(i, fd) == -1 ||
+ imsgbuf_set_maxsize(i, MAX_BGPD_IMSGSIZE) == -1)
fatal(NULL);
switch (imsg_get_type(&imsg)) {
case IMSG_SOCKET_CONN:
Index: bgpd/rtr.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/rtr.c,v
diff -u -p -r1.27 rtr.c
--- bgpd/rtr.c 21 Nov 2024 13:38:14 -0000 1.27
+++ bgpd/rtr.c 2 Dec 2024 13:54:23 -0000
@@ -219,7 +219,8 @@ rtr_main(int debug, int verbose)
if ((ibuf_main = malloc(sizeof(struct imsgbuf))) == NULL)
fatal(NULL);
- if (imsgbuf_init(ibuf_main, 3) == -1)
+ if (imsgbuf_init(ibuf_main, 3) == -1 ||
+ imsgbuf_set_maxsize(ibuf_main, MAX_BGPD_IMSGSIZE) == -1)
fatal(NULL);
imsgbuf_allow_fdpass(ibuf_main);
@@ -338,7 +339,9 @@ rtr_dispatch_imsg_parent(struct imsgbuf
}
if ((ibuf_rde = malloc(sizeof(struct imsgbuf))) == NULL)
fatal(NULL);
- if (imsgbuf_init(ibuf_rde, fd) == -1)
+ if (imsgbuf_init(ibuf_rde, fd) == -1 ||
+ imsgbuf_set_maxsize(ibuf_rde, MAX_BGPD_IMSGSIZE) ==
+ -1)
fatal(NULL);
break;
case IMSG_SOCKET_SETUP:
Index: bgpd/session.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/session.c,v
diff -u -p -r1.499 session.c
--- bgpd/session.c 26 Nov 2024 13:59:54 -0000 1.499
+++ bgpd/session.c 2 Dec 2024 13:54:24 -0000
@@ -240,7 +240,8 @@ session_main(int debug, int verbose)
if ((ibuf_main = malloc(sizeof(struct imsgbuf))) == NULL)
fatal(NULL);
- if (imsgbuf_init(ibuf_main, 3) == -1)
+ if (imsgbuf_init(ibuf_main, 3) == -1 ||
+ imsgbuf_set_maxsize(ibuf_main, MAX_BGPD_IMSGSIZE) == -1)
fatal(NULL);
imsgbuf_allow_fdpass(ibuf_main);
@@ -2851,7 +2852,8 @@ session_dispatch_imsg(struct imsgbuf *im
}
if ((i = malloc(sizeof(struct imsgbuf))) == NULL)
fatal(NULL);
- if (imsgbuf_init(i, fd) == -1)
+ if (imsgbuf_init(i, fd) == -1 ||
+ imsgbuf_set_maxsize(i, MAX_BGPD_IMSGSIZE) == -1)
fatal(NULL);
if (imsg_get_type(&imsg) == IMSG_SOCKET_CONN) {
if (ibuf_rde) {
bgpd: increase ibuf message size to 128k