ipv6-toolkit: fix for -fno-common

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

ipv6-toolkit: fix for -fno-common

Jeremie Courreges-Anglas-2

As reported by naddy@ this fails to build after clang switched
to -fno-common.

--8<--
===>  Building for ipv6toolkit-2.0p0
cc  -O2 -pipe -Wall -c -o libipv6.o tools/libipv6.c
cc  -O2 -pipe -Wall -o addr6 tools/addr6.c libipv6.o  -lpcap -lm
cp tools/blackhole6 ./
cc  -O2 -pipe -Wall -o flow6 tools/flow6.c libipv6.o  -lpcap -lm
ld: error: duplicate symbol: errbuf
>>> defined at flow6.c
>>>            /tmp/flow6-b85880.o:(errbuf)
>>> defined at libipv6.c
>>>            libipv6.o:(.bss+0x80)

ld: error: duplicate symbol: pcap_filter
>>> defined at flow6.c
>>>            /tmp/flow6-b85880.o:(pcap_filter)
>>> defined at libipv6.c
>>>            libipv6.o:(.bss+0x0)
cc: error: linker command failed with exit code 1 (use -v to see invocation)
*** Error 1 in /usr/ports/pobj/ipv6toolkit-2.0/ipv6toolkit-v2.0 (Makefile:58 'flow6')
*** Error 2 in . (/usr/ports/infrastructure/mk/bsd.port.mk:2935 '/usr/ports/pobj/ipv6toolkit-2.0/.build_done': @cd /usr/ports/pobj/ipv6toolk...)
*** Error 2 in /usr/ports/net/ipv6-toolkit (/usr/ports/infrastructure/mk/bsd.port.mk:2594 'all': @lock=ipv6toolkit-2.0p0;  export _LOCKS_HEL...)
-->8--

This has already been fixed in an upstream commit.

I've never used those tools on OpenBSD before, do they actually work?
scan6 -i iwm0 -L doesn't print anything here for example.

ok?


Index: Makefile
===================================================================
RCS file: /d/cvs/ports/net/ipv6-toolkit/Makefile,v
retrieving revision 1.5
diff -u -p -r1.5 Makefile
--- Makefile 12 Jul 2019 20:48:29 -0000 1.5
+++ Makefile 21 Feb 2021 23:42:50 -0000
@@ -5,7 +5,7 @@ COMMENT = SI6 networks IPv6 toolkit
 VERSION = 2.0
 DISTNAME = ipv6toolkit-v${VERSION}
 PKGNAME = ipv6toolkit-${VERSION}
-REVISION = 0
+REVISION = 1
 
 CATEGORIES = net
 
Index: patches/patch-tools_libipv6_c
===================================================================
RCS file: /d/cvs/ports/net/ipv6-toolkit/patches/patch-tools_libipv6_c,v
retrieving revision 1.1
diff -u -p -r1.1 patch-tools_libipv6_c
--- patches/patch-tools_libipv6_c 4 Apr 2019 19:18:18 -0000 1.1
+++ patches/patch-tools_libipv6_c 21 Feb 2021 23:40:56 -0000
@@ -1,11 +1,38 @@
 $OpenBSD: patch-tools_libipv6_c,v 1.1 2019/04/04 19:18:18 bluhm Exp $
 
-https://github.com/fgont/ipv6toolkit/pull/52
+RTA_IFP removal: https://github.com/fgont/ipv6toolkit/pull/52
+
+Other chunks: fix with -fno-common
+https://github.com/fgont/ipv6toolkit/commit/2bde90f3845234490549640dc6ed5712d84969ba
 
 Index: tools/libipv6.c
 --- tools/libipv6.c.orig
 +++ tools/libipv6.c
