#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_handle *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_handle_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
	//dest_addr = nl_addr_parse("::", AF_INET6);
	//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();
	gw_addr = nl_addr_parse("fe80::226:5aff:fefd:ba38", AF_INET6);
	rtnl_route_set_gateway (route, gw_addr);
	rtnl_route_set_oif (route, 3);
	//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);
	nl_close (sk);
	nl_handle_destroy (sk);

	return -retval;
}