nl-addr-add.c revision 44d362409d5469aed47d19e7908d19bd194493a
144d362409d5469aed47d19e7908d19bd194493aThomas Graf/* 244d362409d5469aed47d19e7908d19bd194493aThomas Graf * src/nl-addr-add.c Add addresses 344d362409d5469aed47d19e7908d19bd194493aThomas Graf * 444d362409d5469aed47d19e7908d19bd194493aThomas Graf * This library is free software; you can redistribute it and/or 544d362409d5469aed47d19e7908d19bd194493aThomas Graf * modify it under the terms of the GNU Lesser General Public 644d362409d5469aed47d19e7908d19bd194493aThomas Graf * License as published by the Free Software Foundation version 2.1 744d362409d5469aed47d19e7908d19bd194493aThomas Graf * of the License. 844d362409d5469aed47d19e7908d19bd194493aThomas Graf * 944d362409d5469aed47d19e7908d19bd194493aThomas Graf * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch> 1044d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 1144d362409d5469aed47d19e7908d19bd194493aThomas Graf 1244d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "utils.h" 1344d362409d5469aed47d19e7908d19bd194493aThomas Graf 1444d362409d5469aed47d19e7908d19bd194493aThomas Grafint main(int argc, char *argv[]) 1544d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 1644d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_handle *nlh; 1744d362409d5469aed47d19e7908d19bd194493aThomas Graf struct rtnl_addr *addr; 1844d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_addr *local; 1944d362409d5469aed47d19e7908d19bd194493aThomas Graf int err = 1; 2044d362409d5469aed47d19e7908d19bd194493aThomas Graf 2144d362409d5469aed47d19e7908d19bd194493aThomas Graf if (argc < 3 || !strcmp(argv[1], "-h")) { 2244d362409d5469aed47d19e7908d19bd194493aThomas Graf printf("Usage: nl-addr-add <addr> <ifindex>\n"); 2344d362409d5469aed47d19e7908d19bd194493aThomas Graf goto errout; 2444d362409d5469aed47d19e7908d19bd194493aThomas Graf } 2544d362409d5469aed47d19e7908d19bd194493aThomas Graf 2644d362409d5469aed47d19e7908d19bd194493aThomas Graf if (nltool_init(argc, argv) < 0) 2744d362409d5469aed47d19e7908d19bd194493aThomas Graf goto errout; 2844d362409d5469aed47d19e7908d19bd194493aThomas Graf 2944d362409d5469aed47d19e7908d19bd194493aThomas Graf nlh = nltool_alloc_handle(); 3044d362409d5469aed47d19e7908d19bd194493aThomas Graf if (!nlh) 3144d362409d5469aed47d19e7908d19bd194493aThomas Graf goto errout; 3244d362409d5469aed47d19e7908d19bd194493aThomas Graf 3344d362409d5469aed47d19e7908d19bd194493aThomas Graf addr = rtnl_addr_alloc(); 3444d362409d5469aed47d19e7908d19bd194493aThomas Graf if (!addr) 3544d362409d5469aed47d19e7908d19bd194493aThomas Graf goto errout_free_handle; 3644d362409d5469aed47d19e7908d19bd194493aThomas Graf 3744d362409d5469aed47d19e7908d19bd194493aThomas Graf if (nltool_connect(nlh, NETLINK_ROUTE) < 0) 3844d362409d5469aed47d19e7908d19bd194493aThomas Graf goto errout_free_addr; 3944d362409d5469aed47d19e7908d19bd194493aThomas Graf 4044d362409d5469aed47d19e7908d19bd194493aThomas Graf local = nltool_addr_parse(argv[1]); 4144d362409d5469aed47d19e7908d19bd194493aThomas Graf if (!local) 4244d362409d5469aed47d19e7908d19bd194493aThomas Graf goto errout_close; 4344d362409d5469aed47d19e7908d19bd194493aThomas Graf 4444d362409d5469aed47d19e7908d19bd194493aThomas Graf if (rtnl_addr_set_local(addr, local) < 0) { 4544d362409d5469aed47d19e7908d19bd194493aThomas Graf fprintf(stderr, "Unable to set local address: %s\n", 4644d362409d5469aed47d19e7908d19bd194493aThomas Graf nl_geterror()); 4744d362409d5469aed47d19e7908d19bd194493aThomas Graf goto errout_put_addr; 4844d362409d5469aed47d19e7908d19bd194493aThomas Graf } 4944d362409d5469aed47d19e7908d19bd194493aThomas Graf 5044d362409d5469aed47d19e7908d19bd194493aThomas Graf rtnl_addr_set_ifindex(addr, strtoul(argv[2], NULL, 0)); 5144d362409d5469aed47d19e7908d19bd194493aThomas Graf 5244d362409d5469aed47d19e7908d19bd194493aThomas Graf if (rtnl_addr_add(nlh, addr, 0) < 0) { 5344d362409d5469aed47d19e7908d19bd194493aThomas Graf fprintf(stderr, "Unable to add address: %s\n", nl_geterror()); 5444d362409d5469aed47d19e7908d19bd194493aThomas Graf goto errout_close; 5544d362409d5469aed47d19e7908d19bd194493aThomas Graf } 5644d362409d5469aed47d19e7908d19bd194493aThomas Graf 5744d362409d5469aed47d19e7908d19bd194493aThomas Graf err = 0; 5844d362409d5469aed47d19e7908d19bd194493aThomas Graferrout_put_addr: 5944d362409d5469aed47d19e7908d19bd194493aThomas Graf nl_addr_put(local); 6044d362409d5469aed47d19e7908d19bd194493aThomas Graferrout_close: 6144d362409d5469aed47d19e7908d19bd194493aThomas Graf nl_close(nlh); 6244d362409d5469aed47d19e7908d19bd194493aThomas Graferrout_free_addr: 6344d362409d5469aed47d19e7908d19bd194493aThomas Graf rtnl_addr_put(addr); 6444d362409d5469aed47d19e7908d19bd194493aThomas Graferrout_free_handle: 6544d362409d5469aed47d19e7908d19bd194493aThomas Graf nl_handle_destroy(nlh); 6644d362409d5469aed47d19e7908d19bd194493aThomas Graferrout: 6744d362409d5469aed47d19e7908d19bd194493aThomas Graf return err; 6844d362409d5469aed47d19e7908d19bd194493aThomas Graf} 69