1 /*
2 * src/lib/link.c CLI Link 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-2010 Thomas Graf <tgraf@suug.ch>
10 */
11
12 /**
13 * @ingroup cli
14 * @defgroup cli_link Links
15 *
16 * @{
17 */
18
19 #include <netlink/cli/utils.h>
20 #include <netlink/cli/link.h>
21 #include <linux/if.h>
22
nl_cli_link_alloc(void)23 struct rtnl_link *nl_cli_link_alloc(void)
24 {
25 struct rtnl_link *link;
26
27 link = rtnl_link_alloc();
28 if (!link)
29 nl_cli_fatal(ENOMEM, "Unable to allocate link object");
30
31 return link;
32 }
33
nl_cli_link_alloc_cache_family(struct nl_sock * sock,int family)34 struct nl_cache *nl_cli_link_alloc_cache_family(struct nl_sock *sock, int family)
35 {
36 struct nl_cache *cache;
37 int err;
38
39 if ((err = rtnl_link_alloc_cache(sock, family, &cache)) < 0)
40 nl_cli_fatal(err, "Unable to allocate link cache: %s",
41 nl_geterror(err));
42
43 nl_cache_mngt_provide(cache);
44
45 return cache;
46 }
47
nl_cli_link_alloc_cache(struct nl_sock * sock)48 struct nl_cache *nl_cli_link_alloc_cache(struct nl_sock *sock)
49 {
50 return nl_cli_link_alloc_cache_family(sock, AF_UNSPEC);
51 }
52
nl_cli_link_parse_family(struct rtnl_link * link,char * arg)53 void nl_cli_link_parse_family(struct rtnl_link *link, char *arg)
54 {
55 int family;
56
57 if ((family = nl_str2af(arg)) < 0)
58 nl_cli_fatal(EINVAL,
59 "Unable to translate address family \"%s\"", arg);
60
61 rtnl_link_set_family(link, family);
62 }
63
nl_cli_link_parse_name(struct rtnl_link * link,char * arg)64 void nl_cli_link_parse_name(struct rtnl_link *link, char *arg)
65 {
66 rtnl_link_set_name(link, arg);
67 }
68
nl_cli_link_parse_mtu(struct rtnl_link * link,char * arg)69 void nl_cli_link_parse_mtu(struct rtnl_link *link, char *arg)
70 {
71 uint32_t mtu = nl_cli_parse_u32(arg);
72 rtnl_link_set_mtu(link, mtu);
73 }
74
nl_cli_link_parse_ifindex(struct rtnl_link * link,char * arg)75 void nl_cli_link_parse_ifindex(struct rtnl_link *link, char *arg)
76 {
77 uint32_t index = nl_cli_parse_u32(arg);
78 rtnl_link_set_ifindex(link, index);
79 }
80
nl_cli_link_parse_txqlen(struct rtnl_link * link,char * arg)81 void nl_cli_link_parse_txqlen(struct rtnl_link *link, char *arg)
82 {
83 uint32_t qlen = nl_cli_parse_u32(arg);
84 rtnl_link_set_txqlen(link, qlen);
85 }
86
nl_cli_link_parse_weight(struct rtnl_link * link,char * arg)87 void nl_cli_link_parse_weight(struct rtnl_link *link, char *arg)
88 {
89 }
90
nl_cli_link_parse_ifalias(struct rtnl_link * link,char * arg)91 void nl_cli_link_parse_ifalias(struct rtnl_link *link, char *arg)
92 {
93 if (strlen(arg) > IFALIASZ)
94 nl_cli_fatal(ERANGE,
95 "Link ifalias too big, must not exceed %u in length.",
96 IFALIASZ);
97
98 rtnl_link_set_ifalias(link, arg);
99 }
100
101 /** @} */
102