Skip to contentSkip to conversation

Patch to latest iproute to get it to compile on FC5

PATCH Ben Greear 2 participants 5 messages Feb 13, 2008 – Feb 14, 2008

Subsystems (3)
lore
Share & tools
lore

Ben Greear

author
#0 lore raw

I notice that the latest snapshot and git repository for iproute will not compile on FC5 due to not finding __constant_hton* symbols and a lack of the hdlc/ioctl.h file on FC5.

I am attaching a patch that appears to fix the problems for me.

Please consider applying this or something similar.

Thanks,
Ben

Signature · 2 lines
Ben Greear <[email protected]>
Candela Technologies Inc  http://www.candelatech.com
configure +19 -0
index dc14e54..f28e4cf 100755
@@ -25,3 +25,22 @@ else
     echo no
 fi
 rm -f /tmp/atmtest.c /tmp/atmtest
+
+echo -n "HDLC IOCTL:   "
+cat >/tmp/hdlctest.c <<EOF
+#include <net/if.h>
+#include <linux/hdlc/ioctl.h>
+int main(int argc, char **argv) {
+        return 0;
+}
+EOF
+gcc -I$INCLUDE -o /tmp/hdlctest /tmp/hdlctest.c >/dev/null 2>&1
+if [ $? -eq 0 ]
+then
+    echo "IPROUTE_CONFIG_HDLC:=y" >>Config
+    echo yes
+else
+    echo no
+fi
+rm -f /tmp/hdlctest.c /tmp/hdlctest
+
include/linux/if.h +5 -0
index 40eb61f..9651cc9 100644
@@ -23,7 +23,10 @@
 #include <linux/socket.h>		/* for "struct sockaddr" et al	*/
 
 #define	IFNAMSIZ	16
+
+#ifdef HAVE_HDLC_IOCTL
 #include <linux/hdlc/ioctl.h>
+#endif
 
 /* Standard interface flags (netdevice->flags). */
 #define	IFF_UP		0x1		/* interface is up		*/
