24 #include <netlink/cli/utils.h> 41 lval = strtoul(arg, &endptr, 0);
42 if (endptr == arg || lval == ULONG_MAX)
43 nl_cli_fatal(EINVAL,
"Unable to parse \"%s\", not a number.",
46 return (uint32_t) lval;
49 void nl_cli_print_version(
void)
51 printf(
"libnl tools version %s\n", LIBNL_VERSION);
53 "Copyright (C) 2003-2010 Thomas Graf <tgraf@redhat.com>\n" 55 "This program comes with ABSOLUTELY NO WARRANTY. This is free \n" 56 "software, and you are welcome to redistribute it under certain\n" 57 "conditions. See the GNU General Public License for details.\n" 75 fprintf(stderr,
"Error: ");
79 vfprintf(stderr, fmt, ap);
81 fprintf(stderr,
"\n");
84 locale_t loc = newlocale(LC_MESSAGES_MASK,
"", (locale_t)0);
85 if (loc == (locale_t)0) {
87 loc = newlocale(LC_MESSAGES_MASK,
88 "POSIX", (locale_t)0);
89 if (loc == (locale_t)0)
90 buf =
"newlocale() failed";
92 if (loc != (locale_t)0)
93 buf = strerror_l(err, loc);
94 fprintf(stderr,
"%s\n", buf);
95 if (loc != (locale_t)0)
102 int nl_cli_connect(
struct nl_sock *sk,
int protocol)
107 nl_cli_fatal(err,
"Unable to connect netlink socket: %s",
113 struct nl_sock *nl_cli_alloc_socket(
void)
115 struct nl_sock *sock;
118 nl_cli_fatal(ENOBUFS,
"Unable to allocate netlink socket");
123 struct nl_addr *nl_cli_addr_parse(
const char *str,
int family)
125 struct nl_addr *addr;
130 str, nl_geterror(err));
135 int nl_cli_parse_dumptype(
const char *str)
137 if (!strcasecmp(str,
"brief"))
139 else if (!strcasecmp(str,
"details") || !strcasecmp(str,
"detailed"))
141 else if (!strcasecmp(str,
"stats"))
144 nl_cli_fatal(EINVAL,
"Invalid dump type \"%s\".\n", str);
149 int nl_cli_confirm(
struct nl_object *obj,
struct nl_dump_params *params,
155 char buf[32] = { 0 };
158 printf(
"Delete? (%c/%c) ",
159 default_yes ?
'Y' :
'y',
160 default_yes ?
'n' :
'N');
162 if (!fgets(buf,
sizeof(buf), stdin)) {
163 fprintf(stderr,
"Error while reading\n.");
167 switch ((answer = tolower(buf[0]))) {
169 answer = default_yes ?
'y' :
'n';
172 return answer ==
'y';
175 fprintf(stderr,
"Invalid input, try again.\n");
182 struct nl_cache *nl_cli_alloc_cache(
struct nl_sock *sock,
const char *name,
183 int (*ac)(
struct nl_sock *,
struct nl_cache **))
185 struct nl_cache *cache;
188 if ((err = ac(sock, &cache)) < 0)
190 name, nl_geterror(err));
197 struct nl_cache *nl_cli_alloc_cache_flags(
struct nl_sock *sock,
198 const char *name,
unsigned int flags,
199 int (*ac)(
struct nl_sock *,
struct nl_cache **,
202 struct nl_cache *cache;
205 if ((err = ac(sock, &cache, flags)) < 0)
207 name, nl_geterror(err));
214 void nl_cli_load_module(
const char *prefix,
const char *name)
216 char path[FILENAME_MAX+1];
219 snprintf(path,
sizeof(path),
"%s/%s/%s.so",
220 PKGLIBDIR, prefix, name);
222 if (!(handle = dlopen(path, RTLD_NOW)))
223 nl_cli_fatal(ENOENT,
"Unable to load module \"%s\": %s\n",
Dump object briefly on one line.
void nl_cache_mngt_provide(struct nl_cache *cache)
Provide a cache for global use.
int nl_addr_parse(const char *addrstr, int hint, struct nl_addr **result)
Allocate abstract address based on character string.
Dump all attributes but no statistics.
struct nl_sock * nl_socket_alloc(void)
Allocate new netlink socket.
int nl_connect(struct nl_sock *sk, int protocol)
Create file descriptor and bind socket.
void nl_object_dump(struct nl_object *obj, struct nl_dump_params *params)
Dump this object according to the specified parameters.
uint32_t nl_cli_parse_u32(const char *arg)
Parse a text based 32 bit unsigned integer argument.
void nl_cli_fatal(int err, const char *fmt,...)
Print error message and quit application.
Dump all attributes including statistics.