On Wed, Oct 21, 2020 at 06:08:05PM +0200, Claudio Jeker wrote: > Bgpd uses many common symbols and the latest compilers are being picky > about these common symbols. > This removes the global bgpd_process variable and cleans up the filter_set > code to not depend on process knowledge (instead use a new type and don't > overload another one).
Ping -- :wq Claudio Index: bgpd.c =================================================================== RCS file: /cvs/src/usr.sbin/bgpd/bgpd.c,v retrieving revision 1.229 diff -u -p -r1.229 bgpd.c --- bgpd.c 11 May 2020 16:59:19 -0000 1.229 +++ bgpd.c 21 Oct 2020 07:18:00 -0000 @@ -117,10 +117,9 @@ main(int argc, char *argv[]) int pipe_m2r[2]; conffile = CONFFILE; - bgpd_process = PROC_MAIN; log_init(1, LOG_DAEMON); /* log to stderr until daemonized */ - log_procinit(log_procnames[bgpd_process]); + log_procinit(log_procnames[PROC_MAIN]); log_setverbose(1); saved_argv0 = argv[0]; Index: bgpd.h =================================================================== RCS file: /cvs/src/usr.sbin/bgpd/bgpd.h,v retrieving revision 1.403 diff -u -p -r1.403 bgpd.h --- bgpd.h 10 May 2020 13:38:46 -0000 1.403 +++ bgpd.h 21 Oct 2020 07:29:53 -0000 @@ -120,7 +120,7 @@ enum bgpd_process { PROC_MAIN, PROC_SE, PROC_RDE -} bgpd_process; +}; enum reconf_action { RECONF_NONE, @@ -995,6 +995,7 @@ enum action_types { ACTION_SET_PREPEND_PEER, ACTION_SET_AS_OVERRIDE, ACTION_SET_NEXTHOP, + ACTION_SET_NEXTHOP_REF, ACTION_SET_NEXTHOP_REJECT, ACTION_SET_NEXTHOP_BLACKHOLE, ACTION_SET_NEXTHOP_NOMODIFY, @@ -1017,7 +1018,7 @@ struct filter_set { u_int32_t metric; int32_t relative; struct bgpd_addr nexthop; - struct nexthop *nh; + struct nexthop *nh_ref; struct community community; char pftable[PFTABLE_LEN]; char rtlabel[RTLABEL_LEN]; Index: printconf.c =================================================================== RCS file: /cvs/src/usr.sbin/bgpd/printconf.c,v retrieving revision 1.142 diff -u -p -r1.142 printconf.c --- printconf.c 23 Apr 2020 16:13:11 -0000 1.142 +++ printconf.c 21 Oct 2020 07:32:06 -0000 @@ -356,6 +356,7 @@ print_set(struct filter_set_head *set) break; case ACTION_RTLABEL_ID: case ACTION_PFTABLE_ID: + case ACTION_SET_NEXTHOP_REF: /* not possible */ printf("king bula saiz: config broken"); break; Index: rde.c =================================================================== RCS file: /cvs/src/usr.sbin/bgpd/rde.c,v retrieving revision 1.503 diff -u -p -r1.503 rde.c --- rde.c 21 Oct 2020 06:56:32 -0000 1.503 +++ rde.c 21 Oct 2020 09:39:49 -0000 @@ -157,8 +157,7 @@ rde_main(int debug, int verbose) log_init(debug, LOG_DAEMON); log_setverbose(verbose); - bgpd_process = PROC_RDE; - log_procinit(log_procnames[bgpd_process]); + log_procinit(log_procnames[PROC_RDE]); if ((pw = getpwnam(BGPD_USER)) == NULL) fatal("getpwnam"); @@ -509,8 +508,11 @@ badnetdel: if ((s = malloc(sizeof(struct filter_set))) == NULL) fatal(NULL); memcpy(s, imsg.data, sizeof(struct filter_set)); - if (s->type == ACTION_SET_NEXTHOP) - s->action.nh = nexthop_get(&s->action.nexthop); + if (s->type == ACTION_SET_NEXTHOP) { + s->action.nh_ref = + nexthop_get(&s->action.nexthop); + s->type = ACTION_SET_NEXTHOP_REF; + } TAILQ_INSERT_TAIL(&session_set, s, entry); break; case IMSG_CTL_SHOW_NETWORK: @@ -922,8 +924,11 @@ rde_dispatch_imsg_parent(struct imsgbuf if ((s = malloc(sizeof(struct filter_set))) == NULL) fatal(NULL); memcpy(s, imsg.data, sizeof(struct filter_set)); - if (s->type == ACTION_SET_NEXTHOP) - s->action.nh = nexthop_get(&s->action.nexthop); + if (s->type == ACTION_SET_NEXTHOP) { + s->action.nh_ref = + nexthop_get(&s->action.nexthop); + s->type = ACTION_SET_NEXTHOP_REF; + } TAILQ_INSERT_TAIL(&parent_set, s, entry); break; case IMSG_MRT_OPEN: Index: rde_filter.c =================================================================== RCS file: /cvs/src/usr.sbin/bgpd/rde_filter.c,v retrieving revision 1.123 diff -u -p -r1.123 rde_filter.c --- rde_filter.c 14 Feb 2020 13:54:31 -0000 1.123 +++ rde_filter.c 21 Oct 2020 07:35:22 -0000 @@ -135,11 +135,13 @@ rde_apply_set(struct filter_set_head *sh free(np); break; case ACTION_SET_NEXTHOP: + fatalx("unexpected filter action in RDE"); + case ACTION_SET_NEXTHOP_REF: case ACTION_SET_NEXTHOP_REJECT: case ACTION_SET_NEXTHOP_BLACKHOLE: case ACTION_SET_NEXTHOP_NOMODIFY: case ACTION_SET_NEXTHOP_SELF: - nexthop_modify(set->action.nh, set->type, aid, + nexthop_modify(set->action.nh_ref, set->type, aid, &state->nexthop, &state->nhflags); break; case ACTION_SET_COMMUNITY: @@ -462,9 +464,8 @@ filterset_free(struct filter_set_head *s rtlabel_unref(s->action.id); else if (s->type == ACTION_PFTABLE_ID) pftable_unref(s->action.id); - else if (s->type == ACTION_SET_NEXTHOP && - bgpd_process == PROC_RDE) - nexthop_unref(s->action.nh); + else if (s->type == ACTION_SET_NEXTHOP_REF) + nexthop_unref(s->action.nh_ref); free(s); } } @@ -575,6 +576,11 @@ filterset_equal(struct filter_set_head * sizeof(a->action.nexthop)) == 0) continue; break; + case ACTION_SET_NEXTHOP_REF: + if (a->type == b->type && + a->action.nh_ref == b->action.nh_ref) + continue; + break; case ACTION_SET_NEXTHOP_BLACKHOLE: case ACTION_SET_NEXTHOP_REJECT: case ACTION_SET_NEXTHOP_NOMODIFY: @@ -657,6 +663,7 @@ filterset_name(enum action_types type) case ACTION_SET_AS_OVERRIDE: return ("as-override"); case ACTION_SET_NEXTHOP: + case ACTION_SET_NEXTHOP_REF: case ACTION_SET_NEXTHOP_REJECT: case ACTION_SET_NEXTHOP_BLACKHOLE: case ACTION_SET_NEXTHOP_NOMODIFY: Index: rde_rib.c =================================================================== RCS file: /cvs/src/usr.sbin/bgpd/rde_rib.c,v retrieving revision 1.215 diff -u -p -r1.215 rde_rib.c --- rde_rib.c 25 Jan 2020 23:54:21 -0000 1.215 +++ rde_rib.c 21 Oct 2020 07:29:25 -0000 @@ -1824,7 +1824,7 @@ nexthop_modify(struct nexthop *setnh, en case ACTION_SET_NEXTHOP_SELF: *flags = NEXTHOP_SELF; break; - case ACTION_SET_NEXTHOP: + case ACTION_SET_NEXTHOP_REF: /* * it is possible that a prefix matches but has the wrong * address family for the set nexthop. In this case ignore it. Index: session.c =================================================================== RCS file: /cvs/src/usr.sbin/bgpd/session.c,v retrieving revision 1.402 diff -u -p -r1.402 session.c --- session.c 27 Jun 2020 07:24:42 -0000 1.402 +++ session.c 21 Oct 2020 07:30:23 -0000 @@ -205,8 +205,7 @@ session_main(int debug, int verbose) log_init(debug, LOG_DAEMON); log_setverbose(verbose); - bgpd_process = PROC_SE; - log_procinit(log_procnames[bgpd_process]); + log_procinit(log_procnames[PROC_SE]); if ((pw = getpwnam(BGPD_USER)) == NULL) fatal(NULL);