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