diff options
author | David Ahern <dsa@cumulusnetworks.com> | 2015-10-21 17:44:29 (GMT) |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2015-11-01 16:54:03 (GMT) |
commit | 493bbd13e6d96c61e844dd1c04aa7218d0b7da08 (patch) | |
tree | cb47114e902a28be329940f65fa59296c1dc4e4a /tests | |
parent | f25138d3214cefba0dc992ce7a408de580fd3dcd (diff) | |
download | libnl-493bbd13e6d96c61e844dd1c04aa7218d0b7da08.zip libnl-493bbd13e6d96c61e844dd1c04aa7218d0b7da08.tar.gz libnl-493bbd13e6d96c61e844dd1c04aa7218d0b7da08.tar.bz2 |
route/vrf: add VRF support
http://lists.infradead.org/pipermail/libnl/2015-October/001991.html
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
[thaller@redhat.com: slightly modified original patch]
Signed-off-by: Thomas Haller <thaller@redhat.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile.am | 1 | ||||
-rw-r--r-- | tests/test-create-vrf.c | 59 |
2 files changed, 60 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index edf2ee5..3a8256c 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -36,6 +36,7 @@ check_PROGRAMS = \ test-create-ipvti \ test-create-macvlan \ test-create-ipvlan \ + test-create-vrf \ test-create-sit \ test-create-ifb \ test-delete-link \ diff --git a/tests/test-create-vrf.c b/tests/test-create-vrf.c new file mode 100644 index 0000000..7db6d8a --- /dev/null +++ b/tests/test-create-vrf.c @@ -0,0 +1,59 @@ +#include <netlink/netlink.h> +#include <netlink/route/link.h> +#include <netlink/route/link/vrf.h> + +int main(int argc, char *argv[]) +{ + struct nl_cache *link_cache; + struct rtnl_link *link, *link2; + struct nl_sock *sk; + uint32_t tb_id; + int err; + + sk = nl_socket_alloc(); + if ((err = nl_connect(sk, NETLINK_ROUTE)) < 0) { + nl_perror(err, "Unable to connect socket"); + return err; + } + + if (!(link = rtnl_link_vrf_alloc())) { + fprintf(stderr, "Unable to allocate link"); + return -1; + } + + rtnl_link_set_name(link, "vrf-red"); + + if ((err = rtnl_link_vrf_set_tableid(link, 10)) < 0) { + nl_perror(err, "Unable to set VRF table id"); + return err; + } + + if ((err = rtnl_link_add(sk, link, NLM_F_CREATE)) < 0) { + nl_perror(err, "Unable to add link"); + return err; + } + + if ((err = rtnl_link_alloc_cache(sk, AF_UNSPEC, &link_cache)) < 0) { + nl_perror(err, "Unable to allocate cache"); + return err; + } + + if (!(link2 = rtnl_link_get_by_name(link_cache, "vrf-red"))) { + fprintf(stderr, "Unable to lookup vrf-red"); + return -1; + } + + if ((err = rtnl_link_vrf_get_tableid(link2, &tb_id)) < 0) { + nl_perror(err, "Unable to get VRF table id"); + return err; + } + + if (tb_id != 10) { + fprintf(stderr, "Mismatch with VRF table id\n"); + } + + rtnl_link_put(link); + nl_close(sk); + + return 0; +} |