-@@ -2815,7 +2815,7 @@ int sel_next_hop(struct iface_data *idata){
+@@ -66,13 +66,9 @@
+
+
+ /* IPv6 Address Resolution */
+-sigjmp_buf env;
+-unsigned int canjump;
++static sigjmp_buf env;
++static unsigned int canjump;
+
+-/* pcap variables */
+-char errbuf[PCAP_ERRBUF_SIZE];
+-struct bpf_program pcap_filter;
+-
+ #ifdef __linux__
+ /* Netlink requests */
+ struct nlrequest{
+@@ -517,6 +513,7 @@ int ether_pton(const char *ascii, struct ether_addr *e
+
+ int find_ipv6_router_full(pcap_t *pfd, struct iface_data *idata){
+ struct pcap_pkthdr *pkthdr;
++ struct bpf_program pcap_filter;
+ const u_char *pktdata;
+ struct ether_header *pkt_ether;
+ struct ip6_hdr *pkt_ipv6;
+@@ -2815,7 +2812,7 @@ int sel_next_hop(struct iface_data *idata){
  rtm->rtm_msglen= sizeof(struct rt_msghdr) + sizeof(struct sockaddr_in6);
  rtm->rtm_version= RTM_VERSION;
  rtm->rtm_type= RTM_GET;
@@ -14,3 +41,11 @@ Index: tools/libipv6.c
  rtm->rtm_pid= pid= getpid();
  rtm->rtm_seq= seq= random();
 
+@@ -4233,6 +4230,7 @@ int find_ipv6_router(pcap_t *pfd, struct ether_addr *h
+ struct ether_addr *result_ether, struct in6_addr *result_ipv6){
+
+ struct pcap_pkthdr *pkthdr;
++ struct bpf_program pcap_filter;
+ const u_char *pktdata;
+ struct ether_header *pkt_ether;
+ struct ip6_hdr *pkt_ipv6;
Index: patches/patch-tools_scan6_c
===================================================================
RCS file: patches/patch-tools_scan6_c
diff -N patches/patch-tools_scan6_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-tools_scan6_c 21 Feb 2021 23:41:28 -0000
@@ -0,0 +1,19 @@
+$OpenBSD$
+
+Fix with -fno-common
+https://github.com/fgont/ipv6toolkit/commit/2bde90f3845234490549640dc6ed5712d84969ba
+
+Index: tools/scan6.c
+--- tools/scan6.c.orig
++++ tools/scan6.c
+@@ -251,8 +251,8 @@ uint16_t service_ports_dec[]={21, 22, 23, 25, 49, 5
+
+
+ /* IPv6 Address Resolution */
+-sigjmp_buf env;
+-unsigned int canjump;
++static sigjmp_buf env;
++static unsigned int canjump;
+
+ int main(int argc, char **argv){
+ extern char *optarg;


--
jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF  DDCC 0DFA 74AE 1524 E7EE

Reply | Threaded
Open this post in threaded view
|

Re: ipv6-toolkit: fix for -fno-common

Alexander Bluhm
On Mon, Feb 22, 2021 at 01:07:05AM +0100, Jeremie Courreges-Anglas wrote:
> I've never used those tools on OpenBSD before, do they actually work?
> scan6 -i iwm0 -L doesn't print anything here for example.

scan6 -i em0 -L works for me.  These tools are not production
quality.  Fernando Gont asked me to integrate the port on OpenBSD
some years ago.  They may help him testing and debugging IPv6.

> ok?

OK bluhm@

> Index: Makefile
> ===================================================================
> RCS file: /d/cvs/ports/net/ipv6-toolkit/Makefile,v
> retrieving revision 1.5
> diff -u -p -r1.5 Makefile
> --- Makefile 12 Jul 2019 20:48:29 -0000 1.5
> +++ Makefile 21 Feb 2021 23:42:50 -0000
> @@ -5,7 +5,7 @@ COMMENT = SI6 networks IPv6 toolkit
>  VERSION = 2.0
>  DISTNAME = ipv6toolkit-v${VERSION}
>  PKGNAME = ipv6toolkit-${VERSION}
> -REVISION = 0
> +REVISION = 1
>  
>  CATEGORIES = net
>  
> Index: patches/patch-tools_libipv6_c
> ===================================================================
> RCS file: /d/cvs/ports/net/ipv6-toolkit/patches/patch-tools_libipv6_c,v
> retrieving revision 1.1
> diff -u -p -r1.1 patch-tools_libipv6_c
> --- patches/patch-tools_libipv6_c 4 Apr 2019 19:18:18 -0000 1.1
> +++ patches/patch-tools_libipv6_c 21 Feb 2021 23:40:56 -0000
> @@ -1,11 +1,38 @@
>  $OpenBSD: patch-tools_libipv6_c,v 1.1 2019/04/04 19:18:18 bluhm Exp $
>  
> -https://github.com/fgont/ipv6toolkit/pull/52
> +RTA_IFP removal: https://github.com/fgont/ipv6toolkit/pull/52
> +
> +Other chunks: fix with -fno-common
> +https://github.com/fgont/ipv6toolkit/commit/2bde90f3845234490549640dc6ed5712d84969ba
>  
>  Index: tools/libipv6.c
>  --- tools/libipv6.c.orig
>  +++ tools/libipv6.c
> -@@ -2815,7 +2815,7 @@ int sel_next_hop(struct iface_data *idata){
> +@@ -66,13 +66,9 @@
> +
> +
> + /* IPv6 Address Resolution */
> +-sigjmp_buf env;
> +-unsigned int canjump;
> ++static sigjmp_buf env;
> ++static unsigned int canjump;
> +
> +-/* pcap variables */
> +-char errbuf[PCAP_ERRBUF_SIZE];
> +-struct bpf_program pcap_filter;
> +-
> + #ifdef __linux__
> + /* Netlink requests */
> + struct nlrequest{
> +@@ -517,6 +513,7 @@ int ether_pton(const char *ascii, struct ether_addr *e
> +
> + int find_ipv6_router_full(pcap_t *pfd, struct iface_data *idata){
> + struct pcap_pkthdr *pkthdr;
> ++ struct bpf_program pcap_filter;
> + const u_char *pktdata;
> + struct ether_header *pkt_ether;
> + struct ip6_hdr *pkt_ipv6;
> +@@ -2815,7 +2812,7 @@ int sel_next_hop(struct iface_data *idata){
>   rtm->rtm_msglen= sizeof(struct rt_msghdr) + sizeof(struct sockaddr_in6);
>   rtm->rtm_version= RTM_VERSION;
>   rtm->rtm_type= RTM_GET;
> @@ -14,3 +41,11 @@ Index: tools/libipv6.c
>   rtm->rtm_pid= pid= getpid();
>   rtm->rtm_seq= seq= random();
>  
> +@@ -4233,6 +4230,7 @@ int find_ipv6_router(pcap_t *pfd, struct ether_addr *h
> + struct ether_addr *result_ether, struct in6_addr *result_ipv6){
> +
> + struct pcap_pkthdr *pkthdr;
> ++ struct bpf_program pcap_filter;
> + const u_char *pktdata;
> + struct ether_header *pkt_ether;
> + struct ip6_hdr *pkt_ipv6;
> Index: patches/patch-tools_scan6_c
> ===================================================================
> RCS file: patches/patch-tools_scan6_c
> diff -N patches/patch-tools_scan6_c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-tools_scan6_c 21 Feb 2021 23:41:28 -0000
> @@ -0,0 +1,19 @@
> +$OpenBSD$
> +
> +Fix with -fno-common
> +https://github.com/fgont/ipv6toolkit/commit/2bde90f3845234490549640dc6ed5712d84969ba
> +
> +Index: tools/scan6.c
> +--- tools/scan6.c.orig
> ++++ tools/scan6.c
> +@@ -251,8 +251,8 @@ uint16_t service_ports_dec[]={21, 22, 23, 25, 49, 5
> +
> +
> + /* IPv6 Address Resolution */
> +-sigjmp_buf env;
> +-unsigned int canjump;
> ++static sigjmp_buf env;
> ++static unsigned int canjump;
> +
> + int main(int argc, char **argv){
> + extern char *optarg;
>
>
> --
> jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF  DDCC 0DFA 74AE 1524 E7EE