summaryrefslogtreecommitdiffstats
path: root/_log/src
diff options
context:
space:
mode:
Diffstat (limited to '_log/src')
-rw-r--r--_log/src/Makefile.am15
-rw-r--r--_log/src/libipulog_compat.c226
-rw-r--r--_log/src/libnfnetlink_log.c323
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, &params,
- 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;
-}