#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.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>

int main ()
{

	int retval = 1;
	struct nl_sock *sk;
	struct rtnl_route *route;
	struct in6_addr gw, src, dst;
        struct rtnl_nexthop *nh;
	struct nl_addr *src_addr, *dest_addr, *gw_addr;
	struct nl_cache *cache;
	struct in6_addr *tmp_addr;
	struct rtnl_link *link;

	sk = nl_socket_alloc ();
	nl_connect (sk, NETLINK_ROUTE);

	/* start adding route */
	route = rtnl_route_alloc ();

	//rtnl_route_set_family (route, AF_INET6);
	//rtnl_route_set_scope (route, RT_SCOPE_SITE);

	// dst
	nl_addr_parse("::", AF_INET6, &dest_addr);
	nl_addr_set_prefixlen (dest_addr, 0);
	rtnl_route_set_dst (route, dest_addr);
	nl_addr_put (dest_addr);

	// src
	//nl_addr_parse("", AF_INET6, &src_addr);
	//rtnl_route_set_src (route, src_addr);
	//nl_addr_put (src_addr);

	// gateway
	nh = rtnl_route_nh_alloc ();
	nl_addr_parse("fe80::226:5aff:fefd:ba38", AF_INET6, &gw_addr);
	//nl_addr_set_prefixlen (gw_addr, 0);
	rtnl_route_nh_set_gateway(nh, gw_addr);	
        rtnl_route_nh_set_ifindex(nh, 3);
        rtnl_route_add_nexthop(route, nh);

	retval = rtnl_route_add (sk, route, 0);

        if (retval == -NLE_FAILURE)
                retval = -NLE_OBJ_NOTFOUND;

	nl_socket_free (sk);

	return -retval;
}