nl-route-add.c revision 44d362409d5469aed47d19e7908d19bd194493a4
13ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 23ed852eea50f9d4cd633efb8c2b054b8e33c253cristy * src/nl-route-dump.c Dump route attributes 33ed852eea50f9d4cd633efb8c2b054b8e33c253cristy * 43ed852eea50f9d4cd633efb8c2b054b8e33c253cristy * This library is free software; you can redistribute it and/or 53ed852eea50f9d4cd633efb8c2b054b8e33c253cristy * modify it under the terms of the GNU Lesser General Public 63ed852eea50f9d4cd633efb8c2b054b8e33c253cristy * License as published by the Free Software Foundation version 2.1 73ed852eea50f9d4cd633efb8c2b054b8e33c253cristy * of the License. 83ed852eea50f9d4cd633efb8c2b054b8e33c253cristy * 93ed852eea50f9d4cd633efb8c2b054b8e33c253cristy * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch> 103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#include "utils.h" 133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 143ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic void print_usage(void) 153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy printf( 173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy "Usage: nl-route-add [<filter>]\n"); 183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy exit(1); 193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 207e41fe84a841d7b9d7b36b245b65e9dcb3314943cristy 213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#include "f_route.c" 223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 233ed852eea50f9d4cd633efb8c2b054b8e33c253cristyint main(int argc, char *argv[]) 243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy struct nl_handle *nlh; 263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy struct nl_cache *link_cache, *route_cache; 273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy struct rtnl_route *route; 283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy int err = 1; 293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (nltool_init(argc, argv) < 0) 313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return -1; 323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (argc < 2 || !strcmp(argv[1], "-h")) 343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy print_usage(); 353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nlh = nltool_alloc_handle(); 373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (!nlh) 383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy goto errout; 393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy route = rtnl_route_alloc(); 413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (!route) 423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy goto errout; 433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (nltool_connect(nlh, NETLINK_ROUTE) < 0) 453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy goto errout_free; 463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy link_cache = nltool_alloc_link_cache(nlh); 483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (!link_cache) 493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy goto errout_close; 503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy route_cache = nltool_alloc_route_cache(nlh); 523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (!route_cache) 533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy goto errout_link_cache; 543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy get_filter(route, argc, argv, 1, route_cache, link_cache); 563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (rtnl_route_add(nlh, route, 0) < 0) { 583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy fprintf(stderr, "rtnl_route_add failed: %s\n", 593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nl_geterror()); 603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy goto errout_route_cache; 613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy err = 0; 643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 653ed852eea50f9d4cd633efb8c2b054b8e33c253cristyerrout_route_cache: 663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nl_cache_free(route_cache); 673ed852eea50f9d4cd633efb8c2b054b8e33c253cristyerrout_link_cache: 683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nl_cache_free(link_cache); 693ed852eea50f9d4cd633efb8c2b054b8e33c253cristyerrout_close: 703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nl_close(nlh); 713ed852eea50f9d4cd633efb8c2b054b8e33c253cristyerrout_free: 723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy rtnl_route_put(route); 733ed852eea50f9d4cd633efb8c2b054b8e33c253cristyerrout: 743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy nl_handle_destroy(nlh); 753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return err; 763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy