diff options
| -rw-r--r-- | configure.ac | 3 | ||||
| -rw-r--r-- | lib/zebra.h | 20 |
2 files changed, 23 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac index 0d598954cc..3cceb41123 100644 --- a/configure.ac +++ b/configure.ac @@ -1299,8 +1299,11 @@ AC_CHECK_FUNCS([ \ openat \ unlinkat \ posix_fallocate \ + sendmmsg \ ]) +AC_CHECK_MEMBERS([struct mmsghdr.msg_hdr], [], [], FRR_INCLUDES) + dnl ########################################################################## dnl LARGE if block spans a lot of "configure"! if test "$enable_clippy_only" != "yes"; then diff --git a/lib/zebra.h b/lib/zebra.h index 139e47e8d7..e8ddd869bb 100644 --- a/lib/zebra.h +++ b/lib/zebra.h @@ -230,6 +230,26 @@ size_t strlcpy(char *__restrict dest, const char *__restrict src, size_t destsize); #endif +#if !defined(HAVE_STRUCT_MMSGHDR_MSG_HDR) || !defined(HAVE_SENDMMSG) +/* avoid conflicts in case we have partial support */ +#define mmsghdr frr_mmsghdr +#define sendmmsg frr_sendmmsg + +struct mmsghdr { + struct msghdr msg_hdr; + unsigned int msg_len; +}; + +/* just go 1 at a time here, the loop this is used in will handle the rest */ +static inline int sendmmsg(int fd, struct mmsghdr *mmh, unsigned int len, + int flags) +{ + int rv = sendmsg(fd, &mmh->msg_hdr, 0); + + return rv > 0 ? 1 : rv; +} +#endif + /* * RFC 3542 defines several macros for using struct cmsghdr. * Here, we define those that are not present |
