Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

build error: redefinition of 'struct ethhdr' #78

Open
WhyNotHugo opened this issue Mar 15, 2023 · 4 comments
Open

build error: redefinition of 'struct ethhdr' #78

WhyNotHugo opened this issue Mar 15, 2023 · 4 comments

Comments

@WhyNotHugo
Copy link

I'm building on Alpine Linux. I installed the following dependencies (based on the hints in the README):

libpcap-dev libev-dev libnl3-dev

The make step of the build process fails with:

> make 
[  2%] Building C object CMakeFiles/radiotap.dir/radiotap/radiotap.c.o
/home/hugo/clones/github.com/seemoo-lab/owl/radiotap/radiotap.c: In function 'ieee80211_radiotap_iterator_init':
/home/hugo/clones/github.com/seemoo-lab/owl/radiotap/radiotap.c:113:34: warning: taking address of packed member of 'struct ieee80211_radiotap_header' may result in an unaligned pointer value [-Waddress-of-packed-member]
  113 |         iterator->_next_bitmap = &radiotap_header->it_present;
      |                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
[  5%] Linking C static library libradiotap.a
[  5%] Built target radiotap
[  8%] Building C object src/CMakeFiles/awdl.dir/log.c.o
[ 10%] Building C object src/CMakeFiles/awdl.dir/state.c.o
[ 13%] Building C object src/CMakeFiles/awdl.dir/election.c.o
[ 16%] Building C object src/CMakeFiles/awdl.dir/sync.c.o
[ 18%] Building C object src/CMakeFiles/awdl.dir/channel.c.o
[ 21%] Building C object src/CMakeFiles/awdl.dir/schedule.c.o
[ 24%] Building C object src/CMakeFiles/awdl.dir/tx.c.o
[ 27%] Building C object src/CMakeFiles/awdl.dir/rx.c.o
[ 29%] Building C object src/CMakeFiles/awdl.dir/frame.c.o
[ 32%] Building C object src/CMakeFiles/awdl.dir/crc32.c.o
[ 35%] Building C object src/CMakeFiles/awdl.dir/wire.c.o
[ 37%] Building C object src/CMakeFiles/awdl.dir/peers.c.o
[ 40%] Building C object src/CMakeFiles/awdl.dir/version.c.o
[ 43%] Building C object src/CMakeFiles/awdl.dir/hashmap.c.o
[ 45%] Building C object src/CMakeFiles/awdl.dir/siphash24.c.o
[ 48%] Building C object src/CMakeFiles/awdl.dir/circular_buffer.c.o
[ 51%] Linking C static library libawdl.a
[ 51%] Built target awdl
[ 54%] Building C object daemon/CMakeFiles/owl.dir/io.c.o
In file included from /usr/include/netinet/ether.h:8,
                 from /home/hugo/clones/github.com/seemoo-lab/owl/daemon/io.h:31,
                 from /home/hugo/clones/github.com/seemoo-lab/owl/daemon/io.c:35:
/usr/include/netinet/if_ether.h:115:8: error: redefinition of 'struct ethhdr'
  115 | struct ethhdr {
      |        ^~~~~~
In file included from /usr/include/linux/if_tun.h:21,
                 from /home/hugo/clones/github.com/seemoo-lab/owl/daemon/io.c:28:
/usr/include/linux/if_ether.h:173:8: note: originally defined here
  173 | struct ethhdr {
      |        ^~~~~~
make[2]: *** [daemon/CMakeFiles/owl.dir/build.make:76: daemon/CMakeFiles/owl.dir/io.c.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:243: daemon/CMakeFiles/owl.dir/all] Error 2
make: *** [Makefile:136: all] Error 2
@WhyNotHugo
Copy link
Author

So I understand the issue: both files being included define struct ethhdr. However, both of them defined other types which are used, so removing either of them is not an option.

@WhyNotHugo
Copy link
Author

I tired hacking around this with this horrible patch:

diff --git a/daemon/io.c b/daemon/io.c
index 42688f5..b41e8fb 100644
--- a/daemon/io.c
+++ b/daemon/io.c
@@ -25,7 +25,10 @@
 #include <net/if.h>
 #include <sys/ioctl.h>
 #ifndef __APPLE__
-#include <linux/if_tun.h>
+/* #include <linux/if_tun.h> */
+#define IFF_NO_PI	0x1000
+#define IFF_TAP		0x0002
+#define TUNSETIFF     _IOW('T', 202, int)
 #else
 #include <sys/sys_domain.h>
 #include <sys/kern_control.h>

But build now fails with another unrelated error:

> make
[  5%] Built target radiotap
[ 51%] Built target awdl
[ 64%] Built target owl
[ 67%] Building CXX object googletest/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o
In file included from /home/hugo/clones/github.com/seemoo-lab/owl/googletest/googletest/src/gtest-all.cc:42:
/home/hugo/clones/github.com/seemoo-lab/owl/googletest/googletest/src/gtest-death-test.cc: In function 'bool testing::internal::StackGrowsDown()':
/home/hugo/clones/github.com/seemoo-lab/owl/googletest/googletest/src/gtest-death-test.cc:1301:24: error: 'dummy' may be used uninitialized [-Werror=maybe-uninitialized]
 1301 |   StackLowerThanAddress(&dummy, &result);
      |   ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
/home/hugo/clones/github.com/seemoo-lab/owl/googletest/googletest/src/gtest-death-test.cc:1290:13: note: by argument 1 of type 'const void*' to 'void testing::internal::StackLowerThanAddress(const void*, bool*)' declared here
 1290 | static void StackLowerThanAddress(const void* ptr, bool* result) {
      |             ^~~~~~~~~~~~~~~~~~~~~
/home/hugo/clones/github.com/seemoo-lab/owl/googletest/googletest/src/gtest-death-test.cc:1299:7: note: 'dummy' declared here
 1299 |   int dummy;
      |       ^~~~~
cc1plus: all warnings being treated as errors
make[2]: *** [googletest/googletest/CMakeFiles/gtest.dir/build.make:76: googletest/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:322: googletest/googletest/CMakeFiles/gtest.dir/all] Error 2
make: *** [Makefile:136: all] Error 2

@rela81
Copy link

rela81 commented May 17, 2023

Thanks to your "horrible" patch I was able to compile owl on Alpine successfully. I didn't get any further errors. You could also try to update googletest as described in issue #50

@WhyNotHugo
Copy link
Author

Thanks for the pointer to #50. I've submitted #80 which fixes that other issue.

I'm still unsure what to do about this patch of mine, it doesn't seem clean enough to include on the project, but I also can't think of any cleaner approach.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants