diff --git a/CMakeLists.txt b/CMakeLists.txt index 3e43ef8..2822f33 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.14) -project(libdnet VERSION 1.16.4 LANGUAGES C) +project(dnet VERSION 1.17.0 LANGUAGES C) find_package(TCL) @@ -11,8 +11,9 @@ include(CheckStructHasMember) include(CheckSymbolExists) include(CheckTypeSize) include(CheckCSourceCompiles) +include(GNUInstallDirs) -set(WINDOWS_EXPORT_ALL_SYMBOLS True) +set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS True) option(BUILD_SHARED_LIBS "Build in shared lib mode" OFF) foreach (header stdio.h stdlib.h string.h inttypes.h) @@ -40,10 +41,10 @@ if(UNIX) foreach (header strings.h unistd.h sys/bufmod.h sys/dlpi.h sys/dlpihdr.h sys/dlpi_ext.h sys/ioctl.h sys/mib.h sys/ndd_var.h sys/socket.h sys/sockio.h - sys/sysctl.h sys/time.h sys/stat.h net/if.h net/if_var.h - net/if_arp.h net/if_dl.h net/pfilt.h - net/pfvar.h net/radix.h net/raw.h net/route.h netinet/in_var.h - net/if_tun.h linux/if_tun.h netinet/ip_fw.h linux/ip_fw.h + sys/time.h sys/stat.h net/if.h net/if_var.h + net/if_dl.h net/pfilt.h + net/radix.h net/raw.h net/route.h netinet/in_var.h + linux/if_tun.h netinet/ip_fw.h linux/ip_fw.h linux/ip_fwchains.h linux/netfilter_ipv4/ipchains_core.h ip_fil_compat.h netinet/ip_fil_compat.h ip_compat.h netinet/ip_compat.h ip_fil.h netinet/ip_fil.h @@ -54,6 +55,10 @@ if(UNIX) endforeach () check_include_files("sys/types.h;net/bpf.h" HAVE_NET_BPF_H) + check_include_files("sys/types.h;net/if_arp.h" HAVE_NET_IF_ARP_H) + check_include_files("sys/types.h;net/if_tun.h" HAVE_NET_IF_TUN_H) + check_include_files("sys/types.h;net/if.h;net/pfvar.h" HAVE_NET_PFVAR_H) + check_include_files("sys/types.h;sys/sysctl.h" HAVE_SYS_SYSCTL_H) endif() set(CMAKE_REQUIRED_LIBRARIES ) @@ -69,7 +74,7 @@ if (UNIX) CHECK_STRUCT_HAS_MEMBER("struct arpreq" arp_dev net/if_arp.h HAVE_ARPREQ_ARP_DEV LANGUAGE C) CHECK_STRUCT_HAS_MEMBER("struct sockaddr" sa_len sys/socket.h HAVE_SOCKADDR_SA_LEN LANGUAGE C) - check_symbol_exists(rt_msghdr net/route.h HAVE_ROUTE_RT_MSGHDR) + CHECK_STRUCT_HAS_MEMBER("struct rt_msghdr" rtm_msglen "sys/socket.h;net/if.h;net/route.h" HAVE_ROUTE_RT_MSGHDR LANGUAGE C) set(CMAKE_EXTRA_INCLUDE_FILES "netinet/in.h") check_type_size("struct sockaddr_in6" HAVE_SOCKADDR_IN6 LANGUAGE C) @@ -272,10 +277,103 @@ else() list(APPEND PLATFORM_SOURCES src/tun-none.c) endif() -add_library(${PROJECT_NAME} src/addr-util.c src/addr.c src/blob.c src/ip-util.c src/ip6.c src/rand.c ${PLATFORM_SOURCES}) - -target_include_directories(${PROJECT_NAME} PUBLIC ${PROJECT_SOURCE_DIR}/include ${CMAKE_CURRENT_BINARY_DIR} ) +add_library(${PROJECT_NAME} + src/addr-util.c + src/addr.c + src/blob.c + src/err.c + src/ip-util.c + src/ip6.c + src/rand.c + ${PLATFORM_SOURCES}) + +target_include_directories(${PROJECT_NAME} PUBLIC + $ + $ + $ + $ +) + +set(DNET_HEADERS + include/dnet/addr.h + include/dnet/arp.h + include/dnet/blob.h + include/dnet/eth.h + include/dnet/fw.h + include/dnet/icmp.h + include/dnet/intf.h + include/dnet/ip.h + include/dnet/ip6.h + include/dnet/ndisc.h + include/dnet/os.h + include/dnet/rand.h + include/dnet/route.h + include/dnet/sctp.h + include/dnet/tcp.h + include/dnet/tun.h + include/dnet/udp.h +) +set(DNET_HEADERS1 + include/dnet.h + include/err.h + include/queue.h + ${CMAKE_CURRENT_BINARY_DIR}/config.h +) +set_target_properties( + ${PROJECT_NAME} + PROPERTIES + PUBLIC_HEADER "${DNET_HEADERS}" +) if (MSVC) target_link_libraries(${PROJECT_NAME} PUBLIC Iphlpapi ws2_32) endif() + +install(TARGETS ${PROJECT_NAME} + EXPORT ${PROJECT_NAME}Targets DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT devel + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/${PROJECT_NAME} COMPONENT devel +) + + +install(FILES ${DNET_HEADERS1} + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME} + COMPONENT devel) + +install(EXPORT ${PROJECT_NAME}Targets + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}/ + FILE ${PROJECT_NAME}Targets.cmake + NAMESPACE ${PROJECT_NAME}:: + COMPONENT devel +) + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/${PROJECT_NAME}-config.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake + @ONLY +) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/${PROJECT_NAME}-config-version.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake + @ONLY +) +install( + FILES + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}/ + COMPONENT devel +) + +if(UNIX) + if(NOT CPACK_GENERATOR) + set(CPACK_GENERATOR "DEB") + endif() + + set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) + set(CPACK_STRIP_FILES 1) + if(${CMAKE_VERSION} VERSION_GREATER "3.5") + set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT) + endif() +endif() + +include(CPack) diff --git a/aclocal.m4 b/aclocal.m4 index 2738825..94039e8 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -21,7 +21,7 @@ If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- -# serial 11 (pkg-config-0.29.1) +# serial 12 (pkg-config-0.29.2) dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson @@ -63,7 +63,7 @@ dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], -[m4_define([PKG_MACROS_VERSION], [0.29.1]) +[m4_define([PKG_MACROS_VERSION], [0.29.2]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ @@ -164,7 +164,7 @@ AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no -AC_MSG_CHECKING([for $1]) +AC_MSG_CHECKING([for $2]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) @@ -174,11 +174,11 @@ and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then - AC_MSG_RESULT([no]) + AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` - else + else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs @@ -195,7 +195,7 @@ installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then - AC_MSG_RESULT([no]) + AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full @@ -296,74 +296,6 @@ AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR -dnl PKG_WITH_MODULES(VARIABLE-PREFIX, MODULES, -dnl [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND], -dnl [DESCRIPTION], [DEFAULT]) -dnl ------------------------------------------ -dnl -dnl Prepare a "--with-" configure option using the lowercase -dnl [VARIABLE-PREFIX] name, merging the behaviour of AC_ARG_WITH and -dnl PKG_CHECK_MODULES in a single macro. -AC_DEFUN([PKG_WITH_MODULES], -[ -m4_pushdef([with_arg], m4_tolower([$1])) - -m4_pushdef([description], - [m4_default([$5], [build with ]with_arg[ support])]) - -m4_pushdef([def_arg], [m4_default([$6], [auto])]) -m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes]) -m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no]) - -m4_case(def_arg, - [yes],[m4_pushdef([with_without], [--without-]with_arg)], - [m4_pushdef([with_without],[--with-]with_arg)]) - -AC_ARG_WITH(with_arg, - AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),, - [AS_TR_SH([with_]with_arg)=def_arg]) - -AS_CASE([$AS_TR_SH([with_]with_arg)], - [yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)], - [auto],[PKG_CHECK_MODULES([$1],[$2], - [m4_n([def_action_if_found]) $3], - [m4_n([def_action_if_not_found]) $4])]) - -m4_popdef([with_arg]) -m4_popdef([description]) -m4_popdef([def_arg]) - -])dnl PKG_WITH_MODULES - -dnl PKG_HAVE_WITH_MODULES(VARIABLE-PREFIX, MODULES, -dnl [DESCRIPTION], [DEFAULT]) -dnl ----------------------------------------------- -dnl -dnl Convenience macro to trigger AM_CONDITIONAL after PKG_WITH_MODULES -dnl check._[VARIABLE-PREFIX] is exported as make variable. -AC_DEFUN([PKG_HAVE_WITH_MODULES], -[ -PKG_WITH_MODULES([$1],[$2],,,[$3],[$4]) - -AM_CONDITIONAL([HAVE_][$1], - [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"]) -])dnl PKG_HAVE_WITH_MODULES - -dnl PKG_HAVE_DEFINE_WITH_MODULES(VARIABLE-PREFIX, MODULES, -dnl [DESCRIPTION], [DEFAULT]) -dnl ------------------------------------------------------ -dnl -dnl Convenience macro to run AM_CONDITIONAL and AC_DEFINE after -dnl PKG_WITH_MODULES check. HAVE_[VARIABLE-PREFIX] is exported as make -dnl and preprocessor variable. -AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES], -[ -PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4]) - -AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"], - [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])]) -])dnl PKG_HAVE_DEFINE_WITH_MODULES - # Copyright (C) 2002-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation diff --git a/cmake/dnet-config-version.cmake.in b/cmake/dnet-config-version.cmake.in new file mode 100644 index 0000000..2deaadf --- /dev/null +++ b/cmake/dnet-config-version.cmake.in @@ -0,0 +1,12 @@ +SET(PACKAGE_VERSION @PROJECT_VERSION@) +IF (PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION) + SET(PACKAGE_VERSION_EXACT "true") +ENDIF (PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION) +IF (NOT PACKAGE_FIND_VERSION VERSION_GREATER PACKAGE_VERSION) + SET(PACKAGE_VERSION_COMPATIBLE "true") +ELSE (NOT PACKAGE_FIND_VERSION VERSION_GREATER PACKAGE_VERSION) + SET(PACKAGE_VERSION_UNSUITABLE "true") +ENDIF (NOT PACKAGE_FIND_VERSION VERSION_GREATER PACKAGE_VERSION) +IF (PACKAGE_VERSION_UNSUITABLE) + MESSAGE("VERSION CHECK FAILED FOR ${PACKAGE_FIND_NAME}. WANTED ${PACKAGE_FIND_VERSION}, HAVE ${PACKAGE_VERSION}") +ENDIF(PACKAGE_VERSION_UNSUITABLE) diff --git a/cmake/dnet-config.cmake.in b/cmake/dnet-config.cmake.in new file mode 100644 index 0000000..bf0ff6a --- /dev/null +++ b/cmake/dnet-config.cmake.in @@ -0,0 +1,5 @@ +SET(prefix "@CMAKE_INSTALL_PREFIX@") +SET(exec_prefix "@CMAKE_INSTALL_PREFIX@") +SET(dnet_FOUND "TRUE") + +include("${CMAKE_CURRENT_LIST_DIR}/dnetTargets.cmake") diff --git a/config.h.cmake.in b/config.h.cmake.in index 014711e..a9ed5ad 100644 --- a/config.h.cmake.in +++ b/config.h.cmake.in @@ -3,9 +3,6 @@ /* Define if arpreq struct has arp_dev. */ #cmakedefine HAVE_ARPREQ_ARP_DEV -/* Define if you have the Berkeley Packet Filter. */ -#cmakedefine HAVE_BSD_BPF - /* Define to 1 if you have the header file. */ #cmakedefine HAVE_DLFCN_H diff --git a/configure b/configure index 3afb648..525e9c5 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for libdnet 1.16.4. +# Generated by GNU Autoconf 2.71 for libdnet 1.17.0. # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, @@ -618,8 +618,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='libdnet' PACKAGE_TARNAME='libdnet' -PACKAGE_VERSION='1.16.4' -PACKAGE_STRING='libdnet 1.16.4' +PACKAGE_VERSION='1.17.0' +PACKAGE_STRING='libdnet 1.17.0' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1380,7 +1380,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures libdnet 1.16.4 to adapt to many kinds of systems. +\`configure' configures libdnet 1.17.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1451,7 +1451,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libdnet 1.16.4:";; + short | recursive ) echo "Configuration of libdnet 1.17.0:";; esac cat <<\_ACEOF @@ -1577,7 +1577,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libdnet configure 1.16.4 +libdnet configure 1.17.0 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -1933,7 +1933,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by libdnet $as_me 1.16.4, which was +It was created by libdnet $as_me 1.17.0, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -3206,7 +3206,7 @@ fi # Define the identity of the package. PACKAGE='libdnet' - VERSION='1.16.4' + VERSION='1.17.0' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -14419,8 +14419,8 @@ printf "%s\n" "$withval" >&6; } else $as_nop pkg_failed=no -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CHECK" >&5 -printf %s "checking for CHECK... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for check" >&5 +printf %s "checking for check... " >&6; } if test -n "$CHECK_CFLAGS"; then pkg_cv_CHECK_CFLAGS="$CHECK_CFLAGS" @@ -14460,7 +14460,7 @@ fi if test $pkg_failed = yes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then @@ -14487,7 +14487,7 @@ Alternatively, you may set the environment variables CHECK_CFLAGS and CHECK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} @@ -16530,7 +16530,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libdnet $as_me 1.16.4, which was +This file was extended by libdnet $as_me 1.17.0, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -16598,7 +16598,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -libdnet config.status 1.16.4 +libdnet config.status 1.17.0 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 499c0c5..b423b98 100644 --- a/configure.ac +++ b/configure.ac @@ -6,7 +6,7 @@ dnl dnl $Id$ AC_PREREQ([2.69]) -AC_INIT(libdnet, 1.16.4) +AC_INIT(libdnet, 1.17.0) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_AUX_DIR(config) AC_SUBST(ac_aux_dir) diff --git a/libdnet.spec b/libdnet.spec index 7851f82..bae8949 100644 --- a/libdnet.spec +++ b/libdnet.spec @@ -1,6 +1,6 @@ Summary: Simple portable interface to lowlevel networking routines Name: libdnet -Version: 1.16.4 +Version: 1.17.0 Release: 1%{?dist} License: BSD URL: https://github.com/ofalk/%{name} @@ -87,6 +87,9 @@ popd %{python3_sitearch}/* %changelog +* Thu Oct 12 2023 Oliver Falk - 1.17.0-1 +- Release 1.17.0 + * Fri Apr 07 2023 Oliver Falk - 1.16.4-1 - Release 1.16.4 diff --git a/src/intf.c b/src/intf.c index 429ec51..0942027 100644 --- a/src/intf.c +++ b/src/intf.c @@ -69,7 +69,14 @@ /* XXX - superset of ifreq, for portable SIOC{A,D}IFADDR */ struct dnet_ifaliasreq { char ifra_name[IFNAMSIZ]; +#if defined(__OpenBSD__) + union { + struct sockaddr ifrau_addr; + int ifrau_align; + } ifra_ifrau; +#else struct sockaddr ifra_addr; +#endif struct sockaddr ifra_brdaddr; struct sockaddr ifra_mask; int ifra_cookie; /* XXX - IRIX!@#$ */ @@ -303,7 +310,7 @@ intf_set(intf_t *intf, const struct intf_entry *entry) } /* Set interface address. */ if (entry->intf_addr.addr_type == ADDR_TYPE_IP) { -#ifdef BSD +#if defined(BSD) && !defined(__OpenBSD__) /* XXX - why must this happen before SIOCSIFADDR? */ if (addr_btos(entry->intf_addr.addr_bits, &ifr.ifr_addr) == 0) {