1*a71a9546SAutomerger Merge Worker /* 2*a71a9546SAutomerger Merge Worker * libipq.h 3*a71a9546SAutomerger Merge Worker * 4*a71a9546SAutomerger Merge Worker * IPQ library for userspace. 5*a71a9546SAutomerger Merge Worker * 6*a71a9546SAutomerger Merge Worker * Author: James Morris <[email protected]> 7*a71a9546SAutomerger Merge Worker * 8*a71a9546SAutomerger Merge Worker * Copyright (c) 2000-2001 Netfilter Core Team 9*a71a9546SAutomerger Merge Worker * 10*a71a9546SAutomerger Merge Worker * This program is free software; you can redistribute it and/or modify 11*a71a9546SAutomerger Merge Worker * it under the terms of the GNU General Public License as published by 12*a71a9546SAutomerger Merge Worker * the Free Software Foundation; either version 2 of the License, or 13*a71a9546SAutomerger Merge Worker * (at your option) any later version. 14*a71a9546SAutomerger Merge Worker * 15*a71a9546SAutomerger Merge Worker * This program is distributed in the hope that it will be useful, 16*a71a9546SAutomerger Merge Worker * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*a71a9546SAutomerger Merge Worker * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*a71a9546SAutomerger Merge Worker * GNU General Public License for more details. 19*a71a9546SAutomerger Merge Worker * 20*a71a9546SAutomerger Merge Worker */ 21*a71a9546SAutomerger Merge Worker #ifndef _LIBIPQ_H 22*a71a9546SAutomerger Merge Worker #define _LIBIPQ_H 23*a71a9546SAutomerger Merge Worker 24*a71a9546SAutomerger Merge Worker #include <errno.h> 25*a71a9546SAutomerger Merge Worker #include <unistd.h> 26*a71a9546SAutomerger Merge Worker #include <fcntl.h> 27*a71a9546SAutomerger Merge Worker #include <stdint.h> 28*a71a9546SAutomerger Merge Worker #include <sys/socket.h> 29*a71a9546SAutomerger Merge Worker #include <sys/uio.h> 30*a71a9546SAutomerger Merge Worker #include <asm/types.h> 31*a71a9546SAutomerger Merge Worker #include <linux/netlink.h> 32*a71a9546SAutomerger Merge Worker 33*a71a9546SAutomerger Merge Worker #include <linux/netfilter_ipv4/ip_queue.h> 34*a71a9546SAutomerger Merge Worker typedef unsigned long ipq_id_t; 35*a71a9546SAutomerger Merge Worker 36*a71a9546SAutomerger Merge Worker #ifdef DEBUG_LIBIPQ 37*a71a9546SAutomerger Merge Worker #include <stdio.h> 38*a71a9546SAutomerger Merge Worker #define LDEBUG(x...) fprintf(stderr, ## x) 39*a71a9546SAutomerger Merge Worker #else 40*a71a9546SAutomerger Merge Worker #define LDEBUG(x...) 41*a71a9546SAutomerger Merge Worker #endif /* DEBUG_LIBIPQ */ 42*a71a9546SAutomerger Merge Worker 43*a71a9546SAutomerger Merge Worker /* FIXME: glibc sucks */ 44*a71a9546SAutomerger Merge Worker #ifndef MSG_TRUNC 45*a71a9546SAutomerger Merge Worker #define MSG_TRUNC 0x20 46*a71a9546SAutomerger Merge Worker #endif 47*a71a9546SAutomerger Merge Worker 48*a71a9546SAutomerger Merge Worker struct ipq_handle 49*a71a9546SAutomerger Merge Worker { 50*a71a9546SAutomerger Merge Worker int fd; 51*a71a9546SAutomerger Merge Worker uint8_t blocking; 52*a71a9546SAutomerger Merge Worker struct sockaddr_nl local; 53*a71a9546SAutomerger Merge Worker struct sockaddr_nl peer; 54*a71a9546SAutomerger Merge Worker }; 55*a71a9546SAutomerger Merge Worker 56*a71a9546SAutomerger Merge Worker struct ipq_handle *ipq_create_handle(uint32_t flags, uint32_t protocol); 57*a71a9546SAutomerger Merge Worker 58*a71a9546SAutomerger Merge Worker int ipq_destroy_handle(struct ipq_handle *h); 59*a71a9546SAutomerger Merge Worker 60*a71a9546SAutomerger Merge Worker ssize_t ipq_read(const struct ipq_handle *h, 61*a71a9546SAutomerger Merge Worker unsigned char *buf, size_t len, int timeout); 62*a71a9546SAutomerger Merge Worker 63*a71a9546SAutomerger Merge Worker int ipq_set_mode(const struct ipq_handle *h, uint8_t mode, size_t len); 64*a71a9546SAutomerger Merge Worker 65*a71a9546SAutomerger Merge Worker ipq_packet_msg_t *ipq_get_packet(const unsigned char *buf); 66*a71a9546SAutomerger Merge Worker 67*a71a9546SAutomerger Merge Worker int ipq_message_type(const unsigned char *buf); 68*a71a9546SAutomerger Merge Worker 69*a71a9546SAutomerger Merge Worker int ipq_get_msgerr(const unsigned char *buf); 70*a71a9546SAutomerger Merge Worker 71*a71a9546SAutomerger Merge Worker int ipq_set_verdict(const struct ipq_handle *h, 72*a71a9546SAutomerger Merge Worker ipq_id_t id, 73*a71a9546SAutomerger Merge Worker unsigned int verdict, 74*a71a9546SAutomerger Merge Worker size_t data_len, 75*a71a9546SAutomerger Merge Worker unsigned char *buf); 76*a71a9546SAutomerger Merge Worker 77*a71a9546SAutomerger Merge Worker int ipq_ctl(const struct ipq_handle *h, int request, ...); 78*a71a9546SAutomerger Merge Worker 79*a71a9546SAutomerger Merge Worker char *ipq_errstr(void); 80*a71a9546SAutomerger Merge Worker void ipq_perror(const char *s); 81*a71a9546SAutomerger Merge Worker 82*a71a9546SAutomerger Merge Worker #endif /* _LIBIPQ_H */ 83*a71a9546SAutomerger Merge Worker 84