X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=acinclude.m4;h=52d0209ab88aee33cf5e8d3762724c8dd6298bd9;hb=refs%2Fheads%2Frtnetlink;hp=f345c31bd112eb35cb2a860dec51e3c22b81602d;hpb=2b64e8fc1bd56f3631f26ea82e9233fce61d69c9;p=cascardo%2Fovs.git diff --git a/acinclude.m4 b/acinclude.m4 index f345c31bd..52d0209ab 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -161,29 +161,53 @@ dnl Configure DPDK source tree AC_DEFUN([OVS_CHECK_DPDK], [ AC_ARG_WITH([dpdk], [AC_HELP_STRING([--with-dpdk=/path/to/dpdk], - [Specify the DPDK build directory])]) + [Specify the DPDK build directory])], + [have_dpdk=true]) - if test X"$with_dpdk" != X; then - RTE_SDK=$with_dpdk + AC_MSG_CHECKING([whether dpdk datapath is enabled]) + if test "$have_dpdk" != true || test "$with_dpdk" = no; then + AC_MSG_RESULT([no]) + DPDKLIB_FOUND=false + else + AC_MSG_RESULT([yes]) + case "$with_dpdk" in + yes) + DPDK_AUTO_DISCOVER="true" + DPDK_INCLUDE="/usr/local/include/dpdk -I/usr/include/dpdk" + ;; + *) + DPDK_AUTO_DISCOVER="false" + DPDK_INCLUDE="$with_dpdk/include" + # If 'with_dpdk' is passed install directory, point to headers + # installed in $DESTDIR/$prefix/include/dpdk + AC_CHECK_FILE([$DPDK_INCLUDE/rte_config.h], [], + [AC_CHECK_FILE([$DPDK_INCLUDE/dpdk/rte_config.h], + [DPDK_INCLUDE=$DPDK_INCLUDE/dpdk], [])]) + DPDK_LIB_DIR="$with_dpdk/lib" + ;; + esac - DPDK_INCLUDE=$RTE_SDK/include - DPDK_LIB_DIR=$RTE_SDK/lib DPDK_LIB="-ldpdk" DPDK_EXTRA_LIB="" - RTE_SDK_FULL=`readlink -f $RTE_SDK` - - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([#include <$RTE_SDK_FULL/include/rte_config.h> -#if !RTE_LIBRTE_VHOST_USER -#error -#endif], [])], - [], [AC_DEFINE([VHOST_CUSE], [1], [DPDK vhost-cuse support enabled, vhost-user disabled.]) - DPDK_EXTRA_LIB="-lfuse"]) ovs_save_CFLAGS="$CFLAGS" ovs_save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -L$DPDK_LIB_DIR" CFLAGS="$CFLAGS -I$DPDK_INCLUDE" + if test "$DPDK_AUTO_DISCOVER" = "false"; then + LDFLAGS="$LDFLAGS -L${DPDK_LIB_DIR}" + fi + + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM( + [ + #include +#if !RTE_LIBRTE_VHOST_USER +#error +#endif + ], []) + ], [], + [AC_DEFINE([VHOST_CUSE], [1], [DPDK vhost-cuse support enabled, vhost-user disabled.]) + DPDK_EXTRA_LIB="-lfuse"]) # On some systems we have to add -ldl to link with dpdk # @@ -192,26 +216,34 @@ AC_DEFUN([OVS_CHECK_DPDK], [ # Before each attempt the search cache must be unset, # otherwise autoconf will stick with the old result - found=false + DPDKLIB_FOUND=false save_LIBS=$LIBS for extras in "" "-ldl"; do - LIBS="$DPDK_LIB $extras $save_LIBS $DPDK_EXTRA_LIB" + LIBS="$DPDK_LIB $extras $save_LIBS $DPDK_EXTRA_LIB -lnuma" AC_LINK_IFELSE( [AC_LANG_PROGRAM([#include #include ], [int rte_argc; char ** rte_argv; rte_eal_init(rte_argc, rte_argv);])], - [found=true]) - if $found; then + [DPDKLIB_FOUND=true]) + if $DPDKLIB_FOUND; then break fi done - if $found; then :; else - AC_MSG_ERROR([cannot link with dpdk]) + + # If linking unsuccessful + if test "$DPDKLIB_FOUND" = "false" ; then + if $DPDK_AUTO_DISCOVER; then + AC_MSG_ERROR([Could not find DPDK library in default search path, Use --with-dpdk to specify the DPDK library installed in non-standard location]) + else + AC_MSG_ERROR([Could not find DPDK libraries in $DPDK_LIB_DIR]) + fi fi CFLAGS="$ovs_save_CFLAGS" LDFLAGS="$ovs_save_LDFLAGS" - OVS_LDFLAGS="$OVS_LDFLAGS -L$DPDK_LIB_DIR" + if test "$DPDK_AUTO_DISCOVER" = "false"; then + OVS_LDFLAGS="$OVS_LDFLAGS -L$DPDK_LIB_DIR" + fi OVS_CFLAGS="$OVS_CFLAGS -I$DPDK_INCLUDE" OVS_ENABLE_OPTION([-mssse3]) @@ -226,12 +258,9 @@ AC_DEFUN([OVS_CHECK_DPDK], [ DPDK_vswitchd_LDFLAGS=-Wl,--whole-archive,$DPDK_LIB,--no-whole-archive AC_SUBST([DPDK_vswitchd_LDFLAGS]) AC_DEFINE([DPDK_NETDEV], [1], [System uses the DPDK module.]) - - else - RTE_SDK= fi - AM_CONDITIONAL([DPDK_NETDEV], test -n "$RTE_SDK") + AM_CONDITIONAL([DPDK_NETDEV], test "$DPDKLIB_FOUND" = true) ]) dnl OVS_GREP_IFELSE(FILE, REGEX, [IF-MATCH], [IF-NO-MATCH]) @@ -294,6 +323,39 @@ AC_DEFUN([OVS_FIND_FIELD_IFELSE], [ fi ]) +dnl OVS_FIND_PARAM_IFELSE(FILE, FUNCTION, REGEX, [IF-MATCH], [IF-NO-MATCH]) +dnl +dnl Looks for FUNCTION in FILE. If it is found, greps for REGEX within +dnl the function signature starting from the line matching FUNCTION +dnl and ending with the line containing the closing parenthesis. If +dnl this is successful, runs IF-MATCH, otherwise IF_NO_MATCH. If +dnl IF-MATCH is empty then it defines to +dnl OVS_DEFINE(HAVE__WITH_), with and +dnl translated to uppercase. +AC_DEFUN([OVS_FIND_PARAM_IFELSE], [ + AC_MSG_CHECKING([whether $2 has parameter $3 in $1]) + if test -f $1; then + awk '/$2[[ \t\n]]*\(/,/\)/' $1 2>/dev/null | grep '$3' >/dev/null + status=$? + case $status in + 0) + AC_MSG_RESULT([yes]) + m4_if([$4], [], [OVS_DEFINE([HAVE_]m4_toupper([$2])[_WITH_]m4_toupper([$3]))], [$4]) + ;; + 1) + AC_MSG_RESULT([no]) + $5 + ;; + *) + AC_MSG_ERROR([grep exited with status $status]) + ;; + esac + else + AC_MSG_RESULT([file not found]) + $5 + fi +]) + dnl OVS_DEFINE(NAME) dnl dnl Defines NAME to 1 in kcompat.h. @@ -344,8 +406,9 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [ OVS_GREP_IFELSE([$KSRC/include/net/ip.h], [inet_get_local_port_range.*net], [OVS_DEFINE([HAVE_INET_GET_LOCAL_PORT_RANGE_USING_NET])]) + OVS_GREP_IFELSE([$KSRC/include/net/ip.h], [ip_defrag.*net], + [OVS_DEFINE([HAVE_IP_DEFRAG_TAKES_NET])]) OVS_GREP_IFELSE([$KSRC/include/net/ip.h], [ip_do_fragment]) - OVS_GREP_IFELSE([$KSRC/include/net/ip.h], [ip_is_fragment]) OVS_GREP_IFELSE([$KSRC/include/net/ip.h], [ip_skb_dst_mtu]) OVS_GREP_IFELSE([$KSRC/include/net/ip.h], [IPSKB_FRAG_PMTU], @@ -395,17 +458,26 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [ OVS_FIND_FIELD_IFELSE([$KSRC/include/linux/netfilter_ipv6.h], [nf_ipv6_ops], [fragment.*sock], [OVS_DEFINE([HAVE_NF_IPV6_OPS_FRAGMENT])]) - OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_conntrack.h], - [tmpl_alloc.*conntrack_zone], + OVS_FIND_PARAM_IFELSE([$KSRC/include/net/netfilter/nf_conntrack.h], + [nf_ct_tmpl_alloc], [nf_conntrack_zone], [OVS_DEFINE([HAVE_NF_CT_TMPL_ALLOC_TAKES_STRUCT_ZONE])]) + OVS_FIND_PARAM_IFELSE([$KSRC/include/net/netfilter/nf_conntrack.h], + [nf_ct_get_tuplepr], [struct.net], + [OVS_DEFINE([HAVE_NF_CT_GET_TUPLEPR_TAKES_STRUCT_NET])]) OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_conntrack_zones.h], [nf_ct_zone_init]) OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_conntrack_labels.h], [nf_connlabels_get]) + OVS_FIND_PARAM_IFELSE([$KSRC/include/net/netfilter/nf_conntrack_labels.h], + [nf_connlabels_get], [int bit], + [OVS_DEFINE([HAVE_NF_CONNLABELS_GET_TAKES_BIT])]) OVS_GREP_IFELSE([$KSRC/include/net/netfilter/ipv6/nf_defrag_ipv6.h], [nf_ct_frag6_consume_orig]) OVS_GREP_IFELSE([$KSRC/include/net/netfilter/ipv6/nf_defrag_ipv6.h], [nf_ct_frag6_output]) + OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_nat.h], [nf_ct_nat_ext_add]) + OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_nat.h], [nf_nat_alloc_null_binding]) + OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_conntrack_seqadj.h], [nf_ct_seq_adjust]) OVS_GREP_IFELSE([$KSRC/include/linux/random.h], [prandom_u32]) OVS_GREP_IFELSE([$KSRC/include/linux/random.h], [prandom_u32_max]) @@ -445,10 +517,6 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [ OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_reset_tail_pointer]) OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_cow_head]) - OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_transport_header], - [OVS_DEFINE([HAVE_SKBUFF_HEADER_HELPERS])]) - OVS_GREP_IFELSE([$KSRC/include/linux/icmpv6.h], [icmp6_hdr], - [OVS_DEFINE([HAVE_ICMP6_HDR])]) OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_warn_if_lro], [OVS_DEFINE([HAVE_SKB_WARN_LRO])]) OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [consume_skb]) @@ -458,7 +526,8 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [ OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_reset_mac_len]) OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_unclone]) OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_orphan_frags]) - OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_get_hash]) + OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_get_hash(], + [OVS_DEFINE([HAVE_SKB_GET_HASH])]) OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_clear_hash]) OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [int.skb_zerocopy(], [OVS_DEFINE([HAVE_SKB_ZEROCOPY])])