diff options
author | Thomas Graf <tgr@lsx.localdomain> | 2008-05-22 22:02:02 (GMT) |
---|---|---|
committer | Thomas Graf <tgr@lsx.localdomain> | 2008-05-22 22:02:02 (GMT) |
commit | 10cf5a586c149fdb7e2639000dbfae5e6f8522a5 (patch) | |
tree | 399a15d767fd15b85c92be2e70b748645eeb983e /src/nf-log.c | |
parent | 337fbd24cad1f5cf9c8b4287a75f2c69f088adce (diff) | |
download | libnl-10cf5a586c149fdb7e2639000dbfae5e6f8522a5.zip libnl-10cf5a586c149fdb7e2639000dbfae5e6f8522a5.tar.gz libnl-10cf5a586c149fdb7e2639000dbfae5e6f8522a5.tar.bz2 |
New set of libnl tools
Converts all tools to the API changes and improves the useability by
introducing regular options and long options.
Diffstat (limited to 'src/nf-log.c')
-rw-r--r-- | src/nf-log.c | 110 |
1 files changed, 30 insertions, 80 deletions
diff --git a/src/nf-log.c b/src/nf-log.c index d1f0ed6..d855efc 100644 --- a/src/nf-log.c +++ b/src/nf-log.c @@ -6,17 +6,12 @@ * License as published by the Free Software Foundation version 2.1 * of the License. * - * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch> + * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch> * Copyright (c) 2007 Philip Craig <philipc@snapgear.com> * Copyright (c) 2007 Secure Computing Corporation */ -#include <sys/types.h> -#include <linux/netfilter/nfnetlink_log.h> - -#include "utils.h" -#include <netlink/netfilter/nfnl.h> -#include <netlink/netfilter/log.h> +#include "log-utils.h" static void obj_input(struct nl_object *obj, void *arg) { @@ -40,25 +35,18 @@ static int event_input(struct nl_msg *msg, void *arg) int main(int argc, char *argv[]) { - struct nl_handle *nfnlh; - struct nl_handle *rtnlh; + struct nl_sock *nf_sock; + struct nl_sock *rt_sock; struct nl_cache *link_cache; struct nfnl_log *log; enum nfnl_log_copy_mode copy_mode; uint32_t copy_range; - int err = 1; + int err; int family; - if (nltool_init(argc, argv) < 0) - return -1; - - nfnlh = nltool_alloc_handle(); - if (nfnlh == NULL) - return -1; - - nl_disable_sequence_check(nfnlh); - - nl_socket_modify_cb(nfnlh, NL_CB_VALID, NL_CB_CUSTOM, event_input, NULL); + nf_sock = nlt_alloc_socket(); + nl_disable_sequence_check(nf_sock); + nl_socket_modify_cb(nf_sock, NL_CB_VALID, NL_CB_CUSTOM, event_input, NULL); if ((argc > 1 && !strcasecmp(argv[1], "-h")) || argc < 3) { printf("Usage: nf-log family group [ copy_mode ] " @@ -66,38 +54,26 @@ int main(int argc, char *argv[]) return 2; } - if (nfnl_connect(nfnlh) < 0) { - fprintf(stderr, "%s\n", nl_geterror()); - goto errout; - } + nlt_connect(nf_sock, NETLINK_NETFILTER); family = nl_str2af(argv[1]); - if (family == AF_UNSPEC) { - fprintf(stderr, "Unknown family: %s\n", argv[1]); - goto errout; - } + if (family == AF_UNSPEC) + fatal(NLE_INVAL, "Unknown family \"%s\": %s", + argv[1], nl_geterror(family)); - nfnl_log_pf_unbind(nfnlh, family); - if (nfnl_log_pf_bind(nfnlh, family) < 0) { - fprintf(stderr, "%s\n", nl_geterror()); - goto errout; - } - - log = nfnl_log_alloc(); - if (log == NULL) { - fprintf(stderr, "%s\n", nl_geterror()); - goto errout; - } + nfnl_log_pf_unbind(nf_sock, family); + if ((err = nfnl_log_pf_bind(nf_sock, family)) < 0) + fatal(err, "Unable to bind logger: %s", nl_geterror(err)); + log = nlt_alloc_log(); nfnl_log_set_group(log, atoi(argv[2])); copy_mode = NFNL_LOG_COPY_META; if (argc > 3) { copy_mode = nfnl_log_str2copy_mode(argv[3]); - if (copy_mode < 0) { - fprintf(stderr, "%s\n", nl_geterror()); - goto errout; - } + if (copy_mode < 0) + fatal(copy_mode, "Unable to parse copy mode \"%s\": %s", + argv[3], nl_geterror(copy_mode)); } nfnl_log_set_copy_mode(log, copy_mode); @@ -106,10 +82,8 @@ int main(int argc, char *argv[]) copy_mode = atoi(argv[4]); nfnl_log_set_copy_range(log, copy_range); - if (nfnl_log_create(nfnlh, log) <0) { - fprintf(stderr, "%s\n", nl_geterror()); - goto errout; - } + if ((err = nfnl_log_create(nf_sock, log)) < 0) + fatal(err, "Unable to bind instance: %s", nl_geterror(err)); { struct nl_dump_params dp = { @@ -122,22 +96,9 @@ int main(int argc, char *argv[]) nl_object_dump((struct nl_object *) log, &dp); } - rtnlh = nltool_alloc_handle(); - if (rtnlh == NULL) { - goto errout_close; - } - - if (nl_connect(rtnlh, NETLINK_ROUTE) < 0) { - fprintf(stderr, "%s\n", nl_geterror()); - goto errout; - } - - if ((link_cache = rtnl_link_alloc_cache(rtnlh)) == NULL) { - fprintf(stderr, "%s\n", nl_geterror()); - goto errout_close; - } - - nl_cache_mngt_provide(link_cache); + rt_sock = nlt_alloc_socket(); + nlt_connect(rt_sock, NETLINK_ROUTE); + link_cache = nlt_alloc_link_cache(rt_sock); while (1) { fd_set rfds; @@ -145,35 +106,24 @@ int main(int argc, char *argv[]) FD_ZERO(&rfds); - maxfd = nffd = nl_socket_get_fd(nfnlh); + maxfd = nffd = nl_socket_get_fd(nf_sock); FD_SET(nffd, &rfds); - rtfd = nl_socket_get_fd(rtnlh); + rtfd = nl_socket_get_fd(rt_sock); FD_SET(rtfd, &rfds); if (maxfd < rtfd) maxfd = rtfd; - /* wait for an incoming message on the netlink socket */ + /* wait for an incoming message on the netlink nf_socket */ retval = select(maxfd+1, &rfds, NULL, NULL, NULL); if (retval) { if (FD_ISSET(nffd, &rfds)) - nl_recvmsgs_default(nfnlh); + nl_recvmsgs_default(nf_sock); if (FD_ISSET(rtfd, &rfds)) - nl_recvmsgs_default(rtnlh); + nl_recvmsgs_default(rt_sock); } } - nl_cache_mngt_unprovide(link_cache); - nl_cache_free(link_cache); - - nfnl_log_put(log); - - nl_close(rtnlh); - nl_handle_destroy(rtnlh); -errout_close: - nl_close(nfnlh); - nl_handle_destroy(nfnlh); -errout: - return err; + return 0; } |