diff options
author | /C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=laforge/emailAddress=laforge@netfilter.org </C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=laforge/emailAddress=laforge@netfilter.org> | 2005-10-09 15:34:09 +0000 |
---|---|---|
committer | /C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=laforge/emailAddress=laforge@netfilter.org </C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=laforge/emailAddress=laforge@netfilter.org> | 2005-10-09 15:34:09 +0000 |
commit | 889c8ccde1e0ebca799c0eb8d796ff1062d8d54c (patch) | |
tree | 9c68447ed005643eecda83fa93c0bebc9d7029c7 /_log/src | |
parent | 6b67c541e6ff0b3771e365caa3e83f6c2baa6703 (diff) |
hopefully the last renaming effort
Diffstat (limited to '_log/src')
-rw-r--r-- | _log/src/Makefile.am | 15 | ||||
-rw-r--r-- | _log/src/libipulog_compat.c | 226 | ||||
-rw-r--r-- | _log/src/libnfnetlink_log.c | 323 |
3 files changed, 0 insertions, 564 deletions
diff --git a/_log/src/Makefile.am b/_log/src/Makefile.am deleted file mode 100644 index 9593d92..0000000 --- a/_log/src/Makefile.am +++ /dev/null @@ -1,15 +0,0 @@ -#AUTOMAKE_OPTIONS = no-dependencies foreign - -#EXTRA_DIST = $(man_MANS) acinclude.m4 - -INCLUDES = $(all_includes) -I$(top_srcdir)/include -I${KERNELDIR} -AM_CFLAGS=-fPIC -Wall -LIBS= - -lib_LTLIBRARIES = libnfnetlink_log.la libnfnetlink_log_libipulog.la - -libnfnetlink_log_la_LDFLAGS = -Wc,-nostartfiles -libnfnetlink_log_la_SOURCES = libnfnetlink_log.c - -libnfnetlink_log_libipulog_la_LDFLAGS = -Wc,-nostartfiles -libnfnetlink_log_libipulog_la_SOURCES = libipulog_compat.c diff --git a/_log/src/libipulog_compat.c b/_log/src/libipulog_compat.c deleted file mode 100644 index a0675ec..0000000 --- a/_log/src/libipulog_compat.c +++ /dev/null @@ -1,226 +0,0 @@ -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <unistd.h> -#include <sys/types.h> -#include <sys/socket.h> -#include <netinet/in.h> -#include <libnfnetlink/libnfnetlink.h> -#include <libnfnetlink_log/libnfnetlink_log.h> -#include <libnfnetlink_log/libipulog.h> - -/* private */ -#define PAYLOAD_SIZE 0xffff - - -struct ipulog_handle -{ - struct nfulnl_handle *nfulh; - struct nfulnl_g_handle *nful_gh; - struct nlmsghdr *last_nlh; -#if 0 - int fd; - u_int8_t blocking; - struct sockaddr_nl local; - struct sockaddr_nl peer; -#endif - struct ulog_packet_msg upmsg; /* has to be last in structure */ -}; - -struct ipulog_errmap_t -{ - int errcode; - char *message; -} ipulog_errmap[] = -{ - { IPULOG_ERR_NONE, "No error" }, - { IPULOG_ERR_IMPL, "Not implemented yet" }, - { IPULOG_ERR_HANDLE, "Unable to create netlink handle" }, - { IPULOG_ERR_SOCKET, "Unable to create netlink socket" }, - { IPULOG_ERR_BIND, "Unable to bind netlink socket" }, - { IPULOG_ERR_RECVBUF, "Receive buffer size invalid" }, - { IPULOG_ERR_RECV, "Error during netlink receive" }, - { IPULOG_ERR_NLEOF, "Received EOF on netlink socket" }, - { IPULOG_ERR_TRUNC, "Receive message truncated" }, - { IPULOG_ERR_INVGR, "Invalid group specified" }, - { IPULOG_ERR_INVNL, "Invalid netlink message" }, -}; - -/* obviously this only finds the highest group in the mask */ -static unsigned int gmask2group(unsigned int gmask) -{ - int bit; - - for (bit = sizeof(gmask)*4 -1; bit >= 0; bit--) { - if (gmask & (1 << bit)) - return bit+1; - } - return 0; -} - - - -/* public */ - -int ipulog_errno = IPULOG_ERR_NONE; - -char *ipulog_strerror(int errcode) -{ - if (errcode < 0 || errcode > IPULOG_MAXERR) - errcode = IPULOG_ERR_IMPL; - return ipulog_errmap[errcode].message; -} - -/* convert a netlink group (1-32) to a group_mask suitable for create_handle */ -u_int32_t ipulog_group2gmask(u_int32_t group) -{ - if (group < 1 || group > 32) - { - ipulog_errno = IPULOG_ERR_INVGR; - return 0; - } - return (1 << (group - 1)); -} - -/* create a ipulog handle for the reception of packets sent to gmask */ -struct ipulog_handle *ipulog_create_handle(u_int32_t gmask, - u_int32_t rcvbufsize) -{ - int rv; - struct ipulog_handle *h; - unsigned int group = gmask2group(gmask); - - h = (struct ipulog_handle *) malloc(sizeof(*h)+PAYLOAD_SIZE); - if (! h) { - ipulog_errno = IPULOG_ERR_HANDLE; - return NULL; - } - memset(h, 0, sizeof(*h)); - h->nfulh = nfulnl_open(); - if (!h->nfulh) - goto out_free; - - /* bind_pf returns EEXIST if we are already registered */ - rv = nfulnl_bind_pf(h->nfulh, AF_INET); - if (rv < 0 && rv != -EEXIST) - goto out_free; - - h->nful_gh = nfulnl_bind_group(h->nfulh, group); - if (!h->nful_gh) - goto out_free; - - return h; - -out_free: - ipulog_errno = IPULOG_ERR_HANDLE; - free(h); - return NULL; -} - -void ipulog_destroy_handle(struct ipulog_handle *h) -{ - nfulnl_unbind_group(h->nful_gh); - nfulnl_close(h->nfulh); - free(h); -} - -ulog_packet_msg_t *ipulog_get_packet(struct ipulog_handle *h, - const unsigned char *buf, - size_t len) -{ - struct nlmsghdr *nlh; - struct nfattr *tb[NFULA_MAX]; - struct nfulnl_msg_packet_hdr *hdr; - - if (!h->last_nlh) { - printf("first\n"); - nlh = nfnl_get_msg_first(nfulnl_nfnlh(h->nfulh), buf, len); - }else { -next_msg: printf("next\n"); - nlh = nfnl_get_msg_next(nfulnl_nfnlh(h->nfulh), buf, len); - } - h->last_nlh = nlh; - - if (!nlh) - return NULL; - - nfnl_parse_attr(tb, NFULA_MAX, NFM_NFA(NLMSG_DATA(nlh)), - NFM_PAYLOAD(nlh)); - - if (!tb[NFULA_PACKET_HDR-1]) - goto next_msg; - - /* now build the fake ulog_packet_msg */ - hdr = NFA_DATA(tb[NFULA_PACKET_HDR-1]); - h->upmsg.hook = hdr->hook; - - if (tb[NFULA_MARK-1]) - h->upmsg.mark = ntohl(*(u_int32_t *)NFA_DATA(tb[NFULA_MARK-1])); - else - h->upmsg.mark = 0; - - if (tb[NFULA_TIMESTAMP]) { - /* FIXME: 64bit network-to-host */ - h->upmsg.timestamp_sec = h->upmsg.timestamp_usec = 0; - } else - h->upmsg.timestamp_sec = h->upmsg.timestamp_usec = 0; - - if (tb[NFULA_IFINDEX_INDEV-1]) { - /* FIXME: ifindex lookup */ - h->upmsg.indev_name[0] = '\0'; - } else - h->upmsg.indev_name[0] = '\0'; - - if (tb[NFULA_IFINDEX_OUTDEV-1]) { - /* FIXME: ifindex lookup */ - h->upmsg.outdev_name[0] = '\0'; - } else - h->upmsg.outdev_name[0] = '\0'; - - if (tb[NFULA_HWADDR-1]) { - struct nfulnl_msg_packet_hw *phw = NFA_DATA(tb[NFULA_HWADDR-1]); - h->upmsg.mac_len = ntohs(phw->hw_addrlen); - memcpy(h->upmsg.mac, phw->hw_addr, 8); - } else - h->upmsg.mac_len = 0; - - if (tb[NFULA_PREFIX-1]) { - int plen = NFA_PAYLOAD(tb[NFULA_PREFIX-1]); - if (ULOG_PREFIX_LEN < plen) - plen = ULOG_PREFIX_LEN; - memcpy(h->upmsg.prefix, NFA_DATA(tb[NFULA_PREFIX-1]), plen); - h->upmsg.prefix[ULOG_PREFIX_LEN-1] = '\0'; - } - - if (tb[NFULA_PAYLOAD-1]) { - memcpy(h->upmsg.payload, NFA_DATA(tb[NFULA_PAYLOAD-1]), - NFA_PAYLOAD(tb[NFULA_PAYLOAD-1])); - h->upmsg.data_len = NFA_PAYLOAD(tb[NFULA_PAYLOAD-1]); - } else - h->upmsg.data_len = 0; - - return &h->upmsg; -} - -ssize_t ipulog_read(struct ipulog_handle *h, unsigned char *buf, - size_t len, int timeout) -{ - /* 'timeout' was never implemented in the original libipulog, - * so we don't bother emulating it */ - return nfnl_recv(nfulnl_nfnlh(h->nfulh), buf, len); -} - -/* print a human readable description of the last error to stderr */ -void ipulog_perror(const char *s) -{ - if (s) - fputs(s, stderr); - else - fputs("ERROR", stderr); - if (ipulog_errno) - fprintf(stderr, ": %s", ipulog_strerror(ipulog_errno)); - if (errno) - fprintf(stderr, ": %s", strerror(errno)); - fputc('\n', stderr); -} - diff --git a/_log/src/libnfnetlink_log.c b/_log/src/libnfnetlink_log.c deleted file mode 100644 index ee27156..0000000 --- a/_log/src/libnfnetlink_log.c +++ /dev/null @@ -1,323 +0,0 @@ -/* libnfqnetlink.c: generic library for access to nf_queue - * - * (C) 2005 by Harald Welte <laforge@gnumonks.org> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 - * as published by the Free Software Foundation - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <string.h> -#include <ctype.h> -#include <time.h> -#include <errno.h> -#include <netinet/in.h> -#include <sys/socket.h> -#include <libnfnetlink/libnfnetlink.h> -#include <libnfnetlink_log/libnfnetlink_log.h> - -struct nfulnl_handle -{ - struct nfnl_handle nfnlh; - struct nfulnl_g_handle *gh_list; -}; - -struct nfulnl_g_handle -{ - struct nfulnl_g_handle *next; - struct nfulnl_handle *h; - u_int16_t id; - - nfulnl_callback *cb; - void *data; -}; - -int nfulnl_errno; - -/*********************************************************************** - * low level stuff - ***********************************************************************/ - -static void del_gh(struct nfulnl_g_handle *gh) -{ - struct nfulnl_g_handle *cur_gh, *prev_gh = NULL; - - for (cur_gh = gh->h->gh_list; cur_gh; cur_gh = cur_gh->next) { - if (cur_gh == gh) { - if (prev_gh) - prev_gh->next = gh->next; - else - gh->h->gh_list = gh->next; - return; - } - prev_gh = cur_gh; - } -} - -static void add_gh(struct nfulnl_g_handle *gh) -{ - gh->next = gh->h->gh_list; - gh->h->gh_list = gh; -} - -static struct nfulnl_g_handle *find_gh(struct nfulnl_handle *h, u_int16_t group) -{ - struct nfulnl_g_handle *gh; - - for (gh = h->gh_list; gh; gh = gh->next) { - if (gh->id == group) - return gh; - } - return NULL; -} - -static int __nfulnl_rcv_cmd(struct nlmsghdr *nlh, struct nfattr *nfa[], - void *data) -{ - struct nfulnl_handle *h = data; - - /* FIXME: implement this */ - return 0; -} - -/* build a NFULNL_MSG_CONFIG message */ -static int -__build_send_cfg_msg(struct nfulnl_handle *h, u_int8_t command, - u_int16_t queuenum, u_int8_t pf) -{ - char buf[NFNL_HEADER_LEN - +NFA_LENGTH(sizeof(struct nfulnl_msg_config_cmd))]; - struct nfulnl_msg_config_cmd cmd; - struct nlmsghdr *nmh = (struct nlmsghdr *) buf; - - nfnl_fill_hdr(&h->nfnlh, nmh, 0, pf, queuenum, - NFULNL_MSG_CONFIG, NLM_F_REQUEST|NLM_F_ACK); - - cmd.command = command; - nfnl_addattr_l(nmh, sizeof(buf), NFULA_CFG_CMD, &cmd, sizeof(cmd)); - - return nfnl_talk(&h->nfnlh, nmh, 0, 0, NULL, NULL, NULL); -} - -static int __nfulnl_rcv_pkt(struct nlmsghdr *nlh, struct nfattr *nfa[], - void *data) -{ - struct nfgenmsg *nfmsg = NLMSG_DATA(nlh); - struct nfulnl_handle *h = data; - u_int16_t group = ntohs(nfmsg->res_id); - struct nfulnl_g_handle *gh = find_gh(h, group); - - if (!gh) - return -ENODEV; - - if (!gh->cb) - return -ENODEV; - - return gh->cb(gh, nfmsg, nfa, gh->data); -} - -static struct nfnl_callback cmd_cb = { - .call = &__nfulnl_rcv_cmd, - .attr_count = NFULA_CFG_MAX, -}; - -static struct nfnl_callback pkt_cb = { - .call = &__nfulnl_rcv_pkt, - .attr_count = NFULA_MAX, -}; - -/* public interface */ - -struct nfnl_handle *nfulnl_nfnlh(struct nfulnl_handle *h) -{ - return &h->nfnlh; -} - -int nfulnl_fd(struct nfulnl_handle *h) -{ - return nfnl_fd(nfulnl_nfnlh(h)); -} - -struct nfulnl_handle *nfulnl_open(void) -{ - struct nfulnl_handle *h; - int err; - - h = malloc(sizeof(*h)); - if (!h) - return NULL; - - memset(h, 0, sizeof(*h)); - - err = nfnl_open(&h->nfnlh, NFNL_SUBSYS_ULOG, NFULNL_MSG_MAX, 0); - if (err < 0) { - nfulnl_errno = err; - goto out_free; - } - - cmd_cb.data = h; - err = nfnl_callback_register(&h->nfnlh, NFULNL_MSG_CONFIG, &cmd_cb); - if (err < 0) { - nfulnl_errno = err; - goto out_close; - } - pkt_cb.data = h; - err = nfnl_callback_register(&h->nfnlh, NFULNL_MSG_PACKET, &pkt_cb); - if (err < 0) { - nfulnl_errno = err; - goto out_close; - } - - return h; -out_close: - nfnl_close(&h->nfnlh); -out_free: - free(h); - return NULL; -} - -int nfulnl_callback_register(struct nfulnl_g_handle *gh, nfulnl_callback *cb, - void *data) -{ - gh->data = data; - gh->cb = cb; - - return 0; -} - -int nfulnl_handle_packet(struct nfulnl_handle *h, char *buf, int len) -{ - return nfnl_handle_packet(&h->nfnlh, buf, len); -} - -int nfulnl_close(struct nfulnl_handle *h) -{ - return nfnl_close(&h->nfnlh); -} - -/* bind nf_queue from a specific protocol family */ -int nfulnl_bind_pf(struct nfulnl_handle *h, u_int16_t pf) -{ - return __build_send_cfg_msg(h, NFULNL_CFG_CMD_PF_BIND, 0, pf); -} - -/* unbind nf_queue from a specific protocol family */ -int nfulnl_unbind_pf(struct nfulnl_handle *h, u_int16_t pf) -{ - return __build_send_cfg_msg(h, NFULNL_CFG_CMD_PF_UNBIND, 0, pf); -} - -/* bind this socket to a specific queue number */ -struct nfulnl_g_handle * -nfulnl_bind_group(struct nfulnl_handle *h, u_int16_t num) -{ - struct nfulnl_g_handle *gh; - - if (find_gh(h, num)) - return NULL; - - gh = malloc(sizeof(*gh)); - if (!gh) - return NULL; - - memset(gh, 0, sizeof(*gh)); - gh->h = h; - gh->id = num; - - if (__build_send_cfg_msg(h, NFULNL_CFG_CMD_BIND, num, 0) < 0) { - free(gh); - return NULL; - } - - add_gh(gh); - return gh; -} - -/* unbind this socket from a specific queue number */ -int nfulnl_unbind_group(struct nfulnl_g_handle *gh) -{ - int ret = __build_send_cfg_msg(gh->h, NFULNL_CFG_CMD_UNBIND, gh->id, 0); - if (ret == 0) { - del_gh(gh); - free(gh); - } - - return ret; -} - -int nfulnl_set_mode(struct nfulnl_g_handle *gh, - u_int8_t mode, u_int32_t range) -{ - char buf[NFNL_HEADER_LEN - +NFA_LENGTH(sizeof(struct nfulnl_msg_config_mode))]; - struct nfulnl_msg_config_mode params; - struct nlmsghdr *nmh = (struct nlmsghdr *) buf; - - nfnl_fill_hdr(&gh->h->nfnlh, nmh, 0, AF_UNSPEC, gh->id, - NFULNL_MSG_CONFIG, NLM_F_REQUEST|NLM_F_ACK); - - params.copy_range = htonl(range); /* copy_range is short */ - params.copy_mode = mode; - nfnl_addattr_l(nmh, sizeof(buf), NFULA_CFG_MODE, ¶ms, - sizeof(params)); - - return nfnl_talk(&gh->h->nfnlh, nmh, 0, 0, NULL, NULL, NULL); -} - -int nfulnl_set_timeout(struct nfulnl_g_handle *gh, u_int32_t timeout) -{ - char buf[NFNL_HEADER_LEN+NFA_LENGTH(sizeof(u_int32_t))]; - struct nlmsghdr *nmh = (struct nlmsghdr *) buf; - - nfnl_fill_hdr(&gh->h->nfnlh, nmh, 0, AF_UNSPEC, gh->id, - NFULNL_MSG_CONFIG, NLM_F_REQUEST|NLM_F_ACK); - - nfnl_addattr32(nmh, sizeof(buf), NFULA_CFG_TIMEOUT, htonl(timeout)); - - return nfnl_talk(&gh->h->nfnlh, nmh, 0, 0, NULL, NULL, NULL); -} - -int nfulnl_set_qthresh(struct nfulnl_g_handle *gh, u_int32_t qthresh) -{ - char buf[NFNL_HEADER_LEN+NFA_LENGTH(sizeof(u_int32_t))]; - struct nlmsghdr *nmh = (struct nlmsghdr *) buf; - - nfnl_fill_hdr(&gh->h->nfnlh, nmh, 0, AF_UNSPEC, gh->id, - NFULNL_MSG_CONFIG, NLM_F_REQUEST|NLM_F_ACK); - - nfnl_addattr32(nmh, sizeof(buf), NFULA_CFG_QTHRESH, htonl(qthresh)); - - return nfnl_talk(&gh->h->nfnlh, nmh, 0, 0, NULL, NULL, NULL); -} - -int nfulnl_set_nlbufsiz(struct nfulnl_g_handle *gh, u_int32_t nlbufsiz) -{ - char buf[NFNL_HEADER_LEN+NFA_LENGTH(sizeof(u_int32_t))]; - struct nlmsghdr *nmh = (struct nlmsghdr *) buf; - int status; - - nfnl_fill_hdr(&gh->h->nfnlh, nmh, 0, AF_UNSPEC, gh->id, - NFULNL_MSG_CONFIG, NLM_F_REQUEST|NLM_F_ACK); - - nfnl_addattr32(nmh, sizeof(buf), NFULA_CFG_NLBUFSIZ, htonl(nlbufsiz)); - - status = nfnl_talk(&gh->h->nfnlh, nmh, 0, 0, NULL, NULL, NULL); - - /* we try to have space for at least 10 messages in the socket buffer */ - if (status >= 0) - nfnl_rcvbufsiz(&gh->h->nfnlh, 10*nlbufsiz); - - return status; -} |