2 * src/lib/addr.c Address Helpers
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
9 * Copyright (c) 2008-2009 Thomas Graf <tgraf@suug.ch>
14 * @defgroup cli_addr Addresses
19 #include <netlink/cli/utils.h>
20 #include <netlink/cli/addr.h>
22 struct rtnl_addr *nl_cli_addr_alloc(void)
24 struct rtnl_addr *addr;
26 addr = rtnl_addr_alloc();
28 nl_cli_fatal(ENOMEM, "Unable to allocate address object");
33 void nl_cli_addr_parse_family(struct rtnl_addr *addr, char *arg)
37 if ((family = nl_str2af(arg)) != AF_UNSPEC)
38 rtnl_addr_set_family(addr, family);
41 void nl_cli_addr_parse_local(struct rtnl_addr *addr, char *arg)
46 a = nl_cli_addr_parse(arg, rtnl_addr_get_family(addr));
47 if ((err = rtnl_addr_set_local(addr, a)) < 0)
48 nl_cli_fatal(err, "Unable to set local address: %s",
54 void nl_cli_addr_parse_dev(struct rtnl_addr *addr, struct nl_cache *link_cache,
59 if (!(ival = rtnl_link_name2i(link_cache, arg)))
60 nl_cli_fatal(ENOENT, "Link \"%s\" does not exist", arg);
62 rtnl_addr_set_ifindex(addr, ival);
65 void nl_cli_addr_parse_label(struct rtnl_addr *addr, char *arg)
69 if ((err = rtnl_addr_set_label(addr, arg)) < 0)
70 nl_cli_fatal(err, "Unable to set address label: %s",
74 void nl_cli_addr_parse_peer(struct rtnl_addr *addr, char *arg)
79 a = nl_cli_addr_parse(arg, rtnl_addr_get_family(addr));
80 if ((err = rtnl_addr_set_peer(addr, a)) < 0)
81 nl_cli_fatal(err, "Unable to set peer address: %s",
87 void nl_cli_addr_parse_scope(struct rtnl_addr *addr, char *arg)
91 if ((ival = rtnl_str2scope(arg)) < 0)
92 nl_cli_fatal(EINVAL, "Unknown address scope \"%s\"", arg);
94 rtnl_addr_set_scope(addr, ival);
97 void nl_cli_addr_parse_broadcast(struct rtnl_addr *addr, char *arg)
102 a = nl_cli_addr_parse(arg, rtnl_addr_get_family(addr));
103 if ((err = rtnl_addr_set_broadcast(addr, a)) < 0)
104 nl_cli_fatal(err, "Unable to set broadcast address: %s",
110 static uint32_t parse_lifetime(const char *arg)
115 if (!strcasecmp(arg, "forever"))
118 if ((err = nl_str2msec(arg, &msecs)) < 0)
119 nl_cli_fatal(err, "Unable to parse time string \"%s\": %s",
120 arg, nl_geterror(err));
122 return (msecs / 1000);
125 void nl_cli_addr_parse_preferred(struct rtnl_addr *addr, char *arg)
127 rtnl_addr_set_preferred_lifetime(addr, parse_lifetime(arg));
130 void nl_cli_addr_parse_valid(struct rtnl_addr *addr, char *arg)
132 rtnl_addr_set_valid_lifetime(addr, parse_lifetime(arg));