xref: /aosp_15_r20/external/iptables/include/libipq/libipq.h (revision a71a954618bbadd4a345637e5edcf36eec826889)
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