This is my try at cleaning up commons in ospfd.
I made one big combined diff but will probably split up a few things
into own commits. E.g. the lsupdate.c and lsreq.c ones.

I had to cleanup the control.c code a bit since this was a bit of a mess.
While in bgpd I was able to remove the global bgpd_process variable this
is not really possible in ospfd. Too much code depends on it and unrolling
it just gets messy.

-- 
:wq Claudio

Index: control.c
===================================================================
RCS file: /cvs/src/usr.sbin/ospfd/control.c,v
retrieving revision 1.46
diff -u -p -r1.46 control.c
--- control.c   16 Sep 2020 20:50:10 -0000      1.46
+++ control.c   18 Jan 2021 10:11:05 -0000
@@ -32,12 +32,20 @@
 #include "log.h"
 #include "control.h"
 
+TAILQ_HEAD(ctl_conns, ctl_conn)        ctl_conns = 
TAILQ_HEAD_INITIALIZER(ctl_conns);
+
 #define        CONTROL_BACKLOG 5
 
 struct ctl_conn        *control_connbyfd(int);
 struct ctl_conn        *control_connbypid(pid_t);
 void            control_close(int);
 
+struct {
+       struct event    ev;
+       struct event    evt;
+       int             fd;
+} control_state;
+
 int
 control_check(char *path)
 {
@@ -108,8 +116,9 @@ control_init(char *path)
 }
 
 int
