1/*
2 * src/lib/neigh.c     CLI Neighbour Helpers
3 *
4 *	This library is free software; you can redistribute it and/or
5 *	modify it under the terms of the GNU Lesser General Public
6 *	License as published by the Free Software Foundation version 2.1
7 *	of the License.
8 *
9 * Copyright (c) 2008-2009 Thomas Graf <tgraf@suug.ch>
10 */
11
12/**
13 * @ingroup cli
14 * @defgroup cli_neigh Neighbour
15 *
16 * @{
17 */
18
19#include <netlink/cli/utils.h>
20#include <netlink/cli/neigh.h>
21
22struct rtnl_neigh *nl_cli_neigh_alloc(void)
23{
24	struct rtnl_neigh *neigh;
25
26	neigh = rtnl_neigh_alloc();
27	if (!neigh)
28		nl_cli_fatal(ENOMEM, "Unable to allocate neighbout object");
29
30	return neigh;
31}
32
33void nl_cli_neigh_parse_dst(struct rtnl_neigh *neigh, char *arg)
34{
35	struct nl_addr *a;
36	int err;
37
38	a = nl_cli_addr_parse(arg, rtnl_neigh_get_family(neigh));
39	if ((err = rtnl_neigh_set_dst(neigh, a)) < 0)
40		nl_cli_fatal(err, "Unable to set local address: %s",
41			nl_geterror(err));
42
43	nl_addr_put(a);
44}
45
46void nl_cli_neigh_parse_lladdr(struct rtnl_neigh *neigh, char *arg)
47{
48	struct nl_addr *a;
49
50	a = nl_cli_addr_parse(arg, AF_UNSPEC);
51	rtnl_neigh_set_lladdr(neigh, a);
52	nl_addr_put(a);
53}
54
55void nl_cli_neigh_parse_dev(struct rtnl_neigh *neigh,
56			    struct nl_cache *link_cache, char *arg)
57{
58	int ival;
59
60	if (!(ival = rtnl_link_name2i(link_cache, arg)))
61		nl_cli_fatal(ENOENT, "Link \"%s\" does not exist", arg);
62
63	rtnl_neigh_set_ifindex(neigh, ival);
64}
65
66void nl_cli_neigh_parse_family(struct rtnl_neigh *neigh, char *arg)
67{
68	int family;
69
70	if ((family = nl_str2af(arg)) == AF_UNSPEC)
71		nl_cli_fatal(EINVAL,
72			     "Unable to translate address family \"%s\"", arg);
73
74	rtnl_neigh_set_family(neigh, family);
75}
76
77void nl_cli_neigh_parse_state(struct rtnl_neigh *neigh, char *arg)
78{
79	int state;
80
81	if ((state = rtnl_neigh_str2state(arg)) < 0)
82		nl_cli_fatal(state, "Unable to translate state \"%s\": %s",
83			arg, state);
84
85	rtnl_neigh_set_state(neigh, state);
86}
87
88/** @} */
89