nl-route-add.c revision 44d362409d5469aed47d19e7908d19bd194493a
144d362409d5469aed47d19e7908d19bd194493aThomas Graf/* 244d362409d5469aed47d19e7908d19bd194493aThomas Graf * src/nl-route-dump.c Dump route attributes 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 Grafstatic void print_usage(void) 1544d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 1644d362409d5469aed47d19e7908d19bd194493aThomas Graf printf( 1744d362409d5469aed47d19e7908d19bd194493aThomas Graf "Usage: nl-route-add [<filter>]\n"); 1844d362409d5469aed47d19e7908d19bd194493aThomas Graf exit(1); 1944d362409d5469aed47d19e7908d19bd194493aThomas Graf} 2044d362409d5469aed47d19e7908d19bd194493aThomas Graf 2144d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "f_route.c" 2244d362409d5469aed47d19e7908d19bd194493aThomas Graf 2344d362409d5469aed47d19e7908d19bd194493aThomas Grafint main(int argc, char *argv[]) 2444d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 2544d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_handle *nlh; 2644d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_cache *link_cache, *route_cache; 2744d362409d5469aed47d19e7908d19bd194493aThomas Graf struct rtnl_route *route; 2844d362409d5469aed47d19e7908d19bd194493aThomas Graf int err = 1; 2944d362409d5469aed47d19e7908d19bd194493aThomas Graf 3044d362409d5469aed47d19e7908d19bd194493aThomas Graf if (nltool_init(argc, argv) < 0) 3144d362409d5469aed47d19e7908d19bd194493aThomas Graf return -1; 3244d362409d5469aed47d19e7908d19bd194493aThomas Graf 3344d362409d5469aed47d19e7908d19bd194493aThomas Graf if (argc < 2 || !strcmp(argv[1], "-h")) 3444d362409d5469aed47d19e7908d19bd194493aThomas Graf print_usage(); 3544d362409d5469aed47d19e7908d19bd194493aThomas Graf 3644d362409d5469aed47d19e7908d19bd194493aThomas Graf nlh = nltool_alloc_handle(); 3744d362409d5469aed47d19e7908d19bd194493aThomas Graf if (!nlh) 3844d362409d5469aed47d19e7908d19bd194493aThomas Graf goto errout; 3944d362409d5469aed47d19e7908d19bd194493aThomas Graf 4044d362409d5469aed47d19e7908d19bd194493aThomas Graf route = rtnl_route_alloc(); 4144d362409d5469aed47d19e7908d19bd194493aThomas Graf if (!route) 4244d362409d5469aed47d19e7908d19bd194493aThomas Graf goto errout; 4344d362409d5469aed47d19e7908d19bd194493aThomas Graf 4444d362409d5469aed47d19e7908d19bd194493aThomas Graf if (nltool_connect(nlh, NETLINK_ROUTE) < 0) 4544d362409d5469aed47d19e7908d19bd194493aThomas Graf goto errout_free; 4644d362409d5469aed47d19e7908d19bd194493aThomas Graf 4744d362409d5469aed47d19e7908d19bd194493aThomas Graf link_cache = nltool_alloc_link_cache(nlh); 4844d362409d5469aed47d19e7908d19bd194493aThomas Graf if (!link_cache) 4944d362409d5469aed47d19e7908d19bd194493aThomas Graf goto errout_close; 5044d362409d5469aed47d19e7908d19bd194493aThomas Graf 5144d362409d5469aed47d19e7908d19bd194493aThomas Graf route_cache = nltool_alloc_route_cache(nlh); 5244d362409d5469aed47d19e7908d19bd194493aThomas Graf if (!route_cache) 5344d362409d5469aed47d19e7908d19bd194493aThomas Graf goto errout_link_cache; 5444d362409d5469aed47d19e7908d19bd194493aThomas Graf 5544d362409d5469aed47d19e7908d19bd194493aThomas Graf get_filter(route, argc, argv, 1, route_cache, link_cache); 5644d362409d5469aed47d19e7908d19bd194493aThomas Graf 5744d362409d5469aed47d19e7908d19bd194493aThomas Graf if (rtnl_route_add(nlh, route, 0) < 0) { 5844d362409d5469aed47d19e7908d19bd194493aThomas Graf fprintf(stderr, "rtnl_route_add failed: %s\n", 5944d362409d5469aed47d19e7908d19bd194493aThomas Graf nl_geterror()); 6044d362409d5469aed47d19e7908d19bd194493aThomas Graf goto errout_route_cache; 6144d362409d5469aed47d19e7908d19bd194493aThomas Graf } 6244d362409d5469aed47d19e7908d19bd194493aThomas Graf 6344d362409d5469aed47d19e7908d19bd194493aThomas Graf err = 0; 6444d362409d5469aed47d19e7908d19bd194493aThomas Graf 6544d362409d5469aed47d19e7908d19bd194493aThomas Graferrout_route_cache: 6644d362409d5469aed47d19e7908d19bd194493aThomas Graf nl_cache_free(route_cache); 6744d362409d5469aed47d19e7908d19bd194493aThomas Graferrout_link_cache: 6844d362409d5469aed47d19e7908d19bd194493aThomas Graf nl_cache_free(link_cache); 6944d362409d5469aed47d19e7908d19bd194493aThomas Graferrout_close: 7044d362409d5469aed47d19e7908d19bd194493aThomas Graf nl_close(nlh); 7144d362409d5469aed47d19e7908d19bd194493aThomas Graferrout_free: 7244d362409d5469aed47d19e7908d19bd194493aThomas Graf rtnl_route_put(route); 7344d362409d5469aed47d19e7908d19bd194493aThomas Graferrout: 7444d362409d5469aed47d19e7908d19bd194493aThomas Graf nl_handle_destroy(nlh); 7544d362409d5469aed47d19e7908d19bd194493aThomas Graf return err; 7644d362409d5469aed47d19e7908d19bd194493aThomas Graf} 77