12116Sjkh/* Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
22116Sjkh */
32116Sjkh
42116Sjkh#ifndef _NL1_COMPAT_H_
52116Sjkh#define _NL1_COMPAT_H_
62116Sjkh
72116Sjkh#include <netlink/route/rtnl.h>
82116Sjkh#include <netlink/route/link.h>
92116Sjkh#include <netlink/route/route.h>
102116Sjkh#include <netlink/route/neighbour.h>
118870Srgrimes
122116Sjkhstruct nl_handle;
132116Sjkh
142116Sjkh/* Workaround - declaration missing */
152116Sjkhextern int		rtnl_link_vlan_get_id(struct rtnl_link *);
16176451Sdas
17176451Sdas#define nl_geterror(x) nl_geterror()
182116Sjkh#define nl_sock nl_handle
19279856Skargl
20279856Skarglstatic inline void nl_socket_disable_seq_check(struct nl_sock *sock)
21279856Skargl{
22279856Skargl	nl_disable_sequence_check(sock);
232116Sjkh}
242116Sjkh
252116Sjkhstruct rtnl_nexthop {};
26279856Skargl
27279856Skarglstatic inline struct rtnl_nexthop *rtnl_route_nexthop_n(
282116Sjkh	struct rtnl_route *r, int n)
292116Sjkh{
302116Sjkh	return (struct rtnl_nexthop *)r;
312116Sjkh}
322116Sjkh
332116Sjkhstatic inline struct nl_addr *rtnl_route_nh_get_gateway(struct rtnl_nexthop *nh)
3497413Salfred{
3597413Salfred	return rtnl_route_get_gateway((struct rtnl_route *)nh);
362116Sjkh}
372116Sjkh
382116Sjkhstatic inline int rtnl_route_nh_get_ifindex(struct rtnl_nexthop *nh)
392116Sjkh{
402116Sjkh	return rtnl_route_get_oif((struct rtnl_route *)nh);
412116Sjkh}
422116Sjkh
432116Sjkh#define nl_addr_info(addr, result)	(		\
442116Sjkh	*(result) = nl_addr_info(addr),			\
452116Sjkh	(*(result) == NULL) ? nl_get_errno() : 0		\
462116Sjkh)
472116Sjkh
488870Srgrimesstatic inline void nl_socket_free(struct nl_sock *sock)
492116Sjkh{
502116Sjkh	nl_close(sock);
512116Sjkh}
522116Sjkh
532116Sjkhstatic inline struct nl_sock *nl_socket_alloc(void)
542116Sjkh{
552116Sjkh	return nl_handle_alloc();
562116Sjkh}
572116Sjkh
582116Sjkh#define rtnl_link_alloc_cache(sock, family, result) (	\
598870Srgrimes	*result = rtnl_link_alloc_cache(sock),		\
602116Sjkh	(*result == NULL) ? nl_get_errno() : 0		\
612116Sjkh)
622116Sjkh
632116Sjkh#define rtnl_route_alloc_cache(sock, family, flags, result) (	\
642116Sjkh	*result = rtnl_route_alloc_cache(sock),			\
652116Sjkh	(*result == NULL) ? nl_get_errno() : 0			\
662116Sjkh)
672116Sjkh
682116Sjkh#define rtnl_neigh_alloc_cache(sock, result) (			\
692116Sjkh	*result = rtnl_neigh_alloc_cache(sock),			\
708870Srgrimes	(*result == NULL) ? nl_get_errno() : 0			\
712116Sjkh)
722116Sjkh
732116Sjkhstatic inline int rtnl_link_is_vlan(struct rtnl_link *link)
742116Sjkh{
752116Sjkh	return rtnl_link_vlan_get_id(link) <= 0;
762116Sjkh}
772116Sjkh
782116Sjkh#endif
792116Sjkh