diff options
-rw-r--r-- | sysdep/bsd-netlink/netlink-sys.h | 29 | ||||
-rw-r--r-- | sysdep/cf/bsd-netlink.h | 11 | ||||
-rw-r--r-- | sysdep/cf/linux.h | 1 | ||||
-rw-r--r-- | sysdep/linux/netlink-sys.h | 63 | ||||
-rw-r--r-- | sysdep/linux/netlink.c | 53 |
5 files changed, 96 insertions, 61 deletions
diff --git a/sysdep/bsd-netlink/netlink-sys.h b/sysdep/bsd-netlink/netlink-sys.h new file mode 100644 index 00000000..a6e5052b --- /dev/null +++ b/sysdep/bsd-netlink/netlink-sys.h @@ -0,0 +1,29 @@ +/* + * Netlink FreeBSD-specific functions + * + * (c) 2022 Alexander Chernikov <melifaro@FreeBSD.org> + * + * Can be freely distributed and used under the terms of the GNU GPL. + */ + +#ifndef _BIRD_NETLINK_SYS_H_ +#define _BIRD_NETLINK_SYS_H_ + +#include <netlink/netlink.h> +#include <netlink/netlink_route.h> + +#ifndef AF_MPLS +#define AF_MPLS 39 +#endif + +#ifndef SO_RCVBUFFORCE +#define SO_RCVBUFFORCE SO_RCVBUF +#endif + +static inline int +netlink_error_to_os(int error) +{ + return (error); +} + +#endif diff --git a/sysdep/cf/bsd-netlink.h b/sysdep/cf/bsd-netlink.h index 09149dc4..69297867 100644 --- a/sysdep/cf/bsd-netlink.h +++ b/sysdep/cf/bsd-netlink.h @@ -17,16 +17,7 @@ #define CONFIG_INCLUDE_SYSIO_H "sysdep/bsd/sysio.h" #define CONFIG_INCLUDE_KRTSYS_H "sysdep/linux/krt-sys.h" - -#define CONFIG_FREEBSD_NETLINK - -#ifndef AF_MPLS -#define AF_MPLS 39 -#endif - -#ifndef SO_RCVBUFFORCE -#define SO_RCVBUFFORCE SO_RCVBUF -#endif +#define CONFIG_INCLUDE_NLSYS_H "sysdep/bsd-netlink/netlink-sys.h" /* Link: sysdep/unix diff --git a/sysdep/cf/linux.h b/sysdep/cf/linux.h index 85598c10..9c37dd8a 100644 --- a/sysdep/cf/linux.h +++ b/sysdep/cf/linux.h @@ -16,6 +16,7 @@ #define CONFIG_INCLUDE_SYSIO_H "sysdep/linux/sysio.h" #define CONFIG_INCLUDE_KRTSYS_H "sysdep/linux/krt-sys.h" +#define CONFIG_INCLUDE_NLSYS_H "sysdep/linux/netlink-sys.h" #define CONFIG_LINUX_NETLINK diff --git a/sysdep/linux/netlink-sys.h b/sysdep/linux/netlink-sys.h new file mode 100644 index 00000000..4c99307b --- /dev/null +++ b/sysdep/linux/netlink-sys.h @@ -0,0 +1,63 @@ +/* + * BIRD -- Linux Netlink Interface + * + * (c) 1999--2000 Martin Mares <mj@ucw.cz> + * + * Can be freely distributed and used under the terms of the GNU GPL. + */ + +#ifndef _BIRD_NETLINK_SYS_H_ +#define _BIRD_NETLINK_SYS_H_ + +#include <asm/types.h> +#include <linux/if.h> +#include <linux/netlink.h> +#include <linux/rtnetlink.h> + +#ifdef HAVE_MPLS_KERNEL +#include <linux/lwtunnel.h> +#endif + +#ifndef MSG_TRUNC /* Hack: Several versions of glibc miss this one :( */ +#define MSG_TRUNC 0x20 +#endif + +#ifndef IFA_FLAGS +#define IFA_FLAGS 8 +#endif + +#ifndef IFF_LOWER_UP +#define IFF_LOWER_UP 0x10000 +#endif + +#ifndef RTA_TABLE +#define RTA_TABLE 15 +#endif + +#ifndef RTA_VIA +#define RTA_VIA 18 +#endif + +#ifndef RTA_NEWDST +#define RTA_NEWDST 19 +#endif + +#ifndef RTA_ENCAP_TYPE +#define RTA_ENCAP_TYPE 21 +#endif + +#ifndef RTA_ENCAP +#define RTA_ENCAP 22 +#endif + +#ifndef NETLINK_GET_STRICT_CHK +#define NETLINK_GET_STRICT_CHK 12 +#endif + +static inline int +netlink_error_to_os(int error) +{ + return -error; +} + +#endif diff --git a/sysdep/linux/netlink.c b/sysdep/linux/netlink.c index dcb25911..7f0d4736 100644 --- a/sysdep/linux/netlink.c +++ b/sysdep/linux/netlink.c @@ -27,56 +27,7 @@ #include "lib/hash.h" #include "conf/conf.h" -#ifdef CONFIG_LINUX_NETLINK -#include <asm/types.h> -#include <linux/if.h> -#include <linux/netlink.h> -#include <linux/rtnetlink.h> -#endif -#ifdef CONFIG_FREEBSD_NETLINK -#include <netlink/netlink.h> -#include <netlink/netlink_route.h> -#endif - -#ifdef HAVE_MPLS_KERNEL -#include <linux/lwtunnel.h> -#endif - -#ifndef MSG_TRUNC /* Hack: Several versions of glibc miss this one :( */ -#define MSG_TRUNC 0x20 -#endif - -#ifndef IFA_FLAGS -#define IFA_FLAGS 8 -#endif - -#ifndef IFF_LOWER_UP -#define IFF_LOWER_UP 0x10000 -#endif - -#ifndef RTA_TABLE -#define RTA_TABLE 15 -#endif - -#ifndef RTA_VIA -#define RTA_VIA 18 -#endif - -#ifndef RTA_NEWDST -#define RTA_NEWDST 19 -#endif - -#ifndef RTA_ENCAP_TYPE -#define RTA_ENCAP_TYPE 21 -#endif - -#ifndef RTA_ENCAP -#define RTA_ENCAP 22 -#endif - -#ifndef NETLINK_GET_STRICT_CHK -#define NETLINK_GET_STRICT_CHK 12 -#endif +#include CONFIG_INCLUDE_NLSYS_H #define krt_ipv4(p) ((p)->af == AF_INET) @@ -320,7 +271,7 @@ nl_error(struct nlmsghdr *h, int ignore_esrch) return ENOBUFS; } e = (struct nlmsgerr *) NLMSG_DATA(h); - ec = -e->error; + ec = netlink_error_to_os(e->error); if (ec && !(ignore_esrch && (ec == ESRCH))) log_rl(&rl_netlink_err, L_WARN "Netlink: %s", strerror(ec)); return ec; |