It makes no sense to pass the fd to send_rtmsg() as an argument.
The code just passes the fd from the global kr_state. It also makes the
code less portable because for linux an mnl handle needs to be passed.
By dropping this the code becomes simpler.

-- 
:wq Claudio

Index: kroute.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/kroute.c,v
retrieving revision 1.292
diff -u -p -r1.292 kroute.c
--- kroute.c    17 Aug 2022 15:15:26 -0000      1.292
+++ kroute.c    18 Aug 2022 10:41:19 -0000
@@ -175,7 +175,7 @@ void                get_rtaddrs(int, struct sockaddr *
 void           if_change(u_short, int, struct if_data *);
 void           if_announce(void *);
 
-int            send_rtmsg(int, int, struct ktable *, struct kroute_full *);
+int            send_rtmsg(int, struct ktable *, struct kroute_full *);
 int            dispatch_rtmsg(void);
 int            fetchtable(struct ktable *);
 int            fetchifs(int);
@@ -497,7 +497,7 @@ kr4_change(struct ktable *kt, struct kro
                else
                        kr->flags &= ~F_REJECT;
 
-               if (send_rtmsg(kr_state.fd, RTM_CHANGE, kt, kf))
+               if (send_rtmsg(RTM_CHANGE, kt, kf))
                        kr->flags |= F_BGPD_INSERTED;
        }
 
@@ -535,7 +535,7 @@ kr6_change(struct ktable *kt, struct kro
                else
                        kr6->flags &= ~F_REJECT;
 
-               if (send_rtmsg(kr_state.fd, RTM_CHANGE, kt, kf))
+               if (send_rtmsg(RTM_CHANGE, kt, kf))
                        kr6->flags |= F_BGPD_INSERTED;
        }
 
@@ -587,7 +587,7 @@ krVPN4_change(struct ktable *kt, struct 
                else
                        kr->flags &= ~F_REJECT;
 
-               if (send_rtmsg(kr_state.fd, RTM_CHANGE, kt, kf))
+               if (send_rtmsg(RTM_CHANGE, kt, kf))
                        kr->flags |= F_BGPD_INSERTED;
        }
 
@@ -640,7 +640,7 @@ krVPN6_change(struct ktable *kt, struct 
                else
                        kr6->flags &= ~F_REJECT;
 
-               if (send_rtmsg(kr_state.fd, RTM_CHANGE, kt, kf))
+               if (send_rtmsg(RTM_CHANGE, kt, kf))
                        kr6->flags |= F_BGPD_INSERTED;
        }
 
@@ -714,14 +714,12 @@ kr_fib_couple(u_int rtableid)
 
        RB_FOREACH(kr, kroute_tree, &kt->krt)
                if (kr->flags & F_BGPD) {
-                       if (send_rtmsg(kr_state.fd, RTM_ADD, kt,
-                           kr_tofull(kr)))
+                       if (send_rtmsg(RTM_ADD, kt, kr_tofull(kr)))
                                kr->flags |= F_BGPD_INSERTED;
                }
        RB_FOREACH(kr6, kroute6_tree, &kt->krt6)
                if (kr6->flags & F_BGPD) {
-                       if (send_rtmsg(kr_state.fd, RTM_ADD, kt,
-                           kr6_tofull(kr6)))
+                       if (send_rtmsg(RTM_ADD, kt, kr6_tofull(kr6)))
                                kr6->flags |= F_BGPD_INSERTED;
                }
        log_info("kernel routing table %u (%s) coupled", kt->rtableid,
@@ -752,14 +750,12 @@ kr_fib_decouple(u_int rtableid)
 
        RB_FOREACH(kr, kroute_tree, &kt->krt)
                if ((kr->flags & F_BGPD_INSERTED)) {
-                       if (send_rtmsg(kr_state.fd, RTM_DELETE, kt,
-                           kr_tofull(kr)))
+                       if (send_rtmsg(RTM_DELETE, kt, kr_tofull(kr)))
                                kr->flags &= ~F_BGPD_INSERTED;
                }
        RB_FOREACH(kr6, kroute6_tree, &kt->krt6)
                if ((kr6->flags & F_BGPD_INSERTED)) {
-                       if (send_rtmsg(kr_state.fd, RTM_DELETE, kt,
-                           kr6_tofull(kr6)))
+                       if (send_rtmsg(RTM_DELETE, kt, kr6_tofull(kr6)))
                                kr6->flags &= ~F_BGPD_INSERTED;
                }
 
@@ -1655,7 +1651,7 @@ kroute_insert(struct ktable *kt, struct 
                }
 
                if (kf->flags & F_BGPD)
-                       if (send_rtmsg(kr_state.fd, RTM_ADD, kt, kf))
+                       if (send_rtmsg(RTM_ADD, kt, kf))
                                kr->flags |= F_BGPD_INSERTED;
                break;
        case AID_INET6:
@@ -1691,7 +1687,7 @@ kroute_insert(struct ktable *kt, struct 
                }
 
                if (kf->flags & F_BGPD)
-                       if (send_rtmsg(kr_state.fd, RTM_ADD, kt, kf))
+                       if (send_rtmsg(RTM_ADD, kt, kf))
                                kr6->flags |= F_BGPD_INSERTED;
                break;
        }
@@ -1873,7 +1869,7 @@ kroute_remove(struct ktable *kt, struct 
                return (multipath + 1);
 
        if (kf->flags & F_BGPD_INSERTED)
-               send_rtmsg(kr_state.fd, RTM_DELETE, kt, kf);
+               send_rtmsg(RTM_DELETE, kt, kf);
 
        /* remove only once all multipath routes are gone */
        if (!(kf->flags & F_BGPD) && !multipath)
@@ -2622,7 +2618,7 @@ get_mpe_config(const char *name, u_int *
 #define satosin6(sa)   ((struct sockaddr_in6 *)(sa))
 
 int
-send_rtmsg(int fd, int action, struct ktable *kt, struct kroute_full *kf)
+send_rtmsg(int action, struct ktable *kt, struct kroute_full *kf)
 {
        struct iovec             iov[7];
        struct rt_msghdr         hdr;
@@ -2767,7 +2763,7 @@ send_rtmsg(int fd, int action, struct kt
        }
 
 retry:
-       if (writev(fd, iov, iovcnt) == -1) {
+       if (writev(kr_state.fd, iov, iovcnt) == -1) {
                if (errno == ESRCH) {
                        if (hdr.rtm_type == RTM_CHANGE) {
                                hdr.rtm_type = RTM_ADD;
@@ -2832,7 +2828,7 @@ fetchtable(struct ktable *kt)
                        continue;
 
                if (kf.priority == RTP_MINE)
-                       send_rtmsg(kr_state.fd, RTM_DELETE, kt, &kf);
+                       send_rtmsg(RTM_DELETE, kt, &kf);
                else
                        kroute_insert(kt, &kf);
        }

Reply via email to