]> git.proxmox.com Git - mirror_frr.git/blobdiff - lib/imsg.c
zebra, lib: fix the ZEBRA_INTERFACE_VRF_UPDATE zapi message
[mirror_frr.git] / lib / imsg.c
index 999ab679b8a29cd945b20e3e902574bdd4b1f2e0..935d13772752a2a668fc4d9699793c4addd7845a 100644 (file)
 #include "queue.h"
 #include "imsg.h"
 
-int     imsg_fd_overhead = 0;
+int imsg_fd_overhead = 0;
 
-int     imsg_get_fd(struct imsgbuf *);
+int imsg_get_fd(struct imsgbuf *);
 
 #ifndef __OpenBSD__
 /*
  * The original code calls getdtablecount() which is OpenBSD specific. Use
  * available_fds() from OpenSMTPD instead.
  */
-static int
-available_fds(unsigned int n)
+static int available_fds(unsigned int n)
 {
-       unsigned int    i;
-       int             ret, fds[256];
+       unsigned int i;
+       int ret, fds[256];
 
-       if (n > (sizeof(fds)/sizeof(fds[0])))
+       if (n > (sizeof(fds) / sizeof(fds[0])))
                return (1);
 
        ret = 0;
@@ -59,8 +58,7 @@ available_fds(unsigned int n)
 }
 #endif
 
-void
-imsg_init(struct imsgbuf *ibuf, int fd)
+void imsg_init(struct imsgbuf *ibuf, int fd)
 {
        msgbuf_init(&ibuf->w);
        memset(&ibuf->r, 0, sizeof(ibuf->r));
@@ -70,19 +68,18 @@ imsg_init(struct imsgbuf *ibuf, int fd)
        TAILQ_INIT(&ibuf->fds);
 }
 