@@ -133,6 +136,7 @@ struct if_settings
 {
 	unsigned int type;	/* Type of physical device or protocol */
 	unsigned int size;	/* Size of the data allocated by the caller */
+#ifdef HAVE_HDLC_IOCTL
 	union {
 		/* {atm/eth/dsl}_settings anyone ? */
 		raw_hdlc_proto	 *raw_hdlc;
@@ -145,6 +149,7 @@ struct if_settings
 		sync_serial_settings *sync;
 		te1_settings	 *te1;
 	} ifs_ifsu;
+#endif
 };
 
 /*
include/linux/if_tunnel.h +1 -0
index 228eb4e..0eb5b04 100644
@@ -2,6 +2,7 @@
 #define _IF_TUNNEL_H_
 
 #include <linux/types.h>
+#include <asm/byteorder.h>
 
 #define SIOCGETTUNNEL   (SIOCDEVPRIVATE + 0)
 #define SIOCADDTUNNEL   (SIOCDEVPRIVATE + 1)
lib/Makefile +6 -0
index bc270bf..1c51a42 100644
@@ -1,3 +1,9 @@
+include ../Config
+
+ifeq ($(IPROUTE_CONFIG_HDLC),y)
+   CFLAGS += -DHAVE_HDLC_IOCTL
+endif
+
 
 UTILOBJ=utils.o rt_names.o ll_types.o ll_proto.o ll_addr.o inet_proto.o
 
#1 lore raw
Quoted 6 lines · On Wed, 13 Feb 2008 11:32:32 -0800 Ben Greear <[email protected]> wrote:

I notice that the latest snapshot and git repository for iproute will not compile on FC5 due to not finding __constant_hton* symbols and a lack of the hdlc/ioctl.h file on FC5.

I am attaching a patch that appears to fix the problems for me.

Quoted 8 lines

Please consider applying this or something similar.

Thanks,
Ben

No. please don't change the configure script.
And the linux/if.h comes from kernel stripped headers so it should not get crufted up by ifdef's.

Short term fix is to include stripped hdlc header if needed. Long fix is to get rid of hdlc dependency if possible.

Signature · 1 line
Stephen Hemminger <[email protected]>
#2 lore raw
In reply to Ben Greear
Quoted 6 lines · On Wed, 13 Feb 2008 11:32:32 -0800 Ben Greear <[email protected]> wrote:

I notice that the latest snapshot and git repository for iproute will not compile on FC5 due to not finding __constant_hton* symbols and a lack of the hdlc/ioctl.h file on FC5.

I am attaching a patch that appears to fix the problems for me.

Quoted 8 lines

Please consider applying this or something similar.

Thanks,
Ben

I added include/linux/hdlc/ioctl.h to the santized headers in the current git.

Signature · 1 line
Stephen Hemminger <[email protected]>
author
#3 lore raw
Quoted 14 lines · Stephen Hemminger
Quoted 11 lines · On Wed, 13 Feb 2008 11:32:32 -0800 Ben Greear <[email protected]> wrote:

I notice that the latest snapshot and git repository for iproute will not compile on FC5 due to not finding __constant_hton* symbols and a lack of the hdlc/ioctl.h file on FC5.

I am attaching a patch that appears to fix the problems for me.

Please consider applying this or something similar.

Quoted 7 lines
Quoted 3 lines

Thanks,
Ben

I added include/linux/hdlc/ioctl.h to the santized headers in the current git.

That seems to fix the hdlc issue, but it still will not link due to missing symbols:

gcc -Wl,-export-dynamic ip.o ipaddress.o ipaddrlabel.o iproute.o iprule.o rtm_map.o iptunnel.o ip6tunnel.o tunnel.o ipneigh.o ipntable.o iplink.o ipmaddr.o ipmonitor.o ipmroute.o ipprefix.o ipxfrm.o xfrm_state.o xfrm_policy.o xfrm_monitor.o iplink_vlan.o link_veth.o ../lib/libnetlink.a ../lib/libutil.a -lresolv -L../lib -lnetlink -lutil -ldl -o ip iptunnel.o: In function `parse_args':
iptunnel.c:(.text+0x2c6): undefined reference to `__constant_htons'
iptunnel.c:(.text+0x404): undefined reference to `__constant_htons'
iptunnel.c:(.text+0x48d): undefined reference to `__constant_htons'
iptunnel.c:(.text+0x4a6): undefined reference to `__constant_htons'
iptunnel.c:(.text+0x4e2): undefined reference to `__constant_htons'
iptunnel.o:iptunnel.c:(.text+0x4fb): more undefined references to `__constant_htons' follow
collect2: ld returned 1 exit status
make[1]: *** [ip] Error 1
make[1]: Leaving directory `/root/iproute2/ip'
make: *** [all] Error 2

The attached patch fixes this.

Thanks,
Ben

Signature · 2 lines
Ben Greear <[email protected]>
Candela Technologies Inc  http://www.candelatech.com
include/linux/if_tunnel.h +1 -0
index 228eb4e..0eb5b04 100644
@@ -2,6 +2,7 @@
 #define _IF_TUNNEL_H_
 
 #include <linux/types.h>
+#include <asm/byteorder.h>
 
 #define SIOCGETTUNNEL   (SIOCDEVPRIVATE + 0)
 #define SIOCADDTUNNEL   (SIOCDEVPRIVATE + 1)
author
#4 lore raw
In reply to Stephen Hemminger

Here's another try at the patch to make the __constant_htonl methods be included, but without changing any of the .h files. I tested this on an FC2 system, and it compiles fine.

Interesting to me, it seems you are not supposed to #include <asm/byteorder.h> directly, but when I tried the suggested <endian.h>, it didn't actually fix the problem.

Signature · 1 line
Ben Greear <[email protected]> Candela Technologies Inc  http://www.candelatech.com
ip/iptunnel.c +1 -0
index 3b466bf..2b2b78e 100644
@@ -34,6 +34,7 @@
 #include "ip_common.h"
 #include "tunnel.h"
 
+#include <asm/byteorder.h>
 static void usage(void) __attribute__((noreturn));
 
 static void usage(void)