Re: ifstated.c hoist code in prep for future work

2017-06-27 Thread Sebastian Benoit
commited with the (int)(long)arg cast.

Thanks!

(waiting for more...) /Benno

Rob Pierce(r...@2keys.ca) on 2017.06.27 12:45:43 -0400:
> Hoist some privileged code in preparation for future work.
> 
> Is this the correct use of intptr_t?
> 
> Based on an approach in vmd with mc146818/ns8250.
> 
> No intended functional change.
> 
> Rob
> 
> Index: ifstated.c
> ===
> RCS file: /cvs/src/usr.sbin/ifstated/ifstated.c,v
> retrieving revision 1.42
> diff -u -p -r1.42 ifstated.c
> --- ifstated.c18 Jun 2017 12:03:47 -  1.42
> +++ ifstated.c27 Jun 2017 16:44:16 -
> @@ -36,6 +36,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
>  #include 
>  #include 
>  #include 
> @@ -87,8 +88,9 @@ int
>  main(int argc, char *argv[])
>  {
>   struct timeval tv;
> - int ch;
> + int ch, rt_fd;
>   int debug = 0;
> + unsigned int rtfilter;
>  
>   log_init(1, LOG_DAEMON);/* log to stderr until daemonized */
>   log_setverbose(1);
> @@ -144,12 +146,25 @@ main(int argc, char *argv[])
>   log_init(debug, LOG_DAEMON);
>   log_setverbose(opts & IFSD_OPT_VERBOSE);
>  
> + if ((rt_fd = socket(PF_ROUTE, SOCK_RAW, 0)) < 0)
> + err(1, "no routing socket");
> +
> + rtfilter = ROUTE_FILTER(RTM_IFINFO);
> + if (setsockopt(rt_fd, PF_ROUTE, ROUTE_MSGFILTER,
> + , sizeof(rtfilter)) == -1) /* not fatal */
> + log_warn("%s: setsockopt msgfilter", __func__);
> +
> + rtfilter = RTABLE_ANY;
> + if (setsockopt(rt_fd, PF_ROUTE, ROUTE_TABLEFILTER,
> + , sizeof(rtfilter)) == -1) /* not fatal */
> + log_warn("%s: setsockopt tablefilter", __func__);
> +
>   signal_set(_ev, SIGCHLD, sigchld_handler, NULL);
>   signal_add(_ev, NULL);
>  
>   /* Loading the config needs to happen in the event loop */
>   timerclear();
> - evtimer_set(_ev, startup_handler, NULL);
> + evtimer_set(_ev, startup_handler, (void *)(intptr_t)rt_fd);
>   evtimer_add(_ev, );
>  
>   event_loop(0);
> @@ -159,28 +174,14 @@ main(int argc, char *argv[])
>  void
>  startup_handler(int fd, short event, void *arg)
>  {
> - int rt_fd;
> - unsigned int rtfilter;
> -
> - if ((rt_fd = socket(PF_ROUTE, SOCK_RAW, 0)) < 0)
> - err(1, "no routing socket");
> + int rfd = (intptr_t)arg;
>  
>   if (load_config() != 0) {
>   log_warnx("unable to load config");
>   exit(1);
>   }
> -
> - rtfilter = ROUTE_FILTER(RTM_IFINFO);
> - if (setsockopt(rt_fd, PF_ROUTE, ROUTE_MSGFILTER,
> - , sizeof(rtfilter)) == -1) /* not fatal */
> - log_warn("%s: setsockopt msgfilter", __func__);
> -
> - rtfilter = RTABLE_ANY;
> - if (setsockopt(rt_fd, PF_ROUTE, ROUTE_TABLEFILTER,
> - , sizeof(rtfilter)) == -1) /* not fatal */
> - log_warn("%s: setsockopt tablefilter", __func__);
>   
> - event_set(_msg_ev, rt_fd, EV_READ|EV_PERSIST, rt_msg_handler, NULL);
> + event_set(_msg_ev, rfd, EV_READ|EV_PERSIST, rt_msg_handler, NULL);
>   event_add(_msg_ev, NULL);
>  
>   signal_set(_ev, SIGHUP, sighup_handler, NULL);
> 



ifstated.c hoist code in prep for future work

2017-06-27 Thread Rob Pierce
Hoist some privileged code in preparation for future work.

Is this the correct use of intptr_t?

Based on an approach in vmd with mc146818/ns8250.

No intended functional change.

Rob

Index: ifstated.c
===
RCS file: /cvs/src/usr.sbin/ifstated/ifstated.c,v
retrieving revision 1.42
diff -u -p -r1.42 ifstated.c
--- ifstated.c  18 Jun 2017 12:03:47 -  1.42
+++ ifstated.c  27 Jun 2017 16:44:16 -
@@ -36,6 +36,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -87,8 +88,9 @@ int
 main(int argc, char *argv[])
 {
struct timeval tv;
-   int ch;
+   int ch, rt_fd;
int debug = 0;
+   unsigned int rtfilter;
 
log_init(1, LOG_DAEMON);/* log to stderr until daemonized */
log_setverbose(1);
@@ -144,12 +146,25 @@ main(int argc, char *argv[])
log_init(debug, LOG_DAEMON);
log_setverbose(opts & IFSD_OPT_VERBOSE);
 
+   if ((rt_fd = socket(PF_ROUTE, SOCK_RAW, 0)) < 0)
+   err(1, "no routing socket");
+
+   rtfilter = ROUTE_FILTER(RTM_IFINFO);
+   if (setsockopt(rt_fd, PF_ROUTE, ROUTE_MSGFILTER,
+   , sizeof(rtfilter)) == -1) /* not fatal */
+   log_warn("%s: setsockopt msgfilter", __func__);
+
+   rtfilter = RTABLE_ANY;
+   if (setsockopt(rt_fd, PF_ROUTE, ROUTE_TABLEFILTER,
+   , sizeof(rtfilter)) == -1) /* not fatal */
+   log_warn("%s: setsockopt tablefilter", __func__);
+
signal_set(_ev, SIGCHLD, sigchld_handler, NULL);
signal_add(_ev, NULL);
 
/* Loading the config needs to happen in the event loop */
timerclear();
-   evtimer_set(_ev, startup_handler, NULL);
+   evtimer_set(_ev, startup_handler, (void *)(intptr_t)rt_fd);
evtimer_add(_ev, );
 
event_loop(0);
@@ -159,28 +174,14 @@ main(int argc, char *argv[])
 void
 startup_handler(int fd, short event, void *arg)
 {
-   int rt_fd;
-   unsigned int rtfilter;
-
-   if ((rt_fd = socket(PF_ROUTE, SOCK_RAW, 0)) < 0)
-   err(1, "no routing socket");
+   int rfd = (intptr_t)arg;
 
if (load_config() != 0) {
log_warnx("unable to load config");
exit(1);
}
-
-   rtfilter = ROUTE_FILTER(RTM_IFINFO);
-   if (setsockopt(rt_fd, PF_ROUTE, ROUTE_MSGFILTER,
-   , sizeof(rtfilter)) == -1) /* not fatal */
-   log_warn("%s: setsockopt msgfilter", __func__);
-
-   rtfilter = RTABLE_ANY;
-   if (setsockopt(rt_fd, PF_ROUTE, ROUTE_TABLEFILTER,
-   , sizeof(rtfilter)) == -1) /* not fatal */
-   log_warn("%s: setsockopt tablefilter", __func__);

-   event_set(_msg_ev, rt_fd, EV_READ|EV_PERSIST, rt_msg_handler, NULL);
+   event_set(_msg_ev, rfd, EV_READ|EV_PERSIST, rt_msg_handler, NULL);
event_add(_msg_ev, NULL);
 
signal_set(_ev, SIGHUP, sighup_handler, NULL);