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);

Reply via email to