about summary refs log tree commit diff
path: root/src/nm-netlink-compat.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/nm-netlink-compat.h')
-rw-r--r--src/nm-netlink-compat.h207
1 files changed, 207 insertions, 0 deletions
diff --git a/src/nm-netlink-compat.h b/src/nm-netlink-compat.h
new file mode 100644
index 00000000..af21fb9a
--- /dev/null
+++ b/src/nm-netlink-compat.h
@@ -0,0 +1,207 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2011 Caixa Magica Software.
+ */
+
+#ifndef NM_NETLINK_COMPAT_H
+#define NM_NETLINK_COMPAT_H
+
+#include <errno.h>
+
+#include <netlink/netlink.h>
+#include <netlink/route/rtnl.h>
+#include <netlink/route/link.h>
+#include <netlink/route/route.h>
+#include <netlink/route/addr.h>
+
+
+#include <netlink/netlink.h>
+#include <netlink/cache.h>
+#include <netlink/utils.h>
+#include <netlink/data.h>
+#include <netlink/route/rtnl.h>
+#include <netlink/route/route.h>
+#include <netlink/route/link.h>
+#include <netlink/route/nexthop.h>
+
+#include <config.h>
+
+/* libnl-1 API compatibility for libnl-2/3*/
+#ifndef HAVE_LIBNL1
+
+struct rtnl_nexthop * nm_netlink_get_nh(struct rtnl_route *);
+int rtnl_route_get_oif(struct rtnl_route *);
+int rtnl_route_set_oif(struct rtnl_route *, int);
+int rtnl_route_set_gateway(struct rtnl_route *, struct nl_addr *);
+int rtnl_route_get_dst_len(struct rtnl_route *);
+struct nl_addr * rtnl_route_get_gateway(struct rtnl_route *);
+#endif
+
+/* libnl-2 API compatibility for libnl-3 */
+#ifdef HAVE_LIBNL3
+static inline int
+__rtnl_link_alloc_cache (struct nl_sock *h, struct nl_cache **cache)
+{
+       return rtnl_link_alloc_cache (h, AF_UNSPEC, cache);
+}
+#define rtnl_link_alloc_cache __rtnl_link_alloc_cache
+#endif
+
+
+/* libnl-2.0 compat functions */
+#ifdef HAVE_LIBNL2
+
+/* functions with similar prototypes */
+#define nlmsg_datalen nlmsg_len
+#endif
+
+
+/* libnl-1.0 compat functions */
+#ifdef HAVE_LIBNL1
+
+#define nl_sock nl_handle
+
+/* libnl-1.0 functions with similar prototypes */
+#define nl_socket_alloc nl_handle_alloc
+#define nl_socket_alloc_cb nl_handle_alloc_cb
+#define nl_socket_free nl_handle_destroy
+#define nl_socket_set_passcred nl_set_passcred
+#define nl_socket_disable_seq_check nl_disable_sequence_check
+#define rtnl_route_set_priority rtnl_route_set_prio
+#define nlmsg_datalen nlmsg_len
+
+/* auxiliary functions */
+int nl_compat_error (int);
+
+/* libnl-1.0 functions with modified prototypes in libnl-2/3*/
+static inline const char * 
+__nl_geterror (int err)
+{
+        /* err is set, can be parsed */
+        return nl_geterror ();
+}
+#define nl_geterror __nl_geterror
+
+static inline int
+__rtnl_addr_alloc_cache (struct nl_sock *h, struct nl_cache **cache)
+{
+	g_return_val_if_fail (cache != NULL, -EINVAL);
+
+	*cache = rtnl_addr_alloc_cache (h);
+	return *cache ? 0 : -ENOMEM;
+}
+#define rtnl_addr_alloc_cache __rtnl_addr_alloc_cache
+
+static inline int
+__rtnl_route_alloc_cache (struct nl_sock *h, int family, int flags, struct nl_cache **cache)
+{
+	g_return_val_if_fail (cache != NULL, -EINVAL);
+
+	*cache = rtnl_route_alloc_cache (h);
+	return *cache ? 0 : -ENOMEM;
+}
+#define rtnl_route_alloc_cache __rtnl_route_alloc_cache
+
+static inline int
+__rtnl_link_alloc_cache (struct nl_sock *h, struct nl_cache **cache)
+{
+	g_return_val_if_fail (cache != NULL, -EINVAL);
+
+	*cache = rtnl_link_alloc_cache (h);
+	return *cache ? 0 : -ENOMEM;
+}
+#define rtnl_link_alloc_cache __rtnl_link_alloc_cache
+
+static inline int
+__rtnl_route_get_metric (struct rtnl_route *route, int metric, unsigned int *value)
+{
+	g_return_val_if_fail (value != NULL, -EINVAL);
+
+	*value = rtnl_route_get_metric (route, metric);
+	return 0;
+}
+#define rtnl_route_get_metric __rtnl_route_get_metric
+
+static inline int
+__rtnl_addr_add (struct nl_sock *h, struct rtnl_addr *addr, int flags)
+{
+	return nl_compat_error (rtnl_addr_add (h, addr, flags));
+}
+#define rtnl_addr_add __rtnl_addr_add
+
+static inline int
+__rtnl_route_add (struct nl_sock *sk, struct rtnl_route *route, int flags)
+{
+	return nl_compat_error (rtnl_route_add (sk, route, flags));
+}
+#define rtnl_route_add __rtnl_route_add
+
+static inline int
+rtnl_route_delete (struct nl_sock *h, struct rtnl_route *route, int flags)
+{
+	return nl_compat_error (rtnl_route_del (h, route, flags));
+}
+#define rtnl_route_del rtnl_route_delete
+
+static inline int
+__rtnl_link_change (struct nl_sock *h, struct rtnl_link *old, struct rtnl_link *tmpl, int flags)
+{
+	return nl_compat_error (rtnl_link_change (h, old, tmpl,flags));
+}
+#define rtnl_link_change __rtnl_link_change
+
+static inline int
+__nl_cache_include (struct nl_cache *cache, struct nl_object *obj, change_func_t cb, void *data)
+{
+	return nl_cache_include (cache, obj, cb);
+}
+#define nl_cache_include __nl_cache_include
+
+#define NLE_SUCCESS             0
+#define NLE_FAILURE             1
+#define NLE_INTR                2
+#define NLE_BAD_SOCK            3
+#define NLE_AGAIN               4
+#define NLE_NOMEM               5
+#define NLE_EXIST               6
+#define NLE_INVAL               7
+#define NLE_RANGE               8
+#define NLE_MSGSIZE             9
+#define NLE_OPNOTSUPP           10
+#define NLE_AF_NOSUPPORT        11
+#define NLE_OBJ_NOTFOUND        12
+#define NLE_NOATTR              13
+#define NLE_MISSING_ATTR        14
+#define NLE_AF_MISMATCH         15
+#define NLE_SEQ_MISMATCH        16
+#define NLE_MSG_OVERFLOW        17
+#define NLE_MSG_TRUNC           18
+#define NLE_NOADDR              19
+#define NLE_SRCRT_NOSUPPORT     20
+#define NLE_MSG_TOOSHORT        21
+#define NLE_MSGTYPE_NOSUPPORT   22
+#define NLE_OBJ_MISMATCH        23
+#define NLE_NOCACHE             24
+#define NLE_BUSY                25
+#define NLE_PROTO_MISMATCH      26
+#define NLE_NOACCESS            27
+#define NLE_PERM                28
+#define NLE_PKTLOC_FILE         29
+#endif
+
+#endif /* NM_NETLINK_COMPAT_H */