nexmon – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 /*
2 * src/lib/addr.c Address 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_addr Addresses
15 *
16 * @{
17 */
18  
19 #include <netlink/cli/utils.h>
20 #include <netlink/cli/addr.h>
21  
22 struct rtnl_addr *nl_cli_addr_alloc(void)
23 {
24 struct rtnl_addr *addr;
25  
26 addr = rtnl_addr_alloc();
27 if (!addr)
28 nl_cli_fatal(ENOMEM, "Unable to allocate address object");
29  
30 return addr;
31 }
32  
33 void nl_cli_addr_parse_family(struct rtnl_addr *addr, char *arg)
34 {
35 int family;
36  
37 if ((family = nl_str2af(arg)) != AF_UNSPEC)
38 rtnl_addr_set_family(addr, family);
39 }
40  
41 void nl_cli_addr_parse_local(struct rtnl_addr *addr, char *arg)
42 {
43 struct nl_addr *a;
44 int err;
45  
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",
49 nl_geterror(err));
50  
51 nl_addr_put(a);
52 }
53  
54 void nl_cli_addr_parse_dev(struct rtnl_addr *addr, struct nl_cache *link_cache,
55 char *arg)
56 {
57 int ival;
58  
59 if (!(ival = rtnl_link_name2i(link_cache, arg)))
60 nl_cli_fatal(ENOENT, "Link \"%s\" does not exist", arg);
61  
62 rtnl_addr_set_ifindex(addr, ival);
63 }
64  
65 void nl_cli_addr_parse_label(struct rtnl_addr *addr, char *arg)
66 {
67 int err;
68  
69 if ((err = rtnl_addr_set_label(addr, arg)) < 0)
70 nl_cli_fatal(err, "Unable to set address label: %s",
71 nl_geterror(err));
72 }
73  
74 void nl_cli_addr_parse_peer(struct rtnl_addr *addr, char *arg)
75 {
76 struct nl_addr *a;
77 int err;
78  
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",
82 nl_geterror(err));
83  
84 nl_addr_put(a);
85 }
86  
87 void nl_cli_addr_parse_scope(struct rtnl_addr *addr, char *arg)
88 {
89 int ival;
90  
91 if ((ival = rtnl_str2scope(arg)) < 0)
92 nl_cli_fatal(EINVAL, "Unknown address scope \"%s\"", arg);
93  
94 rtnl_addr_set_scope(addr, ival);
95 }
96  
97 void nl_cli_addr_parse_broadcast(struct rtnl_addr *addr, char *arg)
98 {
99 struct nl_addr *a;
100 int err;
101  
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",
105 nl_geterror(err));
106  
107 nl_addr_put(a);
108 }
109  
110 static uint32_t parse_lifetime(const char *arg)
111 {
112 uint64_t msecs;
113 int err;
114  
115 if (!strcasecmp(arg, "forever"))
116 return 0xFFFFFFFFU;
117  
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));
121  
122 return (msecs / 1000);
123 }
124  
125 void nl_cli_addr_parse_preferred(struct rtnl_addr *addr, char *arg)
126 {
127 rtnl_addr_set_preferred_lifetime(addr, parse_lifetime(arg));
128 }
129  
130 void nl_cli_addr_parse_valid(struct rtnl_addr *addr, char *arg)
131 {
132 rtnl_addr_set_valid_lifetime(addr, parse_lifetime(arg));
133 }
134  
135 /** @} */