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)
54 void nl_cli_addr_parse_dev(
struct rtnl_addr *addr,
struct nl_cache *link_cache,
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)
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)
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));