-control_listen(void)
+control_listen(int fd)
 {
+       control_state.fd = fd;
 
        if (listen(control_state.fd, CONTROL_BACKLOG) == -1) {
                log_warn("control_listen: listen");
Index: control.h
===================================================================
RCS file: /cvs/src/usr.sbin/ospfd/control.h,v
retrieving revision 1.8
diff -u -p -r1.8 control.h
--- control.h   16 Sep 2020 20:50:10 -0000      1.8
+++ control.h   18 Jan 2021 10:11:18 -0000
@@ -23,12 +23,6 @@
 #include <sys/time.h>
 #include <event.h>
 
-struct {
-       struct event    ev;
-       struct event    evt;
-       int             fd;
-} control_state;
-
 struct ctl_conn {
        TAILQ_ENTRY(ctl_conn)   entry;
        struct imsgev           iev;
@@ -36,7 +30,7 @@ struct ctl_conn {
 
 int    control_check(char *);
 int    control_init(char *);
-int    control_listen(void);
+int    control_listen(int);
 void   control_accept(int, short, void *);
 void   control_dispatch_imsg(int, short, void *);
 int    control_imsg_relay(struct imsg *);
Index: lsreq.c
===================================================================
RCS file: /cvs/src/usr.sbin/ospfd/lsreq.c,v
retrieving revision 1.21
diff -u -p -r1.21 lsreq.c
--- lsreq.c     15 Jul 2019 18:26:39 -0000      1.21
+++ lsreq.c     18 Jan 2021 10:48:04 -0000
@@ -27,8 +27,6 @@
 #include "log.h"
 #include "ospfe.h"
 
-extern struct imsgev           *iev_rde;
-
 /* link state request packet handling */
 int
 send_ls_req(struct nbr *nbr)
@@ -107,8 +105,7 @@ recv_ls_req(struct nbr *nbr, char *buf, 
        case NBR_STA_XCHNG:
        case NBR_STA_LOAD:
        case NBR_STA_FULL:
-               imsg_compose_event(iev_rde, IMSG_LS_REQ, nbr->peerid,
-                   0, -1, buf, len);
+               ospfe_imsg_compose_rde(IMSG_LS_REQ, nbr->peerid, 0, buf, len);
                break;
        default:
                fatalx("recv_ls_req: unknown neighbor state");
Index: lsupdate.c
===================================================================
RCS file: /cvs/src/usr.sbin/ospfd/lsupdate.c,v
retrieving revision 1.48
diff -u -p -r1.48 lsupdate.c
--- lsupdate.c  6 May 2020 14:40:54 -0000       1.48
+++ lsupdate.c  18 Jan 2021 10:48:10 -0000
@@ -32,9 +32,6 @@
 #include "ospfe.h"
 #include "rde.h"
 
-extern struct ospfd_conf       *oeconf;
-extern struct imsgev           *iev_rde;
-
 struct ibuf *prepare_ls_update(struct iface *);
 int    add_ls_update(struct ibuf *, struct iface *, void *, u_int16_t,
            u_int16_t);
@@ -276,8 +273,8 @@ recv_ls_update(struct nbr *nbr, char *bu
                                    "neighbor ID %s", inet_ntoa(nbr->id));
                                return;
                        }
-                       imsg_compose_event(iev_rde, IMSG_LS_UPD, nbr->peerid, 0,
-                           -1, buf, ntohs(lsa.len));
+                       ospfe_imsg_compose_rde(IMSG_LS_UPD, nbr->peerid, 0,
+                           buf, ntohs(lsa.len));
                        buf += ntohs(lsa.len);
                        len -= ntohs(lsa.len);
                }
Index: ospfd.c
===================================================================
RCS file: /cvs/src/usr.sbin/ospfd/ospfd.c,v
retrieving revision 1.114
diff -u -p -r1.114 ospfd.c
--- ospfd.c     16 Sep 2020 20:50:10 -0000      1.114
+++ ospfd.c     18 Jan 2021 10:50:40 -0000
@@ -64,9 +64,10 @@ int  pipe_parent2ospfe[2];
 int    pipe_parent2rde[2];
 int    pipe_ospfe2rde[2];
 
+enum ospfd_process      ospfd_process;
 struct ospfd_conf      *ospfd_conf = NULL;
-struct imsgev          *iev_ospfe;
-struct imsgev          *iev_rde;
+static struct imsgev   *iev_ospfe;
+static struct imsgev   *iev_rde;
 char                   *conffile;
 
 pid_t                   ospfe_pid = 0;
Index: ospfd.h
===================================================================
RCS file: /cvs/src/usr.sbin/ospfd/ospfd.h,v
retrieving revision 1.107
diff -u -p -r1.107 ospfd.h
--- ospfd.h     2 Nov 2020 00:30:56 -0000       1.107
+++ ospfd.h     18 Jan 2021 10:49:54 -0000
@@ -374,11 +374,12 @@ struct ifaddrchange {
 };
 
 /* ospf_conf */
-enum {
+enum ospfd_process {
        PROC_MAIN,
        PROC_OSPF_ENGINE,
        PROC_RDE_ENGINE
-} ospfd_process;
+};
+extern enum ospfd_process ospfd_process;
 
 struct ospfd_conf {
        struct event            ev;
Index: ospfe.c
===================================================================
RCS file: /cvs/src/usr.sbin/ospfd/ospfe.c,v
retrieving revision 1.107
diff -u -p -r1.107 ospfe.c
--- ospfe.c     2 Nov 2020 00:29:58 -0000       1.107
+++ ospfe.c     18 Jan 2021 10:43:07 -0000
@@ -47,9 +47,9 @@ __dead void    ospfe_shutdown(void);
 void            orig_rtr_lsa_all(struct area *);
 struct iface   *find_vlink(struct abr_rtr *);
 
-struct ospfd_conf      *oeconf = NULL, *nconf;
-struct imsgev          *iev_main;
-struct imsgev          *iev_rde;
+struct ospfd_conf      *oeconf = NULL, *noeconf;
+static struct imsgev   *iev_main;
+static struct imsgev   *iev_rde;
 int                     oe_nofib;
 
 /* ARGSUSED */
@@ -185,9 +185,6 @@ ospfe(struct ospfd_conf *xconf, int pipe
                }
        }
 
-       if ((pkt_ptr = calloc(1, READ_BUF_SIZE)) == NULL)
-               fatal("ospfe");
-
        /* start interfaces */
        LIST_FOREACH(area, &oeconf->area_list, entry) {
                ospfe_demote_area(area, 0);
@@ -240,7 +237,6 @@ ospfe_shutdown(void)
        free(iev_rde);
        free(iev_main);
        free(oeconf);
-       free(pkt_ptr);
 
        log_info("ospf engine exiting");
        _exit(0);
@@ -403,13 +399,13 @@ ospfe_dispatch_main(int fd, short event,
                        }
                        break;
                case IMSG_RECONF_CONF:
-                       if ((nconf = malloc(sizeof(struct ospfd_conf))) ==
+                       if ((noeconf = malloc(sizeof(struct ospfd_conf))) ==
                            NULL)
                                fatal(NULL);
-                       memcpy(nconf, imsg.data, sizeof(struct ospfd_conf));
+                       memcpy(noeconf, imsg.data, sizeof(struct ospfd_conf));
 
-                       LIST_INIT(&nconf->area_list);
-                       LIST_INIT(&nconf->cand_list);
+                       LIST_INIT(&noeconf->area_list);
+                       LIST_INIT(&noeconf->cand_list);
                        break;
                case IMSG_RECONF_AREA:
                        if ((narea = area_new()) == NULL)
@@ -421,7 +417,7 @@ ospfe_dispatch_main(int fd, short event,
                        RB_INIT(&narea->lsa_tree);
                        SIMPLEQ_INIT(&narea->redist_list);
 
-                       LIST_INSERT_HEAD(&nconf->area_list, narea, entry);
+                       LIST_INSERT_HEAD(&noeconf->area_list, narea, entry);
                        break;
                case IMSG_RECONF_IFACE:
                        if ((niface = malloc(sizeof(struct iface))) == NULL)
@@ -442,12 +438,12 @@ ospfe_dispatch_main(int fd, short event,
                        break;
                case IMSG_RECONF_END:
                        if ((oeconf->flags & OSPFD_FLAG_STUB_ROUTER) !=
-                           (nconf->flags & OSPFD_FLAG_STUB_ROUTER))
+                           (noeconf->flags & OSPFD_FLAG_STUB_ROUTER))
                                stub_changed = 1;
                        else
                                stub_changed = 0;
-                       merge_config(oeconf, nconf);
-                       nconf = NULL;
+                       merge_config(oeconf, noeconf);
+                       noeconf = NULL;
                        if (stub_changed)
                                orig_rtr_lsa_all(NULL);
                        break;
@@ -461,10 +457,8 @@ ospfe_dispatch_main(int fd, short event,
                        if ((fd = imsg.fd) == -1)
                                fatalx("%s: expected to receive imsg control"
                                    "fd but didn't receive any", __func__);
-                       control_state.fd = fd;
                        /* Listen on control socket. */
-                       TAILQ_INIT(&ctl_conns);
-                       control_listen();
+                       control_listen(fd);
                        if (pledge("stdio inet mcast", NULL) == -1)
                                fatal("pledge");
                        break;
Index: ospfe.h
===================================================================
RCS file: /cvs/src/usr.sbin/ospfd/ospfe.h,v
retrieving revision 1.46
diff -u -p -r1.46 ospfe.h
--- ospfe.h     25 Oct 2014 03:23:49 -0000      1.46
+++ ospfe.h     18 Jan 2021 10:08:42 -0000
@@ -26,8 +26,6 @@
 #include <netinet/in.h>
 #include <netinet/ip.h>
 
-TAILQ_HEAD(ctl_conns, ctl_conn)        ctl_conns;
-
 struct lsa_entry {
        TAILQ_ENTRY(lsa_entry)   entry;
        union {
@@ -95,6 +93,8 @@ struct nbr {
        u_int8_t                 dd_snapshot;   /* snapshot running */
 };
 
+struct ctl_conn;
+
 /* auth.c */
 int             auth_validate(void *buf, u_int16_t len, struct iface *,
                     struct nbr *);
@@ -237,7 +237,5 @@ struct lsa_hdr      *lsa_hdr_new(void);
 int     gen_ospf_hdr(struct ibuf *, struct iface *, u_int8_t);
 int     send_packet(struct iface *, struct ibuf *, struct sockaddr_in *);
 void    recv_packet(int, short, void *);
-
-char   *pkt_ptr;       /* packet buffer */
 
 #endif /* _OSPFE_H_ */
Index: packet.c
===================================================================
RCS file: /cvs/src/usr.sbin/ospfd/packet.c,v
retrieving revision 1.33
diff -u -p -r1.33 packet.c
--- packet.c    12 Aug 2019 20:32:39 -0000      1.33
+++ packet.c    18 Jan 2021 10:04:03 -0000
@@ -107,6 +107,7 @@ send_packet(struct iface *iface, struct 
 void
 recv_packet(int fd, short event, void *bula)
 {
+       static char pkt_ptr[READ_BUF_SIZE];
        union {
                struct cmsghdr hdr;
                char    buf[CMSG_SPACE(sizeof(struct sockaddr_dl))];
Index: rde.c
===================================================================
RCS file: /cvs/src/usr.sbin/ospfd/rde.c,v
retrieving revision 1.110
diff -u -p -r1.110 rde.c
--- rde.c       19 Nov 2019 09:55:55 -0000      1.110
+++ rde.c       18 Jan 2021 10:43:20 -0000
@@ -65,8 +65,8 @@ struct lsa    *orig_asext_lsa(struct kroute
 struct lsa     *orig_sum_lsa(struct rt_node *, struct area *, u_int8_t, int);
 
 struct ospfd_conf      *rdeconf = NULL, *nconf = NULL;
-struct imsgev          *iev_ospfe;
-struct imsgev          *iev_main;
+static struct imsgev   *iev_ospfe;
+static struct imsgev   *iev_main;
 struct rde_nbr         *nbrself;
 struct lsa_tree                 asext_tree;
 

Reply via email to