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