1054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart#include <netlink/netlink.h>
2054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart#include <netlink/route/link.h>
3054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart#include <netlink/route/link/vlan.h>
4054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart
5054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewartint main(int argc, char *argv[])
6054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart{
7054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart	struct rtnl_link *link;
8054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart	struct nl_cache *link_cache;
9054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart	struct nl_sock *sk;
10054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart	int err, master_index;
11054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart
12054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart	sk = nl_socket_alloc();
13054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart	if ((err = nl_connect(sk, NETLINK_ROUTE)) < 0) {
14054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart		nl_perror(err, "Unable to connect socket");
15054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart		return err;
16054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart	}
17054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart
18054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart	if ((err = rtnl_link_alloc_cache(sk, AF_UNSPEC, &link_cache)) < 0) {
19054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart		nl_perror(err, "Unable to allocate cache");
20054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart		return err;
21054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart	}
22054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart
23054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart	if (!(master_index = rtnl_link_name2i(link_cache, "eth0"))) {
24054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart		fprintf(stderr, "Unable to lookup eth0");
25054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart		return -1;
26054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart	}
27054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart
28054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart	link = rtnl_link_vlan_alloc();
29054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart
30054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart	rtnl_link_set_link(link, master_index);
31054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart
32054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart	rtnl_link_vlan_set_id(link, 10);
33054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart
34054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart	if ((err = rtnl_link_add(sk, link, NLM_F_CREATE)) < 0) {
35054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart		nl_perror(err, "Unable to add link");
36054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart		return err;
37054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart	}
38054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart
39054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart	rtnl_link_put(link);
40054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart	nl_close(sk);
41054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart
42054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart	return 0;
43054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart}
44