* Including iptables.c in my C++ Project
@ 2005-03-03 16:03 Borja Pacheco
2005-03-03 16:27 ` Martijn Lievaart
0 siblings, 1 reply; 2+ messages in thread
From: Borja Pacheco @ 2005-03-03 16:03 UTC (permalink / raw)
To: Netfilter-Devel
Dear all,
I'm developing a program in C++ which needs to insert rules into the
kernel.
I thought to invoke iptables binary directly, but I think that if I used
it intensively it could be an issue with the performance, so I finally
decided to include the source code of iptables into my own program and
make internal calls to insert_entry (you can found its code into
iptables.c) instead.
To do this,
I included into my files the following include:
#include "iptables.c"
I modified my g++'s flags:
a) -I -> I add full path to KERNEL_DIR, iptables root dir and iptables
include dir.
b) -L -> I add full path to iptables root dir
c) LDFLAGS -> I added -rdynamic (I'm using shareable libs)
However, after inserting the #include, my programs becomes
uncompilable.
g++ claims an error related with conversion pointer in the kernel's
source code.
Suggestion are welcome!!!
Thanks in advance to everybody.
Here you are the messages....
if g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/usr/src/linux/include
-I/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/include
-I/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11
-I/usr/include/cc++2/ -Wall -g -MT FirewallRule.o -MD -MP -MF
".deps/FirewallRule.Tpo" -c -o FirewallRule.o FirewallRule.cc; \
then mv -f ".deps/FirewallRule.Tpo" ".deps/FirewallRule.Po"; else rm -f
".deps/FirewallRule.Tpo"; exit 1; fi
In file included
from /home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/include/libiptc/libiptc.h:6,
from /home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/include/iptables.h:5,
from /home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:39,
from FirewallRule.h:15,
from FirewallRule.cc:7:
/usr/src/linux/include/linux/netfilter_ipv4/ip_tables.h: In function `
ipt_entry_target* ipt_get_target(ipt_entry*)':
/usr/src/linux/include/linux/netfilter_ipv4/ip_tables.h:297: error:
pointer of
type `void *' used in arithmetic
/usr/src/linux/include/linux/netfilter_ipv4/ip_tables.h:297: error:
invalid
conversion from `void*' to `ipt_entry_target*'
In file included from FirewallRule.h:15,
from FirewallRule.cc:7:
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:
In
function `ipt_entry_target* ipt_get_target(ipt_entry*)':
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:153: error: redefinition
of `ipt_entry_target* ipt_get_target(ipt_entry*)'
/usr/src/linux/include/linux/netfilter_ipv4/ip_tables.h:296: error: `
ipt_entry_target* ipt_get_target(ipt_entry*)' previously defined here
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:153: error: redefinition
of `ipt_entry_target* ipt_get_target(ipt_entry*)'
/usr/src/linux/include/linux/netfilter_ipv4/ip_tables.h:296: error: `
ipt_entry_target* ipt_get_target(ipt_entry*)' previously defined here
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:154: error: pointer
of type `void *' used in arithmetic
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:154: error: invalid
conversion from `void*' to `ipt_entry_target*'
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:
In
function `in_addr* host_to_addr(const char*, unsigned int*)':
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:554: error: invalid
conversion from `void*' to `in_addr*'
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:
In
function `in_addr* parse_hostnetwork(const char*, unsigned int*)':
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:592: error: invalid
conversion from `void*' to `in_addr*'
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:
In
function `iptables_match* find_match(const char*, ipt_tryload,
iptables_rule_match**)':
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:712: error: invalid
conversion from `void*' to `iptables_rule_match*'
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:
In
function `void set_option(unsigned int*, unsigned int, u_int8_t*,
int)':
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:958: warning: comparison
between signed and unsigned integer expressions
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:
In
function `option* merge_options(option*, const option*, unsigned
int*)':
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1036: error: invalid
conversion from `void*' to `option*'
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:
In
function `void print_firewall(const ipt_entry*, const char*, unsigned
int,
unsigned int, iptc_handle*)':
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1221: error: call
of overloaded `ipt_get_target(ipt_entry*&)' is ambiguous
/usr/src/linux/include/linux/netfilter_ipv4/ip_tables.h:296: error:
candidates
are: ipt_entry_target* ipt_get_target(ipt_entry*)
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:153: error:
ipt_entry_target* ipt_get_target(ipt_entry*)
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1309: error: pointer
of type `void *' used in arithmetic
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1309: error: invalid
conversion from `void*' to `ipt_entry_match*'
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:
In
function `void print_firewall_line(const ipt_entry*, iptc_handle*)':
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1329: error: call
of overloaded `ipt_get_target(ipt_entry*&)' is ambiguous
/usr/src/linux/include/linux/netfilter_ipv4/ip_tables.h:296: error:
candidates
are: ipt_entry_target* ipt_get_target(ipt_entry*)
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:153: error:
ipt_entry_target* ipt_get_target(ipt_entry*)
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:
In
function `unsigned char* make_delete_mask(ipt_entry*,
iptables_rule_match*)
':
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1417: error: invalid
conversion from `void*' to `unsigned char*'
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:
In
function `int for_each_chain(int (*)(const char*, int,
iptc_handle**), int,
int, iptc_handle**)':
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1481: error: invalid
conversion from `void*' to `char*'
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:
In
function `int list_entries(const char*, int, int, int, int,
iptc_handle**)':
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1544: error: syntax
error before `this'
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1561: error: invalid
use of `this' in non-member function
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1562: error: invalid
use of `this' in non-member function
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1563: error: invalid
use of `this' in non-member function
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1567: error: invalid
use of `this' in non-member function
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1572: error: invalid
use of `this' in non-member function
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1573: error: invalid
use of `this' in non-member function
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:
In
function `char* get_modprobe()':
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1600: error: invalid
conversion from `void*' to `char*'
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:
In
function `ipt_entry* generate_entry(const ipt_entry*,
iptables_rule_match*,
ipt_entry_target*)':
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1663: error: invalid
conversion from `void*' to `ipt_entry*'
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:
In
function `int do_command(int, char**, char**, iptc_handle**)':
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1746: error: invalid
conversion from `unsigned int*' to `int*'
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1752: error: invalid
conversion from `unsigned int*' to `int*'
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1763: error: invalid
conversion from `unsigned int*' to `int*'
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1776: error: invalid
conversion from `unsigned int*' to `int*'
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1786: error: invalid
conversion from `unsigned int*' to `int*'
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1795: error: invalid
conversion from `unsigned int*' to `int*'
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1804: error: invalid
conversion from `unsigned int*' to `int*'
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1821: error: invalid
conversion from `unsigned int*' to `int*'
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1827: error: invalid
conversion from `unsigned int*' to `int*'
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1836: error: invalid
conversion from `unsigned int*' to `int*'
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1850: error: invalid
conversion from `unsigned int*' to `int*'
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1922: error: invalid
conversion from `void*' to `ipt_entry_target*'
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:1975: error: invalid
conversion from `void*' to `ipt_entry_match*'
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:2116: error: invalid
conversion from `void*' to `ipt_entry_match*'
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:2245: error: invalid
conversion from `void*' to `ipt_entry_target*'
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:2342: warning: comparison
between signed and unsigned integer expressions
/home/bpacheco-gen/Projects/sources/iptables/iptables-1.2.11/iptables.c:2345: warning: comparison
between signed and unsigned integer expressions
make[2]: *** [FirewallRule.o] Error 1
make[2]: Leaving directory `/home/bpacheco-gen/Projects/tpfd/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/bpacheco-gen/Projects/tpfd'
make: *** [all] Error 2
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: Including iptables.c in my C++ Project
2005-03-03 16:03 Including iptables.c in my C++ Project Borja Pacheco
@ 2005-03-03 16:27 ` Martijn Lievaart
0 siblings, 0 replies; 2+ messages in thread
From: Martijn Lievaart @ 2005-03-03 16:27 UTC (permalink / raw)
To: Borja Pacheco; +Cc: Netfilter-Devel
Borja Pacheco said:
> Dear all,
>
> I'm developing a program in C++ which needs to insert rules into the
> kernel.
> I thought to invoke iptables binary directly, but I think that if I used
> it intensively it could be an issue with the performance, so I finally
> decided to include the source code of iptables into my own program and
> make internal calls to insert_entry (you can found its code into
> iptables.c) instead.
Better to use iptables-restore probably instead.
>
> To do this,
> I included into my files the following include:
> #include "iptables.c"
Aaargh. C and C++ are different languages. Also from an enginering point
of view this is a hack at best.
> /usr/src/linux/include/linux/netfilter_ipv4/ip_tables.h:297: error:
> pointer of
> type `void *' used in arithmetic
This is different in C and C++.
> /usr/src/linux/include/linux/netfilter_ipv4/ip_tables.h:297: error:
> invalid
> conversion from `void*' to `ipt_entry_target*'
As is this.
[ Lots of errors omitted ]
Read up on mixing C and C++ code. It's fairly trivial but this is not the
way to do it.
HTH,
M4
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2005-03-03 16:27 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-03-03 16:03 Including iptables.c in my C++ Project Borja Pacheco
2005-03-03 16:27 ` Martijn Lievaart
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.