From 1be55ff3a9866cbee8fcde8d8f9425cb3d8af05d Mon Sep 17 00:00:00 2001 From: Arturo Borrero Date: Mon, 14 Apr 2014 12:17:41 +0200 Subject: netlink: add socket error reporting helper function This patch adds a simple helper function to report errors while opening the Netlink socket. To help users to diagnose problems, a new NFT_EXIT_NONL exit code is included, which is 3. Suggested-by: Pablo Neira Ayuso Signed-off-by: Arturo Borrero Gonzalez Signed-off-by: Pablo Neira Ayuso --- include/netlink.h | 1 + include/nftables.h | 1 + src/netlink.c | 10 +++++++++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/include/netlink.h b/include/netlink.h index 4e3f8aa7..1fb03562 100644 --- a/include/netlink.h +++ b/include/netlink.h @@ -138,6 +138,7 @@ extern void netlink_dump_set(struct nft_set *nls); extern int netlink_batch_send(struct list_head *err_list); extern int netlink_io_error(struct netlink_ctx *ctx, const struct location *loc, const char *fmt, ...); +extern void netlink_open_error(void) __noreturn; extern struct nft_ruleset *netlink_dump_ruleset(struct netlink_ctx *ctx, const struct handle *h, diff --git a/include/nftables.h b/include/nftables.h index 7f3968d4..3394e324 100644 --- a/include/nftables.h +++ b/include/nftables.h @@ -39,6 +39,7 @@ enum nftables_exit_codes { NFT_EXIT_SUCCESS = 0, NFT_EXIT_FAILURE = 1, NFT_EXIT_NOMEM = 2, + NFT_EXIT_NONL = 3, }; struct input_descriptor; diff --git a/src/netlink.c b/src/netlink.c index 025566ad..10951f96 100644 --- a/src/netlink.c +++ b/src/netlink.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include @@ -46,7 +47,7 @@ static void __init netlink_open_sock(void) { nf_sock = mnl_socket_open(NETLINK_NETFILTER); if (nf_sock == NULL) - memory_allocation_error(); + netlink_open_error(); fcntl(mnl_socket_get_fd(nf_sock), F_SETFL, O_NONBLOCK); mnl_batch_init(); @@ -73,6 +74,13 @@ int netlink_io_error(struct netlink_ctx *ctx, const struct location *loc, return -1; } +void __noreturn netlink_open_error(void) +{ + fprintf(stderr, "E: Unable to open Netlink socket: %s\n", + strerror(errno)); + exit(NFT_EXIT_NONL); +} + struct nft_table *alloc_nft_table(const struct handle *h) { struct nft_table *nlt; -- cgit v1.2.3