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