test-create-ip6tnl.c 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #include <netlink/route/link/ip6tnl.h>
  2. #include <netlink-private/netlink.h>
  3. int main(int argc, char *argv[])
  4. {
  5. struct nl_cache *link_cache;
  6. struct rtnl_link *link;
  7. struct in6_addr addr;
  8. struct nl_sock *sk;
  9. int err, if_index;
  10. sk = nl_socket_alloc();
  11. if ((err = nl_connect(sk, NETLINK_ROUTE)) < 0) {
  12. nl_perror(err, "Unable to connect socket");
  13. return err;
  14. }
  15. err = rtnl_link_alloc_cache(sk, AF_UNSPEC, &link_cache);
  16. if ( err < 0) {
  17. nl_perror(err, "Unable to allocate cache");
  18. return err;
  19. }
  20. if_index = rtnl_link_name2i(link_cache, "ens33");
  21. if (!if_index) {
  22. fprintf(stderr, "Unable to lookup ens33");
  23. return -1;
  24. }
  25. link = rtnl_link_ip6_tnl_alloc();
  26. if(!link) {
  27. nl_perror(err, "Unable to allocate link");
  28. return -1;
  29. }
  30. rtnl_link_set_name(link, "ip6tnl-tun");
  31. rtnl_link_ip6_tnl_set_link(link, if_index);
  32. inet_pton(AF_INET6, "2607:f0d0:1002:51::4", &addr);
  33. rtnl_link_ip6_tnl_set_local(link, &addr);
  34. inet_pton(AF_INET6, "2607:f0d0:1002:52::5", &addr);
  35. rtnl_link_ip6_tnl_set_remote(link, &addr);
  36. err = rtnl_link_add(sk, link, NLM_F_CREATE);
  37. if (err < 0) {
  38. nl_perror(err, "Unable to add link");
  39. return err;
  40. }
  41. rtnl_link_put(link);
  42. nl_close(sk);
  43. return 0;
  44. }