]> git.ipfire.org Git - people/ms/rstp.git/blobdiff - epoll_loop.c
Convert to using AF_PACKET for send and receive
[people/ms/rstp.git] / epoll_loop.c
index 230dacc97b74e9bd24524a63e019e8066190069b..33c3068efb7a6077a443d7306105565c8a5c5a15 100644 (file)
@@ -39,103 +39,102 @@ struct timeval nexttimeout;
 
 int init_epoll(void)
 {
-  int r = epoll_create(128);
-  if (r < 0) {
-    fprintf(stderr, "epoll_create failed: %m\n");
-    return -1;
-  }
-  epoll_fd = r;
-  return 0;
+       int r = epoll_create(128);
+       if (r < 0) {
+               fprintf(stderr, "epoll_create failed: %m\n");
+               return -1;
+       }
+       epoll_fd = r;
+       return 0;
 }
 
 int add_epoll(struct epoll_event_handler *h)
 {
-  struct epoll_event ev = 
-    {
-      .events = EPOLLIN,
-      .data.ptr = h,
-    };
-  h->ref_ev = NULL;
-  int r =  epoll_ctl(epoll_fd, EPOLL_CTL_ADD, h->fd, &ev);
-  if (r < 0) {
-    fprintf(stderr, "epoll_ctl_add: %m\n");
-    return -1;
-  }
-  return 0;
+       struct epoll_event ev = {
+               .events = EPOLLIN,
+               .data.ptr = h,
+       };
+       h->ref_ev = NULL;
+       int r = epoll_ctl(epoll_fd, EPOLL_CTL_ADD, h->fd, &ev);
+       if (r < 0) {
+               fprintf(stderr, "epoll_ctl_add: %m\n");
+               return -1;
+       }
+       return 0;
 }
 
 int remove_epoll(struct epoll_event_handler *h)
 {
-  int r =  epoll_ctl(epoll_fd, EPOLL_CTL_DEL, h->fd, NULL);
-  if (r < 0) {
-    fprintf(stderr, "epoll_ctl_del: %m\n");
-    return -1;
-  }
-  if (h->ref_ev && h->ref_ev->data.ptr == h) {
-    h->ref_ev->data.ptr = NULL;
-    h->ref_ev = NULL;
-  }
-  return 0;
+       int r = epoll_ctl(epoll_fd, EPOLL_CTL_DEL, h->fd, NULL);
+       if (r < 0) {
+               fprintf(stderr, "epoll_ctl_del: %m\n");
+               return -1;
+       }
+       if (h->ref_ev && h->ref_ev->data.ptr == h) {
+               h->ref_ev->data.ptr = NULL;
+               h->ref_ev = NULL;
+       }
+       return 0;
 }
 
 void clear_epoll(void)
 {
-  if (epoll_fd >= 0)
-    close(epoll_fd);
+       if (epoll_fd >= 0)
+               close(epoll_fd);
 }
 
 int time_diff(struct timeval *second, struct timeval *first)
 {
-  return (second->tv_sec - first->tv_sec)*1000
-    + (second->tv_usec - first->tv_usec)/1000;
+       return (second->tv_sec - first->tv_sec) * 1000
+           + (second->tv_usec - first->tv_usec) / 1000;
 }
 
 void run_timeouts(void)
 {
-  bridge_one_second();
-  nexttimeout.tv_sec++;
+       bridge_one_second();
+       nexttimeout.tv_sec++;
 }
 
 int epoll_main_loop(void)
 {
-  gettimeofday(&nexttimeout, NULL);
-  nexttimeout.tv_sec++;
+       gettimeofday(&nexttimeout, NULL);
+       nexttimeout.tv_sec++;
 #define EV_SIZE 8
-  struct epoll_event ev[EV_SIZE];
-  
-  while (1) {
-    int r, i;
-    int timeout;
-
-    struct timeval tv;
-    gettimeofday(&tv, NULL);
-    timeout = time_diff(&nexttimeout, &tv);
-    if (timeout < 0) {
-      run_timeouts();
-      timeout = 0;
-    }
-      
-    r = epoll_wait(epoll_fd, ev, EV_SIZE, timeout);
-    if (r < 0 && errno != EINTR) {
-      fprintf(stderr, "epoll_wait: %m\n");
-      return -1;
-    }
-    for (i = 0; i < r; i++) {
-      struct epoll_event_handler *p = ev[i].data.ptr;
-      if (p != NULL)
-        p->ref_ev = &ev[i];
-    }
-    for (i = 0; i < r; i++) {
-      struct epoll_event_handler *p = ev[i].data.ptr;
-      if (p && p->handler)
-        p->handler(ev[i].events, p);
-    }
-    for (i = 0; i < r; i++) {
-      struct epoll_event_handler *p = ev[i].data.ptr;
-      if (p != NULL)
-        p->ref_ev = NULL;
-    }
-  }
-
-  return 0;
+       struct epoll_event ev[EV_SIZE];
+
+       while (1) {
+               int r, i;
+               int timeout;
+
+               struct timeval tv;
+               gettimeofday(&tv, NULL);
+               timeout = time_diff(&nexttimeout, &tv);
+               if (timeout < 0) {
+                       run_timeouts();
+                       timeout = 0;
+               }
+
+               r = epoll_wait(epoll_fd, ev, EV_SIZE, timeout);
+               if (r < 0 && errno != EINTR) {
+                       fprintf(stderr, "epoll_wait: %m\n");
+                       return -1;
+               }
+               for (i = 0; i < r; i++) {
+                       struct epoll_event_handler *p = ev[i].data.ptr;
+                       if (p != NULL)
+                               p->ref_ev = &ev[i];
+               }
+               for (i = 0; i < r; i++) {
+                       struct epoll_event_handler *p = ev[i].data.ptr;
+                       if (p && p->handler)
+                               p->handler(ev[i].events, p);
+               }
+               for (i = 0; i < r; i++) {
+                       struct epoll_event_handler *p = ev[i].data.ptr;
+                       if (p != NULL)
+                               p->ref_ev = NULL;
+               }
+       }
+
+       return 0;
 }