-ssize_t
-imsg_read(struct imsgbuf *ibuf)
+ssize_t imsg_read(struct imsgbuf *ibuf)
 {
-       struct msghdr            msg;
-       struct cmsghdr          *cmsg;
+       struct msghdr msg;
+       struct cmsghdr *cmsg;
        union {
                struct cmsghdr hdr;
-               char    buf[CMSG_SPACE(sizeof(int) * 1)];
+               char buf[CMSG_SPACE(sizeof(int) * 1)];
        } cmsgbuf;
-       struct iovec             iov;
-       ssize_t                  n = -1;
-       int                      fd;
-       struct imsg_fd          *ifd;
+       struct iovec iov;
+       ssize_t n;
+       int fd;
+       struct imsg_fd *ifd;
 
        memset(&msg, 0, sizeof(msg));
        memset(&cmsgbuf, 0, sizeof(cmsgbuf));
@@ -99,19 +96,22 @@ imsg_read(struct imsgbuf *ibuf)
 
 again:
 #ifdef __OpenBSD__
-       if (getdtablecount() + imsg_fd_overhead +
-           (int)((CMSG_SPACE(sizeof(int))-CMSG_SPACE(0))/sizeof(int))
+       if (getdtablecount() + imsg_fd_overhead
+                   + (int)((CMSG_SPACE(sizeof(int)) - CMSG_SPACE(0))
+                           / sizeof(int))
            >= getdtablesize()) {
 #else
-       if (available_fds(imsg_fd_overhead +
-           (CMSG_SPACE(sizeof(int))-CMSG_SPACE(0))/sizeof(int))) {
+       if (available_fds(imsg_fd_overhead
+                         + (CMSG_SPACE(sizeof(int)) - CMSG_SPACE(0))
+                                   / sizeof(int))) {
 #endif
                errno = EAGAIN;
                free(ifd);
                return (-1);
        }
 
-       if ((n = recvmsg(ibuf->fd, &msg, 0)) == -1) {
+       n = recvmsg(ibuf->fd, &msg, 0);
+       if (n == -1) {
                if (errno == EINTR)
                        goto again;
                goto fail;
@@ -120,9 +120,9 @@ again:
        ibuf->r.wpos += n;
 
        for (cmsg = CMSG_FIRSTHDR(&msg); cmsg != NULL;
-           cmsg = CMSG_NXTHDR(&msg, cmsg)) {
-               if (cmsg->cmsg_level == SOL_SOCKET &&
-                   cmsg->cmsg_type == SCM_RIGHTS) {
+            cmsg = CMSG_NXTHDR(&msg, cmsg)) {
+               if (cmsg->cmsg_level == SOL_SOCKET
+                   && cmsg->cmsg_type == SCM_RIGHTS) {
                        int i;
                        int j;
 
@@ -131,14 +131,15 @@ again:
                         * padding rules, our control buffer might contain
                         * more than one fd, and we must close them.
                         */
-                       j = ((char *)cmsg + cmsg->cmsg_len -
-                           (char *)CMSG_DATA(cmsg)) / sizeof(int);
+                       j = ((char *)cmsg + cmsg->cmsg_len
+                            - (char *)CMSG_DATA(cmsg))
+                           / sizeof(int);
                        for (i = 0; i < j; i++) {
                                fd = ((int *)CMSG_DATA(cmsg))[i];
                                if (ifd != NULL) {
                                        ifd->fd = fd;
                                        TAILQ_INSERT_TAIL(&ibuf->fds, ifd,
-                                           entry);
+                                                         entry);
                                        ifd = NULL;
                                } else
                                        close(fd);
@@ -152,10 +153,9 @@ fail:
        return (n);
 }
 
-ssize_t
-imsg_get(struct imsgbuf *ibuf, struct imsg *imsg)
+ssize_t imsg_get(struct imsgbuf *ibuf, struct imsg *imsg)
 {
-       size_t                   av, left, datalen;
+       size_t av, left, datalen;
 
        av = ibuf->r.wpos;
 
@@ -163,8 +163,7 @@ imsg_get(struct imsgbuf *ibuf, struct imsg *imsg)
                return (0);
 
        memcpy(&imsg->hdr, ibuf->r.buf, sizeof(imsg->hdr));
-       if (imsg->hdr.len < IMSG_HEADER_SIZE ||
-           imsg->hdr.len > MAX_IMSGSIZE) {
+       if (imsg->hdr.len < IMSG_HEADER_SIZE || imsg->hdr.len > MAX_IMSGSIZE) {
                errno = ERANGE;
                return (-1);
        }
@@ -183,7 +182,7 @@ imsg_get(struct imsgbuf *ibuf, struct imsg *imsg)
                imsg->fd = -1;
 
        if (imsg->data)
-         memcpy(imsg->data, ibuf->r.rptr, datalen);
+               memcpy(imsg->data, ibuf->r.rptr, datalen);
 
        if (imsg->hdr.len < av) {
                left = av - imsg->hdr.len;
@@ -195,11 +194,10 @@ imsg_get(struct imsgbuf *ibuf, struct imsg *imsg)
        return (datalen + IMSG_HEADER_SIZE);
 }
 
-int
-imsg_compose(struct imsgbuf *ibuf, u_int32_t type, u_int32_t peerid,
-    pid_t pid, int fd, const void *data, u_int16_t datalen)
+int imsg_compose(struct imsgbuf *ibuf, uint32_t type, uint32_t peerid,
+                pid_t pid, int fd, const void *data, uint16_t datalen)
 {
-       struct ibuf     *wbuf;
+       struct ibuf *wbuf;
 
        if ((wbuf = imsg_create(ibuf, type, peerid, pid, datalen)) == NULL)
                return (-1);
@@ -214,12 +212,11 @@ imsg_compose(struct imsgbuf *ibuf, u_int32_t type, u_int32_t peerid,
        return (1);
 }
 
-int
-imsg_composev(struct imsgbuf *ibuf, u_int32_t type, u_int32_t peerid,
-    pid_t pid, int fd, const struct iovec *iov, int iovcnt)
+int imsg_composev(struct imsgbuf *ibuf, uint32_t type, uint32_t peerid,
+                 pid_t pid, int fd, const struct iovec *iov, int iovcnt)
 {
-       struct ibuf     *wbuf;
-       int              i, datalen = 0;
+       struct ibuf *wbuf;
+       int i, datalen = 0;
 
        for (i = 0; i < iovcnt; i++)
                datalen += iov[i].iov_len;
@@ -239,12 +236,13 @@ imsg_composev(struct imsgbuf *ibuf, u_int32_t type, u_int32_t peerid,
 }
 
 /* ARGSUSED */
-struct ibuf *
-imsg_create(struct imsgbuf *ibuf, u_int32_t type, u_int32_t peerid,
-    pid_t pid, u_int16_t datalen)
+struct ibuf *imsg_create(struct imsgbuf *ibuf, uint32_t type, uint32_t peerid,
+                        pid_t pid, uint16_t datalen)
 {
-       struct ibuf     *wbuf;
-       struct imsg_hdr  hdr;
+       struct ibuf *wbuf;
+       struct imsg_hdr hdr;
+
+       memset(&hdr, 0x00, IMSG_HEADER_SIZE);
 
        datalen += IMSG_HEADER_SIZE;
        if (datalen > MAX_IMSGSIZE) {
@@ -266,8 +264,7 @@ imsg_create(struct imsgbuf *ibuf, u_int32_t type, u_int32_t peerid,
        return (wbuf);
 }
 
-int
-imsg_add(struct ibuf *msg, const void *data, u_int16_t datalen)
+int imsg_add(struct ibuf *msg, const void *data, uint16_t datalen)
 {
        if (datalen)
                if (ibuf_add(msg, data, datalen) == -1) {
@@ -277,10 +274,9 @@ imsg_add(struct ibuf *msg, const void *data, u_int16_t datalen)
        return (datalen);
 }
 
-void
-imsg_close(struct imsgbuf *ibuf, struct ibuf *msg)
+void imsg_close(struct imsgbuf *ibuf, struct ibuf *msg)
 {
-       struct imsg_hdr *hdr;
+       struct imsg_hdr *hdr;
 
        hdr = (struct imsg_hdr *)msg->buf;
 
@@ -288,35 +284,31 @@ imsg_close(struct imsgbuf *ibuf, struct ibuf *msg)
        if (msg->fd != -1)
                hdr->flags |= IMSGF_HASFD;
 
-       hdr->len = (u_int16_t)msg->wpos;
+       hdr->len = (uint16_t)msg->wpos;
 
        ibuf_close(&ibuf->w, msg);
 }
 
-void
-imsg_free(struct imsg *imsg)
+void imsg_free(struct imsg *imsg)
 {
        free(imsg->data);
 }
 
-int
-imsg_get_fd(struct imsgbuf *ibuf)
+int imsg_get_fd(struct imsgbuf *ibuf)
 {
-       int              fd;
-       struct imsg_fd  *ifd;
+       int fd;
+       struct imsg_fd *ifd;
 
-       if ((ifd = TAILQ_FIRST(&ibuf->fds)) == NULL)
+       if ((ifd = TAILQ_POP_FIRST(&ibuf->fds, entry)) == NULL)
                return (-1);
 
        fd = ifd->fd;
-       TAILQ_REMOVE(&ibuf->fds, ifd, entry);
        free(ifd);
 
        return (fd);
 }
 
-int
-imsg_flush(struct imsgbuf *ibuf)
+int imsg_flush(struct imsgbuf *ibuf)
 {
        while (ibuf->w.queued)
                if (msgbuf_write(&ibuf->w) <= 0)
@@ -324,10 +316,9 @@ imsg_flush(struct imsgbuf *ibuf)
        return (0);
 }
 
-void
-imsg_clear(struct imsgbuf *ibuf)
+void imsg_clear(struct imsgbuf *ibuf)
 {
-       int     fd;
+       int fd;
 
        msgbuf_clear(&ibuf->w);
        while ((fd = imsg_get_fd(ibuf)) != -1)