move library packages to package/libs/
authorFelix Fietkau <nbd@openwrt.org>
Mon, 8 Oct 2012 11:24:12 +0000 (11:24 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Mon, 8 Oct 2012 11:24:12 +0000 (11:24 +0000)
SVN-Revision: 33657

190 files changed:
package/cyassl/Makefile [deleted file]
package/cyassl/patches/110-makefile_disable_examples_tests.patch [deleted file]
package/cyassl/patches/120-makefile_destdir.patch [deleted file]
package/cyassl/patches/130-configure_disable_pthreads_tests.patch [deleted file]
package/libbsd/Makefile [deleted file]
package/libjson-c/Makefile [deleted file]
package/libnl-tiny/Makefile [deleted file]
package/libnl-tiny/files/libnl-tiny.pc [deleted file]
package/libnl-tiny/src/Makefile [deleted file]
package/libnl-tiny/src/attr.c [deleted file]
package/libnl-tiny/src/cache.c [deleted file]
package/libnl-tiny/src/cache_mngt.c [deleted file]
package/libnl-tiny/src/error.c [deleted file]
package/libnl-tiny/src/genl.c [deleted file]
package/libnl-tiny/src/genl_ctrl.c [deleted file]
package/libnl-tiny/src/genl_family.c [deleted file]
package/libnl-tiny/src/genl_mngt.c [deleted file]
package/libnl-tiny/src/handlers.c [deleted file]
package/libnl-tiny/src/include/linux/gen_stats.h [deleted file]
package/libnl-tiny/src/include/linux/genetlink.h [deleted file]
package/libnl-tiny/src/include/linux/if.h [deleted file]
package/libnl-tiny/src/include/linux/if_addr.h [deleted file]
package/libnl-tiny/src/include/linux/netlink.h [deleted file]
package/libnl-tiny/src/include/netlink-generic.h [deleted file]
package/libnl-tiny/src/include/netlink-local.h [deleted file]
package/libnl-tiny/src/include/netlink-types.h [deleted file]
package/libnl-tiny/src/include/netlink/addr.h [deleted file]
package/libnl-tiny/src/include/netlink/attr.h [deleted file]
package/libnl-tiny/src/include/netlink/cache-api.h [deleted file]
package/libnl-tiny/src/include/netlink/cache.h [deleted file]
package/libnl-tiny/src/include/netlink/data.h [deleted file]
package/libnl-tiny/src/include/netlink/errno.h [deleted file]
package/libnl-tiny/src/include/netlink/genl/ctrl.h [deleted file]
package/libnl-tiny/src/include/netlink/genl/family.h [deleted file]
package/libnl-tiny/src/include/netlink/genl/genl.h [deleted file]
package/libnl-tiny/src/include/netlink/genl/mngt.h [deleted file]
package/libnl-tiny/src/include/netlink/handlers.h [deleted file]
package/libnl-tiny/src/include/netlink/list.h [deleted file]
package/libnl-tiny/src/include/netlink/msg.h [deleted file]
package/libnl-tiny/src/include/netlink/netlink-compat.h [deleted file]
package/libnl-tiny/src/include/netlink/netlink-kernel.h [deleted file]
package/libnl-tiny/src/include/netlink/netlink.h [deleted file]
package/libnl-tiny/src/include/netlink/object-api.h [deleted file]
package/libnl-tiny/src/include/netlink/object.h [deleted file]
package/libnl-tiny/src/include/netlink/socket.h [deleted file]
package/libnl-tiny/src/include/netlink/types.h [deleted file]
package/libnl-tiny/src/include/netlink/utils.h [deleted file]
package/libnl-tiny/src/include/netlink/version.h [deleted file]
package/libnl-tiny/src/include/unl.h [deleted file]
package/libnl-tiny/src/msg.c [deleted file]
package/libnl-tiny/src/nl.c [deleted file]
package/libnl-tiny/src/object.c [deleted file]
package/libnl-tiny/src/socket.c [deleted file]
package/libnl-tiny/src/unl.c [deleted file]
package/libnl/Makefile [deleted file]
package/libnl/patches/110-offsetof.patch [deleted file]
package/libnl/patches/160-update_includes_for_iw.patch [deleted file]
package/libpcap/Config.in [deleted file]
package/libpcap/Makefile [deleted file]
package/libpcap/patches/100-debian_shared_lib.patch [deleted file]
package/libpcap/patches/102-makefile_disable_manpages.patch [deleted file]
package/libpcap/patches/103-makefile_flex_workaround.patch [deleted file]
package/libpcap/patches/201-space_optimization.patch [deleted file]
package/libpcap/patches/202-protocol_api.patch [deleted file]
package/libpcap/patches/203-undef_iw_mode_monitor.patch [deleted file]
package/libreadline/Makefile [deleted file]
package/libreadline/patches/100-fix_avr32_compile [deleted file]
package/librpc/Makefile [deleted file]
package/librpc/patches/100-compat_fix.patch [deleted file]
package/libs/cyassl/Makefile [new file with mode: 0644]
package/libs/cyassl/patches/110-makefile_disable_examples_tests.patch [new file with mode: 0644]
package/libs/cyassl/patches/120-makefile_destdir.patch [new file with mode: 0644]
package/libs/cyassl/patches/130-configure_disable_pthreads_tests.patch [new file with mode: 0644]
package/libs/libbsd/Makefile [new file with mode: 0644]
package/libs/libjson-c/Makefile [new file with mode: 0644]
package/libs/libnl-tiny/Makefile [new file with mode: 0644]
package/libs/libnl-tiny/files/libnl-tiny.pc [new file with mode: 0644]
package/libs/libnl-tiny/src/Makefile [new file with mode: 0644]
package/libs/libnl-tiny/src/attr.c [new file with mode: 0644]
package/libs/libnl-tiny/src/cache.c [new file with mode: 0644]
package/libs/libnl-tiny/src/cache_mngt.c [new file with mode: 0644]
package/libs/libnl-tiny/src/error.c [new file with mode: 0644]
package/libs/libnl-tiny/src/genl.c [new file with mode: 0644]
package/libs/libnl-tiny/src/genl_ctrl.c [new file with mode: 0644]
package/libs/libnl-tiny/src/genl_family.c [new file with mode: 0644]
package/libs/libnl-tiny/src/genl_mngt.c [new file with mode: 0644]
package/libs/libnl-tiny/src/handlers.c [new file with mode: 0644]
package/libs/libnl-tiny/src/include/linux/gen_stats.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/linux/genetlink.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/linux/if.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/linux/if_addr.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/linux/netlink.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/netlink-generic.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/netlink-local.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/netlink-types.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/netlink/addr.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/netlink/attr.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/netlink/cache-api.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/netlink/cache.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/netlink/data.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/netlink/errno.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/netlink/genl/ctrl.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/netlink/genl/family.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/netlink/genl/genl.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/netlink/genl/mngt.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/netlink/handlers.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/netlink/list.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/netlink/msg.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/netlink/netlink-compat.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/netlink/netlink-kernel.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/netlink/netlink.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/netlink/object-api.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/netlink/object.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/netlink/socket.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/netlink/types.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/netlink/utils.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/netlink/version.h [new file with mode: 0644]
package/libs/libnl-tiny/src/include/unl.h [new file with mode: 0644]
package/libs/libnl-tiny/src/msg.c [new file with mode: 0644]
package/libs/libnl-tiny/src/nl.c [new file with mode: 0644]
package/libs/libnl-tiny/src/object.c [new file with mode: 0644]
package/libs/libnl-tiny/src/socket.c [new file with mode: 0644]
package/libs/libnl-tiny/src/unl.c [new file with mode: 0644]
package/libs/libnl/Makefile [new file with mode: 0644]
package/libs/libnl/patches/110-offsetof.patch [new file with mode: 0644]
package/libs/libnl/patches/160-update_includes_for_iw.patch [new file with mode: 0644]
package/libs/libpcap/Config.in [new file with mode: 0644]
package/libs/libpcap/Makefile [new file with mode: 0644]
package/libs/libpcap/patches/100-debian_shared_lib.patch [new file with mode: 0644]
package/libs/libpcap/patches/102-makefile_disable_manpages.patch [new file with mode: 0644]
package/libs/libpcap/patches/103-makefile_flex_workaround.patch [new file with mode: 0644]
package/libs/libpcap/patches/201-space_optimization.patch [new file with mode: 0644]
package/libs/libpcap/patches/202-protocol_api.patch [new file with mode: 0644]
package/libs/libpcap/patches/203-undef_iw_mode_monitor.patch [new file with mode: 0644]
package/libs/libreadline/Makefile [new file with mode: 0644]
package/libs/libreadline/patches/100-fix_avr32_compile [new file with mode: 0644]
package/libs/librpc/Makefile [new file with mode: 0644]
package/libs/librpc/patches/100-compat_fix.patch [new file with mode: 0644]
package/libs/libtool/Makefile [new file with mode: 0644]
package/libs/libubox/Makefile [new file with mode: 0644]
package/libs/ncurses/Makefile [new file with mode: 0644]
package/libs/ncurses/patches/100-ncurses-5.6-20080112-urxvt.patch [new file with mode: 0644]
package/libs/ncurses/patches/101-ncurses-5.6-20080628-kbs.patch [new file with mode: 0644]
package/libs/ncurses/patches/500-cross.patch [new file with mode: 0644]
package/libs/ncurses/patches/900-terminfo.patch [new file with mode: 0644]
package/libs/ocf-crypto-headers/Makefile [new file with mode: 0644]
package/libs/ocf-crypto-headers/src/cryptodev.h [new file with mode: 0644]
package/libs/openssl/Config.in [new file with mode: 0644]
package/libs/openssl/Makefile [new file with mode: 0644]
package/libs/openssl/patches/110-optimize-for-size.patch [new file with mode: 0644]
package/libs/openssl/patches/130-perl-path.patch [new file with mode: 0644]
package/libs/openssl/patches/140-makefile-dirs.patch [new file with mode: 0644]
package/libs/openssl/patches/150-no_engines.patch [new file with mode: 0644]
package/libs/openssl/patches/160-disable_doc_tests.patch [new file with mode: 0644]
package/libs/openssl/patches/170-bash_path.patch [new file with mode: 0644]
package/libs/openssl/patches/180-fix_link_segfault.patch [new file with mode: 0644]
package/libs/openssl/patches/190-remove_timestamp_check.patch [new file with mode: 0644]
package/libs/openssl/patches/200-etrax_support.patch [new file with mode: 0644]
package/libs/openssl/patches/210-fix_aes_mips.patch [new file with mode: 0644]
package/libs/uclibc++/Makefile [new file with mode: 0644]
package/libs/uclibc++/files/config.default [new file with mode: 0644]
package/libs/uclibc++/patches/002-path_to_bash.patch [new file with mode: 0644]
package/libs/uclibc++/patches/006-eabi_fix.patch [new file with mode: 0644]
package/libs/zlib/Makefile [new file with mode: 0644]
package/libtool/Makefile [deleted file]
package/libubox/Makefile [deleted file]
package/ncurses/Makefile [deleted file]
package/ncurses/patches/100-ncurses-5.6-20080112-urxvt.patch [deleted file]
package/ncurses/patches/101-ncurses-5.6-20080628-kbs.patch [deleted file]
package/ncurses/patches/500-cross.patch [deleted file]
package/ncurses/patches/900-terminfo.patch [deleted file]
package/ocf-crypto-headers/Makefile [deleted file]
package/ocf-crypto-headers/src/cryptodev.h [deleted file]
package/openssl/Config.in [deleted file]
package/openssl/Makefile [deleted file]
package/openssl/patches/110-optimize-for-size.patch [deleted file]
package/openssl/patches/130-perl-path.patch [deleted file]
package/openssl/patches/140-makefile-dirs.patch [deleted file]
package/openssl/patches/150-no_engines.patch [deleted file]
package/openssl/patches/160-disable_doc_tests.patch [deleted file]
package/openssl/patches/170-bash_path.patch [deleted file]
package/openssl/patches/180-fix_link_segfault.patch [deleted file]
package/openssl/patches/190-remove_timestamp_check.patch [deleted file]
package/openssl/patches/200-etrax_support.patch [deleted file]
package/openssl/patches/210-fix_aes_mips.patch [deleted file]
package/uclibc++/Makefile [deleted file]
package/uclibc++/files/config.default [deleted file]
package/uclibc++/patches/002-path_to_bash.patch [deleted file]
package/uclibc++/patches/006-eabi_fix.patch [deleted file]
package/zlib/Makefile [deleted file]

diff --git a/package/cyassl/Makefile b/package/cyassl/Makefile
deleted file mode 100644 (file)
index 442186a..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-#
-# Copyright (C) 2006-2010 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=cyassl
-PKG_VERSION:=1.6.5
-PKG_RELEASE:=1
-
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).zip
-PKG_SOURCE_URL:=http://www.yassl.com/
-PKG_MD5SUM:=98c2c6350acf1d089756a1de9ccb9903
-
-PKG_FIXUP:=patch-libtool
-PKG_INSTALL:=1
-PKG_BUILD_PARALLEL:=1
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/libcyassl
-  SECTION:=libs
-  SUBMENU:=SSL
-  CATEGORY:=Libraries
-  TITLE:=CyaSSL library
-  URL:=http://www.yassl.com/
-endef
-
-define Package/libcyassl/description
-CyaSSL is an SSL library optimized for small footprint, both on disk and for
-memory use.
-endef
-
-TARGET_CFLAGS += $(FPIC)
-
-CONFIGURE_ARGS += \
-       --without-zlib \
-       --enable-singleThreaded
-
-define Build/InstallDev
-       $(INSTALL_DIR) $(1)/usr/include
-       $(CP) $(PKG_INSTALL_DIR)/usr/include/* $(1)/usr/include/
-
-       $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libcyassl.{a,so*,la} $(1)/usr/lib/
-endef
-
-define Package/libcyassl/install
-       $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libcyassl.so* $(1)/usr/lib/
-endef
-
-$(eval $(call BuildPackage,libcyassl))
diff --git a/package/cyassl/patches/110-makefile_disable_examples_tests.patch b/package/cyassl/patches/110-makefile_disable_examples_tests.patch
deleted file mode 100644 (file)
index c66ab8c..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -1,4 +1,4 @@
--SUBDIRS = src ctaocrypt examples testsuite sslSniffer\r
-+SUBDIRS = src ctaocrypt\r
- EXTRA_DIST = cyassl.dsp cyassl.dsw certs/*.pem certs/*.der certs/*.txt \\r
-     lib/dummy cyassl.sln cyassl.vcproj cyassl-iphone.xcodeproj/project.pbxproj \\r
-     doc/*.pdf swig/README swig/*.i swig/cyassl_adds.c swig/*.sh swig/runme.* \\r
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -193,7 +193,7 @@ target_os = @target_os@
- target_vendor = @target_vendor@
- top_builddir = @top_builddir@
- top_srcdir = @top_srcdir@
--SUBDIRS = src ctaocrypt examples testsuite sslSniffer
-+SUBDIRS = src ctaocrypt
- EXTRA_DIST = cyassl.dsp cyassl.dsw certs/*.pem certs/*.der certs/*.txt \
-     lib/dummy cyassl.sln cyassl.vcproj cyassl-iphone.xcodeproj/project.pbxproj \
-     doc/*.pdf swig/README swig/*.i swig/cyassl_adds.c swig/*.sh swig/runme.* \
-@@ -643,7 +643,7 @@ uninstall-am:
- # !!!! first line of rule has to start with a hard (real) tab, not spaces
- basic:
--      cd src; $(MAKE); cd ../testsuite; $(MAKE); cd ../
-+      cd src; $(MAKE); cd ../
- openssl-links:
-       cd lib; ln -s ../src/.libs/libcyassl.a libcrypto.a; \
---- a/ctaocrypt/Makefile.am
-+++ b/ctaocrypt/Makefile.am
-@@ -1,3 +1,3 @@
--SUBDIRS = src test benchmark\r
-+SUBDIRS = src\r
- EXTRA_DIST = ctaocrypt.dsw ctaocrypt.dsp ctaocrypt.sln ctaocrypt.vcproj\r
\r
---- a/ctaocrypt/Makefile.in
-+++ b/ctaocrypt/Makefile.in
-@@ -177,7 +177,7 @@ target_os = @target_os@
- target_vendor = @target_vendor@
- top_builddir = @top_builddir@
- top_srcdir = @top_srcdir@
--SUBDIRS = src test benchmark
-+SUBDIRS = src
- EXTRA_DIST = ctaocrypt.dsw ctaocrypt.dsp ctaocrypt.sln ctaocrypt.vcproj
- all: all-recursive
diff --git a/package/cyassl/patches/120-makefile_destdir.patch b/package/cyassl/patches/120-makefile_destdir.patch
deleted file mode 100644 (file)
index bf20274..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -10,19 +10,19 @@ basic:
\r
- openssl-links:\r
-       cd lib; ln -s ../src/.libs/libcyassl.a libcrypto.a; \\r
--    ln -s ../src/.libs/libcyassl.a libssl.a; \\r
--    ln -s ../src/.libs/libcyassl.a libcyassl.a; cd ../\r
-+      ln -s ../src/.libs/libcyassl.a libssl.a; \\r
-+      ln -s ../src/.libs/libcyassl.a libcyassl.a; cd ../\r
\r
- #  !!! test -e with a .name like .libs then a * like *dylib fails so just\r
- #      look for the .dylib on OS X, and .so otherwise but copy all parts\r
- install:\r
--      $(mkinstalldirs) $(DESTDIR)$(includedir) $(DESTDIR)$(libdir); \\r
--    cp -fpR include/* $(DESTDIR)$(includedir); \\r
--    cp -fpR ctaocrypt/include/* $(DESTDIR)$(includedir); \\r
--    cp -fpR src/libcyassl.la $(DESTDIR)$(libdir); \\r
--    if test -e src/.libs/libcyassl.a; then \\r
--    cp -fp src/.libs/libcyassl.a $(DESTDIR)$(libdir); fi; \\r
--    if test -e src/.libs/libcyassl.so; then \\r
--    cp -fpR src/.libs/libcyassl.so* $(DESTDIR)$(libdir); fi; \\r
--    if test -e src/.libs/libcyassl.dylib; then \\r
--    cp -fpR src/.libs/libcyassl.*dylib $(DESTDIR)$(libdir); fi;\r
-+      $(mkinstalldirs) $(DESTDIR)$(includedir)/cyassl $(DESTDIR)$(libdir); \\r
-+      cp -fpR include/* $(DESTDIR)$(includedir)/cyassl; \\r
-+      cp -fpR ctaocrypt/include/* $(DESTDIR)$(includedir)/cyassl; \\r
-+      cp -fpR src/libcyassl.la $(DESTDIR)$(libdir); \\r
-+      if test -e src/.libs/libcyassl.a; then \\r
-+              cp -fp src/.libs/libcyassl.a $(DESTDIR)$(libdir); fi; \\r
-+      if test -e src/.libs/libcyassl.so; then \\r
-+              cp -fpR src/.libs/libcyassl.so* $(DESTDIR)$(libdir); fi; \\r
-+      if test -e src/.libs/libcyassl.dylib; then \\r
-+              cp -fpR src/.libs/libcyassl.*dylib $(DESTDIR)$(libdir); fi;\r
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -647,22 +647,22 @@ basic:
- openssl-links:
-       cd lib; ln -s ../src/.libs/libcyassl.a libcrypto.a; \
--    ln -s ../src/.libs/libcyassl.a libssl.a; \
--    ln -s ../src/.libs/libcyassl.a libcyassl.a; cd ../
-+      ln -s ../src/.libs/libcyassl.a libssl.a; \
-+      ln -s ../src/.libs/libcyassl.a libcyassl.a; cd ../
- #  !!! test -e with a .name like .libs then a * like *dylib fails so just
- #      look for the .dylib on OS X, and .so otherwise but copy all parts
- install:
--      $(mkinstalldirs) $(DESTDIR)$(includedir) $(DESTDIR)$(libdir); \
--    cp -fpR include/* $(DESTDIR)$(includedir); \
--    cp -fpR ctaocrypt/include/* $(DESTDIR)$(includedir); \
--    cp -fpR src/libcyassl.la $(DESTDIR)$(libdir); \
--    if test -e src/.libs/libcyassl.a; then \
--    cp -fp src/.libs/libcyassl.a $(DESTDIR)$(libdir); fi; \
--    if test -e src/.libs/libcyassl.so; then \
--    cp -fpR src/.libs/libcyassl.so* $(DESTDIR)$(libdir); fi; \
--    if test -e src/.libs/libcyassl.dylib; then \
--    cp -fpR src/.libs/libcyassl.*dylib $(DESTDIR)$(libdir); fi;
-+      $(mkinstalldirs) $(DESTDIR)$(includedir)/cyassl $(DESTDIR)$(libdir); \
-+      cp -fpR include/* $(DESTDIR)$(includedir)/cyassl; \
-+      cp -fpR ctaocrypt/include/* $(DESTDIR)$(includedir)/cyassl; \
-+      cp -fpR src/libcyassl.la $(DESTDIR)$(libdir); \
-+      if test -e src/.libs/libcyassl.a; then \
-+              cp -fp src/.libs/libcyassl.a $(DESTDIR)$(libdir); fi; \
-+      if test -e src/.libs/libcyassl.so; then \
-+              cp -fpR src/.libs/libcyassl.so* $(DESTDIR)$(libdir); fi; \
-+      if test -e src/.libs/libcyassl.dylib; then \
-+              cp -fpR src/.libs/libcyassl.*dylib $(DESTDIR)$(libdir); fi;
- # Tell versions [3.59,3.63) of GNU make to not export all variables.
- # Otherwise a system limit (for SysV at least) may be exceeded.
- .NOEXPORT:
diff --git a/package/cyassl/patches/130-configure_disable_pthreads_tests.patch b/package/cyassl/patches/130-configure_disable_pthreads_tests.patch
deleted file mode 100644 (file)
index 44fdf6c..0000000
+++ /dev/null
@@ -1,444 +0,0 @@
---- a/configure
-+++ b/configure
-@@ -888,10 +888,6 @@ BUILD_RIPEMD_TRUE
- BUILD_RIPEMD_FALSE
- BUILD_SHA512_TRUE
- BUILD_SHA512_FALSE
--acx_pthread_config
--PTHREAD_CC
--PTHREAD_LIBS
--PTHREAD_CFLAGS
- LIBOBJS
- LTLIBOBJS'
- ac_subst_files=''
-@@ -22251,430 +22247,6 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS con
- ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
- ac_compiler_gnu=$ac_cv_c_compiler_gnu
--acx_pthread_ok=no
--
--# We used to check for pthread.h first, but this fails if pthread.h
--# requires special compiler flags (e.g. on True64 or Sequent).
--# It gets checked for in the link test anyway.
--
--# First of all, check if the user has set any of the PTHREAD_LIBS,
--# etcetera environment variables, and if threads linking works using
--# them:
--if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
--        save_CFLAGS="$CFLAGS"
--        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
--        save_LIBS="$LIBS"
--        LIBS="$PTHREAD_LIBS $LIBS"
--        { echo "$as_me:$LINENO: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5
--echo $ECHO_N "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... $ECHO_C" >&6; }
--        cat >conftest.$ac_ext <<_ACEOF
--/* confdefs.h.  */
--_ACEOF
--cat confdefs.h >>conftest.$ac_ext
--cat >>conftest.$ac_ext <<_ACEOF
--/* end confdefs.h.  */
--
--/* Override any GCC internal prototype to avoid an error.
--   Use char because int might match the return type of a GCC
--   builtin and then its argument prototype would still apply.  */
--#ifdef __cplusplus
--extern "C"
--#endif
--char pthread_join ();
--int
--main ()
--{
--return pthread_join ();
--  ;
--  return 0;
--}
--_ACEOF
--rm -f conftest.$ac_objext conftest$ac_exeext
--if { (ac_try="$ac_link"
--case "(($ac_try" in
--  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
--  *) ac_try_echo=$ac_try;;
--esac
--eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
--  (eval "$ac_link") 2>conftest.er1
--  ac_status=$?
--  grep -v '^ *+' conftest.er1 >conftest.err
--  rm -f conftest.er1
--  cat conftest.err >&5
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); } && {
--       test -z "$ac_c_werror_flag" ||
--       test ! -s conftest.err
--       } && test -s conftest$ac_exeext &&
--       $as_test_x conftest$ac_exeext; then
--  acx_pthread_ok=yes
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--
--fi
--
--rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
--      conftest$ac_exeext conftest.$ac_ext
--        { echo "$as_me:$LINENO: result: $acx_pthread_ok" >&5
--echo "${ECHO_T}$acx_pthread_ok" >&6; }
--        if test x"$acx_pthread_ok" = xno; then
--                PTHREAD_LIBS=""
--                PTHREAD_CFLAGS=""
--        fi
--        LIBS="$save_LIBS"
--        CFLAGS="$save_CFLAGS"
--fi
--
--# We must check for the threads library under a number of different
--# names; the ordering is very important because some systems
--# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
--# libraries is broken (non-POSIX).
--
--# Create a list of thread flags to try.  Items starting with a "-" are
--# C compiler flags, and other items are library names, except for "none"
--# which indicates that we try without any flags at all, and "pthread-config"
--# which is a program returning the flags for the Pth emulation library.
--
--acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
--
--# The ordering *is* (sometimes) important.  Some notes on the
--# individual items follow:
--
--# pthreads: AIX (must check this before -lpthread)
--# none: in case threads are in libc; should be tried before -Kthread and
--#       other compiler flags to prevent continual compiler warnings
--# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
--# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
--# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
--# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
--# -pthreads: Solaris/gcc
--# -mthreads: Mingw32/gcc, Lynx/gcc
--# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
--#      doesn't hurt to check since this sometimes defines pthreads too;
--#      also defines -D_REENTRANT)
--#      ... -mt is also the pthreads flag for HP/aCC
--# pthread: Linux, etcetera
--# --thread-safe: KAI C++
--# pthread-config: use pthread-config program (for GNU Pth library)
--
--case "${host_cpu}-${host_os}" in
--        *solaris*)
--
--        # On Solaris (at least, for some versions), libc contains stubbed
--        # (non-functional) versions of the pthreads routines, so link-based
--        # tests will erroneously succeed.  (We need to link with -pthreads/-mt/
--        # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather
--        # a function called by this macro, so we could check for that, but
--        # who knows whether they'll stub that too in a future libc.)  So,
--        # we'll just look for -pthreads and -lpthread first:
--
--        acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags"
--        ;;
--esac
--
--if test x"$acx_pthread_ok" = xno; then
--for flag in $acx_pthread_flags; do
--
--        case $flag in
--                none)
--                { echo "$as_me:$LINENO: checking whether pthreads work without any flags" >&5
--echo $ECHO_N "checking whether pthreads work without any flags... $ECHO_C" >&6; }
--                ;;
--
--                -*)
--                { echo "$as_me:$LINENO: checking whether pthreads work with $flag" >&5
--echo $ECHO_N "checking whether pthreads work with $flag... $ECHO_C" >&6; }
--                PTHREAD_CFLAGS="$flag"
--                ;;
--
--              pthread-config)
--              # Extract the first word of "pthread-config", so it can be a program name with args.
--set dummy pthread-config; ac_word=$2
--{ echo "$as_me:$LINENO: checking for $ac_word" >&5
--echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
--if test "${ac_cv_prog_acx_pthread_config+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  if test -n "$acx_pthread_config"; then
--  ac_cv_prog_acx_pthread_config="$acx_pthread_config" # Let the user override the test.
--else
--as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
--for as_dir in $PATH
--do
--  IFS=$as_save_IFS
--  test -z "$as_dir" && as_dir=.
--  for ac_exec_ext in '' $ac_executable_extensions; do
--  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
--    ac_cv_prog_acx_pthread_config="yes"
--    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
--    break 2
--  fi
--done
--done
--IFS=$as_save_IFS
--
--  test -z "$ac_cv_prog_acx_pthread_config" && ac_cv_prog_acx_pthread_config="no"
--fi
--fi
--acx_pthread_config=$ac_cv_prog_acx_pthread_config
--if test -n "$acx_pthread_config"; then
--  { echo "$as_me:$LINENO: result: $acx_pthread_config" >&5
--echo "${ECHO_T}$acx_pthread_config" >&6; }
--else
--  { echo "$as_me:$LINENO: result: no" >&5
--echo "${ECHO_T}no" >&6; }
--fi
--
--
--              if test x"$acx_pthread_config" = xno; then continue; fi
--              PTHREAD_CFLAGS="`pthread-config --cflags`"
--              PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
--              ;;
--
--                *)
--                { echo "$as_me:$LINENO: checking for the pthreads library -l$flag" >&5
--echo $ECHO_N "checking for the pthreads library -l$flag... $ECHO_C" >&6; }
--                PTHREAD_LIBS="-l$flag"
--                ;;
--        esac
--
--        save_LIBS="$LIBS"
--        save_CFLAGS="$CFLAGS"
--        LIBS="$PTHREAD_LIBS $LIBS"
--        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
--
--        # Check for various functions.  We must include pthread.h,
--        # since some functions may be macros.  (On the Sequent, we
--        # need a special flag -Kthread to make this header compile.)
--        # We check for pthread_join because it is in -lpthread on IRIX
--        # while pthread_create is in libc.  We check for pthread_attr_init
--        # due to DEC craziness with -lpthreads.  We check for
--        # pthread_cleanup_push because it is one of the few pthread
--        # functions on Solaris that doesn't have a non-functional libc stub.
--        # We try pthread_create on general principles.
--        cat >conftest.$ac_ext <<_ACEOF
--/* confdefs.h.  */
--_ACEOF
--cat confdefs.h >>conftest.$ac_ext
--cat >>conftest.$ac_ext <<_ACEOF
--/* end confdefs.h.  */
--#include <pthread.h>
--int
--main ()
--{
--pthread_t th; pthread_join(th, 0);
--                     pthread_attr_init(0); pthread_cleanup_push(0, 0);
--                     pthread_create(0,0,0,0); pthread_cleanup_pop(0);
--  ;
--  return 0;
--}
--_ACEOF
--rm -f conftest.$ac_objext conftest$ac_exeext
--if { (ac_try="$ac_link"
--case "(($ac_try" in
--  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
--  *) ac_try_echo=$ac_try;;
--esac
--eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
--  (eval "$ac_link") 2>conftest.er1
--  ac_status=$?
--  grep -v '^ *+' conftest.er1 >conftest.err
--  rm -f conftest.er1
--  cat conftest.err >&5
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); } && {
--       test -z "$ac_c_werror_flag" ||
--       test ! -s conftest.err
--       } && test -s conftest$ac_exeext &&
--       $as_test_x conftest$ac_exeext; then
--  acx_pthread_ok=yes
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--
--fi
--
--rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
--      conftest$ac_exeext conftest.$ac_ext
--
--        LIBS="$save_LIBS"
--        CFLAGS="$save_CFLAGS"
--
--        { echo "$as_me:$LINENO: result: $acx_pthread_ok" >&5
--echo "${ECHO_T}$acx_pthread_ok" >&6; }
--        if test "x$acx_pthread_ok" = xyes; then
--                break;
--        fi
--
--        PTHREAD_LIBS=""
--        PTHREAD_CFLAGS=""
--done
--fi
--
--# Various other checks:
--if test "x$acx_pthread_ok" = xyes; then
--        save_LIBS="$LIBS"
--        LIBS="$PTHREAD_LIBS $LIBS"
--        save_CFLAGS="$CFLAGS"
--        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
--
--        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
--      { echo "$as_me:$LINENO: checking for joinable pthread attribute" >&5
--echo $ECHO_N "checking for joinable pthread attribute... $ECHO_C" >&6; }
--      attr_name=unknown
--      for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
--          cat >conftest.$ac_ext <<_ACEOF
--/* confdefs.h.  */
--_ACEOF
--cat confdefs.h >>conftest.$ac_ext
--cat >>conftest.$ac_ext <<_ACEOF
--/* end confdefs.h.  */
--#include <pthread.h>
--int
--main ()
--{
--int attr=$attr; return attr;
--  ;
--  return 0;
--}
--_ACEOF
--rm -f conftest.$ac_objext conftest$ac_exeext
--if { (ac_try="$ac_link"
--case "(($ac_try" in
--  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
--  *) ac_try_echo=$ac_try;;
--esac
--eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
--  (eval "$ac_link") 2>conftest.er1
--  ac_status=$?
--  grep -v '^ *+' conftest.er1 >conftest.err
--  rm -f conftest.er1
--  cat conftest.err >&5
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); } && {
--       test -z "$ac_c_werror_flag" ||
--       test ! -s conftest.err
--       } && test -s conftest$ac_exeext &&
--       $as_test_x conftest$ac_exeext; then
--  attr_name=$attr; break
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--
--fi
--
--rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
--      conftest$ac_exeext conftest.$ac_ext
--      done
--        { echo "$as_me:$LINENO: result: $attr_name" >&5
--echo "${ECHO_T}$attr_name" >&6; }
--        if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
--
--cat >>confdefs.h <<_ACEOF
--#define PTHREAD_CREATE_JOINABLE $attr_name
--_ACEOF
--
--        fi
--
--        { echo "$as_me:$LINENO: checking if more special flags are required for pthreads" >&5
--echo $ECHO_N "checking if more special flags are required for pthreads... $ECHO_C" >&6; }
--        flag=no
--        case "${host_cpu}-${host_os}" in
--            *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
--            *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
--        esac
--        { echo "$as_me:$LINENO: result: ${flag}" >&5
--echo "${ECHO_T}${flag}" >&6; }
--        if test "x$flag" != xno; then
--            PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
--        fi
--
--        LIBS="$save_LIBS"
--        CFLAGS="$save_CFLAGS"
--
--        # More AIX lossage: must compile with xlc_r or cc_r
--      if test x"$GCC" != xyes; then
--          for ac_prog in xlc_r cc_r
--do
--  # Extract the first word of "$ac_prog", so it can be a program name with args.
--set dummy $ac_prog; ac_word=$2
--{ echo "$as_me:$LINENO: checking for $ac_word" >&5
--echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
--if test "${ac_cv_prog_PTHREAD_CC+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  if test -n "$PTHREAD_CC"; then
--  ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test.
--else
--as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
--for as_dir in $PATH
--do
--  IFS=$as_save_IFS
--  test -z "$as_dir" && as_dir=.
--  for ac_exec_ext in '' $ac_executable_extensions; do
--  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
--    ac_cv_prog_PTHREAD_CC="$ac_prog"
--    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
--    break 2
--  fi
--done
--done
--IFS=$as_save_IFS
--
--fi
--fi
--PTHREAD_CC=$ac_cv_prog_PTHREAD_CC
--if test -n "$PTHREAD_CC"; then
--  { echo "$as_me:$LINENO: result: $PTHREAD_CC" >&5
--echo "${ECHO_T}$PTHREAD_CC" >&6; }
--else
--  { echo "$as_me:$LINENO: result: no" >&5
--echo "${ECHO_T}no" >&6; }
--fi
--
--
--  test -n "$PTHREAD_CC" && break
--done
--test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}"
--
--        else
--          PTHREAD_CC=$CC
--      fi
--else
--        PTHREAD_CC="$CC"
--fi
--
--
--
--
--
--# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
--if test x"$acx_pthread_ok" = xyes; then
--
--cat >>confdefs.h <<\_ACEOF
--#define HAVE_PTHREAD 1
--_ACEOF
--
--        :
--else
--        acx_pthread_ok=no
--
--fi
--ac_ext=c
--ac_cpp='$CPP $CPPFLAGS'
--ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
--ac_compiler_gnu=$ac_cv_c_compiler_gnu
--
--
--
--LIBS="$PTHREAD_LIBS $LIBS"
--CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
--
-       { echo "$as_me:$LINENO: checking for library containing gethostbyname" >&5
- echo $ECHO_N "checking for library containing gethostbyname... $ECHO_C" >&6; }
diff --git a/package/libbsd/Makefile b/package/libbsd/Makefile
deleted file mode 100644 (file)
index 4fef04a..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=libbsd
-PKG_VERSION:=0.3.0
-PKG_RELEASE:=1
-
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=http://libbsd.freedesktop.org/releases
-#PKG_MD5SUM:=d0870f2de55d59c1c8419f36e8fac150
-
-include $(INCLUDE_DIR)/package.mk
-
-PKG_INSTALL:=1
-
-define Package/libbsd
-  SECTION:=libs
-  CATEGORY:=Libraries
-  DEPENDS:=@!USE_UCLIBC
-  TITLE:=common BSD library
-endef
-
-define Package/libbsd/description
- This library provides useful functions commonly found on BSD systems, and lacking on others like GNU systems, thus making it easier to port projects with strong BSD origins, without needing to embed the same code over and over again on each project.
-endef
-
-define Build/InstallDev
-       $(INSTALL_DIR) \
-               $(1)/lib \
-               $(1)/usr/include
-
-       $(CP) \
-               $(PKG_INSTALL_DIR)/lib/libbsd.so* \
-               $(1)/lib/
-
-       $(CP) \
-               $(PKG_INSTALL_DIR)/usr/include/* \
-               $(1)/usr/include/
-
-       ( cd $(1)/lib ; ln -s libbsd.so.$(PKG_VERSION) libbsd.so )
-endef
-
-define Package/libbsd/install
-       $(INSTALL_DIR) \
-               $(1)/lib
-
-       $(CP) \
-               $(PKG_INSTALL_DIR)/lib/libbsd.so* \
-               $(1)/lib/
-
-       ( cd $(1)/lib ; ln -s libbsd.so.$(PKG_VERSION) libbsd.so )
-endef
-
-$(eval $(call BuildPackage,libbsd))
-
diff --git a/package/libjson-c/Makefile b/package/libjson-c/Makefile
deleted file mode 100644 (file)
index afd409b..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-# Copyright (C) 2006-2010 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=json-c
-PKG_VERSION:=0.9
-PKG_RELEASE:=2
-
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=http://oss.metaparadigm.com/json-c/
-PKG_MD5SUM:=3a13d264528dcbaf3931b0cede24abae
-
-PKG_FIXUP:=autoreconf
-PKG_INSTALL:=1
-
-include $(INCLUDE_DIR)/package.mk
-
-TARGET_CFLAGS += $(FPIC)
-
-define Package/libjson
-  SECTION:=libs
-  CATEGORY:=Libraries
-  TITLE:=javascript object notation
-  URL:=http://oss.metaparadigm.com/json-c/
-endef
-
-define Package/libjson/description
- This package contains a library for javascript object notation backends.
-endef
-
-define Build/InstallDev
-       $(INSTALL_DIR) $(1)/usr/include
-       $(CP) $(PKG_INSTALL_DIR)/usr/include/json $(1)/usr/include/
-       $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libjson.{a,so*} $(1)/usr/lib/
-       $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/json.pc $(1)/usr/lib/pkgconfig/
-endef
-
-define Package/libjson/install
-       $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libjson.so.* $(1)/usr/lib/
-endef
-
-$(eval $(call BuildPackage,libjson))
diff --git a/package/libnl-tiny/Makefile b/package/libnl-tiny/Makefile
deleted file mode 100644 (file)
index 37ac26f..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-#
-# Copyright (C) 2006-2012 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=libnl-tiny
-PKG_VERSION:=0.1
-PKG_RELEASE:=3
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/libnl-tiny
-  SECTION:=libs
-  CATEGORY:=Libraries
-  TITLE:=netlink socket library
-endef
-
-define Package/libnl-tiny/description
- This package contains a stripped down version of libnl
-endef
-
-define Build/Prepare
-       mkdir -p $(PKG_BUILD_DIR)
-       $(CP) ./src/* $(PKG_BUILD_DIR)/
-endef
-
-TARGET_CFLAGS += $(FPIC)
-
-define Build/Compile
-       $(MAKE) -C $(PKG_BUILD_DIR) \
-               $(TARGET_CONFIGURE_OPTS) \
-               CFLAGS="$(TARGET_CFLAGS)" \
-               all
-endef
-
-define Build/InstallDev
-       $(INSTALL_DIR) $(1)/usr/lib/pkgconfig $(1)/usr/include/libnl-tiny
-       $(CP) $(PKG_BUILD_DIR)/include/* $(1)/usr/include/libnl-tiny
-       $(CP) $(PKG_BUILD_DIR)/libnl-tiny.so $(1)/usr/lib/
-       $(CP) ./files/libnl-tiny.pc $(1)/usr/lib/pkgconfig
-endef
-
-define Package/libnl-tiny/install
-       $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_BUILD_DIR)/libnl-tiny.so $(1)/usr/lib/
-endef
-
-$(eval $(call BuildPackage,libnl-tiny))
diff --git a/package/libnl-tiny/files/libnl-tiny.pc b/package/libnl-tiny/files/libnl-tiny.pc
deleted file mode 100644 (file)
index 8c1bf6f..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-prefix=/usr
-exec_prefix=/usr
-libdir=${exec_prefix}/lib
-includedir=${prefix}/include/libnl-tiny
-
-Name: libnl-tiny
-Description: Convenience library for netlink sockets
-Version: 2.0
-Libs: -L${libdir} -lnl-tiny
-Cflags:
diff --git a/package/libnl-tiny/src/Makefile b/package/libnl-tiny/src/Makefile
deleted file mode 100644 (file)
index f6f90ec..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-CC=gcc
-WFLAGS=-Wall
-CFLAGS=-O2
-INCLUDES=-Iinclude
-
-LIBNAME=libnl-tiny.so
-
-all: $(LIBNAME)
-
-%.o: %.c
-       $(CC) $(WFLAGS) -c -o $@ $(INCLUDES) $(CFLAGS) $<
-
-LIBNL_OBJ=nl.o handlers.o msg.o attr.o cache.o cache_mngt.o object.o socket.o error.o
-GENL_OBJ=genl.o genl_family.o genl_ctrl.o genl_mngt.o unl.o
-
-$(LIBNAME): $(LIBNL_OBJ) $(GENL_OBJ)
-       $(CC) -shared -o $@ $^
diff --git a/package/libnl-tiny/src/attr.c b/package/libnl-tiny/src/attr.c
deleted file mode 100644 (file)
index e0f5061..0000000
+++ /dev/null
@@ -1,668 +0,0 @@
-/*
- * lib/attr.c          Netlink Attributes
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#include <netlink-local.h>
-#include <netlink/netlink.h>
-#include <netlink/utils.h>
-#include <netlink/addr.h>
-#include <netlink/attr.h>
-#include <netlink/msg.h>
-#include <linux/socket.h>
-
-/**
- * @ingroup msg
- * @defgroup attr Attributes
- * Netlink Attributes Construction/Parsing Interface
- *
- * \section attr_sec Netlink Attributes
- * Netlink attributes allow for data chunks of arbitary length to be
- * attached to a netlink message. Each attribute is encoded with a
- * type and length field, both 16 bits, stored in the attribute header
- * preceding the attribute data. The main advantage of using attributes
- * over packing everything into the family header is that the interface
- * stays extendable as new attributes can supersede old attributes while
- * remaining backwards compatible. Also attributes can be defined optional
- * thus avoiding the transmission of unnecessary empty data blocks.
- * Special nested attributes allow for more complex data structures to
- * be transmitted, e.g. trees, lists, etc.
- *
- * While not required, netlink attributes typically follow the family
- * header of a netlink message and must be properly aligned to NLA_ALIGNTO:
- * @code
- *   +----------------+- - -+---------------+- - -+------------+- - -+
- *   | Netlink Header | Pad | Family Header | Pad | Attributes | Pad |
- *   +----------------+- - -+---------------+- - -+------------+- - -+
- * @endcode
- *
- * The actual attributes are chained together each separately aligned to
- * NLA_ALIGNTO. The position of an attribute is defined based on the
- * length field of the preceding attributes:
- * @code
- *   +-------------+- - -+-------------+- - -+------
- *   | Attribute 1 | Pad | Attribute 2 | Pad | ...
- *   +-------------+- - -+-------------+- - -+------
- *   nla_next(attr1)------^
- * @endcode
- *
- * The attribute itself consists of the attribute header followed by
- * the actual payload also aligned to NLA_ALIGNTO. The function nla_data()
- * returns a pointer to the start of the payload while nla_len() returns
- * the length of the payload in bytes.
- *
- * \b Note: Be aware, NLA_ALIGNTO equals to 4 bytes, therefore it is not
- * safe to dereference any 64 bit data types directly.
- *
- * @code
- *    <----------- nla_total_size(payload) ----------->
- *    <-------- nla_attr_size(payload) --------->
- *   +------------------+- - -+- - - - - - - - - +- - -+
- *   | Attribute Header | Pad |     Payload      | Pad |
- *   +------------------+- - -+- - - - - - - - - +- - -+
- *   nla_data(nla)-------------^
- *                             <- nla_len(nla) ->
- * @endcode
- *
- * @subsection attr_datatypes Attribute Data Types
- * A number of basic data types are supported to simplify access and
- * validation of netlink attributes. This data type information is
- * not encoded in the attribute, both the kernel and userspace part
- * are required to share this information on their own.
- *
- * One of the major advantages of these basic types is the automatic
- * validation of each attribute based on an attribute policy. The
- * validation covers most of the checks required to safely use
- * attributes and thus keeps the individual sanity check to a minimum.
- *
- * Never access attribute payload without ensuring basic validation
- * first, attributes may:
- * - not be present even though required
- * - contain less actual payload than expected
- * - fake a attribute length which exceeds the end of the message
- * - contain unterminated character strings
- *
- * Policies are defined as array of the struct nla_policy. The array is
- * indexed with the attribute type, therefore the array must be sized
- * accordingly.
- * @code
- * static struct nla_policy my_policy[ATTR_MAX+1] = {
- *     [ATTR_FOO] = { .type = ..., .minlen = ..., .maxlen = ... },
- * };
- *
- * err = nla_validate(attrs, attrlen, ATTR_MAX, &my_policy);
- * @endcode
- *
- * Some basic validations are performed on every attribute, regardless of type.
- * - If the attribute type exceeds the maximum attribute type specified or
- *   the attribute type is lesser-or-equal than zero, the attribute will
- *   be silently ignored.
- * - If the payload length falls below the \a minlen value the attribute
- *   will be rejected.
- * - If \a maxlen is non-zero and the payload length exceeds the \a maxlen
- *   value the attribute will be rejected.
- *
- *
- * @par Unspecific Attribute (NLA_UNSPEC)
- * This is the standard type if no type is specified. It is used for
- * binary data of arbitary length. Typically this attribute carries
- * a binary structure or a stream of bytes.
- * @par
- * @code
- * // In this example, we will assume a binary structure requires to
- * // be transmitted. The definition of the structure will typically
- * // go into a header file available to both the kernel and userspace
- * // side.
- * //
- * // Note: Be careful when putting 64 bit data types into a structure.
- * // The attribute payload is only aligned to 4 bytes, dereferencing
- * // the member may fail.
- * struct my_struct {
- *     int a;
- *     int b;
- * };
- *
- * // The validation function will not enforce an exact length match to
- * // allow structures to grow as required. Note: While it is allowed
- * // to add members to the end of the structure, changing the order or
- * // inserting members in the middle of the structure will break your
- * // binary interface.
- * static struct nla_policy my_policy[ATTR_MAX+1] = {
- *     [ATTR_MY_STRICT] = { .type = NLA_UNSPEC,
- *                          .minlen = sizeof(struct my_struct) },
- *
- * // The binary structure is appened to the message using nla_put()
- * struct my_struct foo = { .a = 1, .b = 2 };
- * nla_put(msg, ATTR_MY_STRUCT, sizeof(foo), &foo);
- *
- * // On the receiving side, a pointer to the structure pointing inside
- * // the message payload is returned by nla_get().
- * if (attrs[ATTR_MY_STRUCT])
- *     struct my_struct *foo = nla_get(attrs[ATTR_MY_STRUCT]);
- * @endcode
- *
- * @par Integers (NLA_U8, NLA_U16, NLA_U32, NLA_U64)
- * Integers come in different sizes from 8 bit to 64 bit. However, since the
- * payload length is aligned to 4 bytes, integers smaller than 32 bit are
- * only useful to enforce the maximum range of values.
- * @par
- * \b Note: There is no difference made between signed and unsigned integers.
- * The validation only enforces the minimal payload length required to store
- * an integer of specified type.
- * @par
- * @code
- * // Even though possible, it does not make sense to specify .minlen or
- * // .maxlen for integer types. The data types implies the corresponding
- * // minimal payload length.
- * static struct nla_policy my_policy[ATTR_MAX+1] = {
- *     [ATTR_FOO] = { .type = NLA_U32 },
- *
- * // Numeric values can be appended directly using the respective
- * // nla_put_uxxx() function
- * nla_put_u32(msg, ATTR_FOO, 123);
- *
- * // Same for the receiving side.
- * if (attrs[ATTR_FOO])
- *     uint32_t foo = nla_get_u32(attrs[ATTR_FOO]);
- * @endcode
- *
- * @par Character string (NLA_STRING)
- * This data type represents a NUL terminated character string of variable
- * length. For binary data streams the type NLA_UNSPEC is recommended.
- * @par
- * @code
- * // Enforce a NUL terminated character string of at most 4 characters
- * // including the NUL termination.
- * static struct nla_policy my_policy[ATTR_MAX+1] = {
- *     [ATTR_BAR] = { .type = NLA_STRING, maxlen = 4 },
- *
- * // nla_put_string() creates a string attribute of the necessary length
- * // and appends it to the message including the NUL termination.
- * nla_put_string(msg, ATTR_BAR, "some text");
- *
- * // It is safe to use the returned character string directly if the
- * // attribute has been validated as the validation enforces the proper
- * // termination of the string.
- * if (attrs[ATTR_BAR])
- *     char *text = nla_get_string(attrs[ATTR_BAR]);
- * @endcode
- *
- * @par Flag (NLA_FLAG)
- * This attribute type may be used to indicate the presence of a flag. The
- * attribute is only valid if the payload length is zero. The presence of
- * the attribute header indicates the presence of the flag.
- * @par
- * @code
- * // This attribute type is special as .minlen and .maxlen have no effect.
- * static struct nla_policy my_policy[ATTR_MAX+1] = {
- *     [ATTR_FLAG] = { .type = NLA_FLAG },
- *
- * // nla_put_flag() appends a zero sized attribute to the message.
- * nla_put_flag(msg, ATTR_FLAG);
- *
- * // There is no need for a receival function, the presence is the value.
- * if (attrs[ATTR_FLAG])
- *     // flag is present
- * @endcode
- *
- * @par Micro Seconds (NLA_MSECS)
- *
- * @par Nested Attribute (NLA_NESTED)
- * Attributes can be nested and put into a container to create groups, lists
- * or to construct trees of attributes. Nested attributes are often used to
- * pass attributes to a subsystem where the top layer has no knowledge of the
- * configuration possibilities of each subsystem.
- * @par
- * \b Note: When validating the attributes using nlmsg_validate() or
- * nlmsg_parse() it will only affect the top level attributes. Each
- * level of nested attributes must be validated seperately using
- * nla_parse_nested() or nla_validate().
- * @par
- * @code
- * // The minimal length policy may be used to enforce the presence of at
- * // least one attribute.
- * static struct nla_policy my_policy[ATTR_MAX+1] = {
- *     [ATTR_OPTS] = { .type = NLA_NESTED, minlen = NLA_HDRLEN },
- *
- * // Nested attributes are constructed by enclosing the attributes
- * // to be nested with calls to nla_nest_start() respetively nla_nest_end().
- * struct nlattr *opts = nla_nest_start(msg, ATTR_OPTS);
- * nla_put_u32(msg, ATTR_FOO, 123);
- * nla_put_string(msg, ATTR_BAR, "some text");
- * nla_nest_end(msg, opts);
- *
- * // Various methods exist to parse nested attributes, the easiest being
- * // nla_parse_nested() which also allows validation in the same step.
- * if (attrs[ATTR_OPTS]) {
- *     struct nlattr *nested[ATTR_MAX+1];
- *
- *     nla_parse_nested(nested, ATTR_MAX, attrs[ATTR_OPTS], &policy);
- *
- *     if (nested[ATTR_FOO])
- *         uint32_t foo = nla_get_u32(nested[ATTR_FOO]);
- * }
- * @endcode
- *
- * @subsection attr_exceptions Exception Based Attribute Construction
- * Often a large number of attributes are added to a message in a single
- * function. In order to simplify error handling, a second set of
- * construction functions exist which jump to a error label when they
- * fail instead of returning an error code. This second set consists
- * of macros which are named after their error code based counterpart
- * except that the name is written all uppercase.
- *
- * All of the macros jump to the target \c nla_put_failure if they fail.
- * @code
- * void my_func(struct nl_msg *msg)
- * {
- *     NLA_PUT_U32(msg, ATTR_FOO, 10);
- *     NLA_PUT_STRING(msg, ATTR_BAR, "bar");
- *
- *     return 0;
- *
- * nla_put_failure:
- *     return -NLE_NOMEM;
- * }
- * @endcode
- *
- * @subsection attr_examples Examples
- * @par Example 1.1 Constructing a netlink message with attributes.
- * @code
- * struct nl_msg *build_msg(int ifindex, struct nl_addr *lladdr, int mtu)
- * {
- *     struct nl_msg *msg;
- *     struct nlattr *info, *vlan;
- *     struct ifinfomsg ifi = {
- *         .ifi_family = AF_INET,
- *         .ifi_index = ifindex,
- *     };
- *
- *     // Allocate a new netlink message, type=RTM_SETLINK, flags=NLM_F_ECHO
- *     if (!(msg = nlmsg_alloc_simple(RTM_SETLINK, NLM_F_ECHO)))
- *         return NULL;
- *
- *     // Append the family specific header (struct ifinfomsg)
- *     if (nlmsg_append(msg, &ifi, sizeof(ifi), NLMSG_ALIGNTO) < 0)
- *         goto nla_put_failure
- *
- *     // Append a 32 bit integer attribute to carry the MTU
- *     NLA_PUT_U32(msg, IFLA_MTU, mtu);
- *
- *     // Append a unspecific attribute to carry the link layer address
- *     NLA_PUT_ADDR(msg, IFLA_ADDRESS, lladdr);
- *
- *     // Append a container for nested attributes to carry link information
- *     if (!(info = nla_nest_start(msg, IFLA_LINKINFO)))
- *         goto nla_put_failure;
- *
- *     // Put a string attribute into the container
- *     NLA_PUT_STRING(msg, IFLA_INFO_KIND, "vlan");
- *
- *     // Append another container inside the open container to carry
- *     // vlan specific attributes
- *     if (!(vlan = nla_nest_start(msg, IFLA_INFO_DATA)))
- *         goto nla_put_failure;
- *
- *     // add vlan specific info attributes here...
- *
- *     // Finish nesting the vlan attributes and close the second container.
- *     nla_nest_end(msg, vlan);
- *
- *     // Finish nesting the link info attribute and close the first container.
- *     nla_nest_end(msg, info);
- *
- *     return msg;
- *
- * // If any of the construction macros fails, we end up here.
- * nla_put_failure:
- *     nlmsg_free(msg);
- *     return NULL;
- * }
- * @endcode
- *
- * @par Example 2.1 Parsing a netlink message with attributes.
- * @code
- * int parse_message(struct nl_msg *msg)
- * {
- *     // The policy defines two attributes: a 32 bit integer and a container
- *     // for nested attributes.
- *     struct nla_policy attr_policy[ATTR_MAX+1] = {
- *         [ATTR_FOO] = { .type = NLA_U32 },
- *         [ATTR_BAR] = { .type = NLA_NESTED },
- *     };
- *     struct nlattr *attrs[ATTR_MAX+1];
- *     int err;
- *
- *     // The nlmsg_parse() function will make sure that the message contains
- *     // enough payload to hold the header (struct my_hdr), validates any
- *     // attributes attached to the messages and stores a pointer to each
- *     // attribute in the attrs[] array accessable by attribute type.
- *     if ((err = nlmsg_parse(nlmsg_hdr(msg), sizeof(struct my_hdr), attrs,
- *                            ATTR_MAX, attr_policy)) < 0)
- *         goto errout;
- *
- *     if (attrs[ATTR_FOO]) {
- *         // It is safe to directly access the attribute payload without
- *         // any further checks since nlmsg_parse() enforced the policy.
- *         uint32_t foo = nla_get_u32(attrs[ATTR_FOO]);
- *     }
- *
- *     if (attrs[ATTR_BAR]) {
- *         struct nlattr *nested[NESTED_MAX+1];
- *
- *         // Attributes nested in a container can be parsed the same way
- *         // as top level attributes.
- *         if ((err = nla_parse_nested(nested, NESTED_MAX, attrs[ATTR_BAR],
- *                                     nested_policy)) < 0)
- *             goto errout;
- *
- *         // Process nested attributes here.
- *     }
- *
- *     err = 0;
- * errout:
- *     return err;
- * }
- * @endcode
- *
- * @{
- */
-
-/**
- * @name Attribute Size Calculation
- * @{
- */
-
-/** @} */
-
-/**
- * @name Parsing Attributes
- * @{
- */
-
-/**
- * Check if the attribute header and payload can be accessed safely.
- * @arg nla            Attribute of any kind.
- * @arg remaining      Number of bytes remaining in attribute stream.
- *
- * Verifies that the header and payload do not exceed the number of
- * bytes left in the attribute stream. This function must be called
- * before access the attribute header or payload when iterating over
- * the attribute stream using nla_next().
- *
- * @return True if the attribute can be accessed safely, false otherwise.
- */
-int nla_ok(const struct nlattr *nla, int remaining)
-{
-       return remaining >= sizeof(*nla) &&
-              nla->nla_len >= sizeof(*nla) &&
-              nla->nla_len <= remaining;
-}
-
-/**
- * Return next attribute in a stream of attributes.
- * @arg nla            Attribute of any kind.
- * @arg remaining      Variable to count remaining bytes in stream.
- *
- * Calculates the offset to the next attribute based on the attribute
- * given. The attribute provided is assumed to be accessible, the
- * caller is responsible to use nla_ok() beforehand. The offset (length
- * of specified attribute including padding) is then subtracted from
- * the remaining bytes variable and a pointer to the next attribute is
- * returned.
- *
- * nla_next() can be called as long as remainig is >0.
- *
- * @return Pointer to next attribute.
- */
-struct nlattr *nla_next(const struct nlattr *nla, int *remaining)
-{
-       int totlen = NLA_ALIGN(nla->nla_len);
-
-       *remaining -= totlen;
-       return (struct nlattr *) ((char *) nla + totlen);
-}
-
-static uint16_t nla_attr_minlen[NLA_TYPE_MAX+1] = {
-       [NLA_U8]        = sizeof(uint8_t),
-       [NLA_U16]       = sizeof(uint16_t),
-       [NLA_U32]       = sizeof(uint32_t),
-       [NLA_U64]       = sizeof(uint64_t),
-       [NLA_STRING]    = 1,
-};
-
-static int validate_nla(struct nlattr *nla, int maxtype,
-                       struct nla_policy *policy)
-{
-       struct nla_policy *pt;
-       int minlen = 0, type = nla_type(nla);
-
-       if (type <= 0 || type > maxtype)
-               return 0;
-
-       pt = &policy[type];
-
-       if (pt->type > NLA_TYPE_MAX)
-               BUG();
-
-       if (pt->minlen)
-               minlen = pt->minlen;
-       else if (pt->type != NLA_UNSPEC)
-               minlen = nla_attr_minlen[pt->type];
-
-       if (pt->type == NLA_FLAG && nla_len(nla) > 0)
-               return -NLE_RANGE;
-
-       if (nla_len(nla) < minlen)
-               return -NLE_RANGE;
-
-       if (pt->maxlen && nla_len(nla) > pt->maxlen)
-               return -NLE_RANGE;
-
-       if (pt->type == NLA_STRING) {
-               char *data = nla_data(nla);
-               if (data[nla_len(nla) - 1] != '\0')
-                       return -NLE_INVAL;
-       }
-
-       return 0;
-}
-
-
-/**
- * Create attribute index based on a stream of attributes.
- * @arg tb             Index array to be filled (maxtype+1 elements).
- * @arg maxtype                Maximum attribute type expected and accepted.
- * @arg head           Head of attribute stream.
- * @arg len            Length of attribute stream.
- * @arg policy         Attribute validation policy.
- *
- * Iterates over the stream of attributes and stores a pointer to each
- * attribute in the index array using the attribute type as index to
- * the array. Attribute with a type greater than the maximum type
- * specified will be silently ignored in order to maintain backwards
- * compatibility. If \a policy is not NULL, the attribute will be
- * validated using the specified policy.
- *
- * @see nla_validate
- * @return 0 on success or a negative error code.
- */
-int nla_parse(struct nlattr *tb[], int maxtype, struct nlattr *head, int len,
-             struct nla_policy *policy)
-{
-       struct nlattr *nla;
-       int rem, err;
-
-       memset(tb, 0, sizeof(struct nlattr *) * (maxtype + 1));
-
-       nla_for_each_attr(nla, head, len, rem) {
-               int type = nla_type(nla);
-
-               if (type == 0) {
-                       fprintf(stderr, "Illegal nla->nla_type == 0\n");
-                       continue;
-               }
-
-               if (type <= maxtype) {
-                       if (policy) {
-                               err = validate_nla(nla, maxtype, policy);
-                               if (err < 0)
-                                       goto errout;
-                       }
-
-                       tb[type] = nla;
-               }
-       }
-
-       if (rem > 0)
-               fprintf(stderr, "netlink: %d bytes leftover after parsing "
-                      "attributes.\n", rem);
-
-       err = 0;
-errout:
-       return err;
-}
-
-/**
- * Validate a stream of attributes.
- * @arg head           Head of attributes stream.
- * @arg len            Length of attributes stream.
- * @arg maxtype                Maximum attribute type expected and accepted.
- * @arg policy         Validation policy.
- *
- * Iterates over the stream of attributes and validates each attribute
- * one by one using the specified policy. Attributes with a type greater
- * than the maximum type specified will be silently ignored in order to
- * maintain backwards compatibility.
- *
- * See \ref attr_datatypes for more details on what kind of validation
- * checks are performed on each attribute data type.
- *
- * @return 0 on success or a negative error code.
- */
-int nla_validate(struct nlattr *head, int len, int maxtype,
-                struct nla_policy *policy)
-{
-       struct nlattr *nla;
-       int rem, err;
-
-       nla_for_each_attr(nla, head, len, rem) {
-               err = validate_nla(nla, maxtype, policy);
-               if (err < 0)
-                       goto errout;
-       }
-
-       err = 0;
-errout:
-       return err;
-}
-
-/**
- * Find a single attribute in a stream of attributes.
- * @arg head           Head of attributes stream.
- * @arg len            Length of attributes stream.
- * @arg attrtype       Attribute type to look for.
- *
- * Iterates over the stream of attributes and compares each type with
- * the type specified. Returns the first attribute which matches the
- * type.
- *
- * @return Pointer to attribute found or NULL.
- */
-struct nlattr *nla_find(struct nlattr *head, int len, int attrtype)
-{
-       struct nlattr *nla;
-       int rem;
-
-       nla_for_each_attr(nla, head, len, rem)
-               if (nla_type(nla) == attrtype)
-                       return nla;
-
-       return NULL;
-}
-
-/** @} */
-
-/**
- * @name Unspecific Attribute
- * @{
- */
-
-/**
- * Reserve space for a attribute.
- * @arg msg            Netlink Message.
- * @arg attrtype       Attribute Type.
- * @arg attrlen                Length of payload.
- *
- * Reserves room for a attribute in the specified netlink message and
- * fills in the attribute header (type, length). Returns NULL if there
- * is unsuficient space for the attribute.
- *
- * Any padding between payload and the start of the next attribute is
- * zeroed out.
- *
- * @return Pointer to start of attribute or NULL on failure.
- */
-struct nlattr *nla_reserve(struct nl_msg *msg, int attrtype, int attrlen)
-{
-       struct nlattr *nla;
-       int tlen;
-       
-       tlen = NLMSG_ALIGN(msg->nm_nlh->nlmsg_len) + nla_total_size(attrlen);
-
-       if ((tlen + msg->nm_nlh->nlmsg_len) > msg->nm_size)
-               return NULL;
-
-       nla = (struct nlattr *) nlmsg_tail(msg->nm_nlh);
-       nla->nla_type = attrtype;
-       nla->nla_len = nla_attr_size(attrlen);
-
-       memset((unsigned char *) nla + nla->nla_len, 0, nla_padlen(attrlen));
-       msg->nm_nlh->nlmsg_len = tlen;
-
-       NL_DBG(2, "msg %p: Reserved %d bytes at offset +%td for attr %d "
-                 "nlmsg_len=%d\n", msg, attrlen,
-                 (void *) nla - nlmsg_data(msg->nm_nlh),
-                 attrtype, msg->nm_nlh->nlmsg_len);
-
-       return nla;
-}
-
-/**
- * Add a unspecific attribute to netlink message.
- * @arg msg            Netlink message.
- * @arg attrtype       Attribute type.
- * @arg datalen                Length of data to be used as payload.
- * @arg data           Pointer to data to be used as attribute payload.
- *
- * Reserves room for a unspecific attribute and copies the provided data
- * into the message as payload of the attribute. Returns an error if there
- * is insufficient space for the attribute.
- *
- * @see nla_reserve
- * @return 0 on success or a negative error code.
- */
-int nla_put(struct nl_msg *msg, int attrtype, int datalen, const void *data)
-{
-       struct nlattr *nla;
-
-       nla = nla_reserve(msg, attrtype, datalen);
-       if (!nla)
-               return -NLE_NOMEM;
-
-       memcpy(nla_data(nla), data, datalen);
-       NL_DBG(2, "msg %p: Wrote %d bytes at offset +%td for attr %d\n",
-              msg, datalen, (void *) nla - nlmsg_data(msg->nm_nlh), attrtype);
-
-       return 0;
-}
-
-
-
-/** @} */
diff --git a/package/libnl-tiny/src/cache.c b/package/libnl-tiny/src/cache.c
deleted file mode 100644 (file)
index 0e14574..0000000
+++ /dev/null
@@ -1,839 +0,0 @@
-/*
- * lib/cache.c         Caching Module
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-/**
- * @ingroup cache_mngt
- * @defgroup cache Cache
- *
- * @code
- *   Cache Management             |    | Type Specific Cache Operations
- *                                      
- *                                |    | +----------------+ +------------+
- *                                       | request update | | msg_parser |
- *                                |    | +----------------+ +------------+
- *                                     +- - - - -^- - - - - - - -^- -|- - - -
- *    nl_cache_update:            |              |               |   |
- *          1) --------- co_request_update ------+               |   |
- *                                |                              |   |
- *          2) destroy old cache     +----------- pp_cb ---------|---+
- *                                |  |                           |
- *          3) ---------- nl_recvmsgs ----------+   +- cb_valid -+
- *             +--------------+   |  |          |   |
- *             | nl_cache_add |<-----+   + - - -v- -|- - - - - - - - - - -
- *             +--------------+   |      | +-------------+
- *                                         | nl_recvmsgs |
- *                                |      | +-----|-^-----+
- *                                           +---v-|---+
- *                                |      |   | nl_recv |
- *                                           +---------+
- *                                |      |                 Core Netlink
- * @endcode
- * 
- * @{
- */
-
-#include <netlink-local.h>
-#include <netlink/netlink.h>
-#include <netlink/cache.h>
-#include <netlink/object.h>
-#include <netlink/utils.h>
-
-/**
- * @name Access Functions
- * @{
- */
-
-#ifdef disabled
-/**
- * Return the number of items in the cache
- * @arg cache          cache handle
- */
-int nl_cache_nitems(struct nl_cache *cache)
-{
-       return cache->c_nitems;
-}
-
-/**
- * Return the number of items matching a filter in the cache
- * @arg cache          Cache object.
- * @arg filter         Filter object.
- */
-int nl_cache_nitems_filter(struct nl_cache *cache, struct nl_object *filter)
-{
-       struct nl_object_ops *ops;
-       struct nl_object *obj;
-       int nitems = 0;
-
-       if (cache->c_ops == NULL)
-               BUG();
-
-       ops = cache->c_ops->co_obj_ops;
-       
-       nl_list_for_each_entry(obj, &cache->c_items, ce_list) {
-               if (filter && !nl_object_match_filter(obj, filter))
-                       continue;
-
-               nitems++;
-       }
-
-       return nitems;
-}
-
-/**
- * Returns \b true if the cache is empty.
- * @arg cache          Cache to check
- * @return \a true if the cache is empty, otherwise \b false is returned.
- */
-int nl_cache_is_empty(struct nl_cache *cache)
-{
-       return nl_list_empty(&cache->c_items);
-}
-
-/**
- * Return the operations set of the cache
- * @arg cache          cache handle
- */
-struct nl_cache_ops *nl_cache_get_ops(struct nl_cache *cache)
-{
-       return cache->c_ops;
-}
-
-/**
- * Return the first element in the cache
- * @arg cache          cache handle
- */
-struct nl_object *nl_cache_get_first(struct nl_cache *cache)
-{
-       if (nl_list_empty(&cache->c_items))
-               return NULL;
-
-       return nl_list_entry(cache->c_items.next,
-                            struct nl_object, ce_list);
-}
-
-/**
- * Return the last element in the cache
- * @arg cache          cache handle
- */
-struct nl_object *nl_cache_get_last(struct nl_cache *cache)
-{
-       if (nl_list_empty(&cache->c_items))
-               return NULL;
-
-       return nl_list_entry(cache->c_items.prev,
-                            struct nl_object, ce_list);
-}
-
-/**
- * Return the next element in the cache
- * @arg obj            current object
- */
-struct nl_object *nl_cache_get_next(struct nl_object *obj)
-{
-       if (nl_list_at_tail(obj, &obj->ce_cache->c_items, ce_list))
-               return NULL;
-       else
-               return nl_list_entry(obj->ce_list.next,
-                                    struct nl_object, ce_list);
-}
-
-/**
- * Return the previous element in the cache
- * @arg obj            current object
- */
-struct nl_object *nl_cache_get_prev(struct nl_object *obj)
-{
-       if (nl_list_at_head(obj, &obj->ce_cache->c_items, ce_list))
-               return NULL;
-       else
-               return nl_list_entry(obj->ce_list.prev,
-                                    struct nl_object, ce_list);
-}
-#endif
-
-/** @} */
-
-/**
- * @name Cache Creation/Deletion
- * @{
- */
-
-/**
- * Allocate an empty cache
- * @arg ops            cache operations to base the cache on
- * 
- * @return A newly allocated and initialized cache.
- */
-struct nl_cache *nl_cache_alloc(struct nl_cache_ops *ops)
-{
-       struct nl_cache *cache;
-
-       cache = calloc(1, sizeof(*cache));
-       if (!cache)
-               return NULL;
-
-       nl_init_list_head(&cache->c_items);
-       cache->c_ops = ops;
-
-       NL_DBG(2, "Allocated cache %p <%s>.\n", cache, nl_cache_name(cache));
-
-       return cache;
-}
-
-int nl_cache_alloc_and_fill(struct nl_cache_ops *ops, struct nl_sock *sock,
-                           struct nl_cache **result)
-{
-       struct nl_cache *cache;
-       int err;
-       
-       if (!(cache = nl_cache_alloc(ops)))
-               return -NLE_NOMEM;
-
-       if (sock && (err = nl_cache_refill(sock, cache)) < 0) {
-               nl_cache_free(cache);
-               return err;
-       }
-
-       *result = cache;
-       return 0;
-}
-
-#ifdef disabled
-/**
- * Allocate an empty cache based on type name
- * @arg kind           Name of cache type
- * @return A newly allocated and initialized cache.
- */
-int nl_cache_alloc_name(const char *kind, struct nl_cache **result)
-{
-       struct nl_cache_ops *ops;
-       struct nl_cache *cache;
-
-       ops = nl_cache_ops_lookup(kind);
-       if (!ops)
-               return -NLE_NOCACHE;
-
-       if (!(cache = nl_cache_alloc(ops)))
-               return -NLE_NOMEM;
-
-       *result = cache;
-       return 0;
-}
-
-/**
- * Allocate a new cache containing a subset of a cache
- * @arg orig           Original cache to be based on
- * @arg filter         Filter defining the subset to be filled into new cache
- * @return A newly allocated cache or NULL.
- */
-struct nl_cache *nl_cache_subset(struct nl_cache *orig,
-                                struct nl_object *filter)
-{
-       struct nl_cache *cache;
-       struct nl_object_ops *ops;
-       struct nl_object *obj;
-
-       if (!filter)
-               BUG();
-
-       cache = nl_cache_alloc(orig->c_ops);
-       if (!cache)
-               return NULL;
-
-       ops = orig->c_ops->co_obj_ops;
-
-       nl_list_for_each_entry(obj, &orig->c_items, ce_list) {
-               if (!nl_object_match_filter(obj, filter))
-                       continue;
-
-               nl_cache_add(cache, obj);
-       }
-
-       return cache;
-}
-#endif
-
-/**
- * Clear a cache.
- * @arg cache          cache to clear
- *
- * Removes all elements of a cache.
- */
-void nl_cache_clear(struct nl_cache *cache)
-{
-       struct nl_object *obj, *tmp;
-
-       NL_DBG(1, "Clearing cache %p <%s>...\n", cache, nl_cache_name(cache));
-
-       nl_list_for_each_entry_safe(obj, tmp, &cache->c_items, ce_list)
-               nl_cache_remove(obj);
-}
-
-/**
- * Free a cache.
- * @arg cache          Cache to free.
- *
- * Removes all elements of a cache and frees all memory.
- *
- * @note Use this function if you are working with allocated caches.
- */
-void nl_cache_free(struct nl_cache *cache)
-{
-       if (!cache)
-               return;
-
-       nl_cache_clear(cache);
-       NL_DBG(1, "Freeing cache %p <%s>...\n", cache, nl_cache_name(cache));
-       free(cache);
-}
-
-/** @} */
-
-/**
- * @name Cache Modifications
- * @{
- */
-
-static int __cache_add(struct nl_cache *cache, struct nl_object *obj)
-{
-       obj->ce_cache = cache;
-
-       nl_list_add_tail(&obj->ce_list, &cache->c_items);
-       cache->c_nitems++;
-
-       NL_DBG(1, "Added %p to cache %p <%s>.\n",
-              obj, cache, nl_cache_name(cache));
-
-       return 0;
-}
-
-/**
- * Add object to a cache.
- * @arg cache          Cache to add object to
- * @arg obj            Object to be added to the cache
- *
- * Adds the given object to the specified cache. The object is cloned
- * if it has been added to another cache already.
- *
- * @return 0 or a negative error code.
- */
-int nl_cache_add(struct nl_cache *cache, struct nl_object *obj)
-{
-       struct nl_object *new;
-
-       if (cache->c_ops->co_obj_ops != obj->ce_ops)
-               return -NLE_OBJ_MISMATCH;
-
-       if (!nl_list_empty(&obj->ce_list)) {
-               new = nl_object_clone(obj);
-               if (!new)
-                       return -NLE_NOMEM;
-       } else {
-               nl_object_get(obj);
-               new = obj;
-       }
-
-       return __cache_add(cache, new);
-}
-
-#ifdef disabled
-/**
- * Move object from one cache to another
- * @arg cache          Cache to move object to.
- * @arg obj            Object subject to be moved
- *
- * Removes the given object from its associated cache if needed
- * and adds it to the new cache.
- *
- * @return 0 on success or a negative error code.
- */
-int nl_cache_move(struct nl_cache *cache, struct nl_object *obj)
-{
-       if (cache->c_ops->co_obj_ops != obj->ce_ops)
-               return -NLE_OBJ_MISMATCH;
-
-       NL_DBG(3, "Moving object %p to cache %p\n", obj, cache);
-       
-       /* Acquire reference, if already in a cache this will be
-        * reverted during removal */
-       nl_object_get(obj);
-
-       if (!nl_list_empty(&obj->ce_list))
-               nl_cache_remove(obj);
-
-       return __cache_add(cache, obj);
-}
-#endif
-
-/**
- * Removes an object from a cache.
- * @arg obj            Object to remove from its cache
- *
- * Removes the object \c obj from the cache it is assigned to, since
- * an object can only be assigned to one cache at a time, the cache
- * must ne be passed along with it.
- */
-void nl_cache_remove(struct nl_object *obj)
-{
-       struct nl_cache *cache = obj->ce_cache;
-
-       if (cache == NULL)
-               return;
-
-       nl_list_del(&obj->ce_list);
-       obj->ce_cache = NULL;
-       nl_object_put(obj);
-       cache->c_nitems--;
-
-       NL_DBG(1, "Deleted %p from cache %p <%s>.\n",
-              obj, cache, nl_cache_name(cache));
-}
-
-#ifdef disabled
-/**
- * Search for an object in a cache
- * @arg cache          Cache to search in.
- * @arg needle         Object to look for.
- *
- * Iterates over the cache and looks for an object with identical
- * identifiers as the needle.
- *
- * @return Reference to object or NULL if not found.
- * @note The returned object must be returned via nl_object_put().
- */
-struct nl_object *nl_cache_search(struct nl_cache *cache,
-                                 struct nl_object *needle)
-{
-       struct nl_object *obj;
-
-       nl_list_for_each_entry(obj, &cache->c_items, ce_list) {
-               if (nl_object_identical(obj, needle)) {
-                       nl_object_get(obj);
-                       return obj;
-               }
-       }
-
-       return NULL;
-}
-#endif
-
-/** @} */
-
-/**
- * @name Synchronization
- * @{
- */
-
-/**
- * Request a full dump from the kernel to fill a cache
- * @arg sk             Netlink socket.
- * @arg cache          Cache subjected to be filled.
- *
- * Send a dumping request to the kernel causing it to dump all objects
- * related to the specified cache to the netlink socket.
- *
- * Use nl_cache_pickup() to read the objects from the socket and fill them
- * into a cache.
- */
-int nl_cache_request_full_dump(struct nl_sock *sk, struct nl_cache *cache)
-{
-       NL_DBG(2, "Requesting dump from kernel for cache %p <%s>...\n",
-                 cache, nl_cache_name(cache));
-
-       if (cache->c_ops->co_request_update == NULL)
-               return -NLE_OPNOTSUPP;
-
-       return cache->c_ops->co_request_update(cache, sk);
-}
-
-/** @cond SKIP */
-struct update_xdata {
-       struct nl_cache_ops *ops;
-       struct nl_parser_param *params;
-};
-
-static int update_msg_parser(struct nl_msg *msg, void *arg)
-{
-       struct update_xdata *x = arg;
-       
-       return nl_cache_parse(x->ops, &msg->nm_src, msg->nm_nlh, x->params);
-}
-/** @endcond */
-
-int __cache_pickup(struct nl_sock *sk, struct nl_cache *cache,
-                  struct nl_parser_param *param)
-{
-       int err;
-       struct nl_cb *cb;
-       struct update_xdata x = {
-               .ops = cache->c_ops,
-               .params = param,
-       };
-
-       NL_DBG(1, "Picking up answer for cache %p <%s>...\n",
-                 cache, nl_cache_name(cache));
-
-       cb = nl_cb_clone(sk->s_cb);
-       if (cb == NULL)
-               return -NLE_NOMEM;
-
-       nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, update_msg_parser, &x);
-
-       err = nl_recvmsgs(sk, cb);
-       if (err < 0)
-               NL_DBG(2, "While picking up for %p <%s>, recvmsgs() returned " \
-                      "%d: %s", cache, nl_cache_name(cache),
-                      err, nl_geterror(err));
-
-       nl_cb_put(cb);
-
-       return err;
-}
-
-static int pickup_cb(struct nl_object *c, struct nl_parser_param *p)
-{
-       return nl_cache_add((struct nl_cache *) p->pp_arg, c);
-}
-
-/**
- * Pickup a netlink dump response and put it into a cache.
- * @arg sk             Netlink socket.
- * @arg cache          Cache to put items into.
- *
- * Waits for netlink messages to arrive, parses them and puts them into
- * the specified cache.
- *
- * @return 0 on success or a negative error code.
- */
-int nl_cache_pickup(struct nl_sock *sk, struct nl_cache *cache)
-{
-       struct nl_parser_param p = {
-               .pp_cb = pickup_cb,
-               .pp_arg = cache,
-       };
-
-       return __cache_pickup(sk, cache, &p);
-}
-
-#ifdef disabled
-static int cache_include(struct nl_cache *cache, struct nl_object *obj,
-                        struct nl_msgtype *type, change_func_t cb)
-{
-       struct nl_object *old;
-
-       switch (type->mt_act) {
-       case NL_ACT_NEW:
-       case NL_ACT_DEL:
-               old = nl_cache_search(cache, obj);
-               if (old) {
-                       nl_cache_remove(old);
-                       if (type->mt_act == NL_ACT_DEL) {
-                               if (cb)
-                                       cb(cache, old, NL_ACT_DEL);
-                               nl_object_put(old);
-                       }
-               }
-
-               if (type->mt_act == NL_ACT_NEW) {
-                       nl_cache_move(cache, obj);
-                       if (old == NULL && cb)
-                               cb(cache, obj, NL_ACT_NEW);
-                       else if (old) {
-                               if (nl_object_diff(old, obj) && cb)
-                                       cb(cache, obj, NL_ACT_CHANGE);
-
-                               nl_object_put(old);
-                       }
-               }
-               break;
-       default:
-               NL_DBG(2, "Unknown action associated to object %p\n", obj);
-               return 0;
-       }
-
-       return 0;
-}
-
-int nl_cache_include(struct nl_cache *cache, struct nl_object *obj,
-                    change_func_t change_cb)
-{
-       struct nl_cache_ops *ops = cache->c_ops;
-       int i;
-
-       if (ops->co_obj_ops != obj->ce_ops)
-               return -NLE_OBJ_MISMATCH;
-
-       for (i = 0; ops->co_msgtypes[i].mt_id >= 0; i++)
-               if (ops->co_msgtypes[i].mt_id == obj->ce_msgtype)
-                       return cache_include(cache, obj, &ops->co_msgtypes[i],
-                                            change_cb);
-
-       return -NLE_MSGTYPE_NOSUPPORT;
-}
-
-static int resync_cb(struct nl_object *c, struct nl_parser_param *p)
-{
-       struct nl_cache_assoc *ca = p->pp_arg;
-
-       return nl_cache_include(ca->ca_cache, c, ca->ca_change);
-}
-
-int nl_cache_resync(struct nl_sock *sk, struct nl_cache *cache,
-                   change_func_t change_cb)
-{
-       struct nl_object *obj, *next;
-       struct nl_cache_assoc ca = {
-               .ca_cache = cache,
-               .ca_change = change_cb,
-       };
-       struct nl_parser_param p = {
-               .pp_cb = resync_cb,
-               .pp_arg = &ca,
-       };
-       int err;
-
-       NL_DBG(1, "Resyncing cache %p <%s>...\n", cache, nl_cache_name(cache));
-
-       /* Mark all objects so we can see if some of them are obsolete */
-       nl_cache_mark_all(cache);
-
-       err = nl_cache_request_full_dump(sk, cache);
-       if (err < 0)
-               goto errout;
-
-       err = __cache_pickup(sk, cache, &p);
-       if (err < 0)
-               goto errout;
-
-       nl_list_for_each_entry_safe(obj, next, &cache->c_items, ce_list)
-               if (nl_object_is_marked(obj))
-                       nl_cache_remove(obj);
-
-       NL_DBG(1, "Finished resyncing %p <%s>\n", cache, nl_cache_name(cache));
-
-       err = 0;
-errout:
-       return err;
-}
-#endif
-
-/** @} */
-
-/**
- * @name Parsing
- * @{
- */
-
-/** @cond SKIP */
-int nl_cache_parse(struct nl_cache_ops *ops, struct sockaddr_nl *who,
-                  struct nlmsghdr *nlh, struct nl_parser_param *params)
-{
-       int i, err;
-
-       if (!nlmsg_valid_hdr(nlh, ops->co_hdrsize))
-               return -NLE_MSG_TOOSHORT;
-
-       for (i = 0; ops->co_msgtypes[i].mt_id >= 0; i++) {
-               if (ops->co_msgtypes[i].mt_id == nlh->nlmsg_type) {
-                       err = ops->co_msg_parser(ops, who, nlh, params);
-                       if (err != -NLE_OPNOTSUPP)
-                               goto errout;
-               }
-       }
-
-
-       err = -NLE_MSGTYPE_NOSUPPORT;
-errout:
-       return err;
-}
-/** @endcond */
-
-/**
- * Parse a netlink message and add it to the cache.
- * @arg cache          cache to add element to
- * @arg msg            netlink message
- *
- * Parses a netlink message by calling the cache specific message parser
- * and adds the new element to the cache.
- *
- * @return 0 or a negative error code.
- */
-int nl_cache_parse_and_add(struct nl_cache *cache, struct nl_msg *msg)
-{
-       struct nl_parser_param p = {
-               .pp_cb = pickup_cb,
-               .pp_arg = cache,
-       };
-
-       return nl_cache_parse(cache->c_ops, NULL, nlmsg_hdr(msg), &p);
-}
-
-/**
- * (Re)fill a cache with the contents in the kernel.
- * @arg sk             Netlink socket.
- * @arg cache          cache to update
- *
- * Clears the specified cache and fills it with the current state in
- * the kernel.
- *
- * @return 0 or a negative error code.
- */
-int nl_cache_refill(struct nl_sock *sk, struct nl_cache *cache)
-{
-       int err;
-
-       err = nl_cache_request_full_dump(sk, cache);
-       if (err < 0)
-               return err;
-
-       NL_DBG(2, "Upading cache %p <%s>, request sent, waiting for dump...\n",
-              cache, nl_cache_name(cache));
-       nl_cache_clear(cache);
-
-       return nl_cache_pickup(sk, cache);
-}
-
-/** @} */
-#ifdef disabled
-
-/**
- * @name Utillities
- * @{
- */
-
-/**
- * Mark all objects in a cache
- * @arg cache          Cache to mark all objects in
- */
-void nl_cache_mark_all(struct nl_cache *cache)
-{
-       struct nl_object *obj;
-
-       NL_DBG(2, "Marking all objects in cache %p <%s>...\n",
-                 cache, nl_cache_name(cache));
-
-       nl_list_for_each_entry(obj, &cache->c_items, ce_list)
-               nl_object_mark(obj);
-}
-
-/** @} */
-
-/**
- * @name Dumping
- * @{
- */
-/**
- * Dump all elements of a cache.
- * @arg cache          cache to dump
- * @arg params         dumping parameters
- *
- * Dumps all elements of the \a cache to the file descriptor \a fd.
- */
-void nl_cache_dump(struct nl_cache *cache, struct nl_dump_params *params)
-{
-       nl_cache_dump_filter(cache, params, NULL);
-}
-
-/**
- * Dump all elements of a cache (filtered).
- * @arg cache          cache to dump
- * @arg params         dumping parameters (optional)
- * @arg filter         filter object
- *
- * Dumps all elements of the \a cache to the file descriptor \a fd
- * given they match the given filter \a filter.
- */
-void nl_cache_dump_filter(struct nl_cache *cache,
-                         struct nl_dump_params *params,
-                         struct nl_object *filter)
-{
-       int type = params ? params->dp_type : NL_DUMP_DETAILS;
-       struct nl_object_ops *ops;
-       struct nl_object *obj;
-
-       NL_DBG(2, "Dumping cache %p <%s> filter %p\n",
-              cache, nl_cache_name(cache), filter);
-
-       if (type > NL_DUMP_MAX || type < 0)
-               BUG();
-
-       if (cache->c_ops == NULL)
-               BUG();
-
-       ops = cache->c_ops->co_obj_ops;
-       if (!ops->oo_dump[type])
-               return;
-
-       nl_list_for_each_entry(obj, &cache->c_items, ce_list) {
-               if (filter && !nl_object_match_filter(obj, filter))
-                       continue;
-
-               NL_DBG(4, "Dumping object %p...\n", obj);
-               dump_from_ops(obj, params);
-       }
-}
-
-/** @} */
-
-/**
- * @name Iterators
- * @{
- */
-
-/**
- * Call a callback on each element of the cache.
- * @arg cache          cache to iterate on
- * @arg cb             callback function
- * @arg arg            argument passed to callback function
- *
- * Calls a callback function \a cb on each element of the \a cache.
- * The argument \a arg is passed on the callback function.
- */
-void nl_cache_foreach(struct nl_cache *cache,
-                     void (*cb)(struct nl_object *, void *), void *arg)
-{
-       nl_cache_foreach_filter(cache, NULL, cb, arg);
-}
-
-/**
- * Call a callback on each element of the cache (filtered).
- * @arg cache          cache to iterate on
- * @arg filter         filter object
- * @arg cb             callback function
- * @arg arg            argument passed to callback function
- *
- * Calls a callback function \a cb on each element of the \a cache
- * that matches the \a filter. The argument \a arg is passed on
- * to the callback function.
- */
-void nl_cache_foreach_filter(struct nl_cache *cache, struct nl_object *filter,
-                            void (*cb)(struct nl_object *, void *), void *arg)
-{
-       struct nl_object *obj, *tmp;
-       struct nl_object_ops *ops;
-
-       if (cache->c_ops == NULL)
-               BUG();
-
-       ops = cache->c_ops->co_obj_ops;
-
-       nl_list_for_each_entry_safe(obj, tmp, &cache->c_items, ce_list) {
-               if (filter && !nl_object_match_filter(obj, filter))
-                       continue;
-
-               cb(obj, arg);
-       }
-}
-
-/** @} */
-#endif
-
-/** @} */
diff --git a/package/libnl-tiny/src/cache_mngt.c b/package/libnl-tiny/src/cache_mngt.c
deleted file mode 100644 (file)
index 5c32d2a..0000000
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * lib/cache_mngt.c    Cache Management
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-/**
- * @ingroup core
- * @defgroup cache_mngt Caching
- * @{
- */
-
-#include <netlink-local.h>
-#include <netlink/netlink.h>
-#include <netlink/cache.h>
-#include <netlink/utils.h>
-
-static struct nl_cache_ops *cache_ops;
-
-/**
- * @name Cache Operations Sets
- * @{
- */
-
-/**
- * Lookup the set cache operations of a certain cache type
- * @arg name           name of the cache type
- *
- * @return The cache operations or NULL if no operations
- *         have been registered under the specified name.
- */
-struct nl_cache_ops *nl_cache_ops_lookup(const char *name)
-{
-       struct nl_cache_ops *ops;
-
-       for (ops = cache_ops; ops; ops = ops->co_next)
-               if (!strcmp(ops->co_name, name))
-                       return ops;
-
-       return NULL;
-}
-
-/**
- * Associate a message type to a set of cache operations
- * @arg protocol               netlink protocol
- * @arg msgtype                        netlink message type
- *
- * Associates the specified netlink message type with
- * a registered set of cache operations.
- *
- * @return The cache operations or NULL if no association
- *         could be made.
- */
-struct nl_cache_ops *nl_cache_ops_associate(int protocol, int msgtype)
-{
-       int i;
-       struct nl_cache_ops *ops;
-
-       for (ops = cache_ops; ops; ops = ops->co_next) {
-               if (ops->co_protocol != protocol)
-                       continue;
-
-               for (i = 0; ops->co_msgtypes[i].mt_id >= 0; i++)
-                       if (ops->co_msgtypes[i].mt_id == msgtype)
-                               return ops;
-       }
-
-       return NULL;
-}
-
-#ifdef disabled
-
-/**
- * Lookup message type cache association
- * @arg ops                    cache operations
- * @arg msgtype                        netlink message type
- *
- * Searches for a matching message type association ing the specified
- * cache operations.
- *
- * @return A message type association or NULL.
- */
-struct nl_msgtype *nl_msgtype_lookup(struct nl_cache_ops *ops, int msgtype)
-{
-       int i;
-
-       for (i = 0; ops->co_msgtypes[i].mt_id >= 0; i++)
-               if (ops->co_msgtypes[i].mt_id == msgtype)
-                       return &ops->co_msgtypes[i];
-
-       return NULL;
-}
-
-static struct nl_cache_ops *cache_ops_lookup_for_obj(struct nl_object_ops *obj_ops)
-{
-       struct nl_cache_ops *ops;
-
-       for (ops = cache_ops; ops; ops = ops->co_next)
-               if (ops->co_obj_ops == obj_ops)
-                       return ops;
-
-       return NULL;
-
-}
-
-/**
- * Call a function for each registered cache operation
- * @arg cb             Callback function to be called
- * @arg arg            User specific argument.
- */
-void nl_cache_ops_foreach(void (*cb)(struct nl_cache_ops *, void *), void *arg)
-{
-       struct nl_cache_ops *ops;
-
-       for (ops = cache_ops; ops; ops = ops->co_next)
-               cb(ops, arg);
-}
-#endif
-
-/**
- * Register a set of cache operations
- * @arg ops            cache operations
- *
- * Called by users of caches to announce the avaibility of
- * a certain cache type.
- *
- * @return 0 on success or a negative error code.
- */
-int nl_cache_mngt_register(struct nl_cache_ops *ops)
-{
-       if (!ops->co_name || !ops->co_obj_ops)
-               return -NLE_INVAL;
-
-       if (nl_cache_ops_lookup(ops->co_name))
-               return -NLE_EXIST;
-
-       ops->co_next = cache_ops;
-       cache_ops = ops;
-
-       NL_DBG(1, "Registered cache operations %s\n", ops->co_name);
-
-       return 0;
-}
-
-/**
- * Unregister a set of cache operations
- * @arg ops            cache operations
- *
- * Called by users of caches to announce a set of
- * cache operations is no longer available. The
- * specified cache operations must have been registered
- * previously using nl_cache_mngt_register()
- *
- * @return 0 on success or a negative error code
- */
-int nl_cache_mngt_unregister(struct nl_cache_ops *ops)
-{
-       struct nl_cache_ops *t, **tp;
-
-       for (tp = &cache_ops; (t=*tp) != NULL; tp = &t->co_next)
-               if (t == ops)
-                       break;
-
-       if (!t)
-               return -NLE_NOCACHE;
-
-       NL_DBG(1, "Unregistered cache operations %s\n", ops->co_name);
-
-       *tp = t->co_next;
-       return 0;
-}
-
-/** @} */
-
-/**
- * @name Global Cache Provisioning/Requiring
- * @{
- */
-#ifdef disabled
-/**
- * Provide a cache for global use
- * @arg cache          cache to provide
- *
- * Offers the specified cache to be used by other modules.
- * Only one cache per type may be shared at a time,
- * a previsouly provided caches will be overwritten.
- */
-void nl_cache_mngt_provide(struct nl_cache *cache)
-{
-       struct nl_cache_ops *ops;
-
-       ops = cache_ops_lookup_for_obj(cache->c_ops->co_obj_ops);
-       if (!ops)
-               BUG();
-       else
-               ops->co_major_cache = cache;
-}
-
-/**
- * Unprovide a cache for global use
- * @arg cache          cache to unprovide
- *
- * Cancels the offer to use a cache globally. The
- * cache will no longer be returned via lookups but
- * may still be in use.
- */
-void nl_cache_mngt_unprovide(struct nl_cache *cache)
-{
-       struct nl_cache_ops *ops;
-
-       ops = cache_ops_lookup_for_obj(cache->c_ops->co_obj_ops);
-       if (!ops)
-               BUG();
-       else if (ops->co_major_cache == cache)
-               ops->co_major_cache = NULL;
-}
-
-/**
- * Demand the use of a global cache
- * @arg name           name of the required object type
- *
- * Trys to find a cache of the specified type for global
- * use.
- *
- * @return A cache provided by another subsystem of the
- *         specified type marked to be available.
- */
-struct nl_cache *nl_cache_mngt_require(const char *name)
-{
-       struct nl_cache_ops *ops;
-
-       ops = nl_cache_ops_lookup(name);
-       if (!ops || !ops->co_major_cache) {
-               fprintf(stderr, "Application BUG: Your application must "
-                       "call nl_cache_mngt_provide() and\nprovide a valid "
-                       "%s cache to be used for internal lookups.\nSee the "
-                       " API documentation for more details.\n", name);
-
-               return NULL;
-       }
-       
-       return ops->co_major_cache;
-}
-
-#endif
-/** @} */
-
-/** @} */
diff --git a/package/libnl-tiny/src/error.c b/package/libnl-tiny/src/error.c
deleted file mode 100644 (file)
index 71ae722..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * lib/error.c         Error Handling
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#include <netlink-local.h>
-#include <netlink/netlink.h>
-
-static const char *errmsg[NLE_MAX+1] = {
-[NLE_SUCCESS]          = "Success",
-[NLE_FAILURE]          = "Unspecific failure",
-[NLE_INTR]             = "Interrupted system call",
-[NLE_BAD_SOCK]         = "Bad socket",
-[NLE_AGAIN]            = "Try again",
-[NLE_NOMEM]            = "Out of memory",
-[NLE_EXIST]            = "Object exists",
-[NLE_INVAL]            = "Invalid input data or parameter",
-[NLE_RANGE]            = "Input data out of range",
-[NLE_MSGSIZE]          = "Message size not sufficient",
-[NLE_OPNOTSUPP]                = "Operation not supported",
-[NLE_AF_NOSUPPORT]     = "Address family not supported",
-[NLE_OBJ_NOTFOUND]     = "Object not found",
-[NLE_NOATTR]           = "Attribute not available",
-[NLE_MISSING_ATTR]     = "Missing attribute",
-[NLE_AF_MISMATCH]      = "Address family mismatch",
-[NLE_SEQ_MISMATCH]     = "Message sequence number mismatch",
-[NLE_MSG_OVERFLOW]     = "Kernel reported message overflow",
-[NLE_MSG_TRUNC]                = "Kernel reported truncated message",
-[NLE_NOADDR]           = "Invalid address for specified address family",
-[NLE_SRCRT_NOSUPPORT]  = "Source based routing not supported",
-[NLE_MSG_TOOSHORT]     = "Netlink message is too short",
-[NLE_MSGTYPE_NOSUPPORT]        = "Netlink message type is not supported",
-[NLE_OBJ_MISMATCH]     = "Object type does not match cache",
-[NLE_NOCACHE]          = "Unknown or invalid cache type",
-[NLE_BUSY]             = "Object busy",
-[NLE_PROTO_MISMATCH]   = "Protocol mismatch",
-[NLE_NOACCESS]         = "No Access",
-[NLE_PERM]             = "Operation not permitted",
-};
-
-/**
- * Return error message for an error code
- * @return error message
- */
-const char *nl_geterror(int error)
-{
-       error = abs(error);
-
-       if (error > NLE_MAX)
-               error = NLE_FAILURE;
-
-       return errmsg[error];
-}
-
-/**
- * Print a libnl error message
- * @arg s              error message prefix
- *
- * Prints the error message of the call that failed last.
- *
- * If s is not NULL and *s is not a null byte the argument
- * string is printed, followed by a colon and a blank. Then
- * the error message and a new-line.
- */
-void nl_perror(int error, const char *s)
-{
-       if (s && *s)
-               fprintf(stderr, "%s: %s\n", s, nl_geterror(error));
-       else
-               fprintf(stderr, "%s\n", nl_geterror(error));
-}
-
-int nl_syserr2nlerr(int error)
-{
-       error = abs(error);
-
-       switch (error) {
-       case EBADF:             return NLE_BAD_SOCK;
-       case EADDRINUSE:        return NLE_EXIST;
-       case EEXIST:            return NLE_EXIST;
-       case EADDRNOTAVAIL:     return NLE_NOADDR;
-       case ENOENT:            return NLE_OBJ_NOTFOUND;
-       case EINTR:             return NLE_INTR;
-       case EAGAIN:            return NLE_AGAIN;
-       case ENOTSOCK:          return NLE_BAD_SOCK;
-       case ENOPROTOOPT:       return NLE_INVAL;
-       case EFAULT:            return NLE_INVAL;
-       case EACCES:            return NLE_NOACCESS;
-       case EINVAL:            return NLE_INVAL;
-       case ENOBUFS:           return NLE_NOMEM;
-       case ENOMEM:            return NLE_NOMEM;
-       case EAFNOSUPPORT:      return NLE_AF_NOSUPPORT;
-       case EPROTONOSUPPORT:   return NLE_PROTO_MISMATCH;
-       case EOPNOTSUPP:        return NLE_OPNOTSUPP;
-       case EPERM:             return NLE_PERM;
-       case EBUSY:             return NLE_BUSY;
-       default:                return NLE_FAILURE;
-       }
-}
-
-/** @} */
-
diff --git a/package/libnl-tiny/src/genl.c b/package/libnl-tiny/src/genl.c
deleted file mode 100644 (file)
index 055be91..0000000
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- * lib/genl/genl.c             Generic Netlink
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-/**
- * @defgroup genl Generic Netlink
- *
- * @par Message Format
- * @code
- *  <------- NLMSG_ALIGN(hlen) ------> <---- NLMSG_ALIGN(len) --->
- * +----------------------------+- - -+- - - - - - - - - - -+- - -+
- * |           Header           | Pad |       Payload       | Pad |
- * |      struct nlmsghdr       |     |                     |     |
- * +----------------------------+- - -+- - - - - - - - - - -+- - -+
- * @endcode
- * @code
- *  <-------- GENL_HDRLEN -------> <--- hdrlen -->
- *                                 <------- genlmsg_len(ghdr) ------>
- * +------------------------+- - -+---------------+- - -+------------+
- * | Generic Netlink Header | Pad | Family Header | Pad | Attributes |
- * |    struct genlmsghdr   |     |               |     |            |
- * +------------------------+- - -+---------------+- - -+------------+
- * genlmsg_data(ghdr)--------------^                     ^
- * genlmsg_attrdata(ghdr, hdrlen)-------------------------
- * @endcode
- *
- * @par Example
- * @code
- * #include <netlink/netlink.h>
- * #include <netlink/genl/genl.h>
- * #include <netlink/genl/ctrl.h>
- *
- * struct nl_sock *sock;
- * struct nl_msg *msg;
- * int family;
- *
- * // Allocate a new netlink socket
- * sock = nl_socket_alloc();
- *
- * // Connect to generic netlink socket on kernel side
- * genl_connect(sock);
- *
- * // Ask kernel to resolve family name to family id
- * family = genl_ctrl_resolve(sock, "generic_netlink_family_name");
- *
- * // Construct a generic netlink by allocating a new message, fill in
- * // the header and append a simple integer attribute.
- * msg = nlmsg_alloc();
- * genlmsg_put(msg, NL_AUTO_PID, NL_AUTO_SEQ, family, 0, NLM_F_ECHO,
- *             CMD_FOO_GET, FOO_VERSION);
- * nla_put_u32(msg, ATTR_FOO, 123);
- *
- * // Send message over netlink socket
- * nl_send_auto_complete(sock, msg);
- *
- * // Free message
- * nlmsg_free(msg);
- *
- * // Prepare socket to receive the answer by specifying the callback
- * // function to be called for valid messages.
- * nl_socket_modify_cb(sock, NL_CB_VALID, NL_CB_CUSTOM, parse_cb, NULL);
- *
- * // Wait for the answer and receive it
- * nl_recvmsgs_default(sock);
- *
- * static int parse_cb(struct nl_msg *msg, void *arg)
- * {
- *     struct nlmsghdr *nlh = nlmsg_hdr(msg);
- *     struct nlattr *attrs[ATTR_MAX+1];
- *
- *     // Validate message and parse attributes
- *     genlmsg_parse(nlh, 0, attrs, ATTR_MAX, policy);
- *
- *     if (attrs[ATTR_FOO]) {
- *         uint32_t value = nla_get_u32(attrs[ATTR_FOO]);
- *         ...
- *     }
- *
- *     return 0;
- * }
- * @endcode
- * @{
- */
-
-#include <netlink-generic.h>
-#include <netlink/netlink.h>
-#include <netlink/genl/genl.h>
-#include <netlink/utils.h>
-
-/**
- * @name Socket Creating
- * @{
- */
-
-int genl_connect(struct nl_sock *sk)
-{
-       return nl_connect(sk, NETLINK_GENERIC);
-}
-
-/** @} */
-
-/**
- * @name Sending
- * @{
- */
-
-/**
- * Send trivial generic netlink message
- * @arg sk             Netlink socket.
- * @arg family         Generic netlink family
- * @arg cmd            Command
- * @arg version                Version
- * @arg flags          Additional netlink message flags.
- *
- * Fills out a routing netlink request message and sends it out
- * using nl_send_simple().
- *
- * @return 0 on success or a negative error code.
- */
-int genl_send_simple(struct nl_sock *sk, int family, int cmd,
-                    int version, int flags)
-{
-       struct genlmsghdr hdr = {
-               .cmd = cmd,
-               .version = version,
-       };
-
-       return nl_send_simple(sk, family, flags, &hdr, sizeof(hdr));
-}
-
-/** @} */
-
-
-/**
- * @name Message Parsing
- * @{
- */
-
-int genlmsg_valid_hdr(struct nlmsghdr *nlh, int hdrlen)
-{
-       struct genlmsghdr *ghdr;
-
-       if (!nlmsg_valid_hdr(nlh, GENL_HDRLEN))
-               return 0;
-
-       ghdr = nlmsg_data(nlh);
-       if (genlmsg_len(ghdr) < NLMSG_ALIGN(hdrlen))
-               return 0;
-
-       return 1;
-}
-
-int genlmsg_validate(struct nlmsghdr *nlh, int hdrlen, int maxtype,
-                  struct nla_policy *policy)
-{
-       struct genlmsghdr *ghdr;
-
-       if (!genlmsg_valid_hdr(nlh, hdrlen))
-               return -NLE_MSG_TOOSHORT;
-
-       ghdr = nlmsg_data(nlh);
-       return nla_validate(genlmsg_attrdata(ghdr, hdrlen),
-                           genlmsg_attrlen(ghdr, hdrlen), maxtype, policy);
-}
-
-int genlmsg_parse(struct nlmsghdr *nlh, int hdrlen, struct nlattr *tb[],
-                 int maxtype, struct nla_policy *policy)
-{
-       struct genlmsghdr *ghdr;
-
-       if (!genlmsg_valid_hdr(nlh, hdrlen))
-               return -NLE_MSG_TOOSHORT;
-
-       ghdr = nlmsg_data(nlh);
-       return nla_parse(tb, maxtype, genlmsg_attrdata(ghdr, hdrlen),
-                        genlmsg_attrlen(ghdr, hdrlen), policy);
-}
-
-/**
- * Get head of message payload
- * @arg gnlh   genetlink messsage header
- */
-void *genlmsg_data(const struct genlmsghdr *gnlh)
-{
-       return ((unsigned char *) gnlh + GENL_HDRLEN);
-}
-
-/**
- * Get lenght of message payload
- * @arg gnlh   genetlink message header
- */
-int genlmsg_len(const struct genlmsghdr *gnlh)
-{
-       struct nlmsghdr *nlh = (struct nlmsghdr *)((unsigned char *)gnlh -
-                                                       NLMSG_HDRLEN);
-       return (nlh->nlmsg_len - GENL_HDRLEN - NLMSG_HDRLEN);
-}
-
-/**
- * Get head of attribute data
- * @arg gnlh   generic netlink message header
- * @arg hdrlen length of family specific header
- */
-struct nlattr *genlmsg_attrdata(const struct genlmsghdr *gnlh, int hdrlen)
-{
-       return genlmsg_data(gnlh) + NLMSG_ALIGN(hdrlen);
-}
-
-/**
- * Get length of attribute data
- * @arg gnlh   generic netlink message header
- * @arg hdrlen length of family specific header
- */
-int genlmsg_attrlen(const struct genlmsghdr *gnlh, int hdrlen)
-{
-       return genlmsg_len(gnlh) - NLMSG_ALIGN(hdrlen);
-}
-
-/** @} */
-
-/**
- * @name Message Building
- * @{
- */
-
-/**
- * Add generic netlink header to netlink message
- * @arg msg            netlink message
- * @arg pid            netlink process id or NL_AUTO_PID
- * @arg seq            sequence number of message or NL_AUTO_SEQ
- * @arg family         generic netlink family
- * @arg hdrlen         length of user specific header
- * @arg flags          message flags
- * @arg cmd            generic netlink command
- * @arg version                protocol version
- *
- * Returns pointer to user specific header.
- */
-void *genlmsg_put(struct nl_msg *msg, uint32_t pid, uint32_t seq, int family,
-                 int hdrlen, int flags, uint8_t cmd, uint8_t version)
-{
-       struct nlmsghdr *nlh;
-       struct genlmsghdr hdr = {
-               .cmd = cmd,
-               .version = version,
-       };
-
-       nlh = nlmsg_put(msg, pid, seq, family, GENL_HDRLEN + hdrlen, flags);
-       if (nlh == NULL)
-               return NULL;
-
-       memcpy(nlmsg_data(nlh), &hdr, sizeof(hdr));
-       NL_DBG(2, "msg %p: Added generic netlink header cmd=%d version=%d\n",
-              msg, cmd, version);
-
-       return nlmsg_data(nlh) + GENL_HDRLEN;
-}
-
-/** @} */
-
-/** @} */
diff --git a/package/libnl-tiny/src/genl_ctrl.c b/package/libnl-tiny/src/genl_ctrl.c
deleted file mode 100644 (file)
index 1301642..0000000
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- * lib/genl/ctrl.c             Generic Netlink Controller
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-/**
- * @ingroup genl_mngt
- * @defgroup ctrl Controller
- * @brief
- *
- * @{
- */
-
-#include <netlink-generic.h>
-#include <netlink/netlink.h>
-#include <netlink/genl/genl.h>
-#include <netlink/genl/family.h>
-#include <netlink/genl/mngt.h>
-#include <netlink/genl/ctrl.h>
-#include <netlink/utils.h>
-
-/** @cond SKIP */
-#define CTRL_VERSION           0x0001
-
-static struct nl_cache_ops genl_ctrl_ops;
-/** @endcond */
-
-static int ctrl_request_update(struct nl_cache *c, struct nl_sock *h)
-{
-       return genl_send_simple(h, GENL_ID_CTRL, CTRL_CMD_GETFAMILY,
-                               CTRL_VERSION, NLM_F_DUMP);
-}
-
-static struct nla_policy ctrl_policy[CTRL_ATTR_MAX+1] = {
-       [CTRL_ATTR_FAMILY_ID]   = { .type = NLA_U16 },
-       [CTRL_ATTR_FAMILY_NAME] = { .type = NLA_STRING,
-                                   .maxlen = GENL_NAMSIZ },
-       [CTRL_ATTR_VERSION]     = { .type = NLA_U32 },
-       [CTRL_ATTR_HDRSIZE]     = { .type = NLA_U32 },
-       [CTRL_ATTR_MAXATTR]     = { .type = NLA_U32 },
-       [CTRL_ATTR_OPS]         = { .type = NLA_NESTED },
-};
-
-static struct nla_policy family_op_policy[CTRL_ATTR_OP_MAX+1] = {
-       [CTRL_ATTR_OP_ID]       = { .type = NLA_U32 },
-       [CTRL_ATTR_OP_FLAGS]    = { .type = NLA_U32 },
-};
-
-static int ctrl_msg_parser(struct nl_cache_ops *ops, struct genl_cmd *cmd,
-                          struct genl_info *info, void *arg)
-{
-       struct genl_family *family;
-       struct nl_parser_param *pp = arg;
-       int err;
-
-       family = genl_family_alloc();
-       if (family == NULL) {
-               err = -NLE_NOMEM;
-               goto errout;
-       }
-
-       if (info->attrs[CTRL_ATTR_FAMILY_NAME] == NULL) {
-               err = -NLE_MISSING_ATTR;
-               goto errout;
-       }
-
-       if (info->attrs[CTRL_ATTR_FAMILY_ID] == NULL) {
-               err = -NLE_MISSING_ATTR;
-               goto errout;
-       }
-
-       family->ce_msgtype = info->nlh->nlmsg_type;
-       genl_family_set_id(family,
-                          nla_get_u16(info->attrs[CTRL_ATTR_FAMILY_ID]));
-       genl_family_set_name(family,
-                    nla_get_string(info->attrs[CTRL_ATTR_FAMILY_NAME]));
-
-       if (info->attrs[CTRL_ATTR_VERSION]) {
-               uint32_t version = nla_get_u32(info->attrs[CTRL_ATTR_VERSION]);
-               genl_family_set_version(family, version);
-       }
-
-       if (info->attrs[CTRL_ATTR_HDRSIZE]) {
-               uint32_t hdrsize = nla_get_u32(info->attrs[CTRL_ATTR_HDRSIZE]);
-               genl_family_set_hdrsize(family, hdrsize);
-       }
-
-       if (info->attrs[CTRL_ATTR_MAXATTR]) {
-               uint32_t maxattr = nla_get_u32(info->attrs[CTRL_ATTR_MAXATTR]);
-               genl_family_set_maxattr(family, maxattr);
-       }
-
-       if (info->attrs[CTRL_ATTR_OPS]) {
-               struct nlattr *nla, *nla_ops;
-               int remaining;
-
-               nla_ops = info->attrs[CTRL_ATTR_OPS];
-               nla_for_each_nested(nla, nla_ops, remaining) {
-                       struct nlattr *tb[CTRL_ATTR_OP_MAX+1];
-                       int flags = 0, id;
-
-                       err = nla_parse_nested(tb, CTRL_ATTR_OP_MAX, nla,
-                                              family_op_policy);
-                       if (err < 0)
-                               goto errout;
-
-                       if (tb[CTRL_ATTR_OP_ID] == NULL) {
-                               err = -NLE_MISSING_ATTR;
-                               goto errout;
-                       }
-                       
-                       id = nla_get_u32(tb[CTRL_ATTR_OP_ID]);
-
-                       if (tb[CTRL_ATTR_OP_FLAGS])
-                               flags = nla_get_u32(tb[CTRL_ATTR_OP_FLAGS]);
-
-                       err = genl_family_add_op(family, id, flags);
-                       if (err < 0)
-                               goto errout;
-
-               }
-       }
-
-       err = pp->pp_cb((struct nl_object *) family, pp);
-errout:
-       genl_family_put(family);
-       return err;
-}
-
-/**
- * @name Cache Management
- * @{
- */
-
-int genl_ctrl_alloc_cache(struct nl_sock *sock, struct nl_cache **result)
-{
-       return nl_cache_alloc_and_fill(&genl_ctrl_ops, sock, result);
-}
-
-/**
- * Look up generic netlink family by id in the provided cache.
- * @arg cache          Generic netlink family cache.
- * @arg id             Family identifier.
- *
- * Searches through the cache looking for a registered family
- * matching the specified identifier. The caller will own a
- * reference on the returned object which needs to be given
- * back after usage using genl_family_put().
- *
- * @return Generic netlink family object or NULL if no match was found.
- */
-struct genl_family *genl_ctrl_search(struct nl_cache *cache, int id)
-{
-       struct genl_family *fam;
-
-       if (cache->c_ops != &genl_ctrl_ops)
-               BUG();
-
-       nl_list_for_each_entry(fam, &cache->c_items, ce_list) {
-               if (fam->gf_id == id) {
-                       nl_object_get((struct nl_object *) fam);
-                       return fam;
-               }
-       }
-
-       return NULL;
-}
-
-/**
- * @name Resolver
- * @{
- */
-
-/**
- * Look up generic netlink family by family name in the provided cache.
- * @arg cache          Generic netlink family cache.
- * @arg name           Family name.
- *
- * Searches through the cache looking for a registered family
- * matching the specified name. The caller will own a reference
- * on the returned object which needs to be given back after
- * usage using genl_family_put().
- *
- * @return Generic netlink family object or NULL if no match was found.
- */
-struct genl_family *genl_ctrl_search_by_name(struct nl_cache *cache,
-                                           const char *name)
-{
-       struct genl_family *fam;
-
-       if (cache->c_ops != &genl_ctrl_ops)
-               BUG();
-
-       nl_list_for_each_entry(fam, &cache->c_items, ce_list) {
-               if (!strcmp(name, fam->gf_name)) {
-                       nl_object_get((struct nl_object *) fam);
-                       return fam;
-               }
-       }
-
-       return NULL;
-}
-
-/** @} */
-
-/**
- * Resolve generic netlink family name to its identifier
- * @arg sk             Netlink socket.
- * @arg name           Name of generic netlink family
- *
- * Resolves the generic netlink family name to its identifer and returns
- * it.
- *
- * @return A positive identifier or a negative error code.
- */
-int genl_ctrl_resolve(struct nl_sock *sk, const char *name)
-{
-       struct nl_cache *cache;
-       struct genl_family *family;
-       int err;
-
-       if ((err = genl_ctrl_alloc_cache(sk, &cache)) < 0)
-               return err;
-
-       family = genl_ctrl_search_by_name(cache, name);
-       if (family == NULL) {
-               err = -NLE_OBJ_NOTFOUND;
-               goto errout;
-       }
-
-       err = genl_family_get_id(family);
-       genl_family_put(family);
-errout:
-       nl_cache_free(cache);
-
-       return err;
-}
-
-/** @} */
-
-static struct genl_cmd genl_cmds[] = {
-       {
-               .c_id           = CTRL_CMD_NEWFAMILY,
-               .c_name         = "NEWFAMILY" ,
-               .c_maxattr      = CTRL_ATTR_MAX,
-               .c_attr_policy  = ctrl_policy,
-               .c_msg_parser   = ctrl_msg_parser,
-       },
-       {
-               .c_id           = CTRL_CMD_DELFAMILY,
-               .c_name         = "DELFAMILY" ,
-       },
-       {
-               .c_id           = CTRL_CMD_GETFAMILY,
-               .c_name         = "GETFAMILY" ,
-       },
-       {
-               .c_id           = CTRL_CMD_NEWOPS,
-               .c_name         = "NEWOPS" ,
-       },
-       {
-               .c_id           = CTRL_CMD_DELOPS,
-               .c_name         = "DELOPS" ,
-       },
-};
-
-static struct genl_ops genl_ops = {
-       .o_cmds                 = genl_cmds,
-       .o_ncmds                = ARRAY_SIZE(genl_cmds),
-};
-
-/** @cond SKIP */
-extern struct nl_object_ops genl_family_ops;
-/** @endcond */
-
-static struct nl_cache_ops genl_ctrl_ops = {
-       .co_name                = "genl/family",
-       .co_hdrsize             = GENL_HDRSIZE(0),
-       .co_msgtypes            = GENL_FAMILY(GENL_ID_CTRL, "nlctrl"),
-       .co_genl                = &genl_ops,
-       .co_protocol            = NETLINK_GENERIC,
-       .co_request_update      = ctrl_request_update,
-       .co_obj_ops             = &genl_family_ops,
-};
-
-static void __init ctrl_init(void)
-{
-       genl_register(&genl_ctrl_ops);
-}
-
-static void __exit ctrl_exit(void)
-{
-       genl_unregister(&genl_ctrl_ops);
-}
-
-/** @} */
diff --git a/package/libnl-tiny/src/genl_family.c b/package/libnl-tiny/src/genl_family.c
deleted file mode 100644 (file)
index 88aaad9..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * lib/genl/family.c           Generic Netlink Family
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
- */
-
-/**
- * @ingroup genl
- * @defgroup genl_family Generic Netlink Family
- * @brief
- *
- * @{
- */
-
-#include <netlink-generic.h>
-#include <netlink/netlink.h>
-#include <netlink/genl/genl.h>
-#include <netlink/genl/family.h>
-#include <netlink/utils.h>
-
-struct nl_object_ops genl_family_ops;
-/** @endcond */
-
-static void family_constructor(struct nl_object *c)
-{
-       struct genl_family *family = (struct genl_family *) c;
-
-       nl_init_list_head(&family->gf_ops);
-}
-
-static void family_free_data(struct nl_object *c)
-{
-       struct genl_family *family = (struct genl_family *) c;
-       struct genl_family_op *ops, *tmp;
-
-       if (family == NULL)
-               return;
-
-       nl_list_for_each_entry_safe(ops, tmp, &family->gf_ops, o_list) {
-               nl_list_del(&ops->o_list);
-               free(ops);
-       }
-}
-
-static int family_clone(struct nl_object *_dst, struct nl_object *_src)
-{
-       struct genl_family *dst = nl_object_priv(_dst);
-       struct genl_family *src = nl_object_priv(_src);
-       struct genl_family_op *ops;
-       int err;
-
-       nl_list_for_each_entry(ops, &src->gf_ops, o_list) {
-               err = genl_family_add_op(dst, ops->o_id, ops->o_flags);
-               if (err < 0)
-                       return err;
-       }
-       
-       return 0;
-}
-
-static int family_compare(struct nl_object *_a, struct nl_object *_b,
-                         uint32_t attrs, int flags)
-{
-       struct genl_family *a = (struct genl_family *) _a;
-       struct genl_family *b = (struct genl_family *) _b;
-       int diff = 0;
-
-#define FAM_DIFF(ATTR, EXPR) ATTR_DIFF(attrs, FAMILY_ATTR_##ATTR, a, b, EXPR)
-
-       diff |= FAM_DIFF(ID,            a->gf_id != b->gf_id);
-       diff |= FAM_DIFF(VERSION,       a->gf_version != b->gf_version);
-       diff |= FAM_DIFF(HDRSIZE,       a->gf_hdrsize != b->gf_hdrsize);
-       diff |= FAM_DIFF(MAXATTR,       a->gf_maxattr != b->gf_maxattr);
-       diff |= FAM_DIFF(NAME,          strcmp(a->gf_name, b->gf_name));
-
-#undef FAM_DIFF
-
-       return diff;
-}
-
-
-/**
- * @name Family Object
- * @{
- */
-
-struct genl_family *genl_family_alloc(void)
-{
-       return (struct genl_family *) nl_object_alloc(&genl_family_ops);
-}
-
-void genl_family_put(struct genl_family *family)
-{
-       nl_object_put((struct nl_object *) family);
-}
-
-/** @} */
-
-
-int genl_family_add_op(struct genl_family *family, int id, int flags)
-{
-       struct genl_family_op *op;
-
-       op = calloc(1, sizeof(*op));
-       if (op == NULL)
-               return -NLE_NOMEM;
-
-       op->o_id = id;
-       op->o_flags = flags;
-
-       nl_list_add_tail(&op->o_list, &family->gf_ops);
-       family->ce_mask |= FAMILY_ATTR_OPS;
-
-       return 0;
-}
-
-/** @} */
-
-/** @cond SKIP */
-struct nl_object_ops genl_family_ops = {
-       .oo_name                = "genl/family",
-       .oo_size                = sizeof(struct genl_family),
-       .oo_constructor         = family_constructor,
-       .oo_free_data           = family_free_data,
-       .oo_clone               = family_clone,
-       .oo_compare             = family_compare,
-       .oo_id_attrs            = FAMILY_ATTR_ID,
-};
-/** @endcond */
-
-/** @} */
diff --git a/package/libnl-tiny/src/genl_mngt.c b/package/libnl-tiny/src/genl_mngt.c
deleted file mode 100644 (file)
index 6c65179..0000000
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * lib/genl/mngt.c             Generic Netlink Management
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-/**
- * @ingroup genl
- * @defgroup genl_mngt Management
- *
- * @par 1) Registering a generic netlink module
- * @code
- * #include <netlink/genl/mngt.h>
- *
- * // First step is to define all the commands being used in
- * // particular generic netlink family. The ID and name are
- * // mandatory to be filled out. A callback function and
- * // most the attribute policy that comes with it must be
- * // defined for commands expected to be issued towards
- * // userspace.
- * static struct genl_cmd foo_cmds[] = {
- *     {
- *             .c_id           = FOO_CMD_NEW,
- *             .c_name         = "NEWFOO" ,
- *             .c_maxattr      = FOO_ATTR_MAX,
- *             .c_attr_policy  = foo_policy,
- *             .c_msg_parser   = foo_msg_parser,
- *     },
- *     {
- *             .c_id           = FOO_CMD_DEL,
- *             .c_name         = "DELFOO" ,
- *     },
- * };
- *
- * // The list of commands must then be integrated into a
- * // struct genl_ops serving as handle for this particular
- * // family.
- * static struct genl_ops my_genl_ops = {
- *     .o_cmds                 = foo_cmds,
- *     .o_ncmds                = ARRAY_SIZE(foo_cmds),
- * };
- *
- * // Using the above struct genl_ops an arbitary number of
- * // cache handles can be associated to it.
- * //
- * // The macro GENL_HDRSIZE() must be used to specify the
- * // length of the header to automatically take headers on
- * // generic layers into account.
- * //
- * // The macro GENL_FAMILY() is used to represent the generic
- * // netlink family id.
- * static struct nl_cache_ops genl_foo_ops = {
- *     .co_name                = "genl/foo",
- *     .co_hdrsize             = GENL_HDRSIZE(sizeof(struct my_hdr)),
- *     .co_msgtypes            = GENL_FAMILY(GENL_ID_GENERATE, "foo"),
- *     .co_genl                = &my_genl_ops,
- *     .co_protocol            = NETLINK_GENERIC,
- *     .co_request_update      = foo_request_update,
- *     .co_obj_ops             = &genl_foo_ops,
- * };
- *
- * // Finally each cache handle for a generic netlink family
- * // must be registered using genl_register().
- * static void __init foo_init(void)
- * {
- *     genl_register(&genl_foo_ops);
- * }
- *
- * // ... respectively unregsted again.
- * static void __exit foo_exit(void)
- * {
- *     genl_unregister(&genl_foo_ops);
- * }
- * @endcode
- * @{
- */
-
-#include <netlink-generic.h>
-#include <netlink/netlink.h>
-#include <netlink/genl/genl.h>
-#include <netlink/genl/mngt.h>
-#include <netlink/genl/family.h>
-#include <netlink/genl/ctrl.h>
-#include <netlink/utils.h>
-
-static NL_LIST_HEAD(genl_ops_list);
-
-static int genl_msg_parser(struct nl_cache_ops *ops, struct sockaddr_nl *who,
-                          struct nlmsghdr *nlh, struct nl_parser_param *pp)
-{
-       int i, err;
-       struct genlmsghdr *ghdr;
-       struct genl_cmd *cmd;
-
-       ghdr = nlmsg_data(nlh);
-
-       if (ops->co_genl == NULL)
-               BUG();
-
-       for (i = 0; i < ops->co_genl->o_ncmds; i++) {
-               cmd = &ops->co_genl->o_cmds[i];
-               if (cmd->c_id == ghdr->cmd)
-                       goto found;
-       }
-
-       err = -NLE_MSGTYPE_NOSUPPORT;
-       goto errout;
-
-found:
-       if (cmd->c_msg_parser == NULL)
-               err = -NLE_OPNOTSUPP;
-       else {
-               struct nlattr *tb[cmd->c_maxattr + 1];
-               struct genl_info info = {
-                       .who = who,
-                       .nlh = nlh,
-                       .genlhdr = ghdr,
-                       .userhdr = genlmsg_data(ghdr),
-                       .attrs = tb,
-               };
-
-               err = nlmsg_parse(nlh, ops->co_hdrsize, tb, cmd->c_maxattr,
-                                 cmd->c_attr_policy);
-               if (err < 0)
-                       goto errout;
-
-               err = cmd->c_msg_parser(ops, cmd, &info, pp);
-       }
-errout:
-       return err;
-
-}
-
-#ifdef disabled
-char *genl_op2name(int family, int op, char *buf, size_t len)
-{
-       struct genl_ops *ops;
-       int i;
-
-       nl_list_for_each_entry(ops, &genl_ops_list, o_list) {
-               if (ops->o_family == family) {
-                       for (i = 0; i < ops->o_ncmds; i++) {
-                               struct genl_cmd *cmd;
-                               cmd = &ops->o_cmds[i];
-
-                               if (cmd->c_id == op) {
-                                       strncpy(buf, cmd->c_name, len - 1);
-                                       return buf;
-                               }
-                       }
-               }
-       }
-
-       strncpy(buf, "unknown", len - 1);
-       return NULL;
-}
-#endif
-
-/**
- * @name Register/Unregister
- * @{
- */
-
-/**
- * Register generic netlink operations
- * @arg ops            cache operations
- */
-int genl_register(struct nl_cache_ops *ops)
-{
-       int err;
-
-       if (ops->co_protocol != NETLINK_GENERIC) {
-               err = -NLE_PROTO_MISMATCH;
-               goto errout;
-       }
-
-       if (ops->co_hdrsize < GENL_HDRSIZE(0)) {
-               err = -NLE_INVAL;
-               goto errout;
-       }
-
-       if (ops->co_genl == NULL) {
-               err = -NLE_INVAL;
-               goto errout;
-       }
-
-       ops->co_genl->o_cache_ops = ops;
-       ops->co_genl->o_name = ops->co_msgtypes[0].mt_name;
-       ops->co_genl->o_family = ops->co_msgtypes[0].mt_id;
-       ops->co_msg_parser = genl_msg_parser;
-
-       /* FIXME: check for dup */
-
-       nl_list_add_tail(&ops->co_genl->o_list, &genl_ops_list);
-
-       err = nl_cache_mngt_register(ops);
-errout:
-       return err;
-}
-
-/**
- * Unregister generic netlink operations
- * @arg ops            cache operations
- */
-void genl_unregister(struct nl_cache_ops *ops)
-{
-       nl_cache_mngt_unregister(ops);
-       nl_list_del(&ops->co_genl->o_list);
-}
-
-/** @} */
-
-/**
- * @name Resolving ID/Name
- * @{
- */
-#ifdef disabled
-static int __genl_ops_resolve(struct nl_cache *ctrl, struct genl_ops *ops)
-{
-       struct genl_family *family;
-
-       family = genl_ctrl_search_by_name(ctrl, ops->o_name);
-       if (family != NULL) {
-               ops->o_id = genl_family_get_id(family);
-               genl_family_put(family);
-
-               return 0;
-       }
-
-       return -NLE_OBJ_NOTFOUND;
-}
-
-int genl_ops_resolve(struct nl_sock *sk, struct genl_ops *ops)
-{
-       struct nl_cache *ctrl;
-       int err;
-
-       if ((err = genl_ctrl_alloc_cache(sk, &ctrl)) < 0)
-               goto errout;
-
-       err = __genl_ops_resolve(ctrl, ops);
-
-       nl_cache_free(ctrl);
-errout:
-       return err;
-}
-
-int genl_mngt_resolve(struct nl_sock *sk)
-{
-       struct nl_cache *ctrl;
-       struct genl_ops *ops;
-       int err = 0;
-
-       if ((err = genl_ctrl_alloc_cache(sk, &ctrl)) < 0)
-               goto errout;
-
-       nl_list_for_each_entry(ops, &genl_ops_list, o_list) {
-               err = __genl_ops_resolve(ctrl, ops);
-       }
-
-       nl_cache_free(ctrl);
-errout:
-       return err;
-}
-#endif
-/** @} */
-
-
-/** @} */
diff --git a/package/libnl-tiny/src/handlers.c b/package/libnl-tiny/src/handlers.c
deleted file mode 100644 (file)
index 12ebda5..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * lib/handlers.c      default netlink message handlers
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-/**
- * @ingroup core
- * @defgroup cb Callbacks/Customization
- *
- * @details
- * @par 1) Setting up a callback set
- * @code
- * // Allocate a callback set and initialize it to the verbose default set
- * struct nl_cb *cb = nl_cb_alloc(NL_CB_VERBOSE);
- *
- * // Modify the set to call my_func() for all valid messages
- * nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, my_func, NULL);
- *
- * // Set the error message handler to the verbose default implementation
- * // and direct it to print all errors to the given file descriptor.
- * FILE *file = fopen(...);
- * nl_cb_err(cb, NL_CB_VERBOSE, NULL, file);
- * @endcode
- * @{
- */
-
-#include <netlink-local.h>
-#include <netlink/netlink.h>
-#include <netlink/utils.h>
-#include <netlink/msg.h>
-#include <netlink/handlers.h>
-
-/**
- * @name Callback Handle Management
- * @{
- */
-
-/**
- * Allocate a new callback handle
- * @arg kind           callback kind to be used for initialization
- * @return Newly allocated callback handle or NULL
- */
-struct nl_cb *nl_cb_alloc(enum nl_cb_kind kind)
-{
-       int i;
-       struct nl_cb *cb;
-
-       if (kind < 0 || kind > NL_CB_KIND_MAX)
-               return NULL;
-
-       cb = calloc(1, sizeof(*cb));
-       if (!cb)
-               return NULL;
-
-       cb->cb_refcnt = 1;
-
-       for (i = 0; i <= NL_CB_TYPE_MAX; i++)
-               nl_cb_set(cb, i, kind, NULL, NULL);
-
-       nl_cb_err(cb, kind, NULL, NULL);
-
-       return cb;
-}
-
-/**
- * Clone an existing callback handle
- * @arg orig           original callback handle
- * @return Newly allocated callback handle being a duplicate of
- *         orig or NULL
- */
-struct nl_cb *nl_cb_clone(struct nl_cb *orig)
-{
-       struct nl_cb *cb;
-       
-       cb = nl_cb_alloc(NL_CB_DEFAULT);
-       if (!cb)
-               return NULL;
-
-       memcpy(cb, orig, sizeof(*orig));
-       cb->cb_refcnt = 1;
-
-       return cb;
-}
-
-void nl_cb_put(struct nl_cb *cb)
-{
-       if (!cb)
-               return;
-
-       cb->cb_refcnt--;
-
-       if (cb->cb_refcnt < 0)
-               BUG();
-
-       if (cb->cb_refcnt <= 0)
-               free(cb);
-}
-
-/** @} */
-
-/**
- * @name Callback Setup
- * @{
- */
-
-/**
- * Set up a callback 
- * @arg cb             callback set
- * @arg type           callback to modify
- * @arg kind           kind of implementation
- * @arg func           callback function (NL_CB_CUSTOM)
- * @arg arg            argument passed to callback
- *
- * @return 0 on success or a negative error code
- */
-int nl_cb_set(struct nl_cb *cb, enum nl_cb_type type, enum nl_cb_kind kind,
-             nl_recvmsg_msg_cb_t func, void *arg)
-{
-       if (type < 0 || type > NL_CB_TYPE_MAX)
-               return -NLE_RANGE;
-
-       if (kind < 0 || kind > NL_CB_KIND_MAX)
-               return -NLE_RANGE;
-
-       if (kind == NL_CB_CUSTOM) {
-               cb->cb_set[type] = func;
-               cb->cb_args[type] = arg;
-       }
-
-       return 0;
-}
-
-/**
- * Set up an error callback
- * @arg cb             callback set
- * @arg kind           kind of callback
- * @arg func           callback function
- * @arg arg            argument to be passed to callback function
- */
-int nl_cb_err(struct nl_cb *cb, enum nl_cb_kind kind,
-             nl_recvmsg_err_cb_t func, void *arg)
-{
-       if (kind < 0 || kind > NL_CB_KIND_MAX)
-               return -NLE_RANGE;
-
-       if (kind == NL_CB_CUSTOM) {
-               cb->cb_err = func;
-               cb->cb_err_arg = arg;
-       }
-
-       return 0;
-}
-
-/** @} */
-
-/** @} */
diff --git a/package/libnl-tiny/src/include/linux/gen_stats.h b/package/libnl-tiny/src/include/linux/gen_stats.h
deleted file mode 100644 (file)
index 13f4e74..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-#ifndef __LINUX_GEN_STATS_H
-#define __LINUX_GEN_STATS_H
-
-#include <linux/types.h>
-
-enum {
-       TCA_STATS_UNSPEC,
-       TCA_STATS_BASIC,
-       TCA_STATS_RATE_EST,
-       TCA_STATS_QUEUE,
-       TCA_STATS_APP,
-       __TCA_STATS_MAX,
-};
-#define TCA_STATS_MAX (__TCA_STATS_MAX - 1)
-
-/**
- * struct gnet_stats_basic - byte/packet throughput statistics
- * @bytes: number of seen bytes
- * @packets: number of seen packets
- */
-struct gnet_stats_basic
-{
-       __u64   bytes;
-       __u32   packets;
-};
-
-/**
- * struct gnet_stats_rate_est - rate estimator
- * @bps: current byte rate
- * @pps: current packet rate
- */
-struct gnet_stats_rate_est
-{
-       __u32   bps;
-       __u32   pps;
-};
-
-/**
- * struct gnet_stats_queue - queuing statistics
- * @qlen: queue length
- * @backlog: backlog size of queue
- * @drops: number of dropped packets
- * @requeues: number of requeues
- * @overlimits: number of enqueues over the limit
- */
-struct gnet_stats_queue
-{
-       __u32   qlen;
-       __u32   backlog;
-       __u32   drops;
-       __u32   requeues;
-       __u32   overlimits;
-};
-
-/**
- * struct gnet_estimator - rate estimator configuration
- * @interval: sampling period
- * @ewma_log: the log of measurement window weight
- */
-struct gnet_estimator
-{
-       signed char     interval;
-       unsigned char   ewma_log;
-};
-
-
-#endif /* __LINUX_GEN_STATS_H */
diff --git a/package/libnl-tiny/src/include/linux/genetlink.h b/package/libnl-tiny/src/include/linux/genetlink.h
deleted file mode 100644 (file)
index b834ef6..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-#ifndef __LINUX_GENERIC_NETLINK_H
-#define __LINUX_GENERIC_NETLINK_H
-
-#include <linux/types.h>
-#include <linux/netlink.h>
-
-#define GENL_NAMSIZ    16      /* length of family name */
-
-#define GENL_MIN_ID    NLMSG_MIN_TYPE
-#define GENL_MAX_ID    1023
-
-struct genlmsghdr {
-       __u8    cmd;
-       __u8    version;
-       __u16   reserved;
-};
-
-#define GENL_HDRLEN    NLMSG_ALIGN(sizeof(struct genlmsghdr))
-
-#define GENL_ADMIN_PERM                0x01
-#define GENL_CMD_CAP_DO                0x02
-#define GENL_CMD_CAP_DUMP      0x04
-#define GENL_CMD_CAP_HASPOL    0x08
-
-/*
- * List of reserved static generic netlink identifiers:
- */
-#define GENL_ID_GENERATE       0
-#define GENL_ID_CTRL           NLMSG_MIN_TYPE
-
-/**************************************************************************
- * Controller
- **************************************************************************/
-
-enum {
-       CTRL_CMD_UNSPEC,
-       CTRL_CMD_NEWFAMILY,
-       CTRL_CMD_DELFAMILY,
-       CTRL_CMD_GETFAMILY,
-       CTRL_CMD_NEWOPS,
-       CTRL_CMD_DELOPS,
-       CTRL_CMD_GETOPS,
-       CTRL_CMD_NEWMCAST_GRP,
-       CTRL_CMD_DELMCAST_GRP,
-       CTRL_CMD_GETMCAST_GRP, /* unused */
-       __CTRL_CMD_MAX,
-};
-
-#define CTRL_CMD_MAX (__CTRL_CMD_MAX - 1)
-
-enum {
-       CTRL_ATTR_UNSPEC,
-       CTRL_ATTR_FAMILY_ID,
-       CTRL_ATTR_FAMILY_NAME,
-       CTRL_ATTR_VERSION,
-       CTRL_ATTR_HDRSIZE,
-       CTRL_ATTR_MAXATTR,
-       CTRL_ATTR_OPS,
-       CTRL_ATTR_MCAST_GROUPS,
-       __CTRL_ATTR_MAX,
-};
-
-#define CTRL_ATTR_MAX (__CTRL_ATTR_MAX - 1)
-
-enum {
-       CTRL_ATTR_OP_UNSPEC,
-       CTRL_ATTR_OP_ID,
-       CTRL_ATTR_OP_FLAGS,
-       __CTRL_ATTR_OP_MAX,
-};
-
-#define CTRL_ATTR_OP_MAX (__CTRL_ATTR_OP_MAX - 1)
-
-enum {
-       CTRL_ATTR_MCAST_GRP_UNSPEC,
-       CTRL_ATTR_MCAST_GRP_NAME,
-       CTRL_ATTR_MCAST_GRP_ID,
-       __CTRL_ATTR_MCAST_GRP_MAX,
-};
-
-#define CTRL_ATTR_MCAST_GRP_MAX (__CTRL_ATTR_MCAST_GRP_MAX - 1)
-
-#endif /* __LINUX_GENERIC_NETLINK_H */
diff --git a/package/libnl-tiny/src/include/linux/if.h b/package/libnl-tiny/src/include/linux/if.h
deleted file mode 100644 (file)
index 4c1bcfe..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * INET                An implementation of the TCP/IP protocol suite for the LINUX
- *             operating system.  INET is implemented using the  BSD Socket
- *             interface as the means of communication with the user level.
- *
- *             Global definitions for the INET interface module.
- *
- * Version:    @(#)if.h        1.0.2   04/18/93
- *
- * Authors:    Original taken from Berkeley UNIX 4.3, (c) UCB 1982-1988
- *             Ross Biro
- *             Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
- *
- *             This program is free software; you can redistribute it and/or
- *             modify it under the terms of the GNU General Public License
- *             as published by the Free Software Foundation; either version
- *             2 of the License, or (at your option) any later version.
- */
-#ifndef _LINUX_IF_H
-#define _LINUX_IF_H
-
-#include <linux/types.h>               /* for "__kernel_caddr_t" et al */
-
-#define        IFNAMSIZ        16
-
-/* Standard interface flags (netdevice->flags). */
-#define        IFF_UP          0x1             /* interface is up              */
-#define        IFF_BROADCAST   0x2             /* broadcast address valid      */
-#define        IFF_DEBUG       0x4             /* turn on debugging            */
-#define        IFF_LOOPBACK    0x8             /* is a loopback net            */
-#define        IFF_POINTOPOINT 0x10            /* interface is has p-p link    */
-#define        IFF_NOTRAILERS  0x20            /* avoid use of trailers        */
-#define        IFF_RUNNING     0x40            /* interface RFC2863 OPER_UP    */
-#define        IFF_NOARP       0x80            /* no ARP protocol              */
-#define        IFF_PROMISC     0x100           /* receive all packets          */
-#define        IFF_ALLMULTI    0x200           /* receive all multicast packets*/
-
-#define IFF_MASTER     0x400           /* master of a load balancer    */
-#define IFF_SLAVE      0x800           /* slave of a load balancer     */
-
-#define IFF_MULTICAST  0x1000          /* Supports multicast           */
-
-#define IFF_PORTSEL    0x2000          /* can set media type           */
-#define IFF_AUTOMEDIA  0x4000          /* auto media select active     */
-#define IFF_DYNAMIC    0x8000          /* dialup device with changing addresses*/
-
-#define IFF_LOWER_UP   0x10000         /* driver signals L1 up         */
-#define IFF_DORMANT    0x20000         /* driver signals dormant       */
-
-#define IFF_ECHO       0x40000         /* echo sent packets            */
-
-#define IFF_VOLATILE   (IFF_LOOPBACK|IFF_POINTOPOINT|IFF_BROADCAST|IFF_ECHO|\
-               IFF_MASTER|IFF_SLAVE|IFF_RUNNING|IFF_LOWER_UP|IFF_DORMANT)
-
-/* Private (from user) interface flags (netdevice->priv_flags). */
-#define IFF_802_1Q_VLAN 0x1             /* 802.1Q VLAN device.          */
-#define IFF_EBRIDGE    0x2             /* Ethernet bridging device.    */
-#define IFF_SLAVE_INACTIVE     0x4     /* bonding slave not the curr. active */
-#define IFF_MASTER_8023AD      0x8     /* bonding master, 802.3ad.     */
-#define IFF_MASTER_ALB 0x10            /* bonding master, balance-alb. */
-#define IFF_BONDING    0x20            /* bonding master or slave      */
-#define IFF_SLAVE_NEEDARP 0x40         /* need ARPs for validation     */
-#define IFF_ISATAP     0x80            /* ISATAP interface (RFC4214)   */
-
-#define IF_GET_IFACE   0x0001          /* for querying only */
-#define IF_GET_PROTO   0x0002
-
-/* For definitions see hdlc.h */
-#define IF_IFACE_V35   0x1000          /* V.35 serial interface        */
-#define IF_IFACE_V24   0x1001          /* V.24 serial interface        */
-#define IF_IFACE_X21   0x1002          /* X.21 serial interface        */
-#define IF_IFACE_T1    0x1003          /* T1 telco serial interface    */
-#define IF_IFACE_E1    0x1004          /* E1 telco serial interface    */
-#define IF_IFACE_SYNC_SERIAL 0x1005    /* can't be set by software     */
-#define IF_IFACE_X21D   0x1006          /* X.21 Dual Clocking (FarSite) */
-
-/* For definitions see hdlc.h */
-#define IF_PROTO_HDLC  0x2000          /* raw HDLC protocol            */
-#define IF_PROTO_PPP   0x2001          /* PPP protocol                 */
-#define IF_PROTO_CISCO 0x2002          /* Cisco HDLC protocol          */
-#define IF_PROTO_FR    0x2003          /* Frame Relay protocol         */
-#define IF_PROTO_FR_ADD_PVC 0x2004     /*    Create FR PVC             */
-#define IF_PROTO_FR_DEL_PVC 0x2005     /*    Delete FR PVC             */
-#define IF_PROTO_X25   0x2006          /* X.25                         */
-#define IF_PROTO_HDLC_ETH 0x2007       /* raw HDLC, Ethernet emulation */
-#define IF_PROTO_FR_ADD_ETH_PVC 0x2008 /*  Create FR Ethernet-bridged PVC */
-#define IF_PROTO_FR_DEL_ETH_PVC 0x2009 /*  Delete FR Ethernet-bridged PVC */
-#define IF_PROTO_FR_PVC        0x200A          /* for reading PVC status       */
-#define IF_PROTO_FR_ETH_PVC 0x200B
-#define IF_PROTO_RAW    0x200C          /* RAW Socket                   */
-
-/* RFC 2863 operational status */
-enum {
-       IF_OPER_UNKNOWN,
-       IF_OPER_NOTPRESENT,
-       IF_OPER_DOWN,
-       IF_OPER_LOWERLAYERDOWN,
-       IF_OPER_TESTING,
-       IF_OPER_DORMANT,
-       IF_OPER_UP,
-};
-
-/* link modes */
-enum {
-       IF_LINK_MODE_DEFAULT,
-       IF_LINK_MODE_DORMANT,   /* limit upward transition to dormant */
-};
-
-/*
- *     Device mapping structure. I'd just gone off and designed a 
- *     beautiful scheme using only loadable modules with arguments
- *     for driver options and along come the PCMCIA people 8)
- *
- *     Ah well. The get() side of this is good for WDSETUP, and it'll
- *     be handy for debugging things. The set side is fine for now and
- *     being very small might be worth keeping for clean configuration.
- */
-
-struct ifmap 
-{
-       unsigned long mem_start;
-       unsigned long mem_end;
-       unsigned short base_addr; 
-       unsigned char irq;
-       unsigned char dma;
-       unsigned char port;
-       /* 3 bytes spare */
-};
-
-
-#endif /* _LINUX_IF_H */
diff --git a/package/libnl-tiny/src/include/linux/if_addr.h b/package/libnl-tiny/src/include/linux/if_addr.h
deleted file mode 100644 (file)
index 43f3bed..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-#ifndef __LINUX_IF_ADDR_H
-#define __LINUX_IF_ADDR_H
-
-#include <linux/netlink.h>
-
-struct ifaddrmsg
-{
-       __u8            ifa_family;
-       __u8            ifa_prefixlen;  /* The prefix length            */
-       __u8            ifa_flags;      /* Flags                        */
-       __u8            ifa_scope;      /* Address scope                */
-       __u32           ifa_index;      /* Link index                   */
-};
-
-/*
- * Important comment:
- * IFA_ADDRESS is prefix address, rather than local interface address.
- * It makes no difference for normally configured broadcast interfaces,
- * but for point-to-point IFA_ADDRESS is DESTINATION address,
- * local address is supplied in IFA_LOCAL attribute.
- */
-enum
-{
-       IFA_UNSPEC,
-       IFA_ADDRESS,
-       IFA_LOCAL,
-       IFA_LABEL,
-       IFA_BROADCAST,
-       IFA_ANYCAST,
-       IFA_CACHEINFO,
-       IFA_MULTICAST,
-       __IFA_MAX,
-};
-
-#define IFA_MAX (__IFA_MAX - 1)
-
-/* ifa_flags */
-#define IFA_F_SECONDARY                0x01
-#define IFA_F_TEMPORARY                IFA_F_SECONDARY
-
-#define        IFA_F_NODAD             0x02
-#define IFA_F_OPTIMISTIC       0x04
-#define        IFA_F_HOMEADDRESS       0x10
-#define IFA_F_DEPRECATED       0x20
-#define IFA_F_TENTATIVE                0x40
-#define IFA_F_PERMANENT                0x80
-
-struct ifa_cacheinfo
-{
-       __u32   ifa_prefered;
-       __u32   ifa_valid;
-       __u32   cstamp; /* created timestamp, hundredths of seconds */
-       __u32   tstamp; /* updated timestamp, hundredths of seconds */
-};
-
-/* backwards compatibility for userspace */
-#ifndef __KERNEL__
-#define IFA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifaddrmsg))))
-#define IFA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifaddrmsg))
-#endif
-
-#endif
diff --git a/package/libnl-tiny/src/include/linux/netlink.h b/package/libnl-tiny/src/include/linux/netlink.h
deleted file mode 100644 (file)
index d252103..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-#ifndef __LINUX_NETLINK_H
-#define __LINUX_NETLINK_H
-
-#include <linux/socket.h> /* for sa_family_t */
-#include <linux/types.h>
-
-#define NETLINK_ROUTE          0       /* Routing/device hook                          */
-#define NETLINK_UNUSED         1       /* Unused number                                */
-#define NETLINK_USERSOCK       2       /* Reserved for user mode socket protocols      */
-#define NETLINK_FIREWALL       3       /* Firewalling hook                             */
-#define NETLINK_INET_DIAG      4       /* INET socket monitoring                       */
-#define NETLINK_NFLOG          5       /* netfilter/iptables ULOG */
-#define NETLINK_XFRM           6       /* ipsec */
-#define NETLINK_SELINUX                7       /* SELinux event notifications */
-#define NETLINK_ISCSI          8       /* Open-iSCSI */
-#define NETLINK_AUDIT          9       /* auditing */
-#define NETLINK_FIB_LOOKUP     10      
-#define NETLINK_CONNECTOR      11
-#define NETLINK_NETFILTER      12      /* netfilter subsystem */
-#define NETLINK_IP6_FW         13
-#define NETLINK_DNRTMSG                14      /* DECnet routing messages */
-#define NETLINK_KOBJECT_UEVENT 15      /* Kernel messages to userspace */
-#define NETLINK_GENERIC                16
-/* leave room for NETLINK_DM (DM Events) */
-#define NETLINK_SCSITRANSPORT  18      /* SCSI Transports */
-#define NETLINK_ECRYPTFS       19
-
-#define MAX_LINKS 32           
-
-struct sockaddr_nl
-{
-       sa_family_t     nl_family;      /* AF_NETLINK   */
-       unsigned short  nl_pad;         /* zero         */
-       __u32           nl_pid;         /* port ID      */
-               __u32           nl_groups;      /* multicast groups mask */
-};
-
-struct nlmsghdr
-{
-       __u32           nlmsg_len;      /* Length of message including header */
-       __u16           nlmsg_type;     /* Message content */
-       __u16           nlmsg_flags;    /* Additional flags */
-       __u32           nlmsg_seq;      /* Sequence number */
-       __u32           nlmsg_pid;      /* Sending process port ID */
-};
-
-/* Flags values */
-
-#define NLM_F_REQUEST          1       /* It is request message.       */
-#define NLM_F_MULTI            2       /* Multipart message, terminated by NLMSG_DONE */
-#define NLM_F_ACK              4       /* Reply with ack, with zero or error code */
-#define NLM_F_ECHO             8       /* Echo this request            */
-
-/* Modifiers to GET request */
-#define NLM_F_ROOT     0x100   /* specify tree root    */
-#define NLM_F_MATCH    0x200   /* return all matching  */
-#define NLM_F_ATOMIC   0x400   /* atomic GET           */
-#define NLM_F_DUMP     (NLM_F_ROOT|NLM_F_MATCH)
-
-/* Modifiers to NEW request */
-#define NLM_F_REPLACE  0x100   /* Override existing            */
-#define NLM_F_EXCL     0x200   /* Do not touch, if it exists   */
-#define NLM_F_CREATE   0x400   /* Create, if it does not exist */
-#define NLM_F_APPEND   0x800   /* Add to end of list           */
-
-/*
-   4.4BSD ADD          NLM_F_CREATE|NLM_F_EXCL
-   4.4BSD CHANGE       NLM_F_REPLACE
-
-   True CHANGE         NLM_F_CREATE|NLM_F_REPLACE
-   Append              NLM_F_CREATE
-   Check               NLM_F_EXCL
- */
-
-#define NLMSG_ALIGNTO  4
-#define NLMSG_ALIGN(len) ( ((len)+NLMSG_ALIGNTO-1) & ~(NLMSG_ALIGNTO-1) )
-#define NLMSG_HDRLEN    ((int) NLMSG_ALIGN(sizeof(struct nlmsghdr)))
-#define NLMSG_LENGTH(len) ((len)+NLMSG_ALIGN(NLMSG_HDRLEN))
-#define NLMSG_SPACE(len) NLMSG_ALIGN(NLMSG_LENGTH(len))
-#define NLMSG_DATA(nlh)  ((void*)(((char*)nlh) + NLMSG_LENGTH(0)))
-#define NLMSG_NEXT(nlh,len)     ((len) -= NLMSG_ALIGN((nlh)->nlmsg_len), \
-                                 (struct nlmsghdr*)(((char*)(nlh)) + NLMSG_ALIGN((nlh)->nlmsg_len)))
-#define NLMSG_OK(nlh,len) ((len) >= (int)sizeof(struct nlmsghdr) && \
-                          (nlh)->nlmsg_len >= sizeof(struct nlmsghdr) && \
-                          (nlh)->nlmsg_len <= (len))
-#define NLMSG_PAYLOAD(nlh,len) ((nlh)->nlmsg_len - NLMSG_SPACE((len)))
-
-#define NLMSG_NOOP             0x1     /* Nothing.             */
-#define NLMSG_ERROR            0x2     /* Error                */
-#define NLMSG_DONE             0x3     /* End of a dump        */
-#define NLMSG_OVERRUN          0x4     /* Data lost            */
-
-#define NLMSG_MIN_TYPE         0x10    /* < 0x10: reserved control messages */
-
-struct nlmsgerr
-{
-       int             error;
-       struct nlmsghdr msg;
-};
-
-#define NETLINK_ADD_MEMBERSHIP 1
-#define NETLINK_DROP_MEMBERSHIP        2
-#define NETLINK_PKTINFO                3
-
-struct nl_pktinfo
-{
-       __u32   group;
-};
-
-#define NET_MAJOR 36           /* Major 36 is reserved for networking                                          */
-
-enum {
-       NETLINK_UNCONNECTED = 0,
-       NETLINK_CONNECTED,
-};
-
-/*
- *  <------- NLA_HDRLEN ------> <-- NLA_ALIGN(payload)-->
- * +---------------------+- - -+- - - - - - - - - -+- - -+
- * |        Header       | Pad |     Payload       | Pad |
- * |   (struct nlattr)   | ing |                   | ing |
- * +---------------------+- - -+- - - - - - - - - -+- - -+
- *  <-------------- nlattr->nla_len -------------->
- */
-
-struct nlattr
-{
-       __u16           nla_len;
-       __u16           nla_type;
-};
-
-/*
- * nla_type (16 bits)
- * +---+---+-------------------------------+
- * | N | O | Attribute Type                |
- * +---+---+-------------------------------+
- * N := Carries nested attributes
- * O := Payload stored in network byte order
- *
- * Note: The N and O flag are mutually exclusive.
- */
-#define NLA_F_NESTED           (1 << 15)
-#define NLA_F_NET_BYTEORDER    (1 << 14)
-#define NLA_TYPE_MASK          ~(NLA_F_NESTED | NLA_F_NET_BYTEORDER)
-
-#define NLA_ALIGNTO            4
-#define NLA_ALIGN(len)         (((len) + NLA_ALIGNTO - 1) & ~(NLA_ALIGNTO - 1))
-#define NLA_HDRLEN             ((int) NLA_ALIGN(sizeof(struct nlattr)))
-
-#endif /* __LINUX_NETLINK_H */
diff --git a/package/libnl-tiny/src/include/netlink-generic.h b/package/libnl-tiny/src/include/netlink-generic.h
deleted file mode 100644 (file)
index 10aa2f0..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * netlink-generic.h   Local Generic Netlink Interface
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_GENL_PRIV_H_
-#define NETLINK_GENL_PRIV_H_
-
-#include <netlink-local.h>
-#include <netlink/netlink.h>
-
-#define GENL_HDRSIZE(hdrlen) (GENL_HDRLEN + (hdrlen))
-
-#endif
diff --git a/package/libnl-tiny/src/include/netlink-local.h b/package/libnl-tiny/src/include/netlink-local.h
deleted file mode 100644 (file)
index 330100e..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * netlink-local.h             Local Netlink Interface
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_LOCAL_H_
-#define NETLINK_LOCAL_H_
-#define _GNU_SOURCE
-
-#include <stdio.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <math.h>
-#include <time.h>
-#include <stdarg.h>
-#include <ctype.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <inttypes.h>
-#include <assert.h>
-#include <limits.h>
-
-#include <arpa/inet.h>
-#include <netdb.h>
-
-#ifndef SOL_NETLINK
-#define SOL_NETLINK 270
-#endif
-
-#include <linux/types.h>
-
-/* local header copies */
-#include <linux/if.h>
-#include <linux/if_arp.h>
-#include <linux/if_ether.h>
-#include <linux/pkt_sched.h>
-#include <linux/pkt_cls.h>
-#include <linux/gen_stats.h>
-
-#include <netlink/netlink.h>
-#include <netlink/handlers.h>
-#include <netlink/cache.h>
-#include <netlink/object-api.h>
-#include <netlink/cache-api.h>
-#include <netlink-types.h>
-
-struct trans_tbl {
-       int i;
-       const char *a;
-};
-
-#define __ADD(id, name) { .i = id, .a = #name },
-
-struct trans_list {
-       int i;
-       char *a;
-       struct nl_list_head list;
-};
-
-#define NL_DEBUG       1
-
-#define NL_DBG(LVL,FMT,ARG...) \
-       do {} while (0)
-
-#define BUG()                            \
-       do {                                 \
-               fprintf(stderr, "BUG: %s:%d\n",  \
-                       __FILE__, __LINE__);         \
-               assert(0);      \
-       } while (0)
-
-extern int __nl_read_num_str_file(const char *path,
-                                 int (*cb)(long, const char *));
-
-extern int __trans_list_add(int, const char *, struct nl_list_head *);
-extern void __trans_list_clear(struct nl_list_head *);
-
-extern char *__type2str(int, char *, size_t, struct trans_tbl *, size_t);
-extern int __str2type(const char *, struct trans_tbl *, size_t);
-
-extern char *__list_type2str(int, char *, size_t, struct nl_list_head *);
-extern int __list_str2type(const char *, struct nl_list_head *);
-
-extern char *__flags2str(int, char *, size_t, struct trans_tbl *, size_t);
-extern int __str2flags(const char *, struct trans_tbl *, size_t);
-
-extern void dump_from_ops(struct nl_object *, struct nl_dump_params *);
-
-#ifdef disabled
-static inline struct nl_cache *dp_cache(struct nl_object *obj)
-{
-       if (obj->ce_cache == NULL)
-               return nl_cache_mngt_require(obj->ce_ops->oo_name);
-
-       return obj->ce_cache;
-}
-#endif
-
-static inline int nl_cb_call(struct nl_cb *cb, int type, struct nl_msg *msg)
-{
-       return cb->cb_set[type](msg, cb->cb_args[type]);
-}
-
-#define ARRAY_SIZE(X) (sizeof(X) / sizeof((X)[0]))
-#ifndef offsetof
-#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
-#endif
-
-#define __init __attribute__ ((constructor))
-#define __exit __attribute__ ((destructor))
-#undef __deprecated
-#define __deprecated __attribute__ ((deprecated))
-
-#define min(x,y) ({ \
-       typeof(x) _x = (x);     \
-       typeof(y) _y = (y);     \
-       (void) (&_x == &_y);            \
-       _x < _y ? _x : _y; })
-
-#define max(x,y) ({ \
-       typeof(x) _x = (x);     \
-       typeof(y) _y = (y);     \
-       (void) (&_x == &_y);            \
-       _x > _y ? _x : _y; })
-
-extern int nl_cache_parse(struct nl_cache_ops *, struct sockaddr_nl *,
-                         struct nlmsghdr *, struct nl_parser_param *);
-
-
-static inline char *nl_cache_name(struct nl_cache *cache)
-{
-       return cache->c_ops ? cache->c_ops->co_name : "unknown";
-}
-
-#define GENL_FAMILY(id, name) \
-       { \
-               { id, NL_ACT_UNSPEC, name }, \
-               END_OF_MSGTYPES_LIST, \
-       }
-
-static inline int wait_for_ack(struct nl_sock *sk)
-{
-       if (sk->s_flags & NL_NO_AUTO_ACK)
-               return 0;
-       else
-               return nl_wait_for_ack(sk);
-}
-
-#endif
diff --git a/package/libnl-tiny/src/include/netlink-types.h b/package/libnl-tiny/src/include/netlink-types.h
deleted file mode 100644 (file)
index 0d00593..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * netlink-types.h     Netlink Types (Private)
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_LOCAL_TYPES_H_
-#define NETLINK_LOCAL_TYPES_H_
-
-#include <netlink/list.h>
-
-struct nl_cache_ops;
-struct nl_sock;
-struct nl_object;
-
-struct nl_cache
-{
-       struct nl_list_head     c_items;
-       int                     c_nitems;
-       int                     c_iarg1;
-       int                     c_iarg2;
-       struct nl_cache_ops *   c_ops;
-};
-
-struct nl_cache_assoc
-{
-       struct nl_cache *       ca_cache;
-       change_func_t           ca_change;
-};
-
-struct nl_cache_mngr
-{
-       int                     cm_protocol;
-       int                     cm_flags;
-       int                     cm_nassocs;
-       struct nl_sock *        cm_handle;
-       struct nl_cache_assoc * cm_assocs;
-};
-
-struct nl_parser_param;
-
-#define LOOSE_COMPARISON       1
-
-
-struct nl_data
-{
-       size_t                  d_size;
-       void *                  d_data;
-};
-
-struct nl_addr
-{
-       int                     a_family;
-       unsigned int            a_maxsize;
-       unsigned int            a_len;
-       int                     a_prefixlen;
-       int                     a_refcnt;
-       char                    a_addr[0];
-};
-
-#define IFQDISCSIZ     32
-
-#define GENL_OP_HAS_POLICY     1
-#define GENL_OP_HAS_DOIT       2
-#define GENL_OP_HAS_DUMPIT     4
-
-struct genl_family_op
-{
-       uint32_t                o_id;
-       uint32_t                o_flags;
-
-       struct nl_list_head     o_list;
-};
-
-
-#endif
diff --git a/package/libnl-tiny/src/include/netlink/addr.h b/package/libnl-tiny/src/include/netlink/addr.h
deleted file mode 100644 (file)
index cc3d201..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * netlink/addr.h              Abstract Address
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_ADDR_H_
-#define NETLINK_ADDR_H_
-
-#include <netlink/netlink.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct nl_addr;
-
-/* Creation */
-extern struct nl_addr *        nl_addr_alloc(size_t);
-extern struct nl_addr *        nl_addr_alloc_attr(struct nlattr *, int);
-extern struct nl_addr *        nl_addr_build(int, void *, size_t);
-extern int             nl_addr_parse(const char *, int, struct nl_addr **);
-extern struct nl_addr *        nl_addr_clone(struct nl_addr *);
-
-/* Destroyage */
-extern void            nl_addr_destroy(struct nl_addr *);
-
-/* Usage Management */
-extern struct nl_addr *        nl_addr_get(struct nl_addr *);
-extern void            nl_addr_put(struct nl_addr *);
-extern int             nl_addr_shared(struct nl_addr *);
-
-extern int             nl_addr_cmp(struct nl_addr *, struct nl_addr *);
-extern int             nl_addr_cmp_prefix(struct nl_addr *, struct nl_addr *);
-extern int             nl_addr_iszero(struct nl_addr *);
-extern int             nl_addr_valid(char *, int);
-extern int             nl_addr_guess_family(struct nl_addr *);
-extern int             nl_addr_fill_sockaddr(struct nl_addr *,
-                                             struct sockaddr *, socklen_t *);
-extern int             nl_addr_info(struct nl_addr *, struct addrinfo **);
-extern int             nl_addr_resolve(struct nl_addr *addr, char *host, size_t hostlen);
-
-/* Access Functions */
-extern void            nl_addr_set_family(struct nl_addr *, int);
-extern int             nl_addr_get_family(struct nl_addr *);
-extern int             nl_addr_set_binary_addr(struct nl_addr *, void *,
-                                               size_t);
-extern void *          nl_addr_get_binary_addr(struct nl_addr *);
-extern unsigned int    nl_addr_get_len(struct nl_addr *);
-extern void            nl_addr_set_prefixlen(struct nl_addr *, int);
-extern unsigned int    nl_addr_get_prefixlen(struct nl_addr *);
-
-/* Address Family Translations */
-extern char *          nl_af2str(int, char *, size_t);
-extern int             nl_str2af(const char *);
-
-/* Translations to Strings */
-extern char *          nl_addr2str(struct nl_addr *, char *, size_t);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/package/libnl-tiny/src/include/netlink/attr.h b/package/libnl-tiny/src/include/netlink/attr.h
deleted file mode 100644 (file)
index 3b56a82..0000000
+++ /dev/null
@@ -1,726 +0,0 @@
-/*
- * netlink/attr.h              Netlink Attributes
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_ATTR_H_
-#define NETLINK_ATTR_H_
-
-#include <netlink/netlink.h>
-#include <netlink/object.h>
-#include <netlink/addr.h>
-#include <netlink/data.h>
-#include <netlink/msg.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct nl_msg;
-
-/**
- * @name Basic Attribute Data Types
- * @{
- */
-
- /**
-  * @ingroup attr
-  * Basic attribute data types
-  *
-  * See \ref attr_datatypes for more details.
-  */
-enum {
-       NLA_UNSPEC,     /**< Unspecified type, binary data chunk */
-       NLA_U8,         /**< 8 bit integer */
-       NLA_U16,        /**< 16 bit integer */
-       NLA_U32,        /**< 32 bit integer */
-       NLA_U64,        /**< 64 bit integer */
-       NLA_STRING,     /**< NUL terminated character string */
-       NLA_FLAG,       /**< Flag */
-       NLA_MSECS,      /**< Micro seconds (64bit) */
-       NLA_NESTED,     /**< Nested attributes */
-       __NLA_TYPE_MAX,
-};
-
-#define NLA_TYPE_MAX (__NLA_TYPE_MAX - 1)
-
-/** @} */
-
-/**
- * @ingroup attr
- * Attribute validation policy.
- *
- * See \ref attr_datatypes for more details.
- */
-struct nla_policy {
-       /** Type of attribute or NLA_UNSPEC */
-       uint16_t        type;
-
-       /** Minimal length of payload required */
-       uint16_t        minlen;
-
-       /** Maximal length of payload allowed */
-       uint16_t        maxlen;
-};
-
-/* Attribute parsing */
-extern int             nla_ok(const struct nlattr *, int);
-extern struct nlattr * nla_next(const struct nlattr *, int *);
-extern int             nla_parse(struct nlattr **, int, struct nlattr *,
-                                 int, struct nla_policy *);
-extern int             nla_validate(struct nlattr *, int, int,
-                                    struct nla_policy *);
-extern struct nlattr * nla_find(struct nlattr *, int, int);
-
-/* Unspecific attribute */
-extern struct nlattr * nla_reserve(struct nl_msg *, int, int);
-extern int             nla_put(struct nl_msg *, int, int, const void *);
-
-/**
- * nlmsg_find_attr - find a specific attribute in a netlink message
- * @arg nlh            netlink message header
- * @arg hdrlen         length of familiy specific header
- * @arg attrtype       type of attribute to look for
- *
- * Returns the first attribute which matches the specified type.
- */
-static inline struct nlattr *nlmsg_find_attr(struct nlmsghdr *nlh, int hdrlen, int attrtype)
-{
-       return nla_find(nlmsg_attrdata(nlh, hdrlen),
-                       nlmsg_attrlen(nlh, hdrlen), attrtype);
-}
-
-
-/**
- * Return size of attribute whithout padding.
- * @arg payload                Payload length of attribute.
- *
- * @code
- *    <-------- nla_attr_size(payload) --------->
- *   +------------------+- - -+- - - - - - - - - +- - -+
- *   | Attribute Header | Pad |     Payload      | Pad |
- *   +------------------+- - -+- - - - - - - - - +- - -+
- * @endcode
- *
- * @return Size of attribute in bytes without padding.
- */
-static inline int nla_attr_size(int payload)
-{
-       return NLA_HDRLEN + payload;
-}
-
-/**
- * Return size of attribute including padding.
- * @arg payload                Payload length of attribute.
- *
- * @code
- *    <----------- nla_total_size(payload) ----------->
- *   +------------------+- - -+- - - - - - - - - +- - -+
- *   | Attribute Header | Pad |     Payload      | Pad |
- *   +------------------+- - -+- - - - - - - - - +- - -+
- * @endcode
- *
- * @return Size of attribute in bytes.
- */
-static inline int nla_total_size(int payload)
-{
-       return NLA_ALIGN(nla_attr_size(payload));
-}
-
-/**
- * Return length of padding at the tail of the attribute.
- * @arg payload                Payload length of attribute.
- *
- * @code
- *   +------------------+- - -+- - - - - - - - - +- - -+
- *   | Attribute Header | Pad |     Payload      | Pad |
- *   +------------------+- - -+- - - - - - - - - +- - -+
- *                                                <--->  
- * @endcode
- *
- * @return Length of padding in bytes.
- */
-static inline int nla_padlen(int payload)
-{
-       return nla_total_size(payload) - nla_attr_size(payload);
-}
-
-/**
- * Return type of the attribute.
- * @arg nla            Attribute.
- *
- * @return Type of attribute.
- */
-static inline int nla_type(const struct nlattr *nla)
-{
-       return nla->nla_type & NLA_TYPE_MASK;
-}
-
-/**
- * Return pointer to the payload section.
- * @arg nla            Attribute.
- *
- * @return Pointer to start of payload section.
- */
-static inline void *nla_data(const struct nlattr *nla)
-{
-       return (char *) nla + NLA_HDRLEN;
-}
-
-/**
- * Return length of the payload .
- * @arg nla            Attribute
- *
- * @return Length of payload in bytes.
- */
-static inline int nla_len(const struct nlattr *nla)
-{
-       return nla->nla_len - NLA_HDRLEN;
-}
-
-/**
- * Copy attribute payload to another memory area.
- * @arg dest           Pointer to destination memory area.
- * @arg src            Attribute
- * @arg count          Number of bytes to copy at most.
- *
- * Note: The number of bytes copied is limited by the length of
- *       the attribute payload.
- *
- * @return The number of bytes copied to dest.
- */
-static inline int nla_memcpy(void *dest, struct nlattr *src, int count)
-{
-       int minlen;
-
-       if (!src)
-               return 0;
-       
-       minlen = min_t(int, count, nla_len(src));
-       memcpy(dest, nla_data(src), minlen);
-
-       return minlen;
-}
-
-
-/**
- * Add abstract data as unspecific attribute to netlink message.
- * @arg msg            Netlink message.
- * @arg attrtype       Attribute type.
- * @arg data           Abstract data object.
- *
- * Equivalent to nla_put() except that the length of the payload is
- * derived from the abstract data object.
- *
- * @see nla_put
- * @return 0 on success or a negative error code.
- */
-static inline int nla_put_data(struct nl_msg *msg, int attrtype, struct nl_data *data)
-{
-       return nla_put(msg, attrtype, nl_data_get_size(data),
-                      nl_data_get(data));
-}
-
-/**
- * Add abstract address as unspecific attribute to netlink message.
- * @arg msg            Netlink message.
- * @arg attrtype       Attribute type.
- * @arg addr           Abstract address object.
- *
- * @see nla_put
- * @return 0 on success or a negative error code.
- */
-static inline int nla_put_addr(struct nl_msg *msg, int attrtype, struct nl_addr *addr)
-{
-       return nla_put(msg, attrtype, nl_addr_get_len(addr),
-                      nl_addr_get_binary_addr(addr));
-}
-
-/** @} */
-
-/**
- * @name Integer Attributes
- */
-
-/**
- * Add 8 bit integer attribute to netlink message.
- * @arg msg            Netlink message.
- * @arg attrtype       Attribute type.
- * @arg value          Numeric value to store as payload.
- *
- * @see nla_put
- * @return 0 on success or a negative error code.
- */
-static inline int nla_put_u8(struct nl_msg *msg, int attrtype, uint8_t value)
-{
-       return nla_put(msg, attrtype, sizeof(uint8_t), &value);
-}
-
-/**
- * Return value of 8 bit integer attribute.
- * @arg nla            8 bit integer attribute
- *
- * @return Payload as 8 bit integer.
- */
-static inline uint8_t nla_get_u8(struct nlattr *nla)
-{
-       return *(uint8_t *) nla_data(nla);
-}
-
-/**
- * Add 16 bit integer attribute to netlink message.
- * @arg msg            Netlink message.
- * @arg attrtype       Attribute type.
- * @arg value          Numeric value to store as payload.
- *
- * @see nla_put
- * @return 0 on success or a negative error code.
- */
-static inline int nla_put_u16(struct nl_msg *msg, int attrtype, uint16_t value)
-{
-       return nla_put(msg, attrtype, sizeof(uint16_t), &value);
-}
-
-/**
- * Return payload of 16 bit integer attribute.
- * @arg nla            16 bit integer attribute
- *
- * @return Payload as 16 bit integer.
- */
-static inline uint16_t nla_get_u16(struct nlattr *nla)
-{
-       return *(uint16_t *) nla_data(nla);
-}
-
-/**
- * Add 32 bit integer attribute to netlink message.
- * @arg msg            Netlink message.
- * @arg attrtype       Attribute type.
- * @arg value          Numeric value to store as payload.
- *
- * @see nla_put
- * @return 0 on success or a negative error code.
- */
-static inline int nla_put_u32(struct nl_msg *msg, int attrtype, uint32_t value)
-{
-       return nla_put(msg, attrtype, sizeof(uint32_t), &value);
-}
-
-/**
- * Return payload of 32 bit integer attribute.
- * @arg nla            32 bit integer attribute.
- *
- * @return Payload as 32 bit integer.
- */
-static inline uint32_t nla_get_u32(struct nlattr *nla)
-{
-       return *(uint32_t *) nla_data(nla);
-}
-
-/**
- * Add 64 bit integer attribute to netlink message.
- * @arg msg            Netlink message.
- * @arg attrtype       Attribute type.
- * @arg value          Numeric value to store as payload.
- *
- * @see nla_put
- * @return 0 on success or a negative error code.
- */
-static inline int nla_put_u64(struct nl_msg *msg, int attrtype, uint64_t value)
-{
-       return nla_put(msg, attrtype, sizeof(uint64_t), &value);
-}
-
-/**
- * Return payload of u64 attribute
- * @arg nla            u64 netlink attribute
- *
- * @return Payload as 64 bit integer.
- */
-static inline uint64_t nla_get_u64(struct nlattr *nla)
-{
-       uint64_t tmp;
-
-       nla_memcpy(&tmp, nla, sizeof(tmp));
-
-       return tmp;
-}
-
-/**
- * Add string attribute to netlink message.
- * @arg msg            Netlink message.
- * @arg attrtype       Attribute type.
- * @arg str            NUL terminated string.
- *
- * @see nla_put
- * @return 0 on success or a negative error code.
- */
-static inline int nla_put_string(struct nl_msg *msg, int attrtype, const char *str)
-{
-       return nla_put(msg, attrtype, strlen(str) + 1, str);
-}
-
-/**
- * Return payload of string attribute.
- * @arg nla            String attribute.
- *
- * @return Pointer to attribute payload.
- */
-static inline char *nla_get_string(struct nlattr *nla)
-{
-       return (char *) nla_data(nla);
-}
-
-static inline char *nla_strdup(struct nlattr *nla)
-{
-       return strdup(nla_get_string(nla));
-}
-
-/** @} */
-
-/**
- * @name Flag Attribute
- */
-
-/**
- * Add flag netlink attribute to netlink message.
- * @arg msg            Netlink message.
- * @arg attrtype       Attribute type.
- *
- * @see nla_put
- * @return 0 on success or a negative error code.
- */
-static inline int nla_put_flag(struct nl_msg *msg, int attrtype)
-{
-       return nla_put(msg, attrtype, 0, NULL);
-}
-
-/**
- * Return true if flag attribute is set.
- * @arg nla            Flag netlink attribute.
- *
- * @return True if flag is set, otherwise false.
- */
-static inline int nla_get_flag(struct nlattr *nla)
-{
-       return !!nla;
-}
-
-/** @} */
-
-/**
- * @name Microseconds Attribute
- */
-
-/**
- * Add a msecs netlink attribute to a netlink message
- * @arg n              netlink message
- * @arg attrtype       attribute type
- * @arg msecs          number of msecs
- */
-static inline int nla_put_msecs(struct nl_msg *n, int attrtype, unsigned long msecs)
-{
-       return nla_put_u64(n, attrtype, msecs);
-}
-
-/**
- * Return payload of msecs attribute
- * @arg nla            msecs netlink attribute
- *
- * @return the number of milliseconds.
- */
-static inline unsigned long nla_get_msecs(struct nlattr *nla)
-{
-       return nla_get_u64(nla);
-}
-
-/**
- * Add nested attributes to netlink message.
- * @arg msg            Netlink message.
- * @arg attrtype       Attribute type.
- * @arg nested         Message containing attributes to be nested.
- *
- * Takes the attributes found in the \a nested message and appends them
- * to the message \a msg nested in a container of the type \a attrtype.
- * The \a nested message may not have a family specific header.
- *
- * @see nla_put
- * @return 0 on success or a negative error code.
- */
-static inline int nla_put_nested(struct nl_msg *msg, int attrtype, struct nl_msg *nested)
-{
-       return nla_put(msg, attrtype, nlmsg_len(nested->nm_nlh),
-                      nlmsg_data(nested->nm_nlh));
-}
-
-/**
- * Start a new level of nested attributes.
- * @arg msg            Netlink message.
- * @arg attrtype       Attribute type of container.
- *
- * @return Pointer to container attribute.
- */
-static inline struct nlattr *nla_nest_start(struct nl_msg *msg, int attrtype)
-{
-       struct nlattr *start = (struct nlattr *) nlmsg_tail(msg->nm_nlh);
-
-       if (nla_put(msg, attrtype, 0, NULL) < 0)
-               return NULL;
-
-       return start;
-}
-
-/**
- * Finalize nesting of attributes.
- * @arg msg            Netlink message.
- * @arg start          Container attribute as returned from nla_nest_start().
- *
- * Corrects the container attribute header to include the appeneded attributes.
- *
- * @return 0
- */
-static inline int nla_nest_end(struct nl_msg *msg, struct nlattr *start)
-{
-       start->nla_len = (unsigned char *) nlmsg_tail(msg->nm_nlh) -
-                               (unsigned char *) start;
-       return 0;
-}
-
-/**
- * Create attribute index based on nested attribute
- * @arg tb             Index array to be filled (maxtype+1 elements).
- * @arg maxtype                Maximum attribute type expected and accepted.
- * @arg nla            Nested Attribute.
- * @arg policy         Attribute validation policy.
- *
- * Feeds the stream of attributes nested into the specified attribute
- * to nla_parse().
- *
- * @see nla_parse
- * @return 0 on success or a negative error code.
- */
-static inline int nla_parse_nested(struct nlattr *tb[], int maxtype, struct nlattr *nla,
-                    struct nla_policy *policy)
-{
-       return nla_parse(tb, maxtype, (struct nlattr *)nla_data(nla), nla_len(nla), policy);
-}
-
-/**
- * Compare attribute payload with memory area.
- * @arg nla            Attribute.
- * @arg data           Memory area to compare to.
- * @arg size           Number of bytes to compare.
- *
- * @see memcmp(3)
- * @return An integer less than, equal to, or greater than zero.
- */
-static inline int nla_memcmp(const struct nlattr *nla, const void *data, size_t size)
-{
-       int d = nla_len(nla) - size;
-
-       if (d == 0)
-               d = memcmp(nla_data(nla), data, size);
-
-       return d;
-}
-
-/**
- * Compare string attribute payload with string
- * @arg nla            Attribute of type NLA_STRING.
- * @arg str            NUL terminated string.
- *
- * @see strcmp(3)
- * @return An integer less than, equal to, or greater than zero.
- */
-static inline int nla_strcmp(const struct nlattr *nla, const char *str)
-{
-       int len = strlen(str) + 1;
-       int d = nla_len(nla) - len;
-
-       if (d == 0)
-               d = memcmp(nla_data(nla), str, len);
-
-       return d;
-}
-
-/**
- * Copy string attribute payload to a buffer.
- * @arg dst            Pointer to destination buffer.
- * @arg nla            Attribute of type NLA_STRING.
- * @arg dstsize                Size of destination buffer in bytes.
- *
- * Copies at most dstsize - 1 bytes to the destination buffer.
- * The result is always a valid NUL terminated string. Unlike
- * strlcpy the destination buffer is always padded out.
- *
- * @return The length of string attribute without the terminating NUL.
- */
-static inline size_t nla_strlcpy(char *dst, const struct nlattr *nla, size_t dstsize)
-{
-       size_t srclen = (size_t)nla_len(nla);
-       char *src = (char*)nla_data(nla);
-
-       if (srclen > 0 && src[srclen - 1] == '\0')
-               srclen--;
-
-       if (dstsize > 0) {
-               size_t len = (srclen >= dstsize) ? dstsize - 1 : srclen;
-
-               memset(dst, 0, dstsize);
-               memcpy(dst, src, len);
-       }
-
-       return srclen;
-}
-
-
-/**
- * @name Attribute Construction (Exception Based)
- * @{
- */
-
-/**
- * @ingroup attr
- * Add unspecific attribute to netlink message.
- * @arg msg            Netlink message.
- * @arg attrtype       Attribute type.
- * @arg attrlen                Length of attribute payload.
- * @arg data           Head of attribute payload.
- */
-#define NLA_PUT(msg, attrtype, attrlen, data) \
-       do { \
-               if (nla_put(msg, attrtype, attrlen, data) < 0) \
-                       goto nla_put_failure; \
-       } while(0)
-
-/**
- * @ingroup attr
- * Add atomic type attribute to netlink message.
- * @arg msg            Netlink message.
- * @arg type           Atomic type.
- * @arg attrtype       Attribute type.
- * @arg value          Head of attribute payload.
- */
-#define NLA_PUT_TYPE(msg, type, attrtype, value) \
-       do { \
-               type __tmp = value; \
-               NLA_PUT(msg, attrtype, sizeof(type), &__tmp); \
-       } while(0)
-
-/**
- * Add 8 bit integer attribute to netlink message.
- * @arg msg            Netlink message.
- * @arg attrtype       Attribute type.
- * @arg value          Numeric value.
- */
-#define NLA_PUT_U8(msg, attrtype, value) \
-       NLA_PUT_TYPE(msg, uint8_t, attrtype, value)
-
-/**
- * Add 16 bit integer attribute to netlink message.
- * @arg msg            Netlink message.
- * @arg attrtype       Attribute type.
- * @arg value          Numeric value.
- */
-#define NLA_PUT_U16(msg, attrtype, value) \
-       NLA_PUT_TYPE(msg, uint16_t, attrtype, value)
-
-/**
- * Add 32 bit integer attribute to netlink message.
- * @arg msg            Netlink message.
- * @arg attrtype       Attribute type.
- * @arg value          Numeric value.
- */
-#define NLA_PUT_U32(msg, attrtype, value) \
-       NLA_PUT_TYPE(msg, uint32_t, attrtype, value)
-
-/**
- * Add 64 bit integer attribute to netlink message.
- * @arg msg            Netlink message.
- * @arg attrtype       Attribute type.
- * @arg value          Numeric value.
- */
-#define NLA_PUT_U64(msg, attrtype, value) \
-       NLA_PUT_TYPE(msg, uint64_t, attrtype, value)
-
-/**
- * Add string attribute to netlink message.
- * @arg msg            Netlink message.
- * @arg attrtype       Attribute type.
- * @arg value          NUL terminated character string.
- */
-#define NLA_PUT_STRING(msg, attrtype, value) \
-       NLA_PUT(msg, attrtype, strlen(value) + 1, value)
-
-/**
- * Add flag attribute to netlink message.
- * @arg msg            Netlink message.
- * @arg attrtype       Attribute type.
- */
-#define NLA_PUT_FLAG(msg, attrtype) \
-       NLA_PUT(msg, attrtype, 0, NULL)
-
-/**
- * Add msecs attribute to netlink message.
- * @arg msg            Netlink message.
- * @arg attrtype       Attribute type.
- * @arg msecs          Numeric value in micro seconds.
- */
-#define NLA_PUT_MSECS(msg, attrtype, msecs) \
-       NLA_PUT_U64(msg, attrtype, msecs)
-
-/**
- * Add address attribute to netlink message.
- * @arg msg            Netlink message.
- * @arg attrtype       Attribute type.
- * @arg addr           Abstract address object.
- */
-#define NLA_PUT_ADDR(msg, attrtype, addr) \
-       NLA_PUT(msg, attrtype, nl_addr_get_len(addr), \
-               nl_addr_get_binary_addr(addr))
-
-/** @} */
-
-/**
- * @name Iterators
- * @{
- */
-
-/**
- * @ingroup attr
- * Iterate over a stream of attributes
- * @arg pos    loop counter, set to current attribute
- * @arg head   head of attribute stream
- * @arg len    length of attribute stream
- * @arg rem    initialized to len, holds bytes currently remaining in stream
- */
-#define nla_for_each_attr(pos, head, len, rem) \
-       for (pos = head, rem = len; \
-            nla_ok(pos, rem); \
-            pos = nla_next(pos, &(rem)))
-
-/**
- * @ingroup attr
- * Iterate over a stream of nested attributes
- * @arg pos    loop counter, set to current attribute
- * @arg nla    attribute containing the nested attributes
- * @arg rem    initialized to len, holds bytes currently remaining in stream
- */
-#define nla_for_each_nested(pos, nla, rem) \
-       for (pos = (struct nlattr *)nla_data(nla), rem = nla_len(nla); \
-            nla_ok(pos, rem); \
-            pos = nla_next(pos, &(rem)))
-
-/** @} */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/package/libnl-tiny/src/include/netlink/cache-api.h b/package/libnl-tiny/src/include/netlink/cache-api.h
deleted file mode 100644 (file)
index 22fc449..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * netlink/cache-api.h         Caching API
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_CACHE_API_H_
-#define NETLINK_CACHE_API_H_
-
-#include <netlink/netlink.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @ingroup cache
- * @defgroup cache_api Cache Implementation
- * @brief
- *
- * @par 1) Cache Definition
- * @code
- * struct nl_cache_ops my_cache_ops = {
- *     .co_name                = "route/link",
- *     .co_protocol            = NETLINK_ROUTE,
- *     .co_hdrsize             = sizeof(struct ifinfomsg),
- *     .co_obj_ops             = &my_obj_ops,
- * };
- * @endcode
- *
- * @par 2) 
- * @code
- * // The simplest way to fill a cache is by providing a request-update
- * // function which must trigger a complete dump on the kernel-side of
- * // whatever the cache covers.
- * static int my_request_update(struct nl_cache *cache,
- *                             struct nl_sock *socket)
- * {
- *     // In this example, we request a full dump of the interface table
- *     return nl_rtgen_request(socket, RTM_GETLINK, AF_UNSPEC, NLM_F_DUMP);
- * }
- *
- * // The resulting netlink messages sent back will be fed into a message
- * // parser one at a time. The message parser has to extract all relevant
- * // information from the message and create an object reflecting the
- * // contents of the message and pass it on to the parser callback function
- * // provide which will add the object to the cache.
- * static int my_msg_parser(struct nl_cache_ops *ops, struct sockaddr_nl *who,
- *                         struct nlmsghdr *nlh, struct nl_parser_param *pp)
- * {
- *     struct my_obj *obj;
- *
- *     obj = my_obj_alloc();
- *     obj->ce_msgtype = nlh->nlmsg_type;
- *
- *     // Parse the netlink message and continue creating the object.
- *
- *     err = pp->pp_cb((struct nl_object *) obj, pp);
- *     if (err < 0)
- *             goto errout;
- * }
- *
- * struct nl_cache_ops my_cache_ops = {
- *     ...
- *     .co_request_update      = my_request_update,
- *     .co_msg_parser          = my_msg_parser,
- * };
- * @endcode
- *
- * @par 3) Notification based Updates
- * @code
- * // Caches can be kept up-to-date based on notifications if the kernel
- * // sends out notifications whenever an object is added/removed/changed.
- * //
- * // It is trivial to support this, first a list of groups needs to be
- * // defined which are required to join in order to receive all necessary
- * // notifications. The groups are separated by address family to support
- * // the common situation where a separate group is used for each address
- * // family. If there is only one group, simply specify AF_UNSPEC.
- * static struct nl_af_group addr_groups[] = {
- *     { AF_INET,      RTNLGRP_IPV4_IFADDR },
- *     { AF_INET6,     RTNLGRP_IPV6_IFADDR },
- *     { END_OF_GROUP_LIST },
- * };
- *
- * // In order for the caching system to know the meaning of each message
- * // type it requires a table which maps each supported message type to
- * // a cache action, e.g. RTM_NEWADDR means address has been added or
- * // updated, RTM_DELADDR means address has been removed.
- * static struct nl_cache_ops rtnl_addr_ops = {
- *     ...
- *     .co_msgtypes            = {
- *                                     { RTM_NEWADDR, NL_ACT_NEW, "new" },
- *                                     { RTM_DELADDR, NL_ACT_DEL, "del" },
- *                                     { RTM_GETADDR, NL_ACT_GET, "get" },
- *                                     END_OF_MSGTYPES_LIST,
- *                             },
- *     .co_groups              = addr_groups,
- * };
- *
- * // It is now possible to keep the cache up-to-date using the cache manager.
- * @endcode
- * @{
- */
-
-enum {
-       NL_ACT_UNSPEC,
-       NL_ACT_NEW,
-       NL_ACT_DEL,
-       NL_ACT_GET,
-       NL_ACT_SET,
-       NL_ACT_CHANGE,
-       __NL_ACT_MAX,
-};
-
-#define NL_ACT_MAX (__NL_ACT_MAX - 1)
-
-#define END_OF_MSGTYPES_LIST   { -1, -1, NULL }
-
-/**
- * Message type to cache action association
- */
-struct nl_msgtype
-{
-       /** Netlink message type */
-       int                     mt_id;
-
-       /** Cache action to take */
-       int                     mt_act;
-
-       /** Name of operation for human-readable printing */
-       char *                  mt_name;
-};
-
-/**
- * Address family to netlink group association
- */
-struct nl_af_group
-{
-       /** Address family */
-       int                     ag_family;
-
-       /** Netlink group identifier */
-       int                     ag_group;
-};
-
-#define END_OF_GROUP_LIST AF_UNSPEC, 0
-
-struct nl_parser_param
-{
-       int             (*pp_cb)(struct nl_object *, struct nl_parser_param *);
-       void *            pp_arg;
-};
-
-/**
- * Cache Operations
- */
-struct nl_cache_ops
-{
-       char  *                 co_name;
-
-       int                     co_hdrsize;
-       int                     co_protocol;
-       struct nl_af_group *    co_groups;
-       
-       /**
-        * Called whenever an update of the cache is required. Must send
-        * a request message to the kernel requesting a complete dump.
-        */
-       int   (*co_request_update)(struct nl_cache *, struct nl_sock *);
-
-       /**
-        * Called whenever a message was received that needs to be parsed.
-        * Must parse the message and call the paser callback function
-        * (nl_parser_param) provided via the argument.
-        */
-       int   (*co_msg_parser)(struct nl_cache_ops *, struct sockaddr_nl *,
-                              struct nlmsghdr *, struct nl_parser_param *);
-
-       struct nl_object_ops *  co_obj_ops;
-
-       struct nl_cache_ops *co_next;
-       struct nl_cache *co_major_cache;
-       struct genl_ops *       co_genl;
-       struct nl_msgtype       co_msgtypes[];
-};
-
-/** @} */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/package/libnl-tiny/src/include/netlink/cache.h b/package/libnl-tiny/src/include/netlink/cache.h
deleted file mode 100644 (file)
index 09719f3..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * netlink/cache.h             Caching Module
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_CACHE_H_
-#define NETLINK_CACHE_H_
-
-#include <netlink/netlink.h>
-#include <netlink/msg.h>
-#include <netlink/utils.h>
-#include <netlink/object.h>
-#include <netlink/cache-api.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct nl_cache;
-
-typedef void (*change_func_t)(struct nl_cache *, struct nl_object *, int);
-
-/* Access Functions */
-extern int                     nl_cache_nitems(struct nl_cache *);
-extern int                     nl_cache_nitems_filter(struct nl_cache *,
-                                                      struct nl_object *);
-extern struct nl_cache_ops *   nl_cache_get_ops(struct nl_cache *);
-extern struct nl_object *      nl_cache_get_first(struct nl_cache *);
-extern struct nl_object *      nl_cache_get_last(struct nl_cache *);
-extern struct nl_object *      nl_cache_get_next(struct nl_object *);
-extern struct nl_object *      nl_cache_get_prev(struct nl_object *);
-
-extern struct nl_cache *       nl_cache_alloc(struct nl_cache_ops *);
-extern int                     nl_cache_alloc_and_fill(struct nl_cache_ops *,
-                                                       struct nl_sock *,
-                                                       struct nl_cache **);
-extern int                     nl_cache_alloc_name(const char *,
-                                                   struct nl_cache **);
-extern struct nl_cache *       nl_cache_subset(struct nl_cache *,
-                                               struct nl_object *);
-extern void                    nl_cache_clear(struct nl_cache *);
-extern void                    nl_cache_free(struct nl_cache *);
-
-/* Cache modification */
-extern int                     nl_cache_add(struct nl_cache *,
-                                            struct nl_object *);
-extern int                     nl_cache_parse_and_add(struct nl_cache *,
-                                                      struct nl_msg *);
-extern void                    nl_cache_remove(struct nl_object *);
-extern int                     nl_cache_refill(struct nl_sock *,
-                                               struct nl_cache *);
-extern int                     nl_cache_pickup(struct nl_sock *,
-                                               struct nl_cache *);
-extern int                     nl_cache_resync(struct nl_sock *,
-                                               struct nl_cache *,
-                                               change_func_t);
-extern int                     nl_cache_include(struct nl_cache *,
-                                                struct nl_object *,
-                                                change_func_t);
-
-/* General */
-extern int                     nl_cache_is_empty(struct nl_cache *);
-extern void                    nl_cache_mark_all(struct nl_cache *);
-
-/* Dumping */
-extern void                    nl_cache_dump(struct nl_cache *,
-                                             struct nl_dump_params *);
-extern void                    nl_cache_dump_filter(struct nl_cache *,
-                                                    struct nl_dump_params *,
-                                                    struct nl_object *);
-
-/* Iterators */
-#ifdef disabled
-extern void                    nl_cache_foreach(struct nl_cache *,
-                                                void (*cb)(struct nl_object *,
-                                                           void *),
-                                                void *arg);
-extern void                    nl_cache_foreach_filter(struct nl_cache *,
-                                                       struct nl_object *,
-                                                       void (*cb)(struct
-                                                                  nl_object *,
-                                                                  void *),
-                                                       void *arg);
-#endif
-
-/* --- cache management --- */
-
-/* Cache type management */
-extern struct nl_cache_ops *   nl_cache_ops_lookup(const char *);
-extern struct nl_cache_ops *   nl_cache_ops_associate(int, int);
-extern struct nl_msgtype *     nl_msgtype_lookup(struct nl_cache_ops *, int);
-extern void                    nl_cache_ops_foreach(void (*cb)(struct nl_cache_ops *, void *), void *);
-extern int                     nl_cache_mngt_register(struct nl_cache_ops *);
-extern int                     nl_cache_mngt_unregister(struct nl_cache_ops *);
-
-/* Global cache provisioning/requiring */
-extern void                    nl_cache_mngt_provide(struct nl_cache *);
-extern void                    nl_cache_mngt_unprovide(struct nl_cache *);
-extern struct nl_cache *       nl_cache_mngt_require(const char *);
-
-struct nl_cache_mngr;
-
-#define NL_AUTO_PROVIDE                1
-
-extern int                     nl_cache_mngr_alloc(struct nl_sock *,
-                                                   int, int,
-                                                   struct nl_cache_mngr **);
-extern int                     nl_cache_mngr_add(struct nl_cache_mngr *,
-                                                 const char *,
-                                                 change_func_t,
-                                                 struct nl_cache **);
-extern int                     nl_cache_mngr_get_fd(struct nl_cache_mngr *);
-extern int                     nl_cache_mngr_poll(struct nl_cache_mngr *,
-                                                  int);
-extern int                     nl_cache_mngr_data_ready(struct nl_cache_mngr *);
-extern void                    nl_cache_mngr_free(struct nl_cache_mngr *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/package/libnl-tiny/src/include/netlink/data.h b/package/libnl-tiny/src/include/netlink/data.h
deleted file mode 100644 (file)
index 071159e..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * netlink/data.h      Abstract Data
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_DATA_H_
-#define NETLINK_DATA_H_
-
-#include <netlink/netlink.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct nl_data;
-
-/* General */
-extern struct nl_data *        nl_data_alloc(void *, size_t);
-extern struct nl_data * nl_data_alloc_attr(struct nlattr *);
-extern struct nl_data *        nl_data_clone(struct nl_data *);
-extern int             nl_data_append(struct nl_data *, void *, size_t);
-extern void            nl_data_free(struct nl_data *);
-
-/* Access Functions */
-extern void *          nl_data_get(struct nl_data *);
-extern size_t          nl_data_get_size(struct nl_data *);
-
-/* Misc */
-extern int             nl_data_cmp(struct nl_data *, struct nl_data *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/package/libnl-tiny/src/include/netlink/errno.h b/package/libnl-tiny/src/include/netlink/errno.h
deleted file mode 100644 (file)
index 0b43da0..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * netlink/errno.h             Error Numbers
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_ERRNO_H_
-#define NETLINK_ERRNO_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define NLE_SUCCESS            0
-#define NLE_FAILURE            1
-#define NLE_INTR               2
-#define NLE_BAD_SOCK           3
-#define NLE_AGAIN              4
-#define NLE_NOMEM              5
-#define NLE_EXIST              6
-#define NLE_INVAL              7
-#define NLE_RANGE              8
-#define NLE_MSGSIZE            9
-#define NLE_OPNOTSUPP          10
-#define NLE_AF_NOSUPPORT       11
-#define NLE_OBJ_NOTFOUND       12
-#define NLE_NOATTR             13
-#define NLE_MISSING_ATTR       14
-#define NLE_AF_MISMATCH                15
-#define NLE_SEQ_MISMATCH       16
-#define NLE_MSG_OVERFLOW       17
-#define NLE_MSG_TRUNC          18
-#define NLE_NOADDR             19
-#define NLE_SRCRT_NOSUPPORT    20
-#define NLE_MSG_TOOSHORT       21
-#define NLE_MSGTYPE_NOSUPPORT  22
-#define NLE_OBJ_MISMATCH       23
-#define NLE_NOCACHE            24
-#define NLE_BUSY               25
-#define NLE_PROTO_MISMATCH     26
-#define NLE_NOACCESS           27
-#define NLE_PERM               28
-
-#define NLE_MAX                        NLE_PERM
-
-extern const char *    nl_geterror(int);
-extern void            nl_perror(int, const char *);
-extern int             nl_syserr2nlerr(int);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/package/libnl-tiny/src/include/netlink/genl/ctrl.h b/package/libnl-tiny/src/include/netlink/genl/ctrl.h
deleted file mode 100644 (file)
index 1ae62f4..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * netlink/genl/ctrl.h         Generic Netlink Controller
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_GENL_CTRL_H_
-#define NETLINK_GENL_CTRL_H_
-
-#include <netlink/netlink.h>
-#include <netlink/cache.h>
-#include <netlink/addr.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct genl_family;
-
-extern int                     genl_ctrl_alloc_cache(struct nl_sock *,
-                                                     struct nl_cache **);
-extern struct genl_family *    genl_ctrl_search(struct nl_cache *, int);
-extern struct genl_family *    genl_ctrl_search_by_name(struct nl_cache *,
-                                                        const char *);
-extern int                     genl_ctrl_resolve(struct nl_sock *,
-                                                 const char *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/package/libnl-tiny/src/include/netlink/genl/family.h b/package/libnl-tiny/src/include/netlink/genl/family.h
deleted file mode 100644 (file)
index 0257cbe..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * netlink/genl/family.h       Generic Netlink Family
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_GENL_FAMILY_H_
-#define NETLINK_GENL_FAMILY_H_
-
-#include <netlink/netlink.h>
-#include <netlink/cache.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** @cond SKIP */
-#define FAMILY_ATTR_ID         0x01
-#define FAMILY_ATTR_NAME       0x02
-#define FAMILY_ATTR_VERSION    0x04
-#define FAMILY_ATTR_HDRSIZE    0x08
-#define FAMILY_ATTR_MAXATTR    0x10
-#define FAMILY_ATTR_OPS                0x20
-
-
-struct genl_family
-{
-       NLHDR_COMMON
-
-       uint16_t                gf_id;
-       char                    gf_name[GENL_NAMSIZ];
-       uint32_t                gf_version;
-       uint32_t                gf_hdrsize;
-       uint32_t                gf_maxattr;
-
-       struct nl_list_head     gf_ops;
-};
-
-
-extern struct genl_family *    genl_family_alloc(void);
-extern void                    genl_family_put(struct genl_family *);
-
-extern int                     genl_family_add_op(struct genl_family *,
-                                                  int, int);
-
-/**
- * @name Attributes
- * @{
- */
-
-static inline unsigned int genl_family_get_id(struct genl_family *family)
-{
-       if (family->ce_mask & FAMILY_ATTR_ID)
-               return family->gf_id;
-       else
-               return GENL_ID_GENERATE;
-}
-
-static inline void genl_family_set_id(struct genl_family *family, unsigned int id)
-{
-       family->gf_id = id;
-       family->ce_mask |= FAMILY_ATTR_ID;
-}
-
-static inline char *genl_family_get_name(struct genl_family *family)
-{
-       if (family->ce_mask & FAMILY_ATTR_NAME)
-               return family->gf_name;
-       else
-               return NULL;
-}
-
-static inline void genl_family_set_name(struct genl_family *family, const char *name)
-{
-       strncpy(family->gf_name, name, GENL_NAMSIZ-1);
-       family->ce_mask |= FAMILY_ATTR_NAME;
-}
-
-static inline uint8_t genl_family_get_version(struct genl_family *family)
-{
-       if (family->ce_mask & FAMILY_ATTR_VERSION)
-               return family->gf_version;
-       else
-               return 0;
-}
-
-static inline void genl_family_set_version(struct genl_family *family, uint8_t version)
-{
-       family->gf_version = version;
-       family->ce_mask |= FAMILY_ATTR_VERSION;
-}
-
-static inline uint32_t genl_family_get_hdrsize(struct genl_family *family)
-{
-       if (family->ce_mask & FAMILY_ATTR_HDRSIZE)
-               return family->gf_hdrsize;
-       else
-               return 0;
-}
-
-static inline void genl_family_set_hdrsize(struct genl_family *family, uint32_t hdrsize)
-{
-       family->gf_hdrsize = hdrsize;
-       family->ce_mask |= FAMILY_ATTR_HDRSIZE;
-}
-
-static inline uint32_t genl_family_get_maxattr(struct genl_family *family)
-{
-       if (family->ce_mask & FAMILY_ATTR_MAXATTR)
-               return family->gf_maxattr;
-       else
-               return family->gf_maxattr;
-}
-
-static inline void genl_family_set_maxattr(struct genl_family *family, uint32_t maxattr)
-{
-       family->gf_maxattr = maxattr;
-       family->ce_mask |= FAMILY_ATTR_MAXATTR;
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/package/libnl-tiny/src/include/netlink/genl/genl.h b/package/libnl-tiny/src/include/netlink/genl/genl.h
deleted file mode 100644 (file)
index 3f3340c..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * netlink/genl/genl.h         Generic Netlink
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_GENL_H_
-#define NETLINK_GENL_H_
-
-#include <netlink/netlink.h>
-#include <netlink/msg.h>
-#include <netlink/attr.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern int             genl_connect(struct nl_sock *);
-
-extern int             genl_send_simple(struct nl_sock *, int, int,
-                                        int, int);
-
-extern void *          genlmsg_put(struct nl_msg *, uint32_t, uint32_t,
-                                   int, int, int, uint8_t, uint8_t);
-
-extern int             genlmsg_valid_hdr(struct nlmsghdr *, int);
-extern int             genlmsg_validate(struct nlmsghdr *, int, int,
-                                        struct nla_policy *);
-extern int             genlmsg_parse(struct nlmsghdr *, int, struct nlattr **,
-                                     int, struct nla_policy *);
-extern void *          genlmsg_data(const struct genlmsghdr *);
-extern int             genlmsg_len(const struct genlmsghdr *);
-extern struct nlattr * genlmsg_attrdata(const struct genlmsghdr *, int);
-extern int             genlmsg_attrlen(const struct genlmsghdr *, int);
-
-extern char *          genl_op2name(int, int, char *, size_t);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/package/libnl-tiny/src/include/netlink/genl/mngt.h b/package/libnl-tiny/src/include/netlink/genl/mngt.h
deleted file mode 100644 (file)
index 8b0244f..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * netlink/genl/mngt.h         Generic Netlink Management
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_GENL_MNGT_H_
-#define NETLINK_GENL_MNGT_H_
-
-#include <netlink/netlink.h>
-#include <netlink/attr.h>
-#include <netlink/list.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct nl_cache_ops;
-
-struct genl_info
-{
-       struct sockaddr_nl *    who;
-       struct nlmsghdr *       nlh;
-       struct genlmsghdr *     genlhdr;
-       void *                  userhdr;
-       struct nlattr **        attrs;
-};
-
-/**
- * @ingroup genl_mngt
- * Generic Netlink Command
- */
-struct genl_cmd
-{
-       /** Unique command identifier */
-       int                     c_id;
-
-       /** Name/description of command */
-       char *                  c_name;
-
-       /**
-        * Maximum attribute identifier, must be provided if
-        * a message parser is available.
-        */
-       int                     c_maxattr;
-
-       int                   (*c_msg_parser)(struct nl_cache_ops *,
-                                             struct genl_cmd *,
-                                             struct genl_info *, void *);
-
-       /**
-        * Attribute validation policy (optional)
-        */
-       struct nla_policy *     c_attr_policy;
-};
-
-/**
- * @ingroup genl_mngt
- * Generic Netlink Operations
- */
-struct genl_ops
-{
-       int                     o_family;
-       int                     o_id;
-       char *                  o_name;
-       struct nl_cache_ops *   o_cache_ops;
-       struct genl_cmd *       o_cmds;
-       int                     o_ncmds;
-
-       /* linked list of all genl cache operations */
-       struct nl_list_head     o_list;
-};
-
-
-extern int             genl_register(struct nl_cache_ops *);
-extern void            genl_unregister(struct nl_cache_ops *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/package/libnl-tiny/src/include/netlink/handlers.h b/package/libnl-tiny/src/include/netlink/handlers.h
deleted file mode 100644 (file)
index 7fb53b4..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * netlink/handlers.c  default netlink message handlers
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_HANDLERS_H_
-#define NETLINK_HANDLERS_H_
-
-#include <stdio.h>
-#include <stdint.h>
-#include <sys/types.h>
-#include <netlink/netlink-compat.h>
-#include <netlink/netlink-kernel.h>
-#include <netlink/types.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct nl_sock;
-struct nl_msg;
-struct nl_cb;
-/**
- * @name Callback Typedefs
- * @{
- */
-
-/**
- * nl_recvmsgs() callback for message processing customization
- * @ingroup cb
- * @arg msg            netlink message being processed
- * @arg arg            argument passwd on through caller
- */
-typedef int (*nl_recvmsg_msg_cb_t)(struct nl_msg *msg, void *arg);
-
-/**
- * nl_recvmsgs() callback for error message processing customization
- * @ingroup cb
- * @arg nla            netlink address of the peer
- * @arg nlerr          netlink error message being processed
- * @arg arg            argument passed on through caller
- */
-typedef int (*nl_recvmsg_err_cb_t)(struct sockaddr_nl *nla,
-                                  struct nlmsgerr *nlerr, void *arg);
-
-/** @} */
-
-/**
- * Callback actions
- * @ingroup cb
- */
-enum nl_cb_action {
-       /** Proceed with wathever would come next */
-       NL_OK,
-       /** Skip this message */
-       NL_SKIP,
-       /** Stop parsing altogether and discard remaining messages */
-       NL_STOP,
-};
-
-/**
- * Callback kinds
- * @ingroup cb
- */
-enum nl_cb_kind {
-       /** Default handlers (quiet) */
-       NL_CB_DEFAULT,
-       /** Verbose default handlers (error messages printed) */
-       NL_CB_VERBOSE,
-       /** Debug handlers for debugging */
-       NL_CB_DEBUG,
-       /** Customized handler specified by the user */
-       NL_CB_CUSTOM,
-       __NL_CB_KIND_MAX,
-};
-
-#define NL_CB_KIND_MAX (__NL_CB_KIND_MAX - 1)
-
-/**
- * Callback types
- * @ingroup cb
- */
-enum nl_cb_type {
-       /** Message is valid */
-       NL_CB_VALID,
-       /** Last message in a series of multi part messages received */
-       NL_CB_FINISH,
-       /** Report received that data was lost */
-       NL_CB_OVERRUN,
-       /** Message wants to be skipped */
-       NL_CB_SKIPPED,
-       /** Message is an acknowledge */
-       NL_CB_ACK,
-       /** Called for every message received */
-       NL_CB_MSG_IN,
-       /** Called for every message sent out except for nl_sendto() */
-       NL_CB_MSG_OUT,
-       /** Message is malformed and invalid */
-       NL_CB_INVALID,
-       /** Called instead of internal sequence number checking */
-       NL_CB_SEQ_CHECK,
-       /** Sending of an acknowledge message has been requested */
-       NL_CB_SEND_ACK,
-       __NL_CB_TYPE_MAX,
-};
-
-#define NL_CB_TYPE_MAX (__NL_CB_TYPE_MAX - 1)
-
-struct nl_cb
-{
-       nl_recvmsg_msg_cb_t     cb_set[NL_CB_TYPE_MAX+1];
-       void *                  cb_args[NL_CB_TYPE_MAX+1];
-       
-       nl_recvmsg_err_cb_t     cb_err;
-       void *                  cb_err_arg;
-
-       /** May be used to replace nl_recvmsgs with your own implementation
-        * in all internal calls to nl_recvmsgs. */
-       int                     (*cb_recvmsgs_ow)(struct nl_sock *,
-                                                 struct nl_cb *);
-
-       /** Overwrite internal calls to nl_recv, must return the number of
-        * octets read and allocate a buffer for the received data. */
-       int                     (*cb_recv_ow)(struct nl_sock *,
-                                             struct sockaddr_nl *,
-                                             unsigned char **,
-                                             struct ucred **);
-
-       /** Overwrites internal calls to nl_send, must send the netlink
-        * message. */
-       int                     (*cb_send_ow)(struct nl_sock *,
-                                             struct nl_msg *);
-
-       int                     cb_refcnt;
-};
-
-
-extern struct nl_cb *  nl_cb_alloc(enum nl_cb_kind);
-extern struct nl_cb *  nl_cb_clone(struct nl_cb *);
-extern void            nl_cb_put(struct nl_cb *);
-
-extern int  nl_cb_set(struct nl_cb *, enum nl_cb_type, enum nl_cb_kind,
-                     nl_recvmsg_msg_cb_t, void *);
-extern int  nl_cb_err(struct nl_cb *, enum nl_cb_kind, nl_recvmsg_err_cb_t,
-                     void *);
-
-static inline struct nl_cb *nl_cb_get(struct nl_cb *cb)
-{
-       cb->cb_refcnt++;
-
-       return cb;
-}
-
-/**
- * Set up a all callbacks
- * @arg cb             callback set
- * @arg kind           kind of callback
- * @arg func           callback function
- * @arg arg            argument to be passwd to callback function
- *
- * @return 0 on success or a negative error code
- */
-static inline int nl_cb_set_all(struct nl_cb *cb, enum nl_cb_kind kind,
-                 nl_recvmsg_msg_cb_t func, void *arg)
-{
-       int i, err;
-
-       for (i = 0; i <= NL_CB_TYPE_MAX; i++) {
-               err = nl_cb_set(cb,(enum nl_cb_type)i, kind, func, arg);
-               if (err < 0)
-                       return err;
-       }
-
-       return 0;
-}
-
-
-/**
- * @name Overwriting
- * @{
- */
-
-/**
- * Overwrite internal calls to nl_recvmsgs()
- * @arg cb             callback set
- * @arg func           replacement callback for nl_recvmsgs()
- */
-static inline void nl_cb_overwrite_recvmsgs(struct nl_cb *cb,
-                             int (*func)(struct nl_sock *, struct nl_cb *))
-{
-       cb->cb_recvmsgs_ow = func;
-}
-
-/**
- * Overwrite internal calls to nl_recv()
- * @arg cb             callback set
- * @arg func           replacement callback for nl_recv()
- */
-static inline void nl_cb_overwrite_recv(struct nl_cb *cb,
-                         int (*func)(struct nl_sock *, struct sockaddr_nl *,
-                                     unsigned char **, struct ucred **))
-{
-       cb->cb_recv_ow = func;
-}
-
-/**
- * Overwrite internal calls to nl_send()
- * @arg cb             callback set
- * @arg func           replacement callback for nl_send()
- */
-static inline void nl_cb_overwrite_send(struct nl_cb *cb,
-                         int (*func)(struct nl_sock *, struct nl_msg *))
-{
-       cb->cb_send_ow = func;
-}
-
-/** @} */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/package/libnl-tiny/src/include/netlink/list.h b/package/libnl-tiny/src/include/netlink/list.h
deleted file mode 100644 (file)
index c6876a7..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * netlink/list.h      Netlink List Utilities
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_LIST_H_
-#define NETLINK_LIST_H_
-
-struct nl_list_head
-{
-       struct nl_list_head *   next;
-       struct nl_list_head *   prev;
-};
-
-
-static inline void __nl_list_add(struct nl_list_head *obj,
-                                struct nl_list_head *prev,
-                                struct nl_list_head *next)
-{
-       prev->next = obj;
-       obj->prev = prev;
-       next->prev = obj;
-       obj->next = next;
-}
-
-static inline void nl_list_add_tail(struct nl_list_head *obj,
-                                   struct nl_list_head *head)
-{
-       __nl_list_add(obj, head->prev, head);
-}
-
-static inline void nl_list_add_head(struct nl_list_head *obj,
-                                   struct nl_list_head *head)
-{
-       __nl_list_add(obj, head, head->next);
-}
-
-static inline void nl_list_del(struct nl_list_head *obj)
-{
-       obj->next->prev = obj->prev;
-       obj->prev->next = obj->next;
-}
-
-static inline int nl_list_empty(struct nl_list_head *head)
-{
-       return head->next == head;
-}
-
-#define nl_container_of(ptr, type, member) ({                  \
-        const typeof( ((type *)0)->member ) *__mptr = (ptr);   \
-        (type *)( (char *)__mptr - ((size_t) &((type *)0)->member));})
-
-#define nl_list_entry(ptr, type, member) \
-       nl_container_of(ptr, type, member)
-
-#define nl_list_at_tail(pos, head, member) \
-       ((pos)->member.next == (head))
-
-#define nl_list_at_head(pos, head, member) \
-       ((pos)->member.prev == (head))
-
-#define NL_LIST_HEAD(name) \
-       struct nl_list_head name = { &(name), &(name) }
-
-#define nl_list_first_entry(head, type, member)                        \
-       nl_list_entry((head)->next, type, member)
-
-#define nl_list_for_each_entry(pos, head, member)                              \
-       for (pos = nl_list_entry((head)->next, typeof(*pos), member);   \
-            &(pos)->member != (head);  \
-            (pos) = nl_list_entry((pos)->member.next, typeof(*(pos)), member))
-
-#define nl_list_for_each_entry_safe(pos, n, head, member)                      \
-       for (pos = nl_list_entry((head)->next, typeof(*pos), member),   \
-               n = nl_list_entry(pos->member.next, typeof(*pos), member);      \
-            &(pos)->member != (head);                                  \
-            pos = n, n = nl_list_entry(n->member.next, typeof(*n), member))
-
-#define nl_init_list_head(head) \
-       do { (head)->next = (head); (head)->prev = (head); } while (0)
-
-#endif
diff --git a/package/libnl-tiny/src/include/netlink/msg.h b/package/libnl-tiny/src/include/netlink/msg.h
deleted file mode 100644 (file)
index b3e2b0b..0000000
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- * netlink/msg.c               Netlink Messages Interface
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_MSG_H_
-#define NETLINK_MSG_H_
-
-#include <netlink/netlink.h>
-#include <netlink/object.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct nla_policy;
-
-#define NL_DONTPAD     0
-
-/**
- * @ingroup msg
- * @brief
- * Will cause the netlink pid to be set to the pid assigned to
- * the netlink handle (socket) just before sending the message off.
- * @note Requires the use of nl_send_auto_complete()!
- */
-#define NL_AUTO_PID    0
-
-/**
- * @ingroup msg
- * @brief
- * May be used to refer to a sequence number which should be
- * automatically set just before sending the message off.
- * @note Requires the use of nl_send_auto_complete()!
- */
-#define NL_AUTO_SEQ    0
-
-#define NL_MSG_CRED_PRESENT 1
-
-struct nl_msg
-{
-       int                     nm_protocol;
-       int                     nm_flags;
-       struct sockaddr_nl      nm_src;
-       struct sockaddr_nl      nm_dst;
-       struct ucred            nm_creds;
-       struct nlmsghdr *       nm_nlh;
-       size_t                  nm_size;
-       int                     nm_refcnt;
-};
-
-
-struct nl_msg;
-struct nl_tree;
-struct ucred;
-
-/* message parsing */
-extern int               nlmsg_ok(const struct nlmsghdr *, int);
-extern struct nlmsghdr *  nlmsg_next(struct nlmsghdr *, int *);
-extern int               nlmsg_parse(struct nlmsghdr *, int, struct nlattr **,
-                                     int, struct nla_policy *);
-extern int               nlmsg_validate(struct nlmsghdr *, int, int,
-                                        struct nla_policy *);
-
-extern struct nl_msg *   nlmsg_alloc(void);
-extern struct nl_msg *   nlmsg_alloc_size(size_t);
-extern struct nl_msg *   nlmsg_alloc_simple(int, int);
-extern void              nlmsg_set_default_size(size_t);
-extern struct nl_msg *   nlmsg_inherit(struct nlmsghdr *);
-extern struct nl_msg *   nlmsg_convert(struct nlmsghdr *);
-extern void *            nlmsg_reserve(struct nl_msg *, size_t, int);
-extern int               nlmsg_append(struct nl_msg *, void *, size_t, int);
-
-extern struct nlmsghdr *  nlmsg_put(struct nl_msg *, uint32_t, uint32_t,
-                                   int, int, int);
-extern void              nlmsg_free(struct nl_msg *);
-
-extern int               nl_msg_parse(struct nl_msg *,
-                                      void (*cb)(struct nl_object *, void *),
-                                      void *);
-
-extern void            nl_msg_dump(struct nl_msg *, FILE *);
-
-/**
- * length of netlink message not including padding
- * @arg payload                length of message payload
- */
-static inline int nlmsg_msg_size(int payload)
-{
-       return NLMSG_HDRLEN + payload;
-}
-
-/**
- * length of netlink message including padding
- * @arg payload                length of message payload
- */
-static inline int nlmsg_total_size(int payload)
-{
-       return NLMSG_ALIGN(nlmsg_msg_size(payload));
-}
-
-/**
- * length of padding at the message's tail
- * @arg payload                length of message payload
- */
-static inline int nlmsg_padlen(int payload)
-{
-       return nlmsg_total_size(payload) - nlmsg_msg_size(payload);
-}
-
-/**
- * head of message payload
- * @arg nlh            netlink messsage header
- */
-static inline void *nlmsg_data(const struct nlmsghdr *nlh)
-{
-       return (unsigned char *) nlh + NLMSG_HDRLEN;
-}
-
-static inline void *nlmsg_tail(const struct nlmsghdr *nlh)
-{
-       return (unsigned char *) nlh + NLMSG_ALIGN(nlh->nlmsg_len);
-}
-
-/**
- * length of message payload
- * @arg nlh            netlink message header
- */
-static inline int nlmsg_len(const struct nlmsghdr *nlh)
-{
-       return nlh->nlmsg_len - NLMSG_HDRLEN;
-}
-
-/**
- * head of attributes data
- * @arg nlh            netlink message header
- * @arg hdrlen         length of family specific header
- */
-static inline struct nlattr *nlmsg_attrdata(const struct nlmsghdr *nlh, int hdrlen)
-{
-       unsigned char *data = (unsigned char*)nlmsg_data(nlh);
-       return (struct nlattr *) (data + NLMSG_ALIGN(hdrlen));
-}
-
-/**
- * length of attributes data
- * @arg nlh            netlink message header
- * @arg hdrlen         length of family specific header
- */
-static inline int nlmsg_attrlen(const struct nlmsghdr *nlh, int hdrlen)
-{
-       return nlmsg_len(nlh) - NLMSG_ALIGN(hdrlen);
-}
-
-static inline int nlmsg_valid_hdr(const struct nlmsghdr *nlh, int hdrlen)
-{
-       if (nlh->nlmsg_len < (uint)nlmsg_msg_size(hdrlen))
-               return 0;
-
-       return 1;
-}
-
-
-static inline void nlmsg_set_proto(struct nl_msg *msg, int protocol)
-{
-       msg->nm_protocol = protocol;
-}
-
-static inline int nlmsg_get_proto(struct nl_msg *msg)
-{
-       return msg->nm_protocol;
-}
-
-static inline size_t nlmsg_get_max_size(struct nl_msg *msg)
-{
-       return msg->nm_size;
-}
-
-static inline void nlmsg_set_src(struct nl_msg *msg, struct sockaddr_nl *addr)
-{
-       memcpy(&msg->nm_src, addr, sizeof(*addr));
-}
-
-static inline struct sockaddr_nl *nlmsg_get_src(struct nl_msg *msg)
-{
-       return &msg->nm_src;
-}
-
-static inline void nlmsg_set_dst(struct nl_msg *msg, struct sockaddr_nl *addr)
-{
-       memcpy(&msg->nm_dst, addr, sizeof(*addr));
-}
-
-static inline struct sockaddr_nl *nlmsg_get_dst(struct nl_msg *msg)
-{
-       return &msg->nm_dst;
-}
-
-static inline void nlmsg_set_creds(struct nl_msg *msg, struct ucred *creds)
-{
-       memcpy(&msg->nm_creds, creds, sizeof(*creds));
-       msg->nm_flags |= NL_MSG_CRED_PRESENT;
-}
-
-static inline struct ucred *nlmsg_get_creds(struct nl_msg *msg)
-{
-       if (msg->nm_flags & NL_MSG_CRED_PRESENT)
-               return &msg->nm_creds;
-       return NULL;
-}
-
-/**
- * Return actual netlink message
- * @arg n              netlink message
- * 
- * Returns the actual netlink message casted to the type of the netlink
- * message header.
- * 
- * @return A pointer to the netlink message.
- */
-static inline struct nlmsghdr *nlmsg_hdr(struct nl_msg *n)
-{
-       return n->nm_nlh;
-}
-
-/**
- * Acquire a reference on a netlink message
- * @arg msg            message to acquire reference from
- */
-static inline void nlmsg_get(struct nl_msg *msg)
-{
-       msg->nm_refcnt++;
-}
-
-/**
- * Expand maximum payload size of a netlink message
- * @arg n              Netlink message.
- * @arg newlen         New maximum payload size.
- *
- * Reallocates the payload section of a netlink message and increases
- * the maximum payload size of the message.
- *
- * @note Any pointers pointing to old payload block will be stale and
- *       need to be refetched. Therfore, do not expand while constructing
- *       nested attributes or while reserved data blocks are held.
- *
- * @return 0 on success or a negative error code.
- */
-static inline int nlmsg_expand(struct nl_msg *n, size_t newlen)
-{
-       void *tmp;
-
-       if (newlen <= n->nm_size)
-               return -NLE_INVAL;
-
-       tmp = realloc(n->nm_nlh, newlen);
-       if (tmp == NULL)
-               return -NLE_NOMEM;
-
-       n->nm_nlh = (struct nlmsghdr*)tmp;
-       n->nm_size = newlen;
-
-       return 0;
-}
-
-
-/**
- * @name Iterators
- * @{
- */
-
-/**
- * @ingroup msg
- * Iterate over a stream of attributes in a message
- * @arg pos    loop counter, set to current attribute
- * @arg nlh    netlink message header
- * @arg hdrlen length of family header
- * @arg rem    initialized to len, holds bytes currently remaining in stream
- */
-#define nlmsg_for_each_attr(pos, nlh, hdrlen, rem) \
-       nla_for_each_attr(pos, nlmsg_attrdata(nlh, hdrlen), \
-                         nlmsg_attrlen(nlh, hdrlen), rem)
-
-/**
- * Iterate over a stream of messages
- * @arg pos    loop counter, set to current message
- * @arg head   head of message stream
- * @arg len    length of message stream
- * @arg rem    initialized to len, holds bytes currently remaining in stream
- */
-#define nlmsg_for_each_msg(pos, head, len, rem) \
-       for (pos = head, rem = len; \
-            nlmsg_ok(pos, rem); \
-            pos = nlmsg_next(pos, &(rem)))
-
-/** @} */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/package/libnl-tiny/src/include/netlink/netlink-compat.h b/package/libnl-tiny/src/include/netlink/netlink-compat.h
deleted file mode 100644 (file)
index 17ec9fc..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * netlink/netlink-compat.h    Netlink Compatability
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_COMPAT_H_
-#define NETLINK_COMPAT_H_
-
-#if !defined _LINUX_SOCKET_H && !defined _BITS_SOCKADDR_H
-typedef unsigned short  sa_family_t;
-#endif
-
-#ifndef IFNAMSIZ 
-/** Maximum length of a interface name */
-#define IFNAMSIZ 16
-#endif
-
-/* patch 2.4.x if_arp */
-#ifndef ARPHRD_INFINIBAND
-#define ARPHRD_INFINIBAND 32
-#endif
-
-/* patch 2.4.x eth header file */
-#ifndef ETH_P_MPLS_UC
-#define ETH_P_MPLS_UC  0x8847 
-#endif
-
-#ifndef ETH_P_MPLS_MC
-#define ETH_P_MPLS_MC   0x8848
-#endif
-
-#ifndef  ETH_P_EDP2
-#define ETH_P_EDP2      0x88A2
-#endif
-
-#ifndef ETH_P_HDLC
-#define ETH_P_HDLC      0x0019 
-#endif
-
-#ifndef AF_LLC
-#define AF_LLC         26
-#endif
-
-#endif
diff --git a/package/libnl-tiny/src/include/netlink/netlink-kernel.h b/package/libnl-tiny/src/include/netlink/netlink-kernel.h
deleted file mode 100644 (file)
index a0f5535..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-#ifndef __LINUX_NETLINK_H
-#define __LINUX_NETLINK_H
-
-/**
- * Netlink socket address
- * @ingroup nl
- */
-struct sockaddr_nl
-{
-       /** socket family (AF_NETLINK) */
-       sa_family_t     nl_family;
-
-       /** Padding (unused) */
-       unsigned short  nl_pad;
-
-       /** Unique process ID  */
-       uint32_t        nl_pid;
-
-       /** Multicast group subscriptions */
-       uint32_t        nl_groups;
-};
-
-/**
- * Netlink message header
- * @ingroup msg
- */
-struct nlmsghdr
-{
-       /**
-        * Length of message including header.
-        */
-       uint32_t        nlmsg_len;
-
-       /**
-        * Message type (content type)
-        */
-       uint16_t        nlmsg_type;
-
-       /**
-        * Message flags
-        */
-       uint16_t        nlmsg_flags;
-
-       /**
-        * Sequence number
-        */
-       uint32_t        nlmsg_seq;
-
-       /**
-        * Netlink PID of the proccess sending the message.
-        */
-       uint32_t        nlmsg_pid;
-};
-
-/**
- * @name Standard message flags
- * @{
- */
-
-/**
- * Must be set on all request messages (typically from user space to
- * kernel space).
- * @ingroup msg
- */
-#define NLM_F_REQUEST          1
-
-/**
- * Indicates the message is part of a multipart message terminated
- * by NLMSG_DONE.
- */
-#define NLM_F_MULTI            2
-
-/**
- * Request for an acknowledgment on success.
- */
-#define NLM_F_ACK              4
-
-/**
- * Echo this request
- */
-#define NLM_F_ECHO             8
-
-/** @} */
-
-/**
- * @name Additional message flags for GET requests
- * @{
- */
-
-/**
- * Return the complete table instead of a single entry.
- * @ingroup msg
- */
-#define NLM_F_ROOT     0x100
-
-/**
- * Return all entries matching criteria passed in message content.
- */
-#define NLM_F_MATCH    0x200
-
-/**
- * Return an atomic snapshot of the table being referenced. This
- * may require special privileges because it has the potential to
- * interrupt service in the FE for a longer time.
- */
-#define NLM_F_ATOMIC   0x400
-
-/**
- * Dump all entries
- */
-#define NLM_F_DUMP     (NLM_F_ROOT|NLM_F_MATCH)
-
-/** @} */
-
-/**
- * @name Additional messsage flags for NEW requests
- * @{
- */
-
-/**
- * Replace existing matching config object with this request.
- * @ingroup msg
- */
-#define NLM_F_REPLACE  0x100
-
-/**
- * Don't replace the config object if it already exists.
- */
-#define NLM_F_EXCL     0x200
-
-/**
- * Create config object if it doesn't already exist.
- */
-#define NLM_F_CREATE   0x400
-
-/**
- * Add to the end of the object list.
- */
-#define NLM_F_APPEND   0x800
-
-/** @} */
-
-/**
- * @name Standard Message types
- * @{
- */
-
-/**
- * No operation, message must be ignored
- * @ingroup msg
- */
-#define NLMSG_NOOP             0x1
-
-/**
- * The message signals an error and the payload contains a nlmsgerr
- * structure. This can be looked at as a NACK and typically it is
- * from FEC to CPC.
- */
-#define NLMSG_ERROR            0x2
-
-/**
- * Message terminates a multipart message.
- */
-#define NLMSG_DONE             0x3
-
-/**
- * The message signals that data got lost
- */
-#define NLMSG_OVERRUN          0x4
-
-/**
- * Lower limit of reserved message types
- */
-#define NLMSG_MIN_TYPE         0x10
-
-/** @} */
-
-/**
- * Netlink error message
- * @ingroup msg
- */
-struct nlmsgerr
-{
-       /** Error code (errno number) */
-       int             error;
-
-       /** Original netlink message causing the error */
-       struct nlmsghdr msg;
-};
-
-struct nl_pktinfo
-{
-       __u32   group;
-};
-
-#endif /* __LINUX_NETLINK_H */
diff --git a/package/libnl-tiny/src/include/netlink/netlink.h b/package/libnl-tiny/src/include/netlink/netlink.h
deleted file mode 100644 (file)
index e06fb7f..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * netlink/netlink.h           Netlink Interface
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_NETLINK_H_
-#define NETLINK_NETLINK_H_
-
-#include <stdio.h>
-#include <stdint.h>
-#include <string.h>
-#include <stdlib.h>
-#include <sys/poll.h>
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <netdb.h>
-#include <netlink/netlink-compat.h>
-#include <linux/netlink.h>
-#include <linux/genetlink.h>
-#include <netlink/version.h>
-#include <netlink/errno.h>
-#include <netlink/types.h>
-#include <netlink/handlers.h>
-#include <netlink/socket.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern int nl_debug;
-extern struct nl_dump_params nl_debug_dp;
-
-/* Connection Management */
-extern int                     nl_connect(struct nl_sock *, int);
-extern void                    nl_close(struct nl_sock *);
-
-/* Send */
-extern int                     nl_sendto(struct nl_sock *, void *, size_t);
-extern int                     nl_sendmsg(struct nl_sock *, struct nl_msg *,
-                                          struct msghdr *);
-extern int                     nl_send(struct nl_sock *, struct nl_msg *);
-extern int                     nl_send_auto_complete(struct nl_sock *,
-                                                     struct nl_msg *);
-extern int                     nl_send_simple(struct nl_sock *, int, int,
-                                              void *, size_t);
-
-/* Receive */
-extern int                     nl_recv(struct nl_sock *,
-                                       struct sockaddr_nl *, unsigned char **,
-                                       struct ucred **);
-extern int                     nl_recvmsgs(struct nl_sock *sk, struct nl_cb *cb);
-
-extern int                     nl_wait_for_ack(struct nl_sock *);
-
-/* Netlink Family Translations */
-extern char *                  nl_nlfamily2str(int, char *, size_t);
-extern int                     nl_str2nlfamily(const char *);
-
-/**
- * Receive a set of message from a netlink socket using handlers in nl_sock.
- * @arg sk             Netlink socket.
- *
- * Calls nl_recvmsgs() with the handlers configured in the netlink socket.
- */
-static inline int nl_recvmsgs_default(struct nl_sock *sk)
-{
-       return nl_recvmsgs(sk, sk->s_cb);
-}
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/package/libnl-tiny/src/include/netlink/object-api.h b/package/libnl-tiny/src/include/netlink/object-api.h
deleted file mode 100644 (file)
index 8a44fe9..0000000
+++ /dev/null
@@ -1,331 +0,0 @@
-/*
- * netlink/object-api.c                Object API
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2007 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_OBJECT_API_H_
-#define NETLINK_OBJECT_API_H_
-
-#include <netlink/netlink.h>
-#include <netlink/utils.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @ingroup object
- * @defgroup object_api Object API
- * @brief
- *
- * @par 1) Object Definition
- * @code
- * // Define your object starting with the common object header
- * struct my_obj {
- *     NLHDR_COMMON
- *     int             my_data;
- * };
- *
- * // Fill out the object operations structure
- * struct nl_object_ops my_ops = {
- *     .oo_name        = "my_obj",
- *     .oo_size        = sizeof(struct my_obj),
- * };
- *
- * // At this point the object can be allocated, you may want to provide a
- * // separate _alloc() function to ease allocting objects of this kind.
- * struct nl_object *obj = nl_object_alloc(&my_ops);
- *
- * // And release it again...
- * nl_object_put(obj);
- * @endcode
- *
- * @par 2) Allocating additional data
- * @code
- * // You may require to allocate additional data and store it inside
- * // object, f.e. assuming there is a field `ptr'.
- * struct my_obj {
- *     NLHDR_COMMON
- *     void *          ptr;
- * };
- *
- * // And at some point you may assign allocated data to this field:
- * my_obj->ptr = calloc(1, ...);
- *
- * // In order to not introduce any memory leaks you have to release
- * // this data again when the last reference is given back.
- * static void my_obj_free_data(struct nl_object *obj)
- * {
- *     struct my_obj *my_obj = nl_object_priv(obj);
- *
- *     free(my_obj->ptr);
- * }
- *
- * // Also when the object is cloned, you must ensure for your pointer
- * // stay valid even if one of the clones is freed by either making
- * // a clone as well or increase the reference count.
- * static int my_obj_clone(struct nl_object *src, struct nl_object *dst)
- * {
- *     struct my_obj *my_src = nl_object_priv(src);
- *     struct my_obj *my_dst = nl_object_priv(dst);
- *
- *     if (src->ptr) {
- *             dst->ptr = calloc(1, ...);
- *             memcpy(dst->ptr, src->ptr, ...);
- *     }
- * }
- *
- * struct nl_object_ops my_ops = {
- *     ...
- *     .oo_free_data   = my_obj_free_data,
- *     .oo_clone       = my_obj_clone,
- * };
- * @endcode
- *
- * @par 3) Object Dumping
- * @code
- * static int my_obj_dump_detailed(struct nl_object *obj,
- *                                struct nl_dump_params *params)
- * {
- *     struct my_obj *my_obj = nl_object_priv(obj);
- *
- *     // It is absolutely essential to use nl_dump() when printing
- *     // any text to make sure the dumping parameters are respected.
- *     nl_dump(params, "Obj Integer: %d\n", my_obj->my_int);
- *
- *     // Before we can dump the next line, make sure to prefix
- *     // this line correctly.
- *     nl_new_line(params);
- *
- *     // You may also split a line into multiple nl_dump() calls.
- *     nl_dump(params, "String: %s ", my_obj->my_string);
- *     nl_dump(params, "String-2: %s\n", my_obj->another_string);
- * }
- *
- * struct nl_object_ops my_ops = {
- *     ...
- *     .oo_dump[NL_DUMP_FULL]  = my_obj_dump_detailed,
- * };
- * @endcode
- *
- * @par 4) Object Attributes
- * @code
- * // The concept of object attributes is optional but can ease the typical
- * // case of objects that have optional attributes, e.g. a route may have a
- * // nexthop assigned but it is not required to.
- *
- * // The first step to define your object specific bitmask listing all
- * // attributes
- * #define MY_ATTR_FOO         (1<<0)
- * #define MY_ATTR_BAR         (1<<1)
- *
- * // When assigning an optional attribute to the object, make sure
- * // to mark its availability.
- * my_obj->foo = 123123;
- * my_obj->ce_mask |= MY_ATTR_FOO;
- *
- * // At any time you may use this mask to check for the availability
- * // of the attribute, e.g. while dumping
- * if (my_obj->ce_mask & MY_ATTR_FOO)
- *     nl_dump(params, "foo %d ", my_obj->foo);
- *
- * // One of the big advantages of this concept is that it allows for
- * // standardized comparisons which make it trivial for caches to
- * // identify unique objects by use of unified comparison functions.
- * // In order for it to work, your object implementation must provide
- * // a comparison function and define a list of attributes which
- * // combined together make an object unique.
- *
- * static int my_obj_compare(struct nl_object *_a, struct nl_object *_b,
- *                          uint32_t attrs, int flags)
- * {
- *     struct my_obj *a = nl_object_priv(_a):
- *     struct my_obj *b = nl_object_priv(_b):
- *     int diff = 0;
- *
- *     // We help ourselves in defining our own DIFF macro which will
- *     // call ATTR_DIFF() on both objects which will make sure to only
- *     // compare the attributes if required.
- *     #define MY_DIFF(ATTR, EXPR) ATTR_DIFF(attrs, MY_ATTR_##ATTR, a, b, EXPR)
- *
- *     // Call our own diff macro for each attribute to build a bitmask
- *     // representing the attributes which mismatch.
- *     diff |= MY_DIFF(FOO, a->foo != b->foo)
- *     diff |= MY_DIFF(BAR, strcmp(a->bar, b->bar))
- *
- *     return diff;
- * }
- *
- * // In order to identify identical objects with differing attributes
- * // you must specify the attributes required to uniquely identify
- * // your object. Make sure to not include too many attributes, this
- * // list is used when caches look for an old version of an object.
- * struct nl_object_ops my_ops = {
- *     ...
- *     .oo_id_attrs            = MY_ATTR_FOO,
- *     .oo_compare             = my_obj_compare,
- * };
- * @endcode
- * @{
- */
-
-/**
- * Common Object Header
- *
- * This macro must be included as first member in every object
- * definition to allow objects to be cached.
- */
-#define NLHDR_COMMON                           \
-       int                     ce_refcnt;      \
-       struct nl_object_ops *  ce_ops;         \
-       struct nl_cache *       ce_cache;       \
-       struct nl_list_head     ce_list;        \
-       int                     ce_msgtype;     \
-       int                     ce_flags;       \
-       uint32_t                ce_mask;
-
-/**
- * Return true if attribute is available in both objects
- * @arg A              an object
- * @arg B              another object
- * @arg ATTR           attribute bit
- *
- * @return True if the attribute is available, otherwise false is returned.
- */
-#define AVAILABLE(A, B, ATTR)  (((A)->ce_mask & (B)->ce_mask) & (ATTR))
-
-/**
- * Return true if attributes mismatch
- * @arg A              an object
- * @arg B              another object
- * @arg ATTR           attribute bit
- * @arg EXPR           Comparison expression
- *
- * This function will check if the attribute in question is available
- * in both objects, if not this will count as a mismatch.
- *
- * If available the function will execute the expression which must
- * return true if the attributes mismatch.
- *
- * @return True if the attribute mismatch, or false if they match.
- */
-#define ATTR_MISMATCH(A, B, ATTR, EXPR)        (!AVAILABLE(A, B, ATTR) || (EXPR))
-
-/**
- * Return attribute bit if attribute does not match
- * @arg LIST           list of attributes to be compared
- * @arg ATTR           attribute bit
- * @arg A              an object
- * @arg B              another object
- * @arg EXPR           Comparison expression
- *
- * This function will check if the attribute in question is available
- * in both objects, if not this will count as a mismatch.
- *
- * If available the function will execute the expression which must
- * return true if the attributes mismatch.
- *
- * In case the attributes mismatch, the attribute is returned, otherwise
- * 0 is returned.
- *
- * @code
- * diff |= ATTR_DIFF(attrs, MY_ATTR_FOO, a, b, a->foo != b->foo);
- * @endcode
- */
-#define ATTR_DIFF(LIST, ATTR, A, B, EXPR) \
-({     int diff = 0; \
-       if (((LIST) & (ATTR)) && ATTR_MISMATCH(A, B, ATTR, EXPR)) \
-               diff = ATTR; \
-       diff; })
-
-/**
- * Object Operations
- */
-struct nl_object;
-struct nl_object_ops
-{
-       /**
-        * Unique name of object type
-        *
-        * Must be in the form family/name, e.g. "route/addr"
-        */
-       char *          oo_name;
-
-       /** Size of object including its header */
-       size_t          oo_size;
-
-       /* List of attributes needed to uniquely identify the object */
-       uint32_t        oo_id_attrs;
-
-       /**
-        * Constructor function
-        *
-        * Will be called when a new object of this type is allocated.
-        * Can be used to initialize members such as lists etc.
-        */
-       void  (*oo_constructor)(struct nl_object *);
-
-       /**
-        * Destructor function
-        *
-        * Will be called when an object is freed. Must free all
-        * resources which may have been allocated as part of this
-        * object.
-        */
-       void  (*oo_free_data)(struct nl_object *);
-
-       /**
-        * Cloning function
-        *
-        * Will be called when an object needs to be cloned. Please
-        * note that the generic object code will make an exact
-        * copy of the object first, therefore you only need to take
-        * care of members which require reference counting etc.
-        *
-        * May return a negative error code to abort cloning.
-        */
-       int  (*oo_clone)(struct nl_object *, struct nl_object *);
-
-       /**
-        * Dumping functions
-        *
-        * Will be called when an object is dumped. The implementations
-        * have to use nl_dump(), nl_dump_line(), and nl_new_line() to
-        * dump objects.
-        *
-        * The functions must return the number of lines printed.
-        */
-       void (*oo_dump[NL_DUMP_MAX+1])(struct nl_object *,
-                                      struct nl_dump_params *);
-
-       /**
-        * Comparison function
-        *
-        * Will be called when two objects of the same type are
-        * compared. It takes the two objects in question, an object
-        * specific bitmask defining which attributes should be
-        * compared and flags to control the behaviour.
-        *
-        * The function must return a bitmask with the relevant bit
-        * set for each attribute that mismatches.
-        */
-       int   (*oo_compare)(struct nl_object *, struct nl_object *,
-                           uint32_t, int);
-
-
-       char *(*oo_attrs2str)(int, char *, size_t);
-};
-
-/** @} */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/package/libnl-tiny/src/include/netlink/object.h b/package/libnl-tiny/src/include/netlink/object.h
deleted file mode 100644 (file)
index 8aabe7b..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * netlink/object.c    Generic Cacheable Object
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_OBJECT_H_
-#define NETLINK_OBJECT_H_
-
-#include <netlink/netlink.h>
-#include <netlink/utils.h>
-#include <netlink/object-api.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define NL_OBJ_MARK            1
-
-struct nl_cache;
-struct nl_object;
-struct nl_object_ops;
-
-struct nl_object
-{
-       NLHDR_COMMON
-};
-
-#define OBJ_CAST(ptr)          ((struct nl_object *) (ptr))
-
-/* General */
-extern struct nl_object *      nl_object_alloc(struct nl_object_ops *);
-extern void                    nl_object_free(struct nl_object *);
-extern struct nl_object *      nl_object_clone(struct nl_object *obj);
-
-#ifdef disabled
-
-extern int                     nl_object_alloc_name(const char *,
-                                                    struct nl_object **);
-extern void                    nl_object_dump(struct nl_object *,
-                                              struct nl_dump_params *);
-
-extern uint32_t                        nl_object_diff(struct nl_object *,
-                                              struct nl_object *);
-extern int                     nl_object_match_filter(struct nl_object *,
-                                                      struct nl_object *);
-extern int                     nl_object_identical(struct nl_object *,
-                                                   struct nl_object *);
-extern char *                  nl_object_attrs2str(struct nl_object *,
-                                                   uint32_t attrs, char *buf,
-                                                   size_t);
-#endif
-/**
- * Check whether this object is used by multiple users
- * @arg obj            object to check
- * @return true or false
- */
-static inline int nl_object_shared(struct nl_object *obj)
-{
-       return obj->ce_refcnt > 1;
-}
-
-
-static inline void nl_object_get(struct nl_object *obj)
-{
-       obj->ce_refcnt++;
-}
-
-static inline void nl_object_put(struct nl_object *obj)
-{
-       if (!obj)
-               return;
-
-       obj->ce_refcnt--;
-
-       if (obj->ce_refcnt <= 0)
-               nl_object_free(obj);
-}
-
-
-/**
- * @name Marks
- * @{
- */
-
-/**
- * Add mark to object
- * @arg obj            Object to mark
- */
-static inline void nl_object_mark(struct nl_object *obj)
-{
-       obj->ce_flags |= NL_OBJ_MARK;
-}
-
-/**
- * Remove mark from object
- * @arg obj            Object to unmark
- */
-static inline void nl_object_unmark(struct nl_object *obj)
-{
-       obj->ce_flags &= ~NL_OBJ_MARK;
-}
-
-/**
- * Return true if object is marked
- * @arg obj            Object to check
- * @return true if object is marked, otherwise false
- */
-static inline int nl_object_is_marked(struct nl_object *obj)
-{
-       return (obj->ce_flags & NL_OBJ_MARK);
-}
-
-/** @} */
-
-#ifdef disabled
-/**
- * Return list of attributes present in an object
- * @arg obj            an object
- * @arg buf            destination buffer
- * @arg len            length of destination buffer
- *
- * @return destination buffer.
- */
-static inline char *nl_object_attr_list(struct nl_object *obj, char *buf, size_t len)
-{
-       return nl_object_attrs2str(obj, obj->ce_mask, buf, len);
-}
-#endif
-
-/**
- * @name Attributes
- * @{
- */
-
-static inline int nl_object_get_refcnt(struct nl_object *obj)
-{
-       return obj->ce_refcnt;
-}
-
-static inline struct nl_cache *nl_object_get_cache(struct nl_object *obj)
-{
-       return obj->ce_cache;
-}
-
-static inline void *           nl_object_priv(struct nl_object *obj)
-{
-       return obj;
-}
-
-
-/** @} */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/package/libnl-tiny/src/include/netlink/socket.h b/package/libnl-tiny/src/include/netlink/socket.h
deleted file mode 100644 (file)
index 9f7f422..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * netlink/socket.h            Netlink Socket
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_SOCKET_H_
-#define NETLINK_SOCKET_H_
-
-#include <netlink/types.h>
-#include <netlink/handlers.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define NL_SOCK_BUFSIZE_SET    (1<<0)
-#define NL_SOCK_PASSCRED       (1<<1)
-#define NL_OWN_PORT            (1<<2)
-#define NL_MSG_PEEK            (1<<3)
-#define NL_NO_AUTO_ACK         (1<<4)
-
-struct nl_cb;
-struct nl_sock
-{
-       struct sockaddr_nl      s_local;
-       struct sockaddr_nl      s_peer;
-       int                     s_fd;
-       int                     s_proto;
-       unsigned int            s_seq_next;
-       unsigned int            s_seq_expect;
-       int                     s_flags;
-       struct nl_cb *          s_cb;
-};
-
-
-extern struct nl_sock *        nl_socket_alloc(void);
-extern struct nl_sock *        nl_socket_alloc_cb(struct nl_cb *);
-extern void            nl_socket_free(struct nl_sock *);
-
-extern void            nl_socket_set_local_port(struct nl_sock *, uint32_t);
-
-extern int             nl_socket_add_memberships(struct nl_sock *, int, ...);
-extern int             nl_socket_drop_memberships(struct nl_sock *, int, ...);
-
-extern int             nl_socket_set_buffer_size(struct nl_sock *, int, int);
-extern int             nl_socket_set_passcred(struct nl_sock *, int);
-extern int             nl_socket_recv_pktinfo(struct nl_sock *, int);
-
-extern void            nl_socket_disable_seq_check(struct nl_sock *);
-
-extern int             nl_socket_set_nonblocking(struct nl_sock *);
-
-/**
- * Use next sequence number
- * @arg sk             Netlink socket.
- *
- * Uses the next available sequence number and increases the counter
- * by one for subsequent calls.
- *
- * @return Unique serial sequence number
- */
-static inline unsigned int nl_socket_use_seq(struct nl_sock *sk)
-{
-       return sk->s_seq_next++;
-}
-
-/**
- * Disable automatic request for ACK
- * @arg sk             Netlink socket.
- *
- * The default behaviour of a socket is to request an ACK for
- * each message sent to allow for the caller to synchronize to
- * the completion of the netlink operation. This function
- * disables this behaviour and will result in requests being
- * sent which will not have the NLM_F_ACK flag set automatically.
- * However, it is still possible for the caller to set the
- * NLM_F_ACK flag explicitely.
- */
-static inline void nl_socket_disable_auto_ack(struct nl_sock *sk)
-{
-       sk->s_flags |= NL_NO_AUTO_ACK;
-}
-
-/**
- * Enable automatic request for ACK (default)
- * @arg sk             Netlink socket.
- * @see nl_socket_disable_auto_ack
- */
-static inline void nl_socket_enable_auto_ack(struct nl_sock *sk)
-{
-       sk->s_flags &= ~NL_NO_AUTO_ACK;
-}
-
-/**
- * @name Source Idenficiation
- * @{
- */
-
-static inline uint32_t nl_socket_get_local_port(struct nl_sock *sk)
-{
-       return sk->s_local.nl_pid;
-}
-
-/**
- * Join multicast groups (deprecated)
- * @arg sk             Netlink socket.
- * @arg groups         Bitmask of groups to join.
- *
- * This function defines the old way of joining multicast group which
- * has to be done prior to calling nl_connect(). It works on any kernel
- * version but is very limited as only 32 groups can be joined.
- */
-static inline void nl_join_groups(struct nl_sock *sk, int groups)
-{
-       sk->s_local.nl_groups |= groups;
-}
-
-/**
- * @name Peer Identfication
- * @{
- */
-
-static inline uint32_t nl_socket_get_peer_port(struct nl_sock *sk)
-{
-       return sk->s_peer.nl_pid;
-}
-
-static inline void nl_socket_set_peer_port(struct nl_sock *sk, uint32_t port)
-{
-       sk->s_peer.nl_pid = port;
-}
-
-/** @} */
-
-/**
- * @name File Descriptor
- * @{
- */
-
-static inline int nl_socket_get_fd(struct nl_sock *sk)
-{
-       return sk->s_fd;
-}
-
-/**
- * Enable use of MSG_PEEK when reading from socket
- * @arg sk             Netlink socket.
- */
-static inline void nl_socket_enable_msg_peek(struct nl_sock *sk)
-{
-       sk->s_flags |= NL_MSG_PEEK;
-}
-
-/**
- * Disable use of MSG_PEEK when reading from socket
- * @arg sk             Netlink socket.
- */
-static inline void nl_socket_disable_msg_peek(struct nl_sock *sk)
-{
-       sk->s_flags &= ~NL_MSG_PEEK;
-}
-
-/**
- * @name Callback Handler
- * @{
- */
-
-static inline struct nl_cb *nl_socket_get_cb(struct nl_sock *sk)
-{
-       return nl_cb_get(sk->s_cb);
-}
-
-static inline void nl_socket_set_cb(struct nl_sock *sk, struct nl_cb *cb)
-{
-       nl_cb_put(sk->s_cb);
-       sk->s_cb = nl_cb_get(cb);
-}
-
-/**
- * Modify the callback handler associated to the socket
- * @arg sk             Netlink socket.
- * @arg type           which type callback to set
- * @arg kind           kind of callback
- * @arg func           callback function
- * @arg arg            argument to be passwd to callback function
- *
- * @see nl_cb_set
- */
-static inline int nl_socket_modify_cb(struct nl_sock *sk, enum nl_cb_type type,
-                       enum nl_cb_kind kind, nl_recvmsg_msg_cb_t func,
-                       void *arg)
-{
-       return nl_cb_set(sk->s_cb, type, kind, func, arg);
-}
-
-/** @} */
-
-static inline int nl_socket_add_membership(struct nl_sock *sk, int group)
-{
-       return nl_socket_add_memberships(sk, group, 0);
-}
-
-
-static inline int nl_socket_drop_membership(struct nl_sock *sk, int group)
-{
-       return nl_socket_drop_memberships(sk, group, 0);
-}
-
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/package/libnl-tiny/src/include/netlink/types.h b/package/libnl-tiny/src/include/netlink/types.h
deleted file mode 100644 (file)
index de81ace..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * netlink/netlink-types.h     Netlink Types
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef __NETLINK_TYPES_H_
-#define __NETLINK_TYPES_H_
-
-#include <stdio.h>
-
-/**
- * Dumping types (dp_type)
- * @ingroup utils
- */
-enum nl_dump_type {
-       NL_DUMP_LINE,           /**< Dump object briefly on one line */
-       NL_DUMP_DETAILS,        /**< Dump all attributes but no statistics */
-       NL_DUMP_STATS,          /**< Dump all attributes including statistics */
-       NL_DUMP_ENV,            /**< Dump all attribtues as env variables */
-       __NL_DUMP_MAX,
-};
-#define NL_DUMP_MAX (__NL_DUMP_MAX - 1)
-
-/**
- * Dumping parameters
- * @ingroup utils
- */
-struct nl_dump_params
-{
-       /**
-        * Specifies the type of dump that is requested.
-        */
-       enum nl_dump_type       dp_type;
-
-       /**
-        * Specifies the number of whitespaces to be put in front
-        * of every new line (indentation).
-        */
-       int                     dp_prefix;
-
-       /**
-        * Causes the cache index to be printed for each element.
-        */
-       int                     dp_print_index;
-
-       /**
-        * Causes each element to be prefixed with the message type.
-        */
-       int                     dp_dump_msgtype;
-
-       /**
-        * A callback invoked for output
-        *
-        * Passed arguments are:
-        *  - dumping parameters
-        *  - string to append to the output
-        */
-       void                    (*dp_cb)(struct nl_dump_params *, char *);
-
-       /**
-        * A callback invoked for every new line, can be used to
-        * customize the indentation.
-        *
-        * Passed arguments are:
-        *  - dumping parameters
-        *  - line number starting from 0
-        */
-       void                    (*dp_nl_cb)(struct nl_dump_params *, int);
-
-       /**
-        * User data pointer, can be used to pass data to callbacks.
-        */
-       void                    *dp_data;
-
-       /**
-        * File descriptor the dumping output should go to
-        */
-       FILE *                  dp_fd;
-
-       /**
-        * Alternatively the output may be redirected into a buffer
-        */
-       char *                  dp_buf;
-
-       /**
-        * Length of the buffer dp_buf
-        */
-       size_t                  dp_buflen;
-
-       /**
-        * PRIVATE
-        * Set if a dump was performed prior to the actual dump handler.
-        */
-       int                     dp_pre_dump;
-
-       /**
-        * PRIVATE
-        * Owned by the current caller
-        */
-       int                     dp_ivar;
-
-       unsigned int            dp_line;
-};
-
-#ifndef __GNUC__
-#define __extension__
-#endif
-
-#define min_t(type,x,y) \
-       __extension__({ type __x = (x); type __y = (y); __x < __y ? __x: __y; })
-#define max_t(type,x,y) \
-       __extension__({ type __x = (x); type __y = (y); __x > __y ? __x: __y; })
-
-
-#endif
diff --git a/package/libnl-tiny/src/include/netlink/utils.h b/package/libnl-tiny/src/include/netlink/utils.h
deleted file mode 100644 (file)
index 480bab6..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * netlink/utils.h             Utility Functions
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_UTILS_H_
-#define NETLINK_UTILS_H_
-
-#include <netlink/netlink.h>
-#include <netlink/list.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @name Probability Constants
- * @{
- */
-
-/**
- * Lower probability limit
- * @ingroup utils
- */
-#define NL_PROB_MIN 0x0
-
-/**
- * Upper probability limit
- * @ingroup utils
- */
-#define NL_PROB_MAX 0xffffffff
-
-/** @} */
-
-/* unit pretty-printing */
-extern double  nl_cancel_down_bytes(unsigned long long, char **);
-extern double  nl_cancel_down_bits(unsigned long long, char **);
-extern double  nl_cancel_down_us(uint32_t, char **);
-
-/* generic unit translations */
-extern long    nl_size2int(const char *);
-extern long    nl_prob2int(const char *);
-
-/* time translations */
-extern int     nl_get_hz(void);
-extern uint32_t        nl_us2ticks(uint32_t);
-extern uint32_t        nl_ticks2us(uint32_t);
-extern int     nl_str2msec(const char *, uint64_t *);
-extern char *  nl_msec2str(uint64_t, char *, size_t);
-
-/* link layer protocol translations */
-extern char *  nl_llproto2str(int, char *, size_t);
-extern int     nl_str2llproto(const char *);
-
-/* ethernet protocol translations */
-extern char *  nl_ether_proto2str(int, char *, size_t);
-extern int     nl_str2ether_proto(const char *);
-
-/* IP protocol translations */
-extern char *  nl_ip_proto2str(int, char *, size_t);
-extern int     nl_str2ip_proto(const char *);
-
-/* Dumping helpers */
-extern void    nl_new_line(struct nl_dump_params *);
-extern void    nl_dump(struct nl_dump_params *, const char *, ...);
-extern void    nl_dump_line(struct nl_dump_params *, const char *, ...);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/package/libnl-tiny/src/include/netlink/version.h b/package/libnl-tiny/src/include/netlink/version.h
deleted file mode 100644 (file)
index 6a316d4..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * netlink/version.h   Compile Time Versioning Information
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_VERSION_H_
-#define NETLINK_VERSION_H_
-
-#define LIBNL_STRING "libnl"
-#define LIBNL_VERSION "2.0"
-
-#endif
diff --git a/package/libnl-tiny/src/include/unl.h b/package/libnl-tiny/src/include/unl.h
deleted file mode 100644 (file)
index 4fe7dc7..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#ifndef __UNL_H
-#define __UNL_H
-
-#include <netlink/netlink.h>
-#include <netlink/genl/genl.h>
-#include <netlink/genl/family.h>
-#include <stdbool.h>
-
-struct unl {
-       struct nl_sock *sock;
-       struct nl_cache *cache;
-       struct genl_family *family;
-       char *family_name;
-       int hdrlen;
-       bool loop_done;
-};
-
-int unl_genl_init(struct unl *unl, const char *family);
-void unl_free(struct unl *unl);
-
-typedef int (*unl_cb)(struct nl_msg *, void *);
-
-struct nl_msg *unl_genl_msg(struct unl *unl, int cmd, bool dump);
-int unl_genl_request(struct unl *unl, struct nl_msg *msg, unl_cb handler, void *arg);
-int unl_genl_request_single(struct unl *unl, struct nl_msg *msg, struct nl_msg **dest);
-void unl_genl_loop(struct unl *unl, unl_cb handler, void *arg);
-
-int unl_genl_multicast_id(struct unl *unl, const char *name);
-int unl_genl_subscribe(struct unl *unl, const char *name);
-int unl_genl_unsubscribe(struct unl *unl, const char *name);
-
-int unl_nl80211_phy_lookup(const char *name);
-int unl_nl80211_wdev_to_phy(struct unl *unl, int wdev);
-struct nl_msg *unl_nl80211_phy_msg(struct unl *unl, int phy, int cmd, bool dump);
-struct nl_msg *unl_nl80211_vif_msg(struct unl *unl, int dev, int cmd, bool dump);
-
-static inline void unl_loop_done(struct unl *unl)
-{
-       unl->loop_done = true;
-}
-
-static inline struct nlattr *unl_find_attr(struct unl *unl, struct nl_msg *msg, int attr)
-{
-       return nlmsg_find_attr(nlmsg_hdr(msg), unl->hdrlen, attr);
-}
-
-#endif
diff --git a/package/libnl-tiny/src/msg.c b/package/libnl-tiny/src/msg.c
deleted file mode 100644 (file)
index e84c281..0000000
+++ /dev/null
@@ -1,566 +0,0 @@
-/*
- * lib/msg.c           Netlink Messages Interface
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-/**
- * @ingroup core
- * @defgroup msg Messages
- * Netlink Message Construction/Parsing Interface
- * 
- * The following information is partly extracted from RFC3549
- * (ftp://ftp.rfc-editor.org/in-notes/rfc3549.txt)
- *
- * @par Message Format
- * Netlink messages consist of a byte stream with one or multiple
- * Netlink headers and an associated payload.  If the payload is too big
- * to fit into a single message it, can be split over multiple Netlink
- * messages, collectively called a multipart message.  For multipart
- * messages, the first and all following headers have the \c NLM_F_MULTI
- * Netlink header flag set, except for the last header which has the
- * Netlink header type \c NLMSG_DONE.
- *
- * @par
- * The Netlink message header (\link nlmsghdr struct nlmsghdr\endlink) is shown below.
- * @code   
- * 0                   1                   2                   3
- * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- * |                          Length                             |
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- * |            Type              |           Flags              |
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- * |                      Sequence Number                        |
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- * |                      Process ID (PID)                       |
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- * @endcode
- *
- * @par
- * The netlink message header and payload must be aligned properly:
- * @code
- *  <------- NLMSG_ALIGN(hlen) ------> <---- NLMSG_ALIGN(len) --->
- * +----------------------------+- - -+- - - - - - - - - - -+- - -+
- * |           Header           | Pad |       Payload       | Pad |
- * |      struct nlmsghdr       |     |                     |     |
- * +----------------------------+- - -+- - - - - - - - - - -+- - -+
- * @endcode
- * @par
- * Message Format:
- * @code
- *    <--- nlmsg_total_size(payload)  --->
- *    <-- nlmsg_msg_size(payload) ->
- *   +----------+- - -+-------------+- - -+-------- - -
- *   | nlmsghdr | Pad |   Payload   | Pad | nlmsghdr
- *   +----------+- - -+-------------+- - -+-------- - -
- *   nlmsg_data(nlh)---^                   ^
- *   nlmsg_next(nlh)-----------------------+
- * @endcode
- * @par
- * The payload may consist of arbitary data but may have strict
- * alignment and formatting rules depening on the specific netlink
- * families.
- * @par
- * @code
- *    <---------------------- nlmsg_len(nlh) --------------------->
- *    <------ hdrlen ------>       <- nlmsg_attrlen(nlh, hdrlen) ->
- *   +----------------------+- - -+--------------------------------+
- *   |     Family Header    | Pad |           Attributes           |
- *   +----------------------+- - -+--------------------------------+
- *   nlmsg_attrdata(nlh, hdrlen)---^
- * @endcode
- * @par The ACK Netlink Message
- * This message is actually used to denote both an ACK and a NACK.
- * Typically, the direction is from FEC to CPC (in response to an ACK
- * request message).  However, the CPC should be able to send ACKs back
- * to FEC when requested.
- * @code
- *  0                   1                   2                   3
- *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- * |                       Netlink message header                  |
- * |                       type = NLMSG_ERROR                      |
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- * |                          Error code                           |
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- * |                       OLD Netlink message header              |
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- * @endcode
- *
- * @par Example
- * @code
- * // Various methods exist to create/allocate a new netlink
- * // message. 
- * //
- * // nlmsg_alloc() will allocate an empty netlink message with
- * // a maximum payload size which defaults to the page size of
- * // the system. This default size can be modified using the
- * // function nlmsg_set_default_size().
- * struct nl_msg *msg = nlmsg_alloc();
- *
- * // Very often, the message type and message flags are known
- * // at allocation time while the other fields are auto generated:
- * struct nl_msg *msg = nlmsg_alloc_simple(MY_TYPE, MY_FLAGS);
- *
- * // Alternatively an existing netlink message header can be used
- * // to inherit the header values:
- * struct nlmsghdr hdr = {
- *     .nlmsg_type = MY_TYPE,
- *     .nlmsg_flags = MY_FLAGS,
- * };
- * struct nl_msg *msg = nlmsg_inherit(&hdr);
- *
- * // Last but not least, netlink messages received from netlink sockets
- * // can be converted into nl_msg objects using nlmsg_convert(). This
- * // will create a message with a maximum payload size which equals the
- * // length of the existing netlink message, therefore no more data can
- * // be appened without calling nlmsg_expand() first.
- * struct nl_msg *msg = nlmsg_convert(nlh_from_nl_sock);
- *
- * // Payload may be added to the message via nlmsg_append(). The fourth
- * // parameter specifies the number of alignment bytes the data should
- * // be padding with at the end. Common values are 0 to disable it or
- * // NLMSG_ALIGNTO to ensure proper netlink message padding.
- * nlmsg_append(msg, &mydata, sizeof(mydata), 0);
- *
- * // Sometimes it may be necessary to reserve room for data but defer
- * // the actual copying to a later point, nlmsg_reserve() can be used
- * // for this purpose:
- * void *data = nlmsg_reserve(msg, sizeof(mydata), NLMSG_ALIGNTO);
- *
- * // Attributes may be added using the attributes interface.
- *
- * // After successful use of the message, the memory must be freed
- * // using nlmsg_free()
- * nlmsg_free(msg);
- * @endcode
- * 
- * @par 4) Parsing messages
- * @code
- * int n;
- * unsigned char *buf;
- * struct nlmsghdr *hdr;
- *
- * n = nl_recv(handle, NULL, &buf);
- * 
- * hdr = (struct nlmsghdr *) buf;
- * while (nlmsg_ok(hdr, n)) {
- *     // Process message here...
- *     hdr = nlmsg_next(hdr, &n);
- * }
- * @endcode
- * @{
- */
-
-#include <netlink-local.h>
-#include <netlink/netlink.h>
-#include <netlink/utils.h>
-#include <netlink/cache.h>
-#include <netlink/attr.h>
-#include <netlink/msg.h>
-#include <linux/socket.h>
-
-static size_t default_msg_size;
-
-static void __init init_msg_size(void)
-{
-       default_msg_size = getpagesize();
-}
-
-/**
- * @name Attribute Access
- * @{
- */
-
-//** @} */
-
-/**
- * @name Message Parsing
- * @{
- */
-
-/**
- * check if the netlink message fits into the remaining bytes
- * @arg nlh            netlink message header
- * @arg remaining      number of bytes remaining in message stream
- */
-int nlmsg_ok(const struct nlmsghdr *nlh, int remaining)
-{
-       return (remaining >= sizeof(struct nlmsghdr) &&
-               nlh->nlmsg_len >= sizeof(struct nlmsghdr) &&
-               nlh->nlmsg_len <= remaining);
-}
-
-/**
- * next netlink message in message stream
- * @arg nlh            netlink message header
- * @arg remaining      number of bytes remaining in message stream
- *
- * @returns the next netlink message in the message stream and
- * decrements remaining by the size of the current message.
- */
-struct nlmsghdr *nlmsg_next(struct nlmsghdr *nlh, int *remaining)
-{
-       int totlen = NLMSG_ALIGN(nlh->nlmsg_len);
-
-       *remaining -= totlen;
-
-       return (struct nlmsghdr *) ((unsigned char *) nlh + totlen);
-}
-
-/**
- * parse attributes of a netlink message
- * @arg nlh            netlink message header
- * @arg hdrlen         length of family specific header
- * @arg tb             destination array with maxtype+1 elements
- * @arg maxtype                maximum attribute type to be expected
- * @arg policy         validation policy
- *
- * See nla_parse()
- */
-int nlmsg_parse(struct nlmsghdr *nlh, int hdrlen, struct nlattr *tb[],
-               int maxtype, struct nla_policy *policy)
-{
-       if (!nlmsg_valid_hdr(nlh, hdrlen))
-               return -NLE_MSG_TOOSHORT;
-
-       return nla_parse(tb, maxtype, nlmsg_attrdata(nlh, hdrlen),
-                        nlmsg_attrlen(nlh, hdrlen), policy);
-}
-
-/**
- * nlmsg_validate - validate a netlink message including attributes
- * @arg nlh            netlinket message header
- * @arg hdrlen         length of familiy specific header
- * @arg maxtype                maximum attribute type to be expected
- * @arg policy         validation policy
- */
-int nlmsg_validate(struct nlmsghdr *nlh, int hdrlen, int maxtype,
-                  struct nla_policy *policy)
-{
-       if (!nlmsg_valid_hdr(nlh, hdrlen))
-               return -NLE_MSG_TOOSHORT;
-
-       return nla_validate(nlmsg_attrdata(nlh, hdrlen),
-                           nlmsg_attrlen(nlh, hdrlen), maxtype, policy);
-}
-
-/** @} */
-
-/**
- * @name Message Building/Access
- * @{
- */
-
-static struct nl_msg *__nlmsg_alloc(size_t len)
-{
-       struct nl_msg *nm;
-
-       nm = calloc(1, sizeof(*nm));
-       if (!nm)
-               goto errout;
-
-       nm->nm_refcnt = 1;
-
-       nm->nm_nlh = malloc(len);
-       if (!nm->nm_nlh)
-               goto errout;
-
-       memset(nm->nm_nlh, 0, sizeof(struct nlmsghdr));
-
-       nm->nm_protocol = -1;
-       nm->nm_size = len;
-       nm->nm_nlh->nlmsg_len = nlmsg_total_size(0);
-
-       NL_DBG(2, "msg %p: Allocated new message, maxlen=%zu\n", nm, len);
-
-       return nm;
-errout:
-       free(nm);
-       return NULL;
-}
-
-/**
- * Allocate a new netlink message with the default maximum payload size.
- *
- * Allocates a new netlink message without any further payload. The
- * maximum payload size defaults to PAGESIZE or as otherwise specified
- * with nlmsg_set_default_size().
- *
- * @return Newly allocated netlink message or NULL.
- */
-struct nl_msg *nlmsg_alloc(void)
-{
-       return __nlmsg_alloc(default_msg_size);
-}
-
-/**
- * Allocate a new netlink message with maximum payload size specified.
- */
-struct nl_msg *nlmsg_alloc_size(size_t max)
-{
-       return __nlmsg_alloc(max);
-}
-
-/**
- * Allocate a new netlink message and inherit netlink message header
- * @arg hdr            Netlink message header template
- *
- * Allocates a new netlink message and inherits the original message
- * header. If \a hdr is not NULL it will be used as a template for
- * the netlink message header, otherwise the header is left blank.
- * 
- * @return Newly allocated netlink message or NULL
- */
-struct nl_msg *nlmsg_inherit(struct nlmsghdr *hdr)
-{
-       struct nl_msg *nm;
-
-       nm = nlmsg_alloc();
-       if (nm && hdr) {
-               struct nlmsghdr *new = nm->nm_nlh;
-
-               new->nlmsg_type = hdr->nlmsg_type;
-               new->nlmsg_flags = hdr->nlmsg_flags;
-               new->nlmsg_seq = hdr->nlmsg_seq;
-               new->nlmsg_pid = hdr->nlmsg_pid;
-       }
-
-       return nm;
-}
-
-/**
- * Allocate a new netlink message
- * @arg nlmsgtype      Netlink message type
- * @arg flags          Message flags.
- *
- * @return Newly allocated netlink message or NULL.
- */
-struct nl_msg *nlmsg_alloc_simple(int nlmsgtype, int flags)
-{
-       struct nl_msg *msg;
-       struct nlmsghdr nlh = {
-               .nlmsg_type = nlmsgtype,
-               .nlmsg_flags = flags,
-       };
-
-       msg = nlmsg_inherit(&nlh);
-       if (msg)
-               NL_DBG(2, "msg %p: Allocated new simple message\n", msg);
-
-       return msg;
-}
-
-/**
- * Set the default maximum message payload size for allocated messages
- * @arg max            Size of payload in bytes.
- */
-void nlmsg_set_default_size(size_t max)
-{
-       if (max < nlmsg_total_size(0))
-               max = nlmsg_total_size(0);
-
-       default_msg_size = max;
-}
-
-/**
- * Convert a netlink message received from a netlink socket to a nl_msg
- * @arg hdr            Netlink message received from netlink socket.
- *
- * Allocates a new netlink message and copies all of the data pointed to
- * by \a hdr into the new message object.
- *
- * @return Newly allocated netlink message or NULL.
- */
-struct nl_msg *nlmsg_convert(struct nlmsghdr *hdr)
-{
-       struct nl_msg *nm;
-
-       nm = __nlmsg_alloc(NLMSG_ALIGN(hdr->nlmsg_len));
-       if (!nm)
-               goto errout;
-
-       memcpy(nm->nm_nlh, hdr, hdr->nlmsg_len);
-
-       return nm;
-errout:
-       nlmsg_free(nm);
-       return NULL;
-}
-
-/**
- * Reserve room for additional data in a netlink message
- * @arg n              netlink message
- * @arg len            length of additional data to reserve room for
- * @arg pad            number of bytes to align data to
- *
- * Reserves room for additional data at the tail of the an
- * existing netlink message. Eventual padding required will
- * be zeroed out.
- *
- * @return Pointer to start of additional data tailroom or NULL.
- */
-void *nlmsg_reserve(struct nl_msg *n, size_t len, int pad)
-{
-       void *buf = n->nm_nlh;
-       size_t nlmsg_len = n->nm_nlh->nlmsg_len;
-       size_t tlen;
-
-       tlen = pad ? ((len + (pad - 1)) & ~(pad - 1)) : len;
-
-       if ((tlen + nlmsg_len) > n->nm_size)
-               return NULL;
-
-       buf += nlmsg_len;
-       n->nm_nlh->nlmsg_len += tlen;
-
-       if (tlen > len)
-               memset(buf + len, 0, tlen - len);
-
-       NL_DBG(2, "msg %p: Reserved %zu bytes, pad=%d, nlmsg_len=%d\n",
-                 n, len, pad, n->nm_nlh->nlmsg_len);
-
-       return buf;
-}
-
-/**
- * Append data to tail of a netlink message
- * @arg n              netlink message
- * @arg data           data to add
- * @arg len            length of data
- * @arg pad            Number of bytes to align data to.
- *
- * Extends the netlink message as needed and appends the data of given
- * length to the message. 
- *
- * @return 0 on success or a negative error code
- */
-int nlmsg_append(struct nl_msg *n, void *data, size_t len, int pad)
-{
-       void *tmp;
-
-       tmp = nlmsg_reserve(n, len, pad);
-       if (tmp == NULL)
-               return -NLE_NOMEM;
-
-       memcpy(tmp, data, len);
-       NL_DBG(2, "msg %p: Appended %zu bytes with padding %d\n", n, len, pad);
-
-       return 0;
-}
-
-/**
- * Add a netlink message header to a netlink message
- * @arg n              netlink message
- * @arg pid            netlink process id or NL_AUTO_PID
- * @arg seq            sequence number of message or NL_AUTO_SEQ
- * @arg type           message type
- * @arg payload                length of message payload
- * @arg flags          message flags
- *
- * Adds or overwrites the netlink message header in an existing message
- * object. If \a payload is greater-than zero additional room will be
- * reserved, f.e. for family specific headers. It can be accesed via
- * nlmsg_data().
- *
- * @return A pointer to the netlink message header or NULL.
- */
-struct nlmsghdr *nlmsg_put(struct nl_msg *n, uint32_t pid, uint32_t seq,
-                          int type, int payload, int flags)
-{
-       struct nlmsghdr *nlh;
-
-       if (n->nm_nlh->nlmsg_len < NLMSG_HDRLEN)
-               BUG();
-
-       nlh = (struct nlmsghdr *) n->nm_nlh;
-       nlh->nlmsg_type = type;
-       nlh->nlmsg_flags = flags;
-       nlh->nlmsg_pid = pid;
-       nlh->nlmsg_seq = seq;
-
-       NL_DBG(2, "msg %p: Added netlink header type=%d, flags=%d, pid=%d, "
-                 "seq=%d\n", n, type, flags, pid, seq);
-
-       if (payload > 0 &&
-           nlmsg_reserve(n, payload, NLMSG_ALIGNTO) == NULL)
-               return NULL;
-
-       return nlh;
-}
-
-/**
- * Release a reference from an netlink message
- * @arg msg            message to release reference from
- *
- * Frees memory after the last reference has been released.
- */
-void nlmsg_free(struct nl_msg *msg)
-{
-       if (!msg)
-               return;
-
-       msg->nm_refcnt--;
-       NL_DBG(4, "Returned message reference %p, %d remaining\n",
-              msg, msg->nm_refcnt);
-
-       if (msg->nm_refcnt < 0)
-               BUG();
-
-       if (msg->nm_refcnt <= 0) {
-               free(msg->nm_nlh);
-               free(msg);
-               NL_DBG(2, "msg %p: Freed\n", msg);
-       }
-}
-
-/** @} */
-
-/**
- * @name Direct Parsing
- * @{
- */
-
-/** @cond SKIP */
-struct dp_xdata {
-       void (*cb)(struct nl_object *, void *);
-       void *arg;
-};
-/** @endcond */
-
-static int parse_cb(struct nl_object *obj, struct nl_parser_param *p)
-{
-       struct dp_xdata *x = p->pp_arg;
-
-       x->cb(obj, x->arg);
-       return 0;
-}
-
-int nl_msg_parse(struct nl_msg *msg, void (*cb)(struct nl_object *, void *),
-                void *arg)
-{
-       struct nl_cache_ops *ops;
-       struct nl_parser_param p = {
-               .pp_cb = parse_cb
-       };
-       struct dp_xdata x = {
-               .cb = cb,
-               .arg = arg,
-       };
-
-       ops = nl_cache_ops_associate(nlmsg_get_proto(msg),
-                                    nlmsg_hdr(msg)->nlmsg_type);
-       if (ops == NULL)
-               return -NLE_MSGTYPE_NOSUPPORT;
-       p.pp_arg = &x;
-
-       return nl_cache_parse(ops, NULL, nlmsg_hdr(msg), &p);
-}
-
-/** @} */
diff --git a/package/libnl-tiny/src/nl.c b/package/libnl-tiny/src/nl.c
deleted file mode 100644 (file)
index 99e9aeb..0000000
+++ /dev/null
@@ -1,720 +0,0 @@
-/*
- * lib/nl.c            Core Netlink Interface
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-/**
- * @defgroup core Core
- *
- * @details
- * @par 1) Connecting the socket
- * @code
- * // Bind and connect the socket to a protocol, NETLINK_ROUTE in this example.
- * nl_connect(sk, NETLINK_ROUTE);
- * @endcode
- *
- * @par 2) Sending data
- * @code
- * // The most rudimentary method is to use nl_sendto() simply pushing
- * // a piece of data to the other netlink peer. This method is not
- * // recommended.
- * const char buf[] = { 0x01, 0x02, 0x03, 0x04 };
- * nl_sendto(sk, buf, sizeof(buf));
- *
- * // A more comfortable interface is nl_send() taking a pointer to
- * // a netlink message.
- * struct nl_msg *msg = my_msg_builder();
- * nl_send(sk, nlmsg_hdr(msg));
- *
- * // nl_sendmsg() provides additional control over the sendmsg() message
- * // header in order to allow more specific addressing of multiple peers etc.
- * struct msghdr hdr = { ... };
- * nl_sendmsg(sk, nlmsg_hdr(msg), &hdr);
- *
- * // You're probably too lazy to fill out the netlink pid, sequence number
- * // and message flags all the time. nl_send_auto_complete() automatically
- * // extends your message header as needed with an appropriate sequence
- * // number, the netlink pid stored in the netlink socket and the message
- * // flags NLM_F_REQUEST and NLM_F_ACK (if not disabled in the socket)
- * nl_send_auto_complete(sk, nlmsg_hdr(msg));
- *
- * // Simple protocols don't require the complex message construction interface
- * // and may favour nl_send_simple() to easly send a bunch of payload
- * // encapsulated in a netlink message header.
- * nl_send_simple(sk, MY_MSG_TYPE, 0, buf, sizeof(buf));
- * @endcode
- *
- * @par 3) Receiving data
- * @code
- * // nl_recv() receives a single message allocating a buffer for the message
- * // content and gives back the pointer to you.
- * struct sockaddr_nl peer;
- * unsigned char *msg;
- * nl_recv(sk, &peer, &msg);
- *
- * // nl_recvmsgs() receives a bunch of messages until the callback system
- * // orders it to state, usually after receving a compolete multi part
- * // message series.
- * nl_recvmsgs(sk, my_callback_configuration);
- *
- * // nl_recvmsgs_default() acts just like nl_recvmsg() but uses the callback
- * // configuration stored in the socket.
- * nl_recvmsgs_default(sk);
- *
- * // In case you want to wait for the ACK to be recieved that you requested
- * // with your latest message, you can call nl_wait_for_ack()
- * nl_wait_for_ack(sk);
- * @endcode
- *
- * @par 4) Closing
- * @code
- * // Close the socket first to release kernel memory
- * nl_close(sk);
- * @endcode
- * 
- * @{
- */
-
-#include <netlink-local.h>
-#include <netlink/netlink.h>
-#include <netlink/utils.h>
-#include <netlink/handlers.h>
-#include <netlink/msg.h>
-#include <netlink/attr.h>
-
-/**
- * @name Connection Management
- * @{
- */
-
-/**
- * Create and connect netlink socket.
- * @arg sk             Netlink socket.
- * @arg protocol       Netlink protocol to use.
- *
- * Creates a netlink socket using the specified protocol, binds the socket
- * and issues a connection attempt.
- *
- * @return 0 on success or a negative error code.
- */
-int nl_connect(struct nl_sock *sk, int protocol)
-{
-       int err;
-       socklen_t addrlen;
-
-       sk->s_fd = socket(AF_NETLINK, SOCK_RAW, protocol);
-       if (sk->s_fd < 0) {
-               err = -nl_syserr2nlerr(errno);
-               goto errout;
-       }
-
-       if (!(sk->s_flags & NL_SOCK_BUFSIZE_SET)) {
-               err = nl_socket_set_buffer_size(sk, 0, 0);
-               if (err < 0)
-                       goto errout;
-       }
-
-       err = bind(sk->s_fd, (struct sockaddr*) &sk->s_local,
-                  sizeof(sk->s_local));
-       if (err < 0) {
-               err = -nl_syserr2nlerr(errno);
-               goto errout;
-       }
-
-       addrlen = sizeof(sk->s_local);
-       err = getsockname(sk->s_fd, (struct sockaddr *) &sk->s_local,
-                         &addrlen);
-       if (err < 0) {
-               err = -nl_syserr2nlerr(errno);
-               goto errout;
-       }
-
-       if (addrlen != sizeof(sk->s_local)) {
-               err = -NLE_NOADDR;
-               goto errout;
-       }
-
-       if (sk->s_local.nl_family != AF_NETLINK) {
-               err = -NLE_AF_NOSUPPORT;
-               goto errout;
-       }
-
-       sk->s_proto = protocol;
-
-       return 0;
-errout:
-       close(sk->s_fd);
-       sk->s_fd = -1;
-
-       return err;
-}
-
-/**
- * Close/Disconnect netlink socket.
- * @arg sk             Netlink socket.
- */
-void nl_close(struct nl_sock *sk)
-{
-       if (sk->s_fd >= 0) {
-               close(sk->s_fd);
-               sk->s_fd = -1;
-       }
-
-       sk->s_proto = 0;
-}
-
-/** @} */
-
-/**
- * @name Send
- * @{
- */
-
-/**
- * Send raw data over netlink socket.
- * @arg sk             Netlink socket.
- * @arg buf            Data buffer.
- * @arg size           Size of data buffer.
- * @return Number of characters written on success or a negative error code.
- */
-int nl_sendto(struct nl_sock *sk, void *buf, size_t size)
-{
-       int ret;
-
-       ret = sendto(sk->s_fd, buf, size, 0, (struct sockaddr *)
-                    &sk->s_peer, sizeof(sk->s_peer));
-       if (ret < 0)
-               return -nl_syserr2nlerr(errno);
-
-       return ret;
-}
-
-/**
- * Send netlink message with control over sendmsg() message header.
- * @arg sk             Netlink socket.
- * @arg msg            Netlink message to be sent.
- * @arg hdr            Sendmsg() message header.
- * @return Number of characters sent on sucess or a negative error code.
- */
-int nl_sendmsg(struct nl_sock *sk, struct nl_msg *msg, struct msghdr *hdr)
-{
-       struct nl_cb *cb;
-       int ret;
-
-       struct iovec iov = {
-               .iov_base = (void *) nlmsg_hdr(msg),
-               .iov_len = nlmsg_hdr(msg)->nlmsg_len,
-       };
-
-       hdr->msg_iov = &iov;
-       hdr->msg_iovlen = 1;
-
-       nlmsg_set_src(msg, &sk->s_local);
-
-       cb = sk->s_cb;
-       if (cb->cb_set[NL_CB_MSG_OUT])
-               if (nl_cb_call(cb, NL_CB_MSG_OUT, msg) != NL_OK)
-                       return 0;
-
-       ret = sendmsg(sk->s_fd, hdr, 0);
-       if (ret < 0)
-               return -nl_syserr2nlerr(errno);
-
-       return ret;
-}
-
-
-/**
- * Send netlink message.
- * @arg sk             Netlink socket.
- * @arg msg            Netlink message to be sent.
- * @see nl_sendmsg()
- * @return Number of characters sent on success or a negative error code.
- */
-int nl_send(struct nl_sock *sk, struct nl_msg *msg)
-{
-       struct sockaddr_nl *dst;
-       struct ucred *creds;
-       
-       struct msghdr hdr = {
-               .msg_name = (void *) &sk->s_peer,
-               .msg_namelen = sizeof(struct sockaddr_nl),
-       };
-
-       /* Overwrite destination if specified in the message itself, defaults
-        * to the peer address of the socket.
-        */
-       dst = nlmsg_get_dst(msg);
-       if (dst->nl_family == AF_NETLINK)
-               hdr.msg_name = dst;
-
-       /* Add credentials if present. */
-       creds = nlmsg_get_creds(msg);
-       if (creds != NULL) {
-               char buf[CMSG_SPACE(sizeof(struct ucred))];
-               struct cmsghdr *cmsg;
-
-               hdr.msg_control = buf;
-               hdr.msg_controllen = sizeof(buf);
-
-               cmsg = CMSG_FIRSTHDR(&hdr);
-               cmsg->cmsg_level = SOL_SOCKET;
-               cmsg->cmsg_type = SCM_CREDENTIALS;
-               cmsg->cmsg_len = CMSG_LEN(sizeof(struct ucred));
-               memcpy(CMSG_DATA(cmsg), creds, sizeof(struct ucred));
-       }
-
-       return nl_sendmsg(sk, msg, &hdr);
-}
-
-/**
- * Send netlink message and check & extend header values as needed.
- * @arg sk             Netlink socket.
- * @arg msg            Netlink message to be sent.
- *
- * Checks the netlink message \c nlh for completness and extends it
- * as required before sending it out. Checked fields include pid,
- * sequence nr, and flags.
- *
- * @see nl_send()
- * @return Number of characters sent or a negative error code.
- */
-int nl_send_auto_complete(struct nl_sock *sk, struct nl_msg *msg)
-{
-       struct nlmsghdr *nlh;
-       struct nl_cb *cb = sk->s_cb;
-
-       nlh = nlmsg_hdr(msg);
-       if (nlh->nlmsg_pid == 0)
-               nlh->nlmsg_pid = sk->s_local.nl_pid;
-
-       if (nlh->nlmsg_seq == 0)
-               nlh->nlmsg_seq = sk->s_seq_next++;
-
-       if (msg->nm_protocol == -1)
-               msg->nm_protocol = sk->s_proto;
-       
-       nlh->nlmsg_flags |= NLM_F_REQUEST;
-
-       if (!(sk->s_flags & NL_NO_AUTO_ACK))
-               nlh->nlmsg_flags |= NLM_F_ACK;
-
-       if (cb->cb_send_ow)
-               return cb->cb_send_ow(sk, msg);
-       else
-               return nl_send(sk, msg);
-}
-
-/**
- * Send simple netlink message using nl_send_auto_complete()
- * @arg sk             Netlink socket.
- * @arg type           Netlink message type.
- * @arg flags          Netlink message flags.
- * @arg buf            Data buffer.
- * @arg size           Size of data buffer.
- *
- * Builds a netlink message with the specified type and flags and
- * appends the specified data as payload to the message.
- *
- * @see nl_send_auto_complete()
- * @return Number of characters sent on success or a negative error code.
- */
-int nl_send_simple(struct nl_sock *sk, int type, int flags, void *buf,
-                  size_t size)
-{
-       int err;
-       struct nl_msg *msg;
-
-       msg = nlmsg_alloc_simple(type, flags);
-       if (!msg)
-               return -NLE_NOMEM;
-
-       if (buf && size) {
-               err = nlmsg_append(msg, buf, size, NLMSG_ALIGNTO);
-               if (err < 0)
-                       goto errout;
-       }
-       
-
-       err = nl_send_auto_complete(sk, msg);
-errout:
-       nlmsg_free(msg);
-
-       return err;
-}
-
-/** @} */
-
-/**
- * @name Receive
- * @{
- */
-
-/**
- * Receive data from netlink socket
- * @arg sk             Netlink socket.
- * @arg nla            Destination pointer for peer's netlink address.
- * @arg buf            Destination pointer for message content.
- * @arg creds          Destination pointer for credentials.
- *
- * Receives a netlink message, allocates a buffer in \c *buf and
- * stores the message content. The peer's netlink address is stored
- * in \c *nla. The caller is responsible for freeing the buffer allocated
- * in \c *buf if a positive value is returned.  Interruped system calls
- * are handled by repeating the read. The input buffer size is determined
- * by peeking before the actual read is done.
- *
- * A non-blocking sockets causes the function to return immediately with
- * a return value of 0 if no data is available.
- *
- * @return Number of octets read, 0 on EOF or a negative error code.
- */
-int nl_recv(struct nl_sock *sk, struct sockaddr_nl *nla,
-           unsigned char **buf, struct ucred **creds)
-{
-       int n;
-       int flags = 0;
-       static int page_size = 0;
-       struct iovec iov;
-       struct msghdr msg = {
-               .msg_name = (void *) nla,
-               .msg_namelen = sizeof(struct sockaddr_nl),
-               .msg_iov = &iov,
-               .msg_iovlen = 1,
-               .msg_control = NULL,
-               .msg_controllen = 0,
-               .msg_flags = 0,
-       };
-       struct cmsghdr *cmsg;
-
-       if (sk->s_flags & NL_MSG_PEEK)
-               flags |= MSG_PEEK;
-
-       if (page_size == 0)
-               page_size = getpagesize();
-
-       iov.iov_len = page_size;
-       iov.iov_base = *buf = malloc(iov.iov_len);
-
-       if (sk->s_flags & NL_SOCK_PASSCRED) {
-               msg.msg_controllen = CMSG_SPACE(sizeof(struct ucred));
-               msg.msg_control = calloc(1, msg.msg_controllen);
-       }
-retry:
-
-       n = recvmsg(sk->s_fd, &msg, flags);
-       if (!n)
-               goto abort;
-       else if (n < 0) {
-               if (errno == EINTR) {
-                       NL_DBG(3, "recvmsg() returned EINTR, retrying\n");
-                       goto retry;
-               } else if (errno == EAGAIN) {
-                       NL_DBG(3, "recvmsg() returned EAGAIN, aborting\n");
-                       goto abort;
-               } else {
-                       free(msg.msg_control);
-                       free(*buf);
-                       return -nl_syserr2nlerr(errno);
-               }
-       }
-
-       if (iov.iov_len < n ||
-           msg.msg_flags & MSG_TRUNC) {
-               /* Provided buffer is not long enough, enlarge it
-                * and try again. */
-               iov.iov_len *= 2;
-               iov.iov_base = *buf = realloc(*buf, iov.iov_len);
-               goto retry;
-       } else if (msg.msg_flags & MSG_CTRUNC) {
-               msg.msg_controllen *= 2;
-               msg.msg_control = realloc(msg.msg_control, msg.msg_controllen);
-               goto retry;
-       } else if (flags != 0) {
-               /* Buffer is big enough, do the actual reading */
-               flags = 0;
-               goto retry;
-       }
-
-       if (msg.msg_namelen != sizeof(struct sockaddr_nl)) {
-               free(msg.msg_control);
-               free(*buf);
-               return -NLE_NOADDR;
-       }
-
-       for (cmsg = CMSG_FIRSTHDR(&msg); cmsg; cmsg = CMSG_NXTHDR(&msg, cmsg)) {
-               if (cmsg->cmsg_level == SOL_SOCKET &&
-                   cmsg->cmsg_type == SCM_CREDENTIALS) {
-                       *creds = calloc(1, sizeof(struct ucred));
-                       memcpy(*creds, CMSG_DATA(cmsg), sizeof(struct ucred));
-                       break;
-               }
-       }
-
-       free(msg.msg_control);
-       return n;
-
-abort:
-       free(msg.msg_control);
-       free(*buf);
-       return 0;
-}
-
-#define NL_CB_CALL(cb, type, msg) \
-do { \
-       err = nl_cb_call(cb, type, msg); \
-       switch (err) { \
-       case NL_OK: \
-               err = 0; \
-               break; \
-       case NL_SKIP: \
-               goto skip; \
-       case NL_STOP: \
-               goto stop; \
-       default: \
-               goto out; \
-       } \
-} while (0)
-
-static int recvmsgs(struct nl_sock *sk, struct nl_cb *cb)
-{
-       int n, err = 0, multipart = 0;
-       unsigned char *buf = NULL;
-       struct nlmsghdr *hdr;
-       struct sockaddr_nl nla = {0};
-       struct nl_msg *msg = NULL;
-       struct ucred *creds = NULL;
-
-continue_reading:
-       NL_DBG(3, "Attempting to read from %p\n", sk);
-       if (cb->cb_recv_ow)
-               n = cb->cb_recv_ow(sk, &nla, &buf, &creds);
-       else
-               n = nl_recv(sk, &nla, &buf, &creds);
-
-       if (n <= 0)
-               return n;
-
-       NL_DBG(3, "recvmsgs(%p): Read %d bytes\n", sk, n);
-
-       hdr = (struct nlmsghdr *) buf;
-       while (nlmsg_ok(hdr, n)) {
-               NL_DBG(3, "recgmsgs(%p): Processing valid message...\n", sk);
-
-               nlmsg_free(msg);
-               msg = nlmsg_convert(hdr);
-               if (!msg) {
-                       err = -NLE_NOMEM;
-                       goto out;
-               }
-
-               nlmsg_set_proto(msg, sk->s_proto);
-               nlmsg_set_src(msg, &nla);
-               if (creds)
-                       nlmsg_set_creds(msg, creds);
-
-               /* Raw callback is the first, it gives the most control
-                * to the user and he can do his very own parsing. */
-               if (cb->cb_set[NL_CB_MSG_IN])
-                       NL_CB_CALL(cb, NL_CB_MSG_IN, msg);
-
-               /* Sequence number checking. The check may be done by
-                * the user, otherwise a very simple check is applied
-                * enforcing strict ordering */
-               if (cb->cb_set[NL_CB_SEQ_CHECK])
-                       NL_CB_CALL(cb, NL_CB_SEQ_CHECK, msg);
-               else if (hdr->nlmsg_seq != sk->s_seq_expect) {
-                       if (cb->cb_set[NL_CB_INVALID])
-                               NL_CB_CALL(cb, NL_CB_INVALID, msg);
-                       else {
-                               err = -NLE_SEQ_MISMATCH;
-                               goto out;
-                       }
-               }
-
-               if (hdr->nlmsg_type == NLMSG_DONE ||
-                   hdr->nlmsg_type == NLMSG_ERROR ||
-                   hdr->nlmsg_type == NLMSG_NOOP ||
-                   hdr->nlmsg_type == NLMSG_OVERRUN) {
-                       /* We can't check for !NLM_F_MULTI since some netlink
-                        * users in the kernel are broken. */
-                       sk->s_seq_expect++;
-                       NL_DBG(3, "recvmsgs(%p): Increased expected " \
-                              "sequence number to %d\n",
-                              sk, sk->s_seq_expect);
-               }
-
-               if (hdr->nlmsg_flags & NLM_F_MULTI)
-                       multipart = 1;
-       
-               /* Other side wishes to see an ack for this message */
-               if (hdr->nlmsg_flags & NLM_F_ACK) {
-                       if (cb->cb_set[NL_CB_SEND_ACK])
-                               NL_CB_CALL(cb, NL_CB_SEND_ACK, msg);
-                       else {
-                               /* FIXME: implement */
-                       }
-               }
-
-               /* messages terminates a multpart message, this is
-                * usually the end of a message and therefore we slip
-                * out of the loop by default. the user may overrule
-                * this action by skipping this packet. */
-               if (hdr->nlmsg_type == NLMSG_DONE) {
-                       multipart = 0;
-                       if (cb->cb_set[NL_CB_FINISH])
-                               NL_CB_CALL(cb, NL_CB_FINISH, msg);
-               }
-
-               /* Message to be ignored, the default action is to
-                * skip this message if no callback is specified. The
-                * user may overrule this action by returning
-                * NL_PROCEED. */
-               else if (hdr->nlmsg_type == NLMSG_NOOP) {
-                       if (cb->cb_set[NL_CB_SKIPPED])
-                               NL_CB_CALL(cb, NL_CB_SKIPPED, msg);
-                       else
-                               goto skip;
-               }
-
-               /* Data got lost, report back to user. The default action is to
-                * quit parsing. The user may overrule this action by retuning
-                * NL_SKIP or NL_PROCEED (dangerous) */
-               else if (hdr->nlmsg_type == NLMSG_OVERRUN) {
-                       if (cb->cb_set[NL_CB_OVERRUN])
-                               NL_CB_CALL(cb, NL_CB_OVERRUN, msg);
-                       else {
-                               err = -NLE_MSG_OVERFLOW;
-                               goto out;
-                       }
-               }
-
-               /* Message carries a nlmsgerr */
-               else if (hdr->nlmsg_type == NLMSG_ERROR) {
-                       struct nlmsgerr *e = nlmsg_data(hdr);
-
-                       if (hdr->nlmsg_len < nlmsg_msg_size(sizeof(*e))) {
-                               /* Truncated error message, the default action
-                                * is to stop parsing. The user may overrule
-                                * this action by returning NL_SKIP or
-                                * NL_PROCEED (dangerous) */
-                               if (cb->cb_set[NL_CB_INVALID])
-                                       NL_CB_CALL(cb, NL_CB_INVALID, msg);
-                               else {
-                                       err = -NLE_MSG_TRUNC;
-                                       goto out;
-                               }
-                       } else if (e->error) {
-                               /* Error message reported back from kernel. */
-                               if (cb->cb_err) {
-                                       err = cb->cb_err(&nla, e,
-                                                          cb->cb_err_arg);
-                                       if (err < 0)
-                                               goto out;
-                                       else if (err == NL_SKIP)
-                                               goto skip;
-                                       else if (err == NL_STOP) {
-                                               err = -nl_syserr2nlerr(e->error);
-                                               goto out;
-                                       }
-                               } else {
-                                       err = -nl_syserr2nlerr(e->error);
-                                       goto out;
-                               }
-                       } else if (cb->cb_set[NL_CB_ACK])
-                               NL_CB_CALL(cb, NL_CB_ACK, msg);
-               } else {
-                       /* Valid message (not checking for MULTIPART bit to
-                        * get along with broken kernels. NL_SKIP has no
-                        * effect on this.  */
-                       if (cb->cb_set[NL_CB_VALID])
-                               NL_CB_CALL(cb, NL_CB_VALID, msg);
-               }
-skip:
-               err = 0;
-               hdr = nlmsg_next(hdr, &n);
-       }
-       
-       nlmsg_free(msg);
-       free(buf);
-       free(creds);
-       buf = NULL;
-       msg = NULL;
-       creds = NULL;
-
-       if (multipart) {
-               /* Multipart message not yet complete, continue reading */
-               goto continue_reading;
-       }
-stop:
-       err = 0;
-out:
-       nlmsg_free(msg);
-       free(buf);
-       free(creds);
-
-       return err;
-}
-
-/**
- * Receive a set of messages from a netlink socket.
- * @arg sk             Netlink socket.
- * @arg cb             set of callbacks to control behaviour.
- *
- * Repeatedly calls nl_recv() or the respective replacement if provided
- * by the application (see nl_cb_overwrite_recv()) and parses the
- * received data as netlink messages. Stops reading if one of the
- * callbacks returns NL_STOP or nl_recv returns either 0 or a negative error code.
- *
- * A non-blocking sockets causes the function to return immediately if
- * no data is available.
- *
- * @return 0 on success or a negative error code from nl_recv().
- */
-int nl_recvmsgs(struct nl_sock *sk, struct nl_cb *cb)
-{
-       if (cb->cb_recvmsgs_ow)
-               return cb->cb_recvmsgs_ow(sk, cb);
-       else
-               return recvmsgs(sk, cb);
-}
-
-
-static int ack_wait_handler(struct nl_msg *msg, void *arg)
-{
-       return NL_STOP;
-}
-
-/**
- * Wait for ACK.
- * @arg sk             Netlink socket.
- * @pre The netlink socket must be in blocking state.
- *
- * Waits until an ACK is received for the latest not yet acknowledged
- * netlink message.
- */
-int nl_wait_for_ack(struct nl_sock *sk)
-{
-       int err;
-       struct nl_cb *cb;
-
-       cb = nl_cb_clone(sk->s_cb);
-       if (cb == NULL)
-               return -NLE_NOMEM;
-
-       nl_cb_set(cb, NL_CB_ACK, NL_CB_CUSTOM, ack_wait_handler, NULL);
-       err = nl_recvmsgs(sk, cb);
-       nl_cb_put(cb);
-
-       return err;
-}
-
-/** @} */
-
-/** @} */
diff --git a/package/libnl-tiny/src/object.c b/package/libnl-tiny/src/object.c
deleted file mode 100644 (file)
index f915551..0000000
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
- * lib/object.c                Generic Cacheable Object
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-/**
- * @ingroup cache
- * @defgroup object Object
- * @{
- */
-
-#include <netlink-local.h>
-#include <netlink/netlink.h>
-#include <netlink/cache.h>
-#include <netlink/object.h>
-#include <netlink/utils.h>
-
-static inline struct nl_object_ops *obj_ops(struct nl_object *obj)
-{
-       if (!obj->ce_ops)
-               BUG();
-
-       return obj->ce_ops;
-}
-
-/**
- * @name Object Creation/Deletion
- * @{
- */
-
-/**
- * Allocate a new object of kind specified by the operations handle
- * @arg ops            cache operations handle
- * @return The new object or NULL
- */
-struct nl_object *nl_object_alloc(struct nl_object_ops *ops)
-{
-       struct nl_object *new;
-
-       if (ops->oo_size < sizeof(*new))
-               BUG();
-
-       new = calloc(1, ops->oo_size);
-       if (!new)
-               return NULL;
-
-       new->ce_refcnt = 1;
-       nl_init_list_head(&new->ce_list);
-
-       new->ce_ops = ops;
-       if (ops->oo_constructor)
-               ops->oo_constructor(new);
-
-       NL_DBG(4, "Allocated new object %p\n", new);
-
-       return new;
-}
-
-#ifdef disabled
-/**
- * Allocate a new object of kind specified by the name
- * @arg kind           name of object type
- * @return The new object or nULL
- */
-int nl_object_alloc_name(const char *kind, struct nl_object **result)
-{
-       struct nl_cache_ops *ops;
-
-       ops = nl_cache_ops_lookup(kind);
-       if (!ops)
-               return -NLE_OPNOTSUPP;
-
-       if (!(*result = nl_object_alloc(ops->co_obj_ops)))
-               return -NLE_NOMEM;
-
-       return 0;
-}
-#endif
-
-struct nl_derived_object {
-       NLHDR_COMMON
-       char data;
-};
-
-/**
- * Allocate a new object and copy all data from an existing object
- * @arg obj            object to inherite data from
- * @return The new object or NULL.
- */
-struct nl_object *nl_object_clone(struct nl_object *obj)
-{
-       struct nl_object *new;
-       struct nl_object_ops *ops = obj_ops(obj);
-       int doff = offsetof(struct nl_derived_object, data);
-       int size;
-
-       new = nl_object_alloc(ops);
-       if (!new)
-               return NULL;
-
-       size = ops->oo_size - doff;
-       if (size < 0)
-               BUG();
-
-       new->ce_ops = obj->ce_ops;
-       new->ce_msgtype = obj->ce_msgtype;
-
-       if (size)
-               memcpy((void *)new + doff, (void *)obj + doff, size);
-
-       if (ops->oo_clone) {
-               if (ops->oo_clone(new, obj) < 0) {
-                       nl_object_free(new);
-                       return NULL;
-               }
-       } else if (size && ops->oo_free_data)
-               BUG();
-
-       return new;
-}
-
-/**
- * Free a cacheable object
- * @arg obj            object to free
- *
- * @return 0 or a negative error code.
- */
-void nl_object_free(struct nl_object *obj)
-{
-       struct nl_object_ops *ops = obj_ops(obj);
-
-       if (obj->ce_refcnt > 0)
-               NL_DBG(1, "Warning: Freeing object in use...\n");
-
-       if (obj->ce_cache)
-               nl_cache_remove(obj);
-
-       if (ops->oo_free_data)
-               ops->oo_free_data(obj);
-
-       free(obj);
-
-       NL_DBG(4, "Freed object %p\n", obj);
-}
-
-/** @} */
-
-/**
- * @name Reference Management
- * @{
- */
-
-/** @} */
-
-/**
- * @name Utillities
- * @{
- */
-
-#ifdef disabled
-/**
- * Dump this object according to the specified parameters
- * @arg obj            object to dump
- * @arg params         dumping parameters
- */
-void nl_object_dump(struct nl_object *obj, struct nl_dump_params *params)
-{
-       dump_from_ops(obj, params);
-}
-
-/**
- * Check if the identifiers of two objects are identical 
- * @arg a              an object
- * @arg b              another object of same type
- *
- * @return true if both objects have equal identifiers, otherwise false.
- */
-int nl_object_identical(struct nl_object *a, struct nl_object *b)
-{
-       struct nl_object_ops *ops = obj_ops(a);
-       int req_attrs;
-
-       /* Both objects must be of same type */
-       if (ops != obj_ops(b))
-               return 0;
-
-       req_attrs = ops->oo_id_attrs;
-
-       /* Both objects must provide all required attributes to uniquely
-        * identify an object */
-       if ((a->ce_mask & req_attrs) != req_attrs ||
-           (b->ce_mask & req_attrs) != req_attrs)
-               return 0;
-
-       /* Can't judge unless we can compare */
-       if (ops->oo_compare == NULL)
-               return 0;
-
-       return !(ops->oo_compare(a, b, req_attrs, 0));
-}
-
-/**
- * Compute bitmask representing difference in attribute values
- * @arg a              an object
- * @arg b              another object of same type
- *
- * The bitmask returned is specific to an object type, each bit set represents
- * an attribute which mismatches in either of the two objects. Unavailability
- * of an attribute in one object and presence in the other is regarded a
- * mismatch as well.
- *
- * @return Bitmask describing differences or 0 if they are completely identical.
- */
-uint32_t nl_object_diff(struct nl_object *a, struct nl_object *b)
-{
-       struct nl_object_ops *ops = obj_ops(a);
-
-       if (ops != obj_ops(b) || ops->oo_compare == NULL)
-               return UINT_MAX;
-
-       return ops->oo_compare(a, b, ~0, 0);
-}
-
-/**
- * Match a filter against an object
- * @arg obj            object to check
- * @arg filter         object of same type acting as filter
- *
- * @return 1 if the object matches the filter or 0
- *           if no filter procedure is available or if the
- *           filter does not match.
- */
-int nl_object_match_filter(struct nl_object *obj, struct nl_object *filter)
-{
-       struct nl_object_ops *ops = obj_ops(obj);
-
-       if (ops != obj_ops(filter) || ops->oo_compare == NULL)
-               return 0;
-       
-       return !(ops->oo_compare(obj, filter, filter->ce_mask,
-                                LOOSE_COMPARISON));
-}
-
-/**
- * Convert bitmask of attributes to a character string
- * @arg obj            object of same type as attribute bitmask
- * @arg attrs          bitmask of attribute types
- * @arg buf            destination buffer
- * @arg len            length of destination buffer
- *
- * Converts the bitmask of attribute types into a list of attribute
- * names separated by comas.
- *
- * @return destination buffer.
- */
-char *nl_object_attrs2str(struct nl_object *obj, uint32_t attrs,
-                         char *buf, size_t len)
-{
-       struct nl_object_ops *ops = obj_ops(obj);
-
-       if (ops->oo_attrs2str != NULL)
-               return ops->oo_attrs2str(attrs, buf, len);
-       else {
-               memset(buf, 0, len);
-               return buf;
-       }
-}
-
-#endif
-
-/** @} */
-
-/** @} */
diff --git a/package/libnl-tiny/src/socket.c b/package/libnl-tiny/src/socket.c
deleted file mode 100644 (file)
index 1429825..0000000
+++ /dev/null
@@ -1,406 +0,0 @@
-/*
- * lib/socket.c                Netlink Socket
- *
- *     This library is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU Lesser General Public
- *     License as published by the Free Software Foundation version 2.1
- *     of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-/**
- * @ingroup core
- * @defgroup socket Socket
- * @{
- */
-
-#include <netlink-local.h>
-#include <netlink/netlink.h>
-#include <netlink/utils.h>
-#include <netlink/handlers.h>
-#include <netlink/msg.h>
-#include <netlink/attr.h>
-
-static uint32_t used_ports_map[32];
-
-static uint32_t generate_local_port(void)
-{
-       int i, n;
-       uint32_t pid = getpid() & 0x3FFFFF;
-
-       for (i = 0; i < 32; i++) {
-               if (used_ports_map[i] == 0xFFFFFFFF)
-                       continue;
-
-               for (n = 0; n < 32; n++) {
-                       if (1UL & (used_ports_map[i] >> n))
-                               continue;
-
-                       used_ports_map[i] |= (1UL << n);
-                       n += (i * 32);
-
-                       /* PID_MAX_LIMIT is currently at 2^22, leaving 10 bit
-                        * to, i.e. 1024 unique ports per application. */
-                       return pid + (n << 22);
-
-               }
-       }
-
-       /* Out of sockets in our own PID namespace, what to do? FIXME */
-       return UINT_MAX;
-}
-
-static void release_local_port(uint32_t port)
-{
-       int nr;
-
-       if (port == UINT_MAX)
-               return;
-       
-       nr = port >> 22;
-       used_ports_map[nr / 32] &= ~(1 << nr % 32);
-}
-
-/**
- * @name Allocation
- * @{
- */
-
-static struct nl_sock *__alloc_socket(struct nl_cb *cb)
-{
-       struct nl_sock *sk;
-
-       sk = calloc(1, sizeof(*sk));
-       if (!sk)
-               return NULL;
-
-       sk->s_fd = -1;
-       sk->s_cb = cb;
-       sk->s_local.nl_family = AF_NETLINK;
-       sk->s_peer.nl_family = AF_NETLINK;
-       sk->s_seq_expect = sk->s_seq_next = time(0);
-       sk->s_local.nl_pid = generate_local_port();
-       if (sk->s_local.nl_pid == UINT_MAX) {
-               nl_socket_free(sk);
-               return NULL;
-       }
-
-       return sk;
-}
-
-/**
- * Allocate new netlink socket
- *
- * @return Newly allocated netlink socket or NULL.
- */
-struct nl_sock *nl_socket_alloc(void)
-{
-       struct nl_cb *cb;
-       
-       cb = nl_cb_alloc(NL_CB_DEFAULT);
-       if (!cb)
-               return NULL;
-
-       return __alloc_socket(cb);
-}
-
-/**
- * Allocate new socket with custom callbacks
- * @arg cb             Callback handler
- *
- * The reference to the callback handler is taken into account
- * automatically, it is released again upon calling nl_socket_free().
- *
- *@return Newly allocted socket handle or NULL.
- */
-struct nl_sock *nl_socket_alloc_cb(struct nl_cb *cb)
-{
-       if (cb == NULL)
-               BUG();
-
-       return __alloc_socket(nl_cb_get(cb));
-}
-
-/**
- * Free a netlink socket.
- * @arg sk             Netlink socket.
- */
-void nl_socket_free(struct nl_sock *sk)
-{
-       if (!sk)
-               return;
-
-       if (sk->s_fd >= 0)
-               close(sk->s_fd);
-
-       if (!(sk->s_flags & NL_OWN_PORT))
-               release_local_port(sk->s_local.nl_pid);
-
-       nl_cb_put(sk->s_cb);
-       free(sk);
-}
-
-/** @} */
-
-/**
- * @name Sequence Numbers
- * @{
- */
-
-static int noop_seq_check(struct nl_msg *msg, void *arg)
-{
-       return NL_OK;
-}
-
-
-/**
- * Disable sequence number checking.
- * @arg sk             Netlink socket.
- *
- * Disables checking of sequence numbers on the netlink socket This is
- * required to allow messages to be processed which were not requested by
- * a preceding request message, e.g. netlink events.
- *
- * @note This function modifies the NL_CB_SEQ_CHECK configuration in
- * the callback handle associated with the socket.
- */
-void nl_socket_disable_seq_check(struct nl_sock *sk)
-{
-       nl_cb_set(sk->s_cb, NL_CB_SEQ_CHECK,
-                 NL_CB_CUSTOM, noop_seq_check, NULL);
-}
-
-/** @} */
-
-/**
- * Set local port of socket
- * @arg sk             Netlink socket.
- * @arg port           Local port identifier
- *
- * Assigns a local port identifier to the socket. If port is 0
- * a unique port identifier will be generated automatically.
- */
-void nl_socket_set_local_port(struct nl_sock *sk, uint32_t port)
-{
-       if (port == 0) {
-               port = generate_local_port(); 
-               sk->s_flags &= ~NL_OWN_PORT;
-       } else  {
-               if (!(sk->s_flags & NL_OWN_PORT))
-                       release_local_port(sk->s_local.nl_pid);
-               sk->s_flags |= NL_OWN_PORT;
-       }
-
-       sk->s_local.nl_pid = port;
-}
-
-/** @} */
-
-/**
- * @name Group Subscriptions
- * @{
- */
-
-/**
- * Join groups
- * @arg sk             Netlink socket
- * @arg group          Group identifier
- *
- * Joins the specified groups using the modern socket option which
- * is available since kernel version 2.6.14. It allows joining an
- * almost arbitary number of groups without limitation.  The list
- * of groups has to be terminated by 0 (%NFNLGRP_NONE).
- *
- * Make sure to use the correct group definitions as the older
- * bitmask definitions for nl_join_groups() are likely to still
- * be present for backward compatibility reasons.
- *
- * @return 0 on sucess or a negative error code.
- */
-int nl_socket_add_memberships(struct nl_sock *sk, int group, ...)
-{
-       int err;
-       va_list ap;
-
-       if (sk->s_fd == -1)
-               return -NLE_BAD_SOCK;
-
-       va_start(ap, group);
-
-       while (group != 0) {
-               if (group < 0)
-                       return -NLE_INVAL;
-
-               err = setsockopt(sk->s_fd, SOL_NETLINK, NETLINK_ADD_MEMBERSHIP,
-                                                &group, sizeof(group));
-               if (err < 0)
-                       return -nl_syserr2nlerr(errno);
-
-               group = va_arg(ap, int);
-       }
-
-       va_end(ap);
-
-       return 0;
-}
-
-/**
- * Leave groups
- * @arg sk             Netlink socket
- * @arg group          Group identifier
- *
- * Leaves the specified groups using the modern socket option
- * which is available since kernel version 2.6.14. The list of groups
- * has to terminated by 0 (%NFNLGRP_NONE).
- *
- * @see nl_socket_add_membership
- * @return 0 on success or a negative error code.
- */
-int nl_socket_drop_memberships(struct nl_sock *sk, int group, ...)
-{
-       int err;
-       va_list ap;
-
-       if (sk->s_fd == -1)
-               return -NLE_BAD_SOCK;
-
-       va_start(ap, group);
-
-       while (group != 0) {
-               if (group < 0)
-                       return -NLE_INVAL;
-
-               err = setsockopt(sk->s_fd, SOL_NETLINK, NETLINK_DROP_MEMBERSHIP,
-                                                &group, sizeof(group));
-               if (err < 0)
-                       return -nl_syserr2nlerr(errno);
-
-               group = va_arg(ap, int);
-       }
-
-       va_end(ap);
-
-       return 0;
-}
-
-
-/** @} */
-
-/**
- * Set file descriptor of socket to non-blocking state
- * @arg sk             Netlink socket.
- *
- * @return 0 on success or a negative error code.
- */
-int nl_socket_set_nonblocking(struct nl_sock *sk)
-{
-       if (sk->s_fd == -1)
-               return -NLE_BAD_SOCK;
-
-       if (fcntl(sk->s_fd, F_SETFL, O_NONBLOCK) < 0)
-               return -nl_syserr2nlerr(errno);
-
-       return 0;
-}
-
-/** @} */
-
-/**
- * @name Utilities
- * @{
- */
-
-/**
- * Set socket buffer size of netlink socket.
- * @arg sk             Netlink socket.
- * @arg rxbuf          New receive socket buffer size in bytes.
- * @arg txbuf          New transmit socket buffer size in bytes.
- *
- * Sets the socket buffer size of a netlink socket to the specified
- * values \c rxbuf and \c txbuf. Providing a value of \c 0 assumes a
- * good default value.
- *
- * @note It is not required to call this function prior to nl_connect().
- * @return 0 on sucess or a negative error code.
- */
-int nl_socket_set_buffer_size(struct nl_sock *sk, int rxbuf, int txbuf)
-{
-       int err;
-
-       if (rxbuf <= 0)
-               rxbuf = 32768;
-
-       if (txbuf <= 0)
-               txbuf = 32768;
-
-       if (sk->s_fd == -1)
-               return -NLE_BAD_SOCK;
-       
-       err = setsockopt(sk->s_fd, SOL_SOCKET, SO_SNDBUF,
-                        &txbuf, sizeof(txbuf));
-       if (err < 0)
-               return -nl_syserr2nlerr(errno);
-
-       err = setsockopt(sk->s_fd, SOL_SOCKET, SO_RCVBUF,
-                        &rxbuf, sizeof(rxbuf));
-       if (err < 0)
-               return -nl_syserr2nlerr(errno);
-
-       sk->s_flags |= NL_SOCK_BUFSIZE_SET;
-
-       return 0;
-}
-
-/**
- * Enable/disable credential passing on netlink socket.
- * @arg sk             Netlink socket.
- * @arg state          New state (0 - disabled, 1 - enabled)
- *
- * @return 0 on success or a negative error code
- */
-int nl_socket_set_passcred(struct nl_sock *sk, int state)
-{
-       int err;
-
-       if (sk->s_fd == -1)
-               return -NLE_BAD_SOCK;
-
-       err = setsockopt(sk->s_fd, SOL_SOCKET, SO_PASSCRED,
-                        &state, sizeof(state));
-       if (err < 0)
-               return -nl_syserr2nlerr(errno);
-
-       if (state)
-               sk->s_flags |= NL_SOCK_PASSCRED;
-       else
-               sk->s_flags &= ~NL_SOCK_PASSCRED;
-
-       return 0;
-}
-
-/**
- * Enable/disable receival of additional packet information
- * @arg sk             Netlink socket.
- * @arg state          New state (0 - disabled, 1 - enabled)
- *
- * @return 0 on success or a negative error code
- */
-int nl_socket_recv_pktinfo(struct nl_sock *sk, int state)
-{
-       int err;
-
-       if (sk->s_fd == -1)
-               return -NLE_BAD_SOCK;
-
-       err = setsockopt(sk->s_fd, SOL_NETLINK, NETLINK_PKTINFO,
-                        &state, sizeof(state));
-       if (err < 0)
-               return -nl_syserr2nlerr(errno);
-
-       return 0;
-}
-
-/** @} */
-
-/** @} */
diff --git a/package/libnl-tiny/src/unl.c b/package/libnl-tiny/src/unl.c
deleted file mode 100644 (file)
index b38dab8..0000000
+++ /dev/null
@@ -1,290 +0,0 @@
-#define _GNU_SOURCE
-#include <netlink/netlink.h>
-#include <netlink/genl/genl.h>
-#include <netlink/genl/ctrl.h>
-#include <netlink/genl/family.h>
-#include <sys/types.h>
-#include <net/if.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <linux/nl80211.h>
-
-#include "unl.h"
-
-static int unl_init(struct unl *unl)
-{
-       unl->sock = nl_socket_alloc();
-       if (!unl->sock)
-               return -1;
-
-       return 0;
-}
-
-int unl_genl_init(struct unl *unl, const char *family)
-{
-       memset(unl, 0, sizeof(*unl));
-
-       if (unl_init(unl))
-               goto error_out;
-
-       unl->hdrlen = NLMSG_ALIGN(sizeof(struct genlmsghdr));
-       unl->family_name = strdup(family);
-       if (!unl->family_name)
-               goto error;
-
-       if (genl_connect(unl->sock))
-               goto error;
-
-       if (genl_ctrl_alloc_cache(unl->sock, &unl->cache))
-               goto error;
-
-       unl->family = genl_ctrl_search_by_name(unl->cache, family);
-       if (!unl->family)
-               goto error;
-
-       return 0;
-
-error:
-       unl_free(unl);
-error_out:
-       return -1;
-}
-
-void unl_free(struct unl *unl)
-{
-       if (unl->family_name)
-               free(unl->family_name);
-
-       if (unl->sock)
-               nl_socket_free(unl->sock);
-
-       if (unl->cache)
-               nl_cache_free(unl->cache);
-
-       memset(unl, 0, sizeof(*unl));
-}
-
-static int
-ack_handler(struct nl_msg *msg, void *arg)
-{
-       int *err = arg;
-       *err = 0;
-       return NL_STOP;
-}
-
-static int
-finish_handler(struct nl_msg *msg, void *arg)
-{
-       int *err = arg;
-       *err = 0;
-       return NL_SKIP;
-}
-
-static int
-error_handler(struct sockaddr_nl *nla, struct nlmsgerr *err, void *arg)
-{
-       int *ret = arg;
-       *ret = err->error;
-       return NL_SKIP;
-}
-
-struct nl_msg *unl_genl_msg(struct unl *unl, int cmd, bool dump)
-{
-       struct nl_msg *msg;
-       int flags = 0;
-
-       msg = nlmsg_alloc();
-       if (!msg)
-               goto out;
-
-       if (dump)
-               flags |= NLM_F_DUMP;
-
-       genlmsg_put(msg, NL_AUTO_PID, NL_AUTO_SEQ,
-                   genl_family_get_id(unl->family), 0, flags, cmd, 0);
-
-out:
-       return msg;
-}
-
-int unl_genl_request(struct unl *unl, struct nl_msg *msg, unl_cb handler, void *arg)
-{
-       struct nlmsghdr *nlh;
-       struct nl_cb *cb;
-       int err;
-
-       cb = nl_cb_alloc(NL_CB_CUSTOM);
-       nlh = nlmsg_hdr(msg);
-
-       err = nl_send_auto_complete(unl->sock, msg);
-       if (err < 0)
-               goto out;
-
-       err = 1;
-       nl_cb_err(cb, NL_CB_CUSTOM, error_handler, &err);
-       nl_cb_set(cb, NL_CB_FINISH, NL_CB_CUSTOM, finish_handler, &err);
-       nl_cb_set(cb, NL_CB_ACK, NL_CB_CUSTOM, ack_handler, &err);
-       if (handler)
-               nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, handler, arg);
-
-       while (err > 0)
-               nl_recvmsgs(unl->sock, cb);
-
-out:
-       nlmsg_free(msg);
-       nl_cb_put(cb);
-       return err;
-}
-
-static int request_single_cb(struct nl_msg *msg, void *arg)
-{
-       struct nl_msg **dest = arg;
-
-       if (!*dest) {
-               nlmsg_get(msg);
-               *dest = msg;
-       }
-       return NL_SKIP;
-}
-
-int unl_genl_request_single(struct unl *unl, struct nl_msg *msg, struct nl_msg **dest)
-{
-       *dest = NULL;
-       return unl_genl_request(unl, msg, request_single_cb, dest);
-}
-
-static int no_seq_check(struct nl_msg *msg, void *arg)
-{
-       return NL_OK;
-}
-
-void unl_genl_loop(struct unl *unl, unl_cb handler, void *arg)
-{
-       struct nl_cb *cb;
-
-       cb = nl_cb_alloc(NL_CB_CUSTOM);
-       unl->loop_done = false;
-       nl_cb_set(cb, NL_CB_SEQ_CHECK, NL_CB_CUSTOM, no_seq_check, NULL);
-       nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, handler, arg);
-
-       while (!unl->loop_done)
-               nl_recvmsgs(unl->sock, cb);
-
-       nl_cb_put(cb);
-}
-
-int unl_genl_multicast_id(struct unl *unl, const char *name)
-{
-       struct nlattr *tb[CTRL_ATTR_MCAST_GRP_MAX + 1];
-       struct nlattr *groups, *group;
-       struct nl_msg *msg;
-       int ctrlid;
-       int ret = -1;
-       int rem;
-
-       msg = nlmsg_alloc();
-       if (!msg)
-               return -1;
-
-       ctrlid = genl_ctrl_resolve(unl->sock, "nlctrl");
-       genlmsg_put(msg, 0, 0, ctrlid, 0, 0, CTRL_CMD_GETFAMILY, 0);
-       NLA_PUT_STRING(msg, CTRL_ATTR_FAMILY_NAME, unl->family_name);
-       unl_genl_request_single(unl, msg, &msg);
-       if (!msg)
-               return -1;
-
-       groups = unl_find_attr(unl, msg, CTRL_ATTR_MCAST_GROUPS);
-       if (!groups)
-               goto nla_put_failure;
-
-       nla_for_each_nested(group, groups, rem) {
-               const char *gn;
-
-               nla_parse(tb, CTRL_ATTR_MCAST_GRP_MAX, nla_data(group),
-                         nla_len(group), NULL);
-
-               if (!tb[CTRL_ATTR_MCAST_GRP_NAME] ||
-                   !tb[CTRL_ATTR_MCAST_GRP_ID])
-                       continue;
-
-               gn = nla_data(tb[CTRL_ATTR_MCAST_GRP_NAME]);
-               if (strcmp(gn, name) != 0)
-                       continue;
-
-               ret = nla_get_u32(tb[CTRL_ATTR_MCAST_GRP_ID]);
-               break;
-       }
-
-nla_put_failure:
-       nlmsg_free(msg);
-       return ret;
-}
-
-int unl_genl_subscribe(struct unl *unl, const char *name)
-{
-       int mcid;
-
-       mcid = unl_genl_multicast_id(unl, name);
-       if (mcid < 0)
-               return mcid;
-
-       return nl_socket_add_membership(unl->sock, mcid);
-}
-
-int unl_genl_unsubscribe(struct unl *unl, const char *name)
-{
-       int mcid;
-
-       mcid = unl_genl_multicast_id(unl, name);
-       if (mcid < 0)
-               return mcid;
-
-       return nl_socket_drop_membership(unl->sock, mcid);
-}
-
-int unl_nl80211_phy_lookup(const char *name)
-{
-       char buf[32];
-       int fd, pos;
-
-       snprintf(buf, sizeof(buf), "/sys/class/ieee80211/%s/index", name);
-
-       fd = open(buf, O_RDONLY);
-       if (fd < 0)
-               return -1;
-       pos = read(fd, buf, sizeof(buf) - 1);
-       if (pos < 0) {
-               close(fd);
-               return -1;
-       }
-       buf[pos] = '\0';
-       close(fd);
-       return atoi(buf);
-}
-
-int unl_nl80211_wdev_to_phy(struct unl *unl, int wdev)
-{
-       struct nl_msg *msg;
-       struct nlattr *attr;
-       int ret = -1;
-
-       msg = unl_genl_msg(unl, NL80211_CMD_GET_INTERFACE, false);
-       if (!msg)
-               return -1;
-
-       NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, wdev);
-       if (unl_genl_request_single(unl, msg, &msg) < 0)
-               return -1;
-
-       attr = unl_find_attr(unl, msg, NL80211_ATTR_WIPHY);
-       if (!attr)
-               goto out;
-
-       ret = nla_get_u32(attr);
-out:
-nla_put_failure:
-       nlmsg_free(msg);
-       return ret;
-}
-
-
diff --git a/package/libnl/Makefile b/package/libnl/Makefile
deleted file mode 100644 (file)
index 1375699..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-#
-# Copyright (C) 2006-2009 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=libnl
-PKG_VERSION:=2.0
-PKG_RELEASE:=1
-
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=http://www.infradead.org/~tgr/libnl/files/
-PKG_MD5SUM:=6aaf1e9802a17a7d702bb0638044ffa7
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/libnl
-  SECTION:=libs
-  CATEGORY:=Libraries
-  TITLE:=netlink socket library
-  URL:=http://people.suug.ch/~tgr/libnl/
-endef
-
-define Package/libnl/description
- This package contains a library for applications dealing with netlink sockets
-endef
-
-TARGET_CFLAGS += -ffunction-sections $(FPIC)
-
-define Build/Compile
-       $(call Build/Compile/Default)
-       make -C $(PKG_BUILD_DIR) \
-               DESTDIR="$(PKG_INSTALL_DIR)" \
-               install
-endef
-
-define Build/InstallDev
-       $(INSTALL_DIR) $(1)
-       $(CP) $(PKG_INSTALL_DIR)/* $(1)/
-       mkdir -p $(1)/usr/include/libnl
-       $(CP) $(PKG_BUILD_DIR)/include/linux $(1)/usr/include/libnl/
-endef
-
-define Package/libnl/install
-       $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libnl-route.so.* $(1)/usr/lib/
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libnl-genl.so.* $(1)/usr/lib/
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libnl-nf.so.* $(1)/usr/lib/
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libnl-route.so.* $(1)/usr/lib/
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libnl.so.* $(1)/usr/lib/
-endef
-
-$(eval $(call BuildPackage,libnl))
diff --git a/package/libnl/patches/110-offsetof.patch b/package/libnl/patches/110-offsetof.patch
deleted file mode 100644 (file)
index fa944a9..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/include/netlink-local.h
-+++ b/include/netlink-local.h
-@@ -337,7 +337,9 @@ static inline int nl_cb_call(struct nl_c
- }
- #define ARRAY_SIZE(X) (sizeof(X) / sizeof((X)[0]))
-+#ifndef offsetof
- #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
-+#endif
- #define __init __attribute__ ((constructor))
- #define __exit __attribute__ ((destructor))
diff --git a/package/libnl/patches/160-update_includes_for_iw.patch b/package/libnl/patches/160-update_includes_for_iw.patch
deleted file mode 100644 (file)
index ad36dab..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
---- a/include/linux/genetlink.h
-+++ b/include/linux/genetlink.h
-@@ -39,6 +39,9 @@ enum {
-       CTRL_CMD_NEWOPS,
-       CTRL_CMD_DELOPS,
-       CTRL_CMD_GETOPS,
-+      CTRL_CMD_NEWMCAST_GRP,
-+      CTRL_CMD_DELMCAST_GRP,
-+      CTRL_CMD_GETMCAST_GRP, /* unused */
-       __CTRL_CMD_MAX,
- };
-@@ -52,6 +55,7 @@ enum {
-       CTRL_ATTR_HDRSIZE,
-       CTRL_ATTR_MAXATTR,
-       CTRL_ATTR_OPS,
-+      CTRL_ATTR_MCAST_GROUPS,
-       __CTRL_ATTR_MAX,
- };
-@@ -66,4 +70,13 @@ enum {
- #define CTRL_ATTR_OP_MAX (__CTRL_ATTR_OP_MAX - 1)
-+enum {
-+      CTRL_ATTR_MCAST_GRP_UNSPEC,
-+      CTRL_ATTR_MCAST_GRP_NAME,
-+      CTRL_ATTR_MCAST_GRP_ID,
-+      __CTRL_ATTR_MCAST_GRP_MAX,
-+};
-+
-+#define CTRL_ATTR_MCAST_GRP_MAX (__CTRL_ATTR_MCAST_GRP_MAX - 1)
-+
- #endif        /* __LINUX_GENERIC_NETLINK_H */
diff --git a/package/libpcap/Config.in b/package/libpcap/Config.in
deleted file mode 100644 (file)
index ef32c1b..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-menu "Configuration"
-       depends PACKAGE_libpcap
-
-config PCAP_HAS_USB
-       bool "Include USB support"
-       depends PACKAGE_kmod-usb-core
-       default n
-
-config PCAP_HAS_BT
-       bool "Include bluetooth support"
-       depends PACKAGE_kmod-bluetooth
-       depends BROKEN
-       default n
-
-endmenu
diff --git a/package/libpcap/Makefile b/package/libpcap/Makefile
deleted file mode 100644 (file)
index ba65498..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-#
-# Copyright (C) 2006-2011 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=libpcap
-PKG_VERSION:=1.1.1
-PKG_RELEASE:=2
-
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=http://www.tcpdump.org/release/
-PKG_MD5SUM:=1bca27d206970badae248cfa471bbb47
-
-PKG_INSTALL:=1
-PKG_BUILD_PARALLEL:=1
-
-include $(INCLUDE_DIR)/package.mk
-include $(INCLUDE_DIR)/kernel.mk
-
-define Package/libpcap
-  SECTION:=libs
-  CATEGORY:=Libraries
-  TITLE:=Low-level packet capture library
-  URL:=http://www.tcpdump.org/
-  MENU:=1
-endef
-
-define Package/libpcap/description
-This package contains a system-independent library for user-level network packet
-capture.
-endef
-
-define Package/libpcap/config
-       source "$(SOURCE)/Config.in"
-endef
-
-TARGET_CFLAGS += \
-       -ffunction-sections \
-       -fdata-sections
-
-CONFIGURE_VARS += \
-       ac_cv_linux_vers=$(LINUX_VERSION)
-
-CONFIGURE_ARGS += \
-       --enable-shared \
-       --enable-static \
-       --disable-yydebug \
-       --enable-ipv6 \
-       --with-build-cc="$(HOSTCC)" \
-       --with-pcap=linux \
-       --without-septel \
-       --without-dag \
-       --without-libnl
-
-MAKE_FLAGS += \
-       CCOPT="$(TARGET_CFLAGS) -I$(BUILD_DIR)/linux/include"
-
-define Build/Configure
-       $(call Build/Configure/Default)
-       $(if $(CONFIG_PCAP_HAS_USB),,$(SED) '/^#define PCAP_SUPPORT_USB/D' $(PKG_BUILD_DIR)/config.h)
-       $(if $(CONFIG_PCAP_HAS_USB),,$(SED) 's/pcap-usb-linux.c *//' $(PKG_BUILD_DIR)/Makefile)
-       $(if $(CONFIG_PCAP_HAS_BT),,$(SED) '/^#define PCAP_SUPPORT_BT/D' $(PKG_BUILD_DIR)/config.h)
-       $(if $(CONFIG_PCAP_HAS_BT),,$(SED) 's/pcap-bt-linux.c *//' $(PKG_BUILD_DIR)/Makefile)
-endef
-
-define Build/InstallDev
-       $(INSTALL_DIR) $(1)/usr/include
-       $(CP) $(PKG_INSTALL_DIR)/usr/include/pcap* $(1)/usr/include/
-
-       $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcap.{a,so*} $(1)/usr/lib/
-endef
-
-define Package/libpcap/install
-       $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcap.so* $(1)/usr/lib/
-endef
-
-$(eval $(call BuildPackage,libpcap))
diff --git a/package/libpcap/patches/100-debian_shared_lib.patch b/package/libpcap/patches/100-debian_shared_lib.patch
deleted file mode 100644 (file)
index 5be33b0..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-Debian-specific modifications to the upstream Makefile.in to
-build a shared library.
----
- Makefile.in  |   45 ++++++++++++++++++++++++++++++++++++++++++---
- configure    |    2 +-
- configure.in |    2 +-
- 3 files changed, 44 insertions(+), 5 deletions(-)
-
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -40,6 +40,14 @@ mandir = @mandir@
- srcdir = @srcdir@
- VPATH = @srcdir@
-+# some defines for shared library compilation
-+MAJ=1.1
-+LIBVERSION=$(MAJ).1
-+LIBNAME=pcap
-+LIBRARY=lib$(LIBNAME).a
-+SOLIBRARY=lib$(LIBNAME).so
-+SHAREDLIB=$(SOLIBRARY).$(LIBVERSION)
-+
- #
- # You shouldn't need to edit anything below.
- #
-@@ -59,6 +67,7 @@ PROG=libpcap
- # Standard CFLAGS
- CFLAGS = $(CCOPT) $(INCLS) $(DEFS)
-+CFLAGS_SHARED = -shared -Wl,-soname,$(SOLIBRARY).$(MAJ)
- INSTALL = @INSTALL@
- INSTALL_PROGRAM = @INSTALL_PROGRAM@
-@@ -78,7 +87,11 @@ YACC = @V_YACC@
- # problem if you don't own the file but can write to the directory.
- .c.o:
-       @rm -f $@
--      $(CC) $(CFLAGS) -c $(srcdir)/$*.c
-+      $(CC) $(CFLAGS) -c -o $@ $(srcdir)/$*.c
-+
-+%_pic.o: %.c
-+      @rm -f $@
-+      $(CC) -fPIC $(CFLAGS) -c -o $@ $(srcdir)/$*.c
- PSRC =        pcap-@V_PCAP@.c @USB_SRC@ @BT_SRC@ @CAN_SRC@
- FSRC =  fad-@V_FINDALLDEVS@.c
-@@ -94,6 +107,7 @@ SRC =       $(PSRC) $(FSRC) $(CSRC) $(SSRC) $(
- # We would like to say "OBJ = $(SRC:.c=.o)" but Ultrix's make cannot
- # hack the extra indirection
- OBJ = $(PSRC:.c=.o) $(FSRC:.c=.o) $(CSRC:.c=.o) $(SSRC:.c=.o) $(GENSRC:.c=.o) $(LIBOBJS)
-+OBJ_PIC = $(PSRC:.c=_pic.o) $(FSRC:.c=_pic.o) $(CSRC:.c=_pic.o) $(SSRC:.c=_pic.o) $(GENSRC:.c=_pic.o)
- PUBHDR = \
-       pcap.h \
-       pcap-bpf.h \
-@@ -131,7 +145,7 @@ TAGFILES = \
- CLEANFILES = $(OBJ) libpcap.* filtertest findalldevstest selpolltest \
-       opentest $(PROG)-`cat $(srcdir)/VERSION`.tar.gz $(GENSRC) $(GENHDR) \
--      lex.yy.c pcap-config
-+      lex.yy.c pcap-config $(OBJ_PIC)
- MAN1 = pcap-config.1
-@@ -324,21 +338,14 @@ EXTRA_DIST = \
-       Win32/Src/inet_net.c \
-       Win32/Src/inet_pton.c
--all: libpcap.a shared pcap-config
-+all: libpcap.a shared pcap-config $(SHAREDLIB)
- libpcap.a: $(OBJ)
-       @rm -f $@
-       ar rc $@ $(OBJ) $(ADDLARCHIVEOBJS)
-       $(RANLIB) $@
--shared: libpcap.$(DYEXT)
--
--libpcap.so: $(OBJ)
--      @rm -f $@
--      VER=`cat $(srcdir)/VERSION`; \
--      MAJOR_VER=`sed 's/\([0-9][0-9]*\)\..*/\1/' $(srcdir)/VERSION`; \
--      @V_SHLIB_CMD@ @V_SHLIB_OPT@ @V_SONAME_OPT@$@.$$MAJOR_VER $(LDFLAGS) \
--          -o $@.$$VER $(OBJ) $(ADDLOBJS) $(LIBS)
-+shared: $(SHAREDLIB)
- #
- # The following rule succeeds, but the result is untested.
-@@ -409,6 +416,13 @@ libpcap.shareda: $(OBJ)
- #
- libpcap.none:
-+$(SHAREDLIB): $(OBJ_PIC)
-+      -@rm -f $@
-+      -@rm -f $(SOLIBRARY) $(SOLIBRARY).$(MAJ)
-+      $(CC) $(CFLAGS_SHARED) -o $(SHAREDLIB) $(OBJ_PIC) -lc
-+      ln -s $(SHAREDLIB) $(SOLIBRARY).$(MAJ)
-+      ln -s $(SOLIBRARY).$(MAJ) $(SOLIBRARY)
-+
- scanner.c: $(srcdir)/scanner.l
-       @rm -f $@
-       $(srcdir)/runlex.sh $(LEX) -o$@ $<
-@@ -416,6 +430,9 @@ scanner.c: $(srcdir)/scanner.l
- scanner.o: scanner.c tokdefs.h
-       $(CC) $(CFLAGS) -c scanner.c
-+scanner_pic.o: scanner.c tokdefs.h
-+      $(CC) -fPIC $(CFLAGS) -o $@ -c scanner.c
-+
- pcap.o: version.h
- tokdefs.h: grammar.c
-@@ -429,9 +446,17 @@ grammar.o: grammar.c
-       @rm -f $@
-       $(CC) $(CFLAGS) -Dyylval=pcap_lval -c grammar.c
-+grammar_pic.o: grammar.c
-+      @rm -f $@
-+      $(CC) -fPIC $(CFLAGS) -Dyylval=pcap_lval -o $@ -c grammar.c
-+
- version.o: version.c
-       $(CC) $(CFLAGS) -c version.c
-+version_pic.o: version.c
-+      $(CC) -fPIC $(CFLAGS) -c version.c -o $@
-+
-+
- snprintf.o: $(srcdir)/missing/snprintf.c
-       $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/snprintf.c
-@@ -469,6 +494,9 @@ bpf_filter.c: $(srcdir)/bpf/net/bpf_filt
- bpf_filter.o: bpf_filter.c
-       $(CC) $(CFLAGS) -c bpf_filter.c
-+bpf_filter_pic.o: bpf_filter.c
-+      $(CC) -fPIC $(CFLAGS) -c bpf_filter.c -o $@
-+
- #
- # Generate the pcap-config script.
- #
-@@ -562,14 +590,12 @@ install: install-shared install-archive 
-                   $(DESTDIR)$(mandir)/man@MAN_MISC_INFO@/`echo $$i | sed 's/.manmisc.in/.@MAN_MISC_INFO@/'`; done
- install-shared: install-shared-$(DYEXT)
--install-shared-so: libpcap.so
-+install-shared-so: $(SHAREDLIB)
-       [ -d $(DESTDIR)$(libdir) ] || \
-           (mkdir -p $(DESTDIR)$(libdir); chmod 755 $(DESTDIR)$(libdir))
--      VER=`cat $(srcdir)/VERSION`; \
--      MAJOR_VER=`sed 's/\([0-9][0-9]*\)\..*/\1/' $(srcdir)/VERSION`; \
--      $(INSTALL_PROGRAM) libpcap.so.$$VER $(DESTDIR)$(libdir)/libpcap.so.$$VER; \
--      ln -sf libpcap.so.$$VER $(DESTDIR)$(libdir)/libpcap.so.$$MAJOR_VER; \
--      ln -sf libpcap.so.$$MAJOR_VER $(DESTDIR)$(libdir)/libpcap.so
-+      $(INSTALL_DATA) $(SHAREDLIB) $(DESTDIR)$(libdir)/
-+      ln -sf $(SHAREDLIB) $(DESTDIR)$(libdir)/$(SOLIBRARY).$(MAJ)
-+      ln -sf $(SOLIBRARY).$(MAJ) $(DESTDIR)$(libdir)/$(SOLIBRARY)
- install-shared-dylib: libpcap.dylib
-       [ -d $(DESTDIR)$(libdir) ] || \
-           (mkdir -p $(DESTDIR)$(libdir); chmod 755 $(DESTDIR)$(libdir))
---- a/configure
-+++ b/configure
-@@ -3229,7 +3229,7 @@ _ACEOF
-                   # or accepts command-line arguments like
-                   # those the GNU linker accepts.
-                   #
--                  V_CCOPT="$V_CCOPT -fpic"
-+                  V_CCOPT="$V_CCOPT"
-                   V_SONAME_OPT="-Wl,-soname,"
-                   V_RPATH_OPT="-Wl,-rpath,"
-                   ;;
-@@ -3292,7 +3292,7 @@ _ACEOF
-                   #
-                   # "cc" is GCC.
-                   #
--                  V_CCOPT="$V_CCOPT -fpic"
-+                  V_CCOPT="$V_CCOPT"
-                   V_SHLIB_CMD="\$(CC)"
-                   V_SHLIB_OPT="-shared"
-                   V_SONAME_OPT="-Wl,-soname,"
diff --git a/package/libpcap/patches/102-makefile_disable_manpages.patch b/package/libpcap/patches/102-makefile_disable_manpages.patch
deleted file mode 100644 (file)
index 4674df5..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -532,62 +532,12 @@ install: install-shared install-archive 
-           (mkdir -p $(DESTDIR)$(includedir); chmod 755 $(DESTDIR)$(includedir))
-       [ -d $(DESTDIR)$(includedir)/pcap ] || \
-           (mkdir -p $(DESTDIR)$(includedir)/pcap; chmod 755 $(DESTDIR)$(includedir)/pcap)
--      [ -d $(DESTDIR)$(mandir)/man1 ] || \
--          (mkdir -p $(DESTDIR)$(mandir)/man1; chmod 755 $(DESTDIR)$(mandir)/man1)
--      [ -d $(DESTDIR)$(mandir)/man3 ] || \
--          (mkdir -p $(DESTDIR)$(mandir)/man3; chmod 755 $(DESTDIR)$(mandir)/man3)
--      [ -d $(DESTDIR)$(mandir)/man@MAN_FILE_FORMATS@ ] || \
--          (mkdir -p $(DESTDIR)$(mandir)/man@MAN_FILE_FORMATS@; chmod 755 $(DESTDIR)$(mandir)/man@MAN_FILE_FORMATS@)
--      [ -d $(DESTDIR)$(mandir)/man@MAN_MISC_INFO@ ] || \
--          (mkdir -p $(DESTDIR)$(mandir)/man@MAN_MISC_INFO@; chmod 755 $(DESTDIR)$(mandir)/man@MAN_MISC_INFO@)
-       for i in $(PUBHDR); do \
-               $(INSTALL_DATA) $(srcdir)/$$i \
-                   $(DESTDIR)$(includedir)/$$i; done
-       [ -d $(DESTDIR)$(bindir) ] || \
-           (mkdir -p $(DESTDIR)$(bindir); chmod 755 $(DESTDIR)$(bindir))
-       $(INSTALL_PROGRAM) pcap-config $(DESTDIR)$(bindir)/pcap-config
--      for i in $(MAN1); do \
--              $(INSTALL_DATA) $(srcdir)/$$i \
--                  $(DESTDIR)$(mandir)/man1/$$i; done
--      for i in $(MAN3PCAP_NOEXPAND); do \
--              $(INSTALL_DATA) $(srcdir)/$$i \
--                  $(DESTDIR)$(mandir)/man3/$$i; done
--      for i in $(MAN3PCAP_EXPAND:.in=); do \
--              $(INSTALL_DATA) $$i \
--                  $(DESTDIR)$(mandir)/man3/$$i; done
--      rm -f $(DESTDIR)$(mandir)/man3/pcap_datalink_val_to_description.3pcap
--      ln $(DESTDIR)$(mandir)/man3/pcap_datalink_val_to_name.3pcap \
--               $(DESTDIR)$(mandir)/man3/pcap_datalink_val_to_description.3pcap
--      rm -f $(DESTDIR)$(mandir)/man3/pcap_dump_fopen.3pcap
--      ln $(DESTDIR)$(mandir)/man3/pcap_dump_open.3pcap \
--               $(DESTDIR)$(mandir)/man3/pcap_dump_fopen.3pcap
--      rm -f $(DESTDIR)$(mandir)/man3/pcap_perror.3pcap
--      ln $(DESTDIR)$(mandir)/man3/pcap_geterr.3pcap \
--               $(DESTDIR)$(mandir)/man3/pcap_perror.3pcap
--      rm -f $(DESTDIR)$(mandir)/man3/pcap_sendpacket.3pcap
--      ln $(DESTDIR)$(mandir)/man3/pcap_inject.3pcap \
--               $(DESTDIR)$(mandir)/man3/pcap_sendpacket.3pcap
--      rm -f $(DESTDIR)$(mandir)/man3/pcap_dispatch.3pcap
--      ln $(DESTDIR)$(mandir)/man3/pcap_loop.3pcap \
--               $(DESTDIR)$(mandir)/man3/pcap_dispatch.3pcap
--      rm -f $(DESTDIR)$(mandir)/man3/pcap_minor_version.3pcap
--      ln $(DESTDIR)$(mandir)/man3/pcap_major_version.3pcap \
--               $(DESTDIR)$(mandir)/man3/pcap_minor_version.3pcap
--      rm -f $(DESTDIR)$(mandir)/man3/pcap_next.3pcap
--      ln $(DESTDIR)$(mandir)/man3/pcap_next_ex.3pcap \
--               $(DESTDIR)$(mandir)/man3/pcap_next.3pcap
--      rm -f $(DESTDIR)$(mandir)/man3/pcap_fopen_offline.3pcap
--      ln $(DESTDIR)$(mandir)/man3/pcap_open_offline.3pcap \
--               $(DESTDIR)$(mandir)/man3/pcap_fopen_offline.3pcap
--      rm -f $(DESTDIR)$(mandir)/man3/pcap_getnonblock.3pcap
--      ln $(DESTDIR)$(mandir)/man3/pcap_setnonblock.3pcap \
--               $(DESTDIR)$(mandir)/man3/pcap_getnonblock.3pcap
--      for i in $(MANFILE); do \
--              $(INSTALL_DATA) `echo $$i | sed 's/.manfile.in/.manfile/'` \
--                  $(DESTDIR)$(mandir)/man@MAN_FILE_FORMATS@/`echo $$i | sed 's/.manfile.in/.@MAN_FILE_FORMATS@/'`; done
--      for i in $(MANMISC); do \
--              $(INSTALL_DATA) `echo $$i | sed 's/.manmisc.in/.manmisc/'` \
--                  $(DESTDIR)$(mandir)/man@MAN_MISC_INFO@/`echo $$i | sed 's/.manmisc.in/.@MAN_MISC_INFO@/'`; done
- install-shared: install-shared-$(DYEXT)
- install-shared-so: $(SHAREDLIB)
-@@ -642,23 +592,6 @@ uninstall: uninstall-shared
-               rm -f $(DESTDIR)$(includedir)/$$i; done
-       -rmdir $(DESTDIR)$(includedir)/pcap
-       rm -f $(DESTDIR)/$(bindir)/pcap-config
--      for i in $(MAN1); do \
--              rm -f $(DESTDIR)$(mandir)/man1/$$i; done
--      for i in $(MAN3PCAP); do \
--              rm -f $(DESTDIR)$(mandir)/man3/$$i; done
--      rm -f $(DESTDIR)$(mandir)/man3/pcap_datalink_val_to_description.3pcap
--      rm -f $(DESTDIR)$(mandir)/man3/pcap_dump_fopen.3pcap
--      rm -f $(DESTDIR)$(mandir)/man3/pcap_perror.3pcap
--      rm -f $(DESTDIR)$(mandir)/man3/pcap_sendpacket.3pcap
--      rm -f $(DESTDIR)$(mandir)/man3/pcap_dispatch.3pcap
--      rm -f $(DESTDIR)$(mandir)/man3/pcap_minor_version.3pcap
--      rm -f $(DESTDIR)$(mandir)/man3/pcap_next.3pcap
--      rm -f $(DESTDIR)$(mandir)/man3/pcap_fopen_offline.3pcap
--      rm -f $(DESTDIR)$(mandir)/man3/pcap_getnonblock.3pcap
--      for i in $(MANFILE); do \
--              rm -f $(DESTDIR)$(mandir)/man@MAN_FILE_FORMATS@/`echo $$i | sed 's/.manfile.in/.@MAN_FILE_FORMATS@/'`; done
--      for i in $(MANMISC); do \
--              rm -f $(DESTDIR)$(mandir)/man@MAN_MISC_INFO@/`echo $$i | sed 's/.manmisc.in/.@MAN_MISC_INFO@/'`; done
- uninstall-shared: uninstall-shared-$(DYEXT)
- uninstall-shared-so:
diff --git a/package/libpcap/patches/103-makefile_flex_workaround.patch b/package/libpcap/patches/103-makefile_flex_workaround.patch
deleted file mode 100644 (file)
index a90e0ce..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-
-       Copyright (C) 2006 Markus Wigge
-
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -56,7 +56,7 @@ LD = /usr/bin/ld
- CC = @CC@
- CCOPT = @V_CCOPT@
- INCLS = -I. @V_INCLS@
--DEFS = @DEFS@ @V_DEFS@
-+DEFS = -D_BSD_SOURCE @DEFS@ @V_DEFS@
- ADDLOBJS = @ADDLOBJS@
- ADDLARCHIVEOBJS = @ADDLARCHIVEOBJS@
- LIBS = @LIBS@
diff --git a/package/libpcap/patches/201-space_optimization.patch b/package/libpcap/patches/201-space_optimization.patch
deleted file mode 100644 (file)
index f3eec4c..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
---- a/gencode.c
-+++ b/gencode.c
-@@ -491,20 +491,6 @@ pcap_compile_nopcap(int snaplen_arg, int
- }
- /*
-- * Clean up a "struct bpf_program" by freeing all the memory allocated
-- * in it.
-- */
--void
--pcap_freecode(struct bpf_program *program)
--{
--      program->bf_len = 0;
--      if (program->bf_insns != NULL) {
--              free((char *)program->bf_insns);
--              program->bf_insns = NULL;
--      }
--}
--
--/*
-  * Backpatch the blocks in 'list' to 'target'.  The 'sense' field indicates
-  * which of the jt and jf fields has been resolved and which is a pointer
-  * back to another unresolved block (or nil).  At least one of the fields
---- a/pcap.c
-+++ b/pcap.c
-@@ -748,6 +748,59 @@ static const u_char charmap[] = {
-       (u_char)'\374', (u_char)'\375', (u_char)'\376', (u_char)'\377',
- };
-+/*
-+ * Clean up a "struct bpf_program" by freeing all the memory allocated
-+ * in it.
-+ */
-+void
-+pcap_freecode(struct bpf_program *program)
-+{
-+      program->bf_len = 0;
-+      if (program->bf_insns != NULL) {
-+              free((char *)program->bf_insns);
-+              program->bf_insns = NULL;
-+      }
-+}
-+
-+/*
-+ * Make a copy of a BPF program and put it in the "fcode" member of
-+ * a "pcap_t".
-+ *
-+ * If we fail to allocate memory for the copy, fill in the "errbuf"
-+ * member of the "pcap_t" with an error message, and return -1;
-+ * otherwise, return 0.
-+ */
-+int
-+install_bpf_program(pcap_t *p, struct bpf_program *fp)
-+{
-+      size_t prog_size;
-+
-+      /*
-+       * Validate the program.
-+       */
-+      if (!bpf_validate(fp->bf_insns, fp->bf_len)) {
-+              snprintf(p->errbuf, sizeof(p->errbuf),
-+                      "BPF program is not valid");
-+              return (-1);
-+      }
-+
-+      /*
-+       * Free up any already installed program.
-+       */
-+      pcap_freecode(&p->fcode);
-+
-+      prog_size = sizeof(*fp->bf_insns) * fp->bf_len;
-+      p->fcode.bf_len = fp->bf_len;
-+      p->fcode.bf_insns = (struct bpf_insn *)malloc(prog_size);
-+      if (p->fcode.bf_insns == NULL) {
-+              snprintf(p->errbuf, sizeof(p->errbuf),
-+                       "malloc: %s", pcap_strerror(errno));
-+              return (-1);
-+      }
-+      memcpy(p->fcode.bf_insns, fp->bf_insns, prog_size);
-+      return (0);
-+}
-+
- int
- pcap_strcasecmp(const char *s1, const char *s2)
- {
---- a/optimize.c
-+++ b/optimize.c
-@@ -2292,45 +2292,6 @@ icode_to_fcode(root, lenp)
-       return fp;
- }
--/*
-- * Make a copy of a BPF program and put it in the "fcode" member of
-- * a "pcap_t".
-- *
-- * If we fail to allocate memory for the copy, fill in the "errbuf"
-- * member of the "pcap_t" with an error message, and return -1;
-- * otherwise, return 0.
-- */
--int
--install_bpf_program(pcap_t *p, struct bpf_program *fp)
--{
--      size_t prog_size;
--
--      /*
--       * Validate the program.
--       */
--      if (!bpf_validate(fp->bf_insns, fp->bf_len)) {
--              snprintf(p->errbuf, sizeof(p->errbuf),
--                      "BPF program is not valid");
--              return (-1);
--      }
--
--      /*
--       * Free up any already installed program.
--       */
--      pcap_freecode(&p->fcode);
--
--      prog_size = sizeof(*fp->bf_insns) * fp->bf_len;
--      p->fcode.bf_len = fp->bf_len;
--      p->fcode.bf_insns = (struct bpf_insn *)malloc(prog_size);
--      if (p->fcode.bf_insns == NULL) {
--              snprintf(p->errbuf, sizeof(p->errbuf),
--                       "malloc: %s", pcap_strerror(errno));
--              return (-1);
--      }
--      memcpy(p->fcode.bf_insns, fp->bf_insns, prog_size);
--      return (0);
--}
--
- #ifdef BDEBUG
- static void
- opt_dump(root)
diff --git a/package/libpcap/patches/202-protocol_api.patch b/package/libpcap/patches/202-protocol_api.patch
deleted file mode 100644 (file)
index 892aeb7..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
---- a/pcap-int.h
-+++ b/pcap-int.h
-@@ -209,6 +209,7 @@ struct pcap_opt {
-       char    *source;
-       int     promisc;
-       int     rfmon;
-+      int proto;      /* protocol for packet socket (linux) */
- };
- /*
---- a/pcap-linux.c
-+++ b/pcap-linux.c
-@@ -335,7 +335,7 @@ static int iface_get_id(int fd, const ch
- static int    iface_get_mtu(int fd, const char *device, char *ebuf);
- static int    iface_get_arptype(int fd, const char *device, char *ebuf);
- #ifdef HAVE_PF_PACKET_SOCKETS
--static int    iface_bind(int fd, int ifindex, char *ebuf);
-+static int    iface_bind(int fd, int ifindex, char *ebuf, unsigned short proto);
- #ifdef IW_MODE_MONITOR
- static int    has_wext(int sock_fd, const char *device, char *ebuf);
- #endif /* IW_MODE_MONITOR */
-@@ -881,7 +881,7 @@ pcap_can_set_rfmon_linux(pcap_t *handle)
-        * (We assume that if we have Wireless Extensions support
-        * we also have PF_PACKET support.)
-        */
--      sock_fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
-+      sock_fd = socket(PF_PACKET, SOCK_RAW, p->opt.proto);
-       if (sock_fd == -1) {
-               (void)snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
-                   "socket: %s", pcap_strerror(errno));
-@@ -1128,6 +1128,9 @@ pcap_activate_linux(pcap_t *handle)
-       handle->read_op = pcap_read_linux;
-       handle->stats_op = pcap_stats_linux;
-+      if (handle->opt.proto < 0)
-+              handle->opt.proto = (int) htons(ETH_P_ALL);
-+
-       /*
-        * The "any" device is a special device which causes us not
-        * to bind to a particular device and thus to look at all
-@@ -2684,8 +2687,8 @@ activate_new(pcap_t *handle)
-        * try a SOCK_RAW socket for the raw interface.
-        */
-       sock_fd = is_any_device ?
--              socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_ALL)) :
--              socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
-+              socket(PF_PACKET, SOCK_DGRAM, handle->opt.proto) :
-+              socket(PF_PACKET, SOCK_RAW, handle->opt.proto);
-       if (sock_fd == -1) {
-               snprintf(handle->errbuf, PCAP_ERRBUF_SIZE, "socket: %s",
-@@ -2783,7 +2786,7 @@ activate_new(pcap_t *handle)
-                               return PCAP_ERROR;
-                       }
-                       sock_fd = socket(PF_PACKET, SOCK_DGRAM,
--                          htons(ETH_P_ALL));
-+                          handle->opt.proto);
-                       if (sock_fd == -1) {
-                               snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
-                                   "socket: %s", pcap_strerror(errno));
-@@ -2835,7 +2838,7 @@ activate_new(pcap_t *handle)
-               }
-               if ((err = iface_bind(sock_fd, handle->md.ifindex,
--                  handle->errbuf)) != 1) {
-+                  handle->errbuf, handle->opt.proto)) != 1) {
-                       close(sock_fd);
-                       if (err < 0)
-                               return err;
-@@ -3640,7 +3643,7 @@ iface_get_id(int fd, const char *device,
-  *  or a PCAP_ERROR_ value on a hard error.
-  */
- static int
--iface_bind(int fd, int ifindex, char *ebuf)
-+iface_bind(int fd, int ifindex, char *ebuf, unsigned short proto)
- {
-       struct sockaddr_ll      sll;
-       int                     err;
-@@ -3649,7 +3652,7 @@ iface_bind(int fd, int ifindex, char *eb
-       memset(&sll, 0, sizeof(sll));
-       sll.sll_family          = AF_PACKET;
-       sll.sll_ifindex         = ifindex;
--      sll.sll_protocol        = htons(ETH_P_ALL);
-+      sll.sll_protocol        = proto;
-       if (bind(fd, (struct sockaddr *) &sll, sizeof(sll)) == -1) {
-               if (errno == ENETDOWN) {
-@@ -4359,7 +4362,7 @@ activate_old(pcap_t *handle)
-       /* Open the socket */
--      handle->fd = socket(PF_INET, SOCK_PACKET, htons(ETH_P_ALL));
-+      handle->fd = socket(PF_INET, SOCK_PACKET, handle->opt.proto);
-       if (handle->fd == -1) {
-               snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
-                        "socket: %s", pcap_strerror(errno));
---- a/pcap.c
-+++ b/pcap.c
-@@ -258,6 +258,8 @@ pcap_create_common(const char *source, c
-       pcap_set_snaplen(p, 65535);     /* max packet size */
-       p->opt.promisc = 0;
-       p->opt.buffer_size = 0;
-+      p->opt.proto = -1;
-+
-       return (p);
- }
-@@ -317,6 +319,15 @@ pcap_set_buffer_size(pcap_t *p, int buff
-       return 0;
- }
-+int
-+pcap_set_protocol(pcap_t *p, unsigned short proto)
-+{
-+      if (pcap_check_activated(p))
-+              return PCAP_ERROR_ACTIVATED;
-+      p->opt.proto = proto;
-+      return 0;
-+}
-+
- int
- pcap_activate(pcap_t *p)
- {
---- a/pcap/pcap.h
-+++ b/pcap/pcap.h
-@@ -68,6 +68,7 @@ extern "C" {
- #define PCAP_VERSION_MINOR 4
- #define PCAP_ERRBUF_SIZE 256
-+#define HAS_PROTO_EXTENSION
- /*
-  * Compatibility for systems that have a bpf.h that
-@@ -276,6 +277,7 @@ int        pcap_can_set_rfmon(pcap_t *);
- int   pcap_set_rfmon(pcap_t *, int);
- int   pcap_set_timeout(pcap_t *, int);
- int   pcap_set_buffer_size(pcap_t *, int);
-+int   pcap_set_protocol(pcap_t *, unsigned short);
- int   pcap_activate(pcap_t *);
- pcap_t        *pcap_open_live(const char *, int, int, int, char *);
diff --git a/package/libpcap/patches/203-undef_iw_mode_monitor.patch b/package/libpcap/patches/203-undef_iw_mode_monitor.patch
deleted file mode 100644 (file)
index 508c659..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/pcap-linux.c
-+++ b/pcap-linux.c
-@@ -254,6 +254,8 @@ static const char rcsid[] _U_ =
- typedef int           socklen_t;
- #endif
-+#undef IW_MODE_MONITOR
-+
- #ifndef MSG_TRUNC
- /*
-  * This is being compiled on a system that lacks MSG_TRUNC; define it
diff --git a/package/libreadline/Makefile b/package/libreadline/Makefile
deleted file mode 100644 (file)
index 90219e5..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-# 
-# Copyright (C) 2006 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=readline
-PKG_VERSION:=5.2
-PKG_RELEASE:=2
-
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=@GNU/readline
-PKG_MD5SUM:=e39331f32ad14009b9ff49cc10c5e751
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/libreadline
-  SECTION:=libs
-  CATEGORY:=Libraries
-  TITLE:=Command lines edition library
-  URL:=http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html
-endef
-
-define Package/libreadline/description
-       The Readline library provides a set of functions for use by applications 
-       that allow users to edit command lines as they are typed in. Both Emacs 
-       and vi editing modes are available. The Readline library includes 
-       additional functions to maintain a list of previously-entered command 
-       lines, to recall and perhaps reedit those lines, and perform csh-like 
-       history expansion on previous commands.
-endef
-
-define Build/Configure
-       $(call Build/Configure/Default, \
-               --enable-shared \
-               --enable-static \
-               --without-curses \
-       )
-endef
-
-TARGET_CPPFLAGS:=-I. -I.. $(TARGET_CPPFLAGS)
-
-TARGET_CFLAGS += $(FPIC)
-
-define Build/Compile
-       $(MAKE) -C $(PKG_BUILD_DIR) \
-               DESTDIR="$(PKG_INSTALL_DIR)" \
-               all install
-endef
-
-define Build/InstallDev
-       $(INSTALL_DIR) $(1)/usr/include
-       $(CP) $(PKG_INSTALL_DIR)/usr/include/readline $(1)/usr/include/
-       $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{history,readline}.{a,so,so.5,so.5.2} $(1)/usr/lib/
-endef
-
-define Package/libreadline/install
-       $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{history,readline}.{so,so.5,so.5.2} $(1)/usr/lib/
-endef
-
-$(eval $(call BuildPackage,libreadline))
diff --git a/package/libreadline/patches/100-fix_avr32_compile b/package/libreadline/patches/100-fix_avr32_compile
deleted file mode 100644 (file)
index 4d55b80..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
---- a/support/config.sub
-+++ b/support/config.sub
-@@ -228,7 +228,7 @@ case $basic_machine in
-       | a29k \
-       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
-       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
--      | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
-+      | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
-       | clipper \
-       | d10v | d30v | dlx | dsp16xx \
-       | fr30 | frv \
-@@ -293,7 +293,7 @@ case $basic_machine in
-       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
-       | amd64-* \
-       | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
--      | avr-* \
-+      | avr-* | avr32-* \
-       | bs2000-* \
-       | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* \
-       | clipper-* | cydra-* \
diff --git a/package/librpc/Makefile b/package/librpc/Makefile
deleted file mode 100644 (file)
index 34cedbb..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=librpc
-PKG_VERSION:=0.9.32-rc2
-PKG_RELEASE=$(PKG_SOURCE_VERSION)
-
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_URL:=git://nbd.name/uclibc-rpc.git
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=0a2179bbc0844928f2a0ec01dba93d9b5d6d41a7
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
-CMAKE_INSTALL:=1
-
-include $(INCLUDE_DIR)/package.mk
-include $(INCLUDE_DIR)/cmake.mk
-
-define Package/librpc
-  SECTION:=libs
-  CATEGORY:=Libraries
-  TITLE:=uClibc RPC library
-endef
-
-define Package/librpc/install
-       $(INSTALL_DIR) $(1)/lib/
-       $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/librpc.so $(1)/lib/
-endef
-
-$(eval $(call BuildPackage,librpc))
diff --git a/package/librpc/patches/100-compat_fix.patch b/package/librpc/patches/100-compat_fix.patch
deleted file mode 100644 (file)
index a0f03f6..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
---- a/compat.h
-+++ /dev/null
-@@ -1,32 +0,0 @@
--#ifndef __UCLIBC_COMPAT_H
--#define __UCLIBC_COMPAT_H
--
--#define _XOPEN_SOURCE
--#define _GNU_SOURCE
--
--#include <features.h>
--#include <errno.h>
--
--#undef __UCLIBC_HAS_THREADS__
--#include <bits/uClibc_mutex.h>
--#include <sys/poll.h>
--
--#if 0
--#undef __UCLIBC_MUTEX_LOCK
--#undef __UCLIBC_MUTEX_UNLOCK
--#define __UCLIBC_MUTEX_LOCK(M) pthread_mutex_lock(&(M))
--#define __UCLIBC_MUTEX_UNLOCK(M) pthread_mutex_unlock(&(M))
--#endif
--
--#define smallint int
--
--#define _(...) __VA_ARGS__
--#define internal_function
--#define attribute_hidden
--#define attribute_unused
--#define attribute_noreturn
--#define libc_hidden_def(...)
--
--#define __set_errno(_val) errno = _val
--
--#endif
---- a/rcmd.c
-+++ b/rcmd.c
-@@ -85,7 +85,6 @@ static char sccsid[] = "@(#)rcmd.c   8.3 (
- #include <wchar.h>
- #endif
- #include <sys/uio.h>
--#include <bits/uClibc_alloc.h>
- /* some forward declarations */
---- a/create_xid.c
-+++ b/create_xid.c
-@@ -28,7 +28,6 @@
- /* The RPC code is not threadsafe, but new code should be threadsafe. */
--#include <bits/uClibc_mutex.h>
- __UCLIBC_MUTEX_STATIC(mylock, PTHREAD_MUTEX_INITIALIZER);
- static smallint is_initialized;
---- a/getrpcent.c
-+++ b/getrpcent.c
-@@ -257,7 +257,6 @@ static struct rpcent *interpret(register
- #if defined(__UCLIBC_HAS_REENTRANT_RPC__)
--#include <bits/uClibc_mutex.h>
- __UCLIBC_MUTEX_STATIC(mylock, PTHREAD_MUTEX_INITIALIZER);
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,7 +1,7 @@
- cmake_minimum_required(VERSION 2.6)
- PROJECT(rpc C)
--ADD_DEFINITIONS(-Os -Wall --std=gnu99 -g3 -I. -include compat.h)
-+ADD_DEFINITIONS(-Os -Wall --std=gnu99 -g3 -I. -include rpc/compat.h)
- FILE(GLOB SOURCES *.c)
---- a/rpc/types.h
-+++ b/rpc/types.h
-@@ -33,6 +33,8 @@
- #ifndef _RPC_TYPES_H
- #define _RPC_TYPES_H 1
-+#include "compat.h"
-+
- #ifdef _LIBC
- /* Some adjustments to make the libc source from glibc
-  * compile more easily with uClibc... */
---- a/clnt_perror.c
-+++ b/clnt_perror.c
-@@ -246,7 +246,7 @@ clnt_sperror (CLIENT * rpch, const char 
-     case RPC_CANTSEND:
-     case RPC_CANTRECV:
--      __glibc_strerror_r (e.re_errno, chrbuf, sizeof chrbuf);
-+      strerror_r (e.re_errno, chrbuf, sizeof chrbuf);
-       len = sprintf (str, "; errno = %s", chrbuf);
-       str += len;
-       break;
-@@ -336,7 +336,7 @@ clnt_spcreateerror (const char *msg)
-       (void) strcpy(cp, " - ");
-       cp += strlen(cp);
--      __glibc_strerror_r (ce->cf_error.re_errno, chrbuf, sizeof chrbuf);
-+      strerror_r (ce->cf_error.re_errno, chrbuf, sizeof chrbuf);
-       (void) strcpy(cp, chrbuf);
-       cp += strlen(cp);
-       break;
---- a/rpc_thread.c
-+++ b/rpc_thread.c
-@@ -13,9 +13,6 @@
- #ifdef __UCLIBC_HAS_THREADS__
--#include <bits/libc-tsd.h>
--#include <bits/libc-lock.h>
--
- /* Variable used in non-threaded applications or for the first thread.  */
- static struct rpc_thread_variables __libc_tsd_RPC_VARS_mem;
- __libc_tsd_define (, RPC_VARS)
-@@ -52,16 +49,17 @@ rpc_thread_multi (void)
-   __libc_tsd_set (RPC_VARS, &__libc_tsd_RPC_VARS_mem);
- }
-+__UCLIBC_MUTEX_STATIC(mylock, PTHREAD_MUTEX_INITIALIZER);
- struct rpc_thread_variables attribute_hidden *
- __rpc_thread_variables (void)
- {
--      __libc_once_define (static, once);
-       struct rpc_thread_variables *tvp;
-+      __UCLIBC_MUTEX_LOCK(mylock);
-       tvp = __libc_tsd_get (RPC_VARS);
-       if (tvp == NULL) {
--              __libc_once (once, rpc_thread_multi);
-+              rpc_thread_multi();
-               tvp = __libc_tsd_get (RPC_VARS);
-               if (tvp == NULL) {
-                       tvp = calloc (1, sizeof *tvp);
-@@ -71,6 +69,7 @@ __rpc_thread_variables (void)
-                               tvp = __libc_tsd_get (RPC_VARS);
-               }
-       }
-+      __UCLIBC_MUTEX_UNLOCK(mylock);
-       return tvp;
- }
---- /dev/null
-+++ b/rpc/compat.h
-@@ -0,0 +1,53 @@
-+#ifndef __UCLIBC_COMPAT_H
-+#define __UCLIBC_COMPAT_H
-+
-+#define _XOPEN_SOURCE
-+#define _GNU_SOURCE
-+
-+#include <features.h>
-+#include <errno.h>
-+
-+#ifndef __UCLIBC_HAS_THREADS__
-+#define __UCLIBC_HAS_THREADS__
-+#endif
-+
-+#include <sys/poll.h>
-+#include <pthread.h>
-+
-+#ifdef __UCLIBC__
-+#include <bits/libc-lock.h>
-+#else
-+#undef __UCLIBC_MUTEX_STATIC
-+#undef __UCLIBC_MUTEX_LOCK
-+#undef __UCLIBC_MUTEX_UNLOCK
-+#define __UCLIBC_MUTEX_STATIC(M,I) static pthread_mutex_t M = I
-+#define __UCLIBC_MUTEX_LOCK(M) pthread_mutex_lock(&(M))
-+#define __UCLIBC_MUTEX_UNLOCK(M) pthread_mutex_unlock(&(M))
-+#endif
-+
-+#define smallint int
-+
-+#define _(...) __VA_ARGS__
-+#define internal_function
-+#define attribute_hidden
-+#define attribute_unused
-+#define attribute_noreturn
-+#define libc_hidden_def(...)
-+
-+#ifndef libc_hidden_proto
-+#define libc_hidden_proto(name, attrs...)
-+#endif
-+
-+#define __set_errno(_val) errno = _val
-+
-+# define attribute_tls_model_ie __attribute__ ((tls_model ("initial-exec")))
-+
-+# define __libc_tsd_define(CLASS, KEY)  \
-+  CLASS __thread void *__libc_tsd_##KEY attribute_tls_model_ie;
-+
-+# define __libc_tsd_address(KEY)    (&__libc_tsd_##KEY)
-+# define __libc_tsd_get(KEY)        (__libc_tsd_##KEY)
-+# define __libc_tsd_set(KEY, VALUE) (__libc_tsd_##KEY = (VALUE))
-+
-+
-+#endif
---- a/rpc/netdb.h
-+++ b/rpc/netdb.h
-@@ -41,6 +41,8 @@
- #define __need_size_t
- #include <stddef.h>
-+#include "types.h"
-+
- __BEGIN_DECLS
- struct rpcent
diff --git a/package/libs/cyassl/Makefile b/package/libs/cyassl/Makefile
new file mode 100644 (file)
index 0000000..442186a
--- /dev/null
@@ -0,0 +1,56 @@
+#
+# Copyright (C) 2006-2010 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=cyassl
+PKG_VERSION:=1.6.5
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).zip
+PKG_SOURCE_URL:=http://www.yassl.com/
+PKG_MD5SUM:=98c2c6350acf1d089756a1de9ccb9903
+
+PKG_FIXUP:=patch-libtool
+PKG_INSTALL:=1
+PKG_BUILD_PARALLEL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/libcyassl
+  SECTION:=libs
+  SUBMENU:=SSL
+  CATEGORY:=Libraries
+  TITLE:=CyaSSL library
+  URL:=http://www.yassl.com/
+endef
+
+define Package/libcyassl/description
+CyaSSL is an SSL library optimized for small footprint, both on disk and for
+memory use.
+endef
+
+TARGET_CFLAGS += $(FPIC)
+
+CONFIGURE_ARGS += \
+       --without-zlib \
+       --enable-singleThreaded
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/* $(1)/usr/include/
+
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libcyassl.{a,so*,la} $(1)/usr/lib/
+endef
+
+define Package/libcyassl/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libcyassl.so* $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,libcyassl))
diff --git a/package/libs/cyassl/patches/110-makefile_disable_examples_tests.patch b/package/libs/cyassl/patches/110-makefile_disable_examples_tests.patch
new file mode 100644 (file)
index 0000000..c66ab8c
--- /dev/null
@@ -0,0 +1,46 @@
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -1,4 +1,4 @@
+-SUBDIRS = src ctaocrypt examples testsuite sslSniffer\r
++SUBDIRS = src ctaocrypt\r
+ EXTRA_DIST = cyassl.dsp cyassl.dsw certs/*.pem certs/*.der certs/*.txt \\r
+     lib/dummy cyassl.sln cyassl.vcproj cyassl-iphone.xcodeproj/project.pbxproj \\r
+     doc/*.pdf swig/README swig/*.i swig/cyassl_adds.c swig/*.sh swig/runme.* \\r
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -193,7 +193,7 @@ target_os = @target_os@
+ target_vendor = @target_vendor@
+ top_builddir = @top_builddir@
+ top_srcdir = @top_srcdir@
+-SUBDIRS = src ctaocrypt examples testsuite sslSniffer
++SUBDIRS = src ctaocrypt
+ EXTRA_DIST = cyassl.dsp cyassl.dsw certs/*.pem certs/*.der certs/*.txt \
+     lib/dummy cyassl.sln cyassl.vcproj cyassl-iphone.xcodeproj/project.pbxproj \
+     doc/*.pdf swig/README swig/*.i swig/cyassl_adds.c swig/*.sh swig/runme.* \
+@@ -643,7 +643,7 @@ uninstall-am:
+ # !!!! first line of rule has to start with a hard (real) tab, not spaces
+ basic:
+-      cd src; $(MAKE); cd ../testsuite; $(MAKE); cd ../
++      cd src; $(MAKE); cd ../
+ openssl-links:
+       cd lib; ln -s ../src/.libs/libcyassl.a libcrypto.a; \
+--- a/ctaocrypt/Makefile.am
++++ b/ctaocrypt/Makefile.am
+@@ -1,3 +1,3 @@
+-SUBDIRS = src test benchmark\r
++SUBDIRS = src\r
+ EXTRA_DIST = ctaocrypt.dsw ctaocrypt.dsp ctaocrypt.sln ctaocrypt.vcproj\r
\r
+--- a/ctaocrypt/Makefile.in
++++ b/ctaocrypt/Makefile.in
+@@ -177,7 +177,7 @@ target_os = @target_os@
+ target_vendor = @target_vendor@
+ top_builddir = @top_builddir@
+ top_srcdir = @top_srcdir@
+-SUBDIRS = src test benchmark
++SUBDIRS = src
+ EXTRA_DIST = ctaocrypt.dsw ctaocrypt.dsp ctaocrypt.sln ctaocrypt.vcproj
+ all: all-recursive
diff --git a/package/libs/cyassl/patches/120-makefile_destdir.patch b/package/libs/cyassl/patches/120-makefile_destdir.patch
new file mode 100644 (file)
index 0000000..bf20274
--- /dev/null
@@ -0,0 +1,71 @@
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -10,19 +10,19 @@ basic:
\r
+ openssl-links:\r
+       cd lib; ln -s ../src/.libs/libcyassl.a libcrypto.a; \\r
+-    ln -s ../src/.libs/libcyassl.a libssl.a; \\r
+-    ln -s ../src/.libs/libcyassl.a libcyassl.a; cd ../\r
++      ln -s ../src/.libs/libcyassl.a libssl.a; \\r
++      ln -s ../src/.libs/libcyassl.a libcyassl.a; cd ../\r
\r
+ #  !!! test -e with a .name like .libs then a * like *dylib fails so just\r
+ #      look for the .dylib on OS X, and .so otherwise but copy all parts\r
+ install:\r
+-      $(mkinstalldirs) $(DESTDIR)$(includedir) $(DESTDIR)$(libdir); \\r
+-    cp -fpR include/* $(DESTDIR)$(includedir); \\r
+-    cp -fpR ctaocrypt/include/* $(DESTDIR)$(includedir); \\r
+-    cp -fpR src/libcyassl.la $(DESTDIR)$(libdir); \\r
+-    if test -e src/.libs/libcyassl.a; then \\r
+-    cp -fp src/.libs/libcyassl.a $(DESTDIR)$(libdir); fi; \\r
+-    if test -e src/.libs/libcyassl.so; then \\r
+-    cp -fpR src/.libs/libcyassl.so* $(DESTDIR)$(libdir); fi; \\r
+-    if test -e src/.libs/libcyassl.dylib; then \\r
+-    cp -fpR src/.libs/libcyassl.*dylib $(DESTDIR)$(libdir); fi;\r
++      $(mkinstalldirs) $(DESTDIR)$(includedir)/cyassl $(DESTDIR)$(libdir); \\r
++      cp -fpR include/* $(DESTDIR)$(includedir)/cyassl; \\r
++      cp -fpR ctaocrypt/include/* $(DESTDIR)$(includedir)/cyassl; \\r
++      cp -fpR src/libcyassl.la $(DESTDIR)$(libdir); \\r
++      if test -e src/.libs/libcyassl.a; then \\r
++              cp -fp src/.libs/libcyassl.a $(DESTDIR)$(libdir); fi; \\r
++      if test -e src/.libs/libcyassl.so; then \\r
++              cp -fpR src/.libs/libcyassl.so* $(DESTDIR)$(libdir); fi; \\r
++      if test -e src/.libs/libcyassl.dylib; then \\r
++              cp -fpR src/.libs/libcyassl.*dylib $(DESTDIR)$(libdir); fi;\r
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -647,22 +647,22 @@ basic:
+ openssl-links:
+       cd lib; ln -s ../src/.libs/libcyassl.a libcrypto.a; \
+-    ln -s ../src/.libs/libcyassl.a libssl.a; \
+-    ln -s ../src/.libs/libcyassl.a libcyassl.a; cd ../
++      ln -s ../src/.libs/libcyassl.a libssl.a; \
++      ln -s ../src/.libs/libcyassl.a libcyassl.a; cd ../
+ #  !!! test -e with a .name like .libs then a * like *dylib fails so just
+ #      look for the .dylib on OS X, and .so otherwise but copy all parts
+ install:
+-      $(mkinstalldirs) $(DESTDIR)$(includedir) $(DESTDIR)$(libdir); \
+-    cp -fpR include/* $(DESTDIR)$(includedir); \
+-    cp -fpR ctaocrypt/include/* $(DESTDIR)$(includedir); \
+-    cp -fpR src/libcyassl.la $(DESTDIR)$(libdir); \
+-    if test -e src/.libs/libcyassl.a; then \
+-    cp -fp src/.libs/libcyassl.a $(DESTDIR)$(libdir); fi; \
+-    if test -e src/.libs/libcyassl.so; then \
+-    cp -fpR src/.libs/libcyassl.so* $(DESTDIR)$(libdir); fi; \
+-    if test -e src/.libs/libcyassl.dylib; then \
+-    cp -fpR src/.libs/libcyassl.*dylib $(DESTDIR)$(libdir); fi;
++      $(mkinstalldirs) $(DESTDIR)$(includedir)/cyassl $(DESTDIR)$(libdir); \
++      cp -fpR include/* $(DESTDIR)$(includedir)/cyassl; \
++      cp -fpR ctaocrypt/include/* $(DESTDIR)$(includedir)/cyassl; \
++      cp -fpR src/libcyassl.la $(DESTDIR)$(libdir); \
++      if test -e src/.libs/libcyassl.a; then \
++              cp -fp src/.libs/libcyassl.a $(DESTDIR)$(libdir); fi; \
++      if test -e src/.libs/libcyassl.so; then \
++              cp -fpR src/.libs/libcyassl.so* $(DESTDIR)$(libdir); fi; \
++      if test -e src/.libs/libcyassl.dylib; then \
++              cp -fpR src/.libs/libcyassl.*dylib $(DESTDIR)$(libdir); fi;
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
diff --git a/package/libs/cyassl/patches/130-configure_disable_pthreads_tests.patch b/package/libs/cyassl/patches/130-configure_disable_pthreads_tests.patch
new file mode 100644 (file)
index 0000000..44fdf6c
--- /dev/null
@@ -0,0 +1,444 @@
+--- a/configure
++++ b/configure
+@@ -888,10 +888,6 @@ BUILD_RIPEMD_TRUE
+ BUILD_RIPEMD_FALSE
+ BUILD_SHA512_TRUE
+ BUILD_SHA512_FALSE
+-acx_pthread_config
+-PTHREAD_CC
+-PTHREAD_LIBS
+-PTHREAD_CFLAGS
+ LIBOBJS
+ LTLIBOBJS'
+ ac_subst_files=''
+@@ -22251,430 +22247,6 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS con
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+-acx_pthread_ok=no
+-
+-# We used to check for pthread.h first, but this fails if pthread.h
+-# requires special compiler flags (e.g. on True64 or Sequent).
+-# It gets checked for in the link test anyway.
+-
+-# First of all, check if the user has set any of the PTHREAD_LIBS,
+-# etcetera environment variables, and if threads linking works using
+-# them:
+-if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
+-        save_CFLAGS="$CFLAGS"
+-        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+-        save_LIBS="$LIBS"
+-        LIBS="$PTHREAD_LIBS $LIBS"
+-        { echo "$as_me:$LINENO: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5
+-echo $ECHO_N "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... $ECHO_C" >&6; }
+-        cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h.  */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h.  */
+-
+-/* Override any GCC internal prototype to avoid an error.
+-   Use char because int might match the return type of a GCC
+-   builtin and then its argument prototype would still apply.  */
+-#ifdef __cplusplus
+-extern "C"
+-#endif
+-char pthread_join ();
+-int
+-main ()
+-{
+-return pthread_join ();
+-  ;
+-  return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+-  *) ac_try_echo=$ac_try;;
+-esac
+-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+-  (eval "$ac_link") 2>conftest.er1
+-  ac_status=$?
+-  grep -v '^ *+' conftest.er1 >conftest.err
+-  rm -f conftest.er1
+-  cat conftest.err >&5
+-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+-  (exit $ac_status); } && {
+-       test -z "$ac_c_werror_flag" ||
+-       test ! -s conftest.err
+-       } && test -s conftest$ac_exeext &&
+-       $as_test_x conftest$ac_exeext; then
+-  acx_pthread_ok=yes
+-else
+-  echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+-      conftest$ac_exeext conftest.$ac_ext
+-        { echo "$as_me:$LINENO: result: $acx_pthread_ok" >&5
+-echo "${ECHO_T}$acx_pthread_ok" >&6; }
+-        if test x"$acx_pthread_ok" = xno; then
+-                PTHREAD_LIBS=""
+-                PTHREAD_CFLAGS=""
+-        fi
+-        LIBS="$save_LIBS"
+-        CFLAGS="$save_CFLAGS"
+-fi
+-
+-# We must check for the threads library under a number of different
+-# names; the ordering is very important because some systems
+-# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
+-# libraries is broken (non-POSIX).
+-
+-# Create a list of thread flags to try.  Items starting with a "-" are
+-# C compiler flags, and other items are library names, except for "none"
+-# which indicates that we try without any flags at all, and "pthread-config"
+-# which is a program returning the flags for the Pth emulation library.
+-
+-acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
+-
+-# The ordering *is* (sometimes) important.  Some notes on the
+-# individual items follow:
+-
+-# pthreads: AIX (must check this before -lpthread)
+-# none: in case threads are in libc; should be tried before -Kthread and
+-#       other compiler flags to prevent continual compiler warnings
+-# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
+-# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
+-# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
+-# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
+-# -pthreads: Solaris/gcc
+-# -mthreads: Mingw32/gcc, Lynx/gcc
+-# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
+-#      doesn't hurt to check since this sometimes defines pthreads too;
+-#      also defines -D_REENTRANT)
+-#      ... -mt is also the pthreads flag for HP/aCC
+-# pthread: Linux, etcetera
+-# --thread-safe: KAI C++
+-# pthread-config: use pthread-config program (for GNU Pth library)
+-
+-case "${host_cpu}-${host_os}" in
+-        *solaris*)
+-
+-        # On Solaris (at least, for some versions), libc contains stubbed
+-        # (non-functional) versions of the pthreads routines, so link-based
+-        # tests will erroneously succeed.  (We need to link with -pthreads/-mt/
+-        # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather
+-        # a function called by this macro, so we could check for that, but
+-        # who knows whether they'll stub that too in a future libc.)  So,
+-        # we'll just look for -pthreads and -lpthread first:
+-
+-        acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags"
+-        ;;
+-esac
+-
+-if test x"$acx_pthread_ok" = xno; then
+-for flag in $acx_pthread_flags; do
+-
+-        case $flag in
+-                none)
+-                { echo "$as_me:$LINENO: checking whether pthreads work without any flags" >&5
+-echo $ECHO_N "checking whether pthreads work without any flags... $ECHO_C" >&6; }
+-                ;;
+-
+-                -*)
+-                { echo "$as_me:$LINENO: checking whether pthreads work with $flag" >&5
+-echo $ECHO_N "checking whether pthreads work with $flag... $ECHO_C" >&6; }
+-                PTHREAD_CFLAGS="$flag"
+-                ;;
+-
+-              pthread-config)
+-              # Extract the first word of "pthread-config", so it can be a program name with args.
+-set dummy pthread-config; ac_word=$2
+-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+-if test "${ac_cv_prog_acx_pthread_config+set}" = set; then
+-  echo $ECHO_N "(cached) $ECHO_C" >&6
+-else
+-  if test -n "$acx_pthread_config"; then
+-  ac_cv_prog_acx_pthread_config="$acx_pthread_config" # Let the user override the test.
+-else
+-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH
+-do
+-  IFS=$as_save_IFS
+-  test -z "$as_dir" && as_dir=.
+-  for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+-    ac_cv_prog_acx_pthread_config="yes"
+-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+-    break 2
+-  fi
+-done
+-done
+-IFS=$as_save_IFS
+-
+-  test -z "$ac_cv_prog_acx_pthread_config" && ac_cv_prog_acx_pthread_config="no"
+-fi
+-fi
+-acx_pthread_config=$ac_cv_prog_acx_pthread_config
+-if test -n "$acx_pthread_config"; then
+-  { echo "$as_me:$LINENO: result: $acx_pthread_config" >&5
+-echo "${ECHO_T}$acx_pthread_config" >&6; }
+-else
+-  { echo "$as_me:$LINENO: result: no" >&5
+-echo "${ECHO_T}no" >&6; }
+-fi
+-
+-
+-              if test x"$acx_pthread_config" = xno; then continue; fi
+-              PTHREAD_CFLAGS="`pthread-config --cflags`"
+-              PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
+-              ;;
+-
+-                *)
+-                { echo "$as_me:$LINENO: checking for the pthreads library -l$flag" >&5
+-echo $ECHO_N "checking for the pthreads library -l$flag... $ECHO_C" >&6; }
+-                PTHREAD_LIBS="-l$flag"
+-                ;;
+-        esac
+-
+-        save_LIBS="$LIBS"
+-        save_CFLAGS="$CFLAGS"
+-        LIBS="$PTHREAD_LIBS $LIBS"
+-        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+-
+-        # Check for various functions.  We must include pthread.h,
+-        # since some functions may be macros.  (On the Sequent, we
+-        # need a special flag -Kthread to make this header compile.)
+-        # We check for pthread_join because it is in -lpthread on IRIX
+-        # while pthread_create is in libc.  We check for pthread_attr_init
+-        # due to DEC craziness with -lpthreads.  We check for
+-        # pthread_cleanup_push because it is one of the few pthread
+-        # functions on Solaris that doesn't have a non-functional libc stub.
+-        # We try pthread_create on general principles.
+-        cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h.  */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h.  */
+-#include <pthread.h>
+-int
+-main ()
+-{
+-pthread_t th; pthread_join(th, 0);
+-                     pthread_attr_init(0); pthread_cleanup_push(0, 0);
+-                     pthread_create(0,0,0,0); pthread_cleanup_pop(0);
+-  ;
+-  return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+-  *) ac_try_echo=$ac_try;;
+-esac
+-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+-  (eval "$ac_link") 2>conftest.er1
+-  ac_status=$?
+-  grep -v '^ *+' conftest.er1 >conftest.err
+-  rm -f conftest.er1
+-  cat conftest.err >&5
+-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+-  (exit $ac_status); } && {
+-       test -z "$ac_c_werror_flag" ||
+-       test ! -s conftest.err
+-       } && test -s conftest$ac_exeext &&
+-       $as_test_x conftest$ac_exeext; then
+-  acx_pthread_ok=yes
+-else
+-  echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+-      conftest$ac_exeext conftest.$ac_ext
+-
+-        LIBS="$save_LIBS"
+-        CFLAGS="$save_CFLAGS"
+-
+-        { echo "$as_me:$LINENO: result: $acx_pthread_ok" >&5
+-echo "${ECHO_T}$acx_pthread_ok" >&6; }
+-        if test "x$acx_pthread_ok" = xyes; then
+-                break;
+-        fi
+-
+-        PTHREAD_LIBS=""
+-        PTHREAD_CFLAGS=""
+-done
+-fi
+-
+-# Various other checks:
+-if test "x$acx_pthread_ok" = xyes; then
+-        save_LIBS="$LIBS"
+-        LIBS="$PTHREAD_LIBS $LIBS"
+-        save_CFLAGS="$CFLAGS"
+-        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+-
+-        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
+-      { echo "$as_me:$LINENO: checking for joinable pthread attribute" >&5
+-echo $ECHO_N "checking for joinable pthread attribute... $ECHO_C" >&6; }
+-      attr_name=unknown
+-      for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
+-          cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h.  */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h.  */
+-#include <pthread.h>
+-int
+-main ()
+-{
+-int attr=$attr; return attr;
+-  ;
+-  return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (ac_try="$ac_link"
+-case "(($ac_try" in
+-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+-  *) ac_try_echo=$ac_try;;
+-esac
+-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+-  (eval "$ac_link") 2>conftest.er1
+-  ac_status=$?
+-  grep -v '^ *+' conftest.er1 >conftest.err
+-  rm -f conftest.er1
+-  cat conftest.err >&5
+-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+-  (exit $ac_status); } && {
+-       test -z "$ac_c_werror_flag" ||
+-       test ! -s conftest.err
+-       } && test -s conftest$ac_exeext &&
+-       $as_test_x conftest$ac_exeext; then
+-  attr_name=$attr; break
+-else
+-  echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-
+-fi
+-
+-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+-      conftest$ac_exeext conftest.$ac_ext
+-      done
+-        { echo "$as_me:$LINENO: result: $attr_name" >&5
+-echo "${ECHO_T}$attr_name" >&6; }
+-        if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
+-
+-cat >>confdefs.h <<_ACEOF
+-#define PTHREAD_CREATE_JOINABLE $attr_name
+-_ACEOF
+-
+-        fi
+-
+-        { echo "$as_me:$LINENO: checking if more special flags are required for pthreads" >&5
+-echo $ECHO_N "checking if more special flags are required for pthreads... $ECHO_C" >&6; }
+-        flag=no
+-        case "${host_cpu}-${host_os}" in
+-            *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
+-            *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
+-        esac
+-        { echo "$as_me:$LINENO: result: ${flag}" >&5
+-echo "${ECHO_T}${flag}" >&6; }
+-        if test "x$flag" != xno; then
+-            PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
+-        fi
+-
+-        LIBS="$save_LIBS"
+-        CFLAGS="$save_CFLAGS"
+-
+-        # More AIX lossage: must compile with xlc_r or cc_r
+-      if test x"$GCC" != xyes; then
+-          for ac_prog in xlc_r cc_r
+-do
+-  # Extract the first word of "$ac_prog", so it can be a program name with args.
+-set dummy $ac_prog; ac_word=$2
+-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+-if test "${ac_cv_prog_PTHREAD_CC+set}" = set; then
+-  echo $ECHO_N "(cached) $ECHO_C" >&6
+-else
+-  if test -n "$PTHREAD_CC"; then
+-  ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test.
+-else
+-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH
+-do
+-  IFS=$as_save_IFS
+-  test -z "$as_dir" && as_dir=.
+-  for ac_exec_ext in '' $ac_executable_extensions; do
+-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+-    ac_cv_prog_PTHREAD_CC="$ac_prog"
+-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+-    break 2
+-  fi
+-done
+-done
+-IFS=$as_save_IFS
+-
+-fi
+-fi
+-PTHREAD_CC=$ac_cv_prog_PTHREAD_CC
+-if test -n "$PTHREAD_CC"; then
+-  { echo "$as_me:$LINENO: result: $PTHREAD_CC" >&5
+-echo "${ECHO_T}$PTHREAD_CC" >&6; }
+-else
+-  { echo "$as_me:$LINENO: result: no" >&5
+-echo "${ECHO_T}no" >&6; }
+-fi
+-
+-
+-  test -n "$PTHREAD_CC" && break
+-done
+-test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}"
+-
+-        else
+-          PTHREAD_CC=$CC
+-      fi
+-else
+-        PTHREAD_CC="$CC"
+-fi
+-
+-
+-
+-
+-
+-# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+-if test x"$acx_pthread_ok" = xyes; then
+-
+-cat >>confdefs.h <<\_ACEOF
+-#define HAVE_PTHREAD 1
+-_ACEOF
+-
+-        :
+-else
+-        acx_pthread_ok=no
+-
+-fi
+-ac_ext=c
+-ac_cpp='$CPP $CPPFLAGS'
+-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+-
+-
+-
+-LIBS="$PTHREAD_LIBS $LIBS"
+-CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+-
+       { echo "$as_me:$LINENO: checking for library containing gethostbyname" >&5
+ echo $ECHO_N "checking for library containing gethostbyname... $ECHO_C" >&6; }
diff --git a/package/libs/libbsd/Makefile b/package/libs/libbsd/Makefile
new file mode 100644 (file)
index 0000000..4fef04a
--- /dev/null
@@ -0,0 +1,54 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=libbsd
+PKG_VERSION:=0.3.0
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=http://libbsd.freedesktop.org/releases
+#PKG_MD5SUM:=d0870f2de55d59c1c8419f36e8fac150
+
+include $(INCLUDE_DIR)/package.mk
+
+PKG_INSTALL:=1
+
+define Package/libbsd
+  SECTION:=libs
+  CATEGORY:=Libraries
+  DEPENDS:=@!USE_UCLIBC
+  TITLE:=common BSD library
+endef
+
+define Package/libbsd/description
+ This library provides useful functions commonly found on BSD systems, and lacking on others like GNU systems, thus making it easier to port projects with strong BSD origins, without needing to embed the same code over and over again on each project.
+endef
+
+define Build/InstallDev
+       $(INSTALL_DIR) \
+               $(1)/lib \
+               $(1)/usr/include
+
+       $(CP) \
+               $(PKG_INSTALL_DIR)/lib/libbsd.so* \
+               $(1)/lib/
+
+       $(CP) \
+               $(PKG_INSTALL_DIR)/usr/include/* \
+               $(1)/usr/include/
+
+       ( cd $(1)/lib ; ln -s libbsd.so.$(PKG_VERSION) libbsd.so )
+endef
+
+define Package/libbsd/install
+       $(INSTALL_DIR) \
+               $(1)/lib
+
+       $(CP) \
+               $(PKG_INSTALL_DIR)/lib/libbsd.so* \
+               $(1)/lib/
+
+       ( cd $(1)/lib ; ln -s libbsd.so.$(PKG_VERSION) libbsd.so )
+endef
+
+$(eval $(call BuildPackage,libbsd))
+
diff --git a/package/libs/libjson-c/Makefile b/package/libs/libjson-c/Makefile
new file mode 100644 (file)
index 0000000..afd409b
--- /dev/null
@@ -0,0 +1,50 @@
+#
+# Copyright (C) 2006-2010 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=json-c
+PKG_VERSION:=0.9
+PKG_RELEASE:=2
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=http://oss.metaparadigm.com/json-c/
+PKG_MD5SUM:=3a13d264528dcbaf3931b0cede24abae
+
+PKG_FIXUP:=autoreconf
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+TARGET_CFLAGS += $(FPIC)
+
+define Package/libjson
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=javascript object notation
+  URL:=http://oss.metaparadigm.com/json-c/
+endef
+
+define Package/libjson/description
+ This package contains a library for javascript object notation backends.
+endef
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/json $(1)/usr/include/
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libjson.{a,so*} $(1)/usr/lib/
+       $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/json.pc $(1)/usr/lib/pkgconfig/
+endef
+
+define Package/libjson/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libjson.so.* $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,libjson))
diff --git a/package/libs/libnl-tiny/Makefile b/package/libs/libnl-tiny/Makefile
new file mode 100644 (file)
index 0000000..37ac26f
--- /dev/null
@@ -0,0 +1,52 @@
+#
+# Copyright (C) 2006-2012 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=libnl-tiny
+PKG_VERSION:=0.1
+PKG_RELEASE:=3
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/libnl-tiny
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=netlink socket library
+endef
+
+define Package/libnl-tiny/description
+ This package contains a stripped down version of libnl
+endef
+
+define Build/Prepare
+       mkdir -p $(PKG_BUILD_DIR)
+       $(CP) ./src/* $(PKG_BUILD_DIR)/
+endef
+
+TARGET_CFLAGS += $(FPIC)
+
+define Build/Compile
+       $(MAKE) -C $(PKG_BUILD_DIR) \
+               $(TARGET_CONFIGURE_OPTS) \
+               CFLAGS="$(TARGET_CFLAGS)" \
+               all
+endef
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/lib/pkgconfig $(1)/usr/include/libnl-tiny
+       $(CP) $(PKG_BUILD_DIR)/include/* $(1)/usr/include/libnl-tiny
+       $(CP) $(PKG_BUILD_DIR)/libnl-tiny.so $(1)/usr/lib/
+       $(CP) ./files/libnl-tiny.pc $(1)/usr/lib/pkgconfig
+endef
+
+define Package/libnl-tiny/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_BUILD_DIR)/libnl-tiny.so $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,libnl-tiny))
diff --git a/package/libs/libnl-tiny/files/libnl-tiny.pc b/package/libs/libnl-tiny/files/libnl-tiny.pc
new file mode 100644 (file)
index 0000000..8c1bf6f
--- /dev/null
@@ -0,0 +1,10 @@
+prefix=/usr
+exec_prefix=/usr
+libdir=${exec_prefix}/lib
+includedir=${prefix}/include/libnl-tiny
+
+Name: libnl-tiny
+Description: Convenience library for netlink sockets
+Version: 2.0
+Libs: -L${libdir} -lnl-tiny
+Cflags:
diff --git a/package/libs/libnl-tiny/src/Makefile b/package/libs/libnl-tiny/src/Makefile
new file mode 100644 (file)
index 0000000..f6f90ec
--- /dev/null
@@ -0,0 +1,17 @@
+CC=gcc
+WFLAGS=-Wall
+CFLAGS=-O2
+INCLUDES=-Iinclude
+
+LIBNAME=libnl-tiny.so
+
+all: $(LIBNAME)
+
+%.o: %.c
+       $(CC) $(WFLAGS) -c -o $@ $(INCLUDES) $(CFLAGS) $<
+
+LIBNL_OBJ=nl.o handlers.o msg.o attr.o cache.o cache_mngt.o object.o socket.o error.o
+GENL_OBJ=genl.o genl_family.o genl_ctrl.o genl_mngt.o unl.o
+
+$(LIBNAME): $(LIBNL_OBJ) $(GENL_OBJ)
+       $(CC) -shared -o $@ $^
diff --git a/package/libs/libnl-tiny/src/attr.c b/package/libs/libnl-tiny/src/attr.c
new file mode 100644 (file)
index 0000000..e0f5061
--- /dev/null
@@ -0,0 +1,668 @@
+/*
+ * lib/attr.c          Netlink Attributes
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
+ */
+
+#include <netlink-local.h>
+#include <netlink/netlink.h>
+#include <netlink/utils.h>
+#include <netlink/addr.h>
+#include <netlink/attr.h>
+#include <netlink/msg.h>
+#include <linux/socket.h>
+
+/**
+ * @ingroup msg
+ * @defgroup attr Attributes
+ * Netlink Attributes Construction/Parsing Interface
+ *
+ * \section attr_sec Netlink Attributes
+ * Netlink attributes allow for data chunks of arbitary length to be
+ * attached to a netlink message. Each attribute is encoded with a
+ * type and length field, both 16 bits, stored in the attribute header
+ * preceding the attribute data. The main advantage of using attributes
+ * over packing everything into the family header is that the interface
+ * stays extendable as new attributes can supersede old attributes while
+ * remaining backwards compatible. Also attributes can be defined optional
+ * thus avoiding the transmission of unnecessary empty data blocks.
+ * Special nested attributes allow for more complex data structures to
+ * be transmitted, e.g. trees, lists, etc.
+ *
+ * While not required, netlink attributes typically follow the family
+ * header of a netlink message and must be properly aligned to NLA_ALIGNTO:
+ * @code
+ *   +----------------+- - -+---------------+- - -+------------+- - -+
+ *   | Netlink Header | Pad | Family Header | Pad | Attributes | Pad |
+ *   +----------------+- - -+---------------+- - -+------------+- - -+
+ * @endcode
+ *
+ * The actual attributes are chained together each separately aligned to
+ * NLA_ALIGNTO. The position of an attribute is defined based on the
+ * length field of the preceding attributes:
+ * @code
+ *   +-------------+- - -+-------------+- - -+------
+ *   | Attribute 1 | Pad | Attribute 2 | Pad | ...
+ *   +-------------+- - -+-------------+- - -+------
+ *   nla_next(attr1)------^
+ * @endcode
+ *
+ * The attribute itself consists of the attribute header followed by
+ * the actual payload also aligned to NLA_ALIGNTO. The function nla_data()
+ * returns a pointer to the start of the payload while nla_len() returns
+ * the length of the payload in bytes.
+ *
+ * \b Note: Be aware, NLA_ALIGNTO equals to 4 bytes, therefore it is not
+ * safe to dereference any 64 bit data types directly.
+ *
+ * @code
+ *    <----------- nla_total_size(payload) ----------->
+ *    <-------- nla_attr_size(payload) --------->
+ *   +------------------+- - -+- - - - - - - - - +- - -+
+ *   | Attribute Header | Pad |     Payload      | Pad |
+ *   +------------------+- - -+- - - - - - - - - +- - -+
+ *   nla_data(nla)-------------^
+ *                             <- nla_len(nla) ->
+ * @endcode
+ *
+ * @subsection attr_datatypes Attribute Data Types
+ * A number of basic data types are supported to simplify access and
+ * validation of netlink attributes. This data type information is
+ * not encoded in the attribute, both the kernel and userspace part
+ * are required to share this information on their own.
+ *
+ * One of the major advantages of these basic types is the automatic
+ * validation of each attribute based on an attribute policy. The
+ * validation covers most of the checks required to safely use
+ * attributes and thus keeps the individual sanity check to a minimum.
+ *
+ * Never access attribute payload without ensuring basic validation
+ * first, attributes may:
+ * - not be present even though required
+ * - contain less actual payload than expected
+ * - fake a attribute length which exceeds the end of the message
+ * - contain unterminated character strings
+ *
+ * Policies are defined as array of the struct nla_policy. The array is
+ * indexed with the attribute type, therefore the array must be sized
+ * accordingly.
+ * @code
+ * static struct nla_policy my_policy[ATTR_MAX+1] = {
+ *     [ATTR_FOO] = { .type = ..., .minlen = ..., .maxlen = ... },
+ * };
+ *
+ * err = nla_validate(attrs, attrlen, ATTR_MAX, &my_policy);
+ * @endcode
+ *
+ * Some basic validations are performed on every attribute, regardless of type.
+ * - If the attribute type exceeds the maximum attribute type specified or
+ *   the attribute type is lesser-or-equal than zero, the attribute will
+ *   be silently ignored.
+ * - If the payload length falls below the \a minlen value the attribute
+ *   will be rejected.
+ * - If \a maxlen is non-zero and the payload length exceeds the \a maxlen
+ *   value the attribute will be rejected.
+ *
+ *
+ * @par Unspecific Attribute (NLA_UNSPEC)
+ * This is the standard type if no type is specified. It is used for
+ * binary data of arbitary length. Typically this attribute carries
+ * a binary structure or a stream of bytes.
+ * @par
+ * @code
+ * // In this example, we will assume a binary structure requires to
+ * // be transmitted. The definition of the structure will typically
+ * // go into a header file available to both the kernel and userspace
+ * // side.
+ * //
+ * // Note: Be careful when putting 64 bit data types into a structure.
+ * // The attribute payload is only aligned to 4 bytes, dereferencing
+ * // the member may fail.
+ * struct my_struct {
+ *     int a;
+ *     int b;
+ * };
+ *
+ * // The validation function will not enforce an exact length match to
+ * // allow structures to grow as required. Note: While it is allowed
+ * // to add members to the end of the structure, changing the order or
+ * // inserting members in the middle of the structure will break your
+ * // binary interface.
+ * static struct nla_policy my_policy[ATTR_MAX+1] = {
+ *     [ATTR_MY_STRICT] = { .type = NLA_UNSPEC,
+ *                          .minlen = sizeof(struct my_struct) },
+ *
+ * // The binary structure is appened to the message using nla_put()
+ * struct my_struct foo = { .a = 1, .b = 2 };
+ * nla_put(msg, ATTR_MY_STRUCT, sizeof(foo), &foo);
+ *
+ * // On the receiving side, a pointer to the structure pointing inside
+ * // the message payload is returned by nla_get().
+ * if (attrs[ATTR_MY_STRUCT])
+ *     struct my_struct *foo = nla_get(attrs[ATTR_MY_STRUCT]);
+ * @endcode
+ *
+ * @par Integers (NLA_U8, NLA_U16, NLA_U32, NLA_U64)
+ * Integers come in different sizes from 8 bit to 64 bit. However, since the
+ * payload length is aligned to 4 bytes, integers smaller than 32 bit are
+ * only useful to enforce the maximum range of values.
+ * @par
+ * \b Note: There is no difference made between signed and unsigned integers.
+ * The validation only enforces the minimal payload length required to store
+ * an integer of specified type.
+ * @par
+ * @code
+ * // Even though possible, it does not make sense to specify .minlen or
+ * // .maxlen for integer types. The data types implies the corresponding
+ * // minimal payload length.
+ * static struct nla_policy my_policy[ATTR_MAX+1] = {
+ *     [ATTR_FOO] = { .type = NLA_U32 },
+ *
+ * // Numeric values can be appended directly using the respective
+ * // nla_put_uxxx() function
+ * nla_put_u32(msg, ATTR_FOO, 123);
+ *
+ * // Same for the receiving side.
+ * if (attrs[ATTR_FOO])
+ *     uint32_t foo = nla_get_u32(attrs[ATTR_FOO]);
+ * @endcode
+ *
+ * @par Character string (NLA_STRING)
+ * This data type represents a NUL terminated character string of variable
+ * length. For binary data streams the type NLA_UNSPEC is recommended.
+ * @par
+ * @code
+ * // Enforce a NUL terminated character string of at most 4 characters
+ * // including the NUL termination.
+ * static struct nla_policy my_policy[ATTR_MAX+1] = {
+ *     [ATTR_BAR] = { .type = NLA_STRING, maxlen = 4 },
+ *
+ * // nla_put_string() creates a string attribute of the necessary length
+ * // and appends it to the message including the NUL termination.
+ * nla_put_string(msg, ATTR_BAR, "some text");
+ *
+ * // It is safe to use the returned character string directly if the
+ * // attribute has been validated as the validation enforces the proper
+ * // termination of the string.
+ * if (attrs[ATTR_BAR])
+ *     char *text = nla_get_string(attrs[ATTR_BAR]);
+ * @endcode
+ *
+ * @par Flag (NLA_FLAG)
+ * This attribute type may be used to indicate the presence of a flag. The
+ * attribute is only valid if the payload length is zero. The presence of
+ * the attribute header indicates the presence of the flag.
+ * @par
+ * @code
+ * // This attribute type is special as .minlen and .maxlen have no effect.
+ * static struct nla_policy my_policy[ATTR_MAX+1] = {
+ *     [ATTR_FLAG] = { .type = NLA_FLAG },
+ *
+ * // nla_put_flag() appends a zero sized attribute to the message.
+ * nla_put_flag(msg, ATTR_FLAG);
+ *
+ * // There is no need for a receival function, the presence is the value.
+ * if (attrs[ATTR_FLAG])
+ *     // flag is present
+ * @endcode
+ *
+ * @par Micro Seconds (NLA_MSECS)
+ *
+ * @par Nested Attribute (NLA_NESTED)
+ * Attributes can be nested and put into a container to create groups, lists
+ * or to construct trees of attributes. Nested attributes are often used to
+ * pass attributes to a subsystem where the top layer has no knowledge of the
+ * configuration possibilities of each subsystem.
+ * @par
+ * \b Note: When validating the attributes using nlmsg_validate() or
+ * nlmsg_parse() it will only affect the top level attributes. Each
+ * level of nested attributes must be validated seperately using
+ * nla_parse_nested() or nla_validate().
+ * @par
+ * @code
+ * // The minimal length policy may be used to enforce the presence of at
+ * // least one attribute.
+ * static struct nla_policy my_policy[ATTR_MAX+1] = {
+ *     [ATTR_OPTS] = { .type = NLA_NESTED, minlen = NLA_HDRLEN },
+ *
+ * // Nested attributes are constructed by enclosing the attributes
+ * // to be nested with calls to nla_nest_start() respetively nla_nest_end().
+ * struct nlattr *opts = nla_nest_start(msg, ATTR_OPTS);
+ * nla_put_u32(msg, ATTR_FOO, 123);
+ * nla_put_string(msg, ATTR_BAR, "some text");
+ * nla_nest_end(msg, opts);
+ *
+ * // Various methods exist to parse nested attributes, the easiest being
+ * // nla_parse_nested() which also allows validation in the same step.
+ * if (attrs[ATTR_OPTS]) {
+ *     struct nlattr *nested[ATTR_MAX+1];
+ *
+ *     nla_parse_nested(nested, ATTR_MAX, attrs[ATTR_OPTS], &policy);
+ *
+ *     if (nested[ATTR_FOO])
+ *         uint32_t foo = nla_get_u32(nested[ATTR_FOO]);
+ * }
+ * @endcode
+ *
+ * @subsection attr_exceptions Exception Based Attribute Construction
+ * Often a large number of attributes are added to a message in a single
+ * function. In order to simplify error handling, a second set of
+ * construction functions exist which jump to a error label when they
+ * fail instead of returning an error code. This second set consists
+ * of macros which are named after their error code based counterpart
+ * except that the name is written all uppercase.
+ *
+ * All of the macros jump to the target \c nla_put_failure if they fail.
+ * @code
+ * void my_func(struct nl_msg *msg)
+ * {
+ *     NLA_PUT_U32(msg, ATTR_FOO, 10);
+ *     NLA_PUT_STRING(msg, ATTR_BAR, "bar");
+ *
+ *     return 0;
+ *
+ * nla_put_failure:
+ *     return -NLE_NOMEM;
+ * }
+ * @endcode
+ *
+ * @subsection attr_examples Examples
+ * @par Example 1.1 Constructing a netlink message with attributes.
+ * @code
+ * struct nl_msg *build_msg(int ifindex, struct nl_addr *lladdr, int mtu)
+ * {
+ *     struct nl_msg *msg;
+ *     struct nlattr *info, *vlan;
+ *     struct ifinfomsg ifi = {
+ *         .ifi_family = AF_INET,
+ *         .ifi_index = ifindex,
+ *     };
+ *
+ *     // Allocate a new netlink message, type=RTM_SETLINK, flags=NLM_F_ECHO
+ *     if (!(msg = nlmsg_alloc_simple(RTM_SETLINK, NLM_F_ECHO)))
+ *         return NULL;
+ *
+ *     // Append the family specific header (struct ifinfomsg)
+ *     if (nlmsg_append(msg, &ifi, sizeof(ifi), NLMSG_ALIGNTO) < 0)
+ *         goto nla_put_failure
+ *
+ *     // Append a 32 bit integer attribute to carry the MTU
+ *     NLA_PUT_U32(msg, IFLA_MTU, mtu);
+ *
+ *     // Append a unspecific attribute to carry the link layer address
+ *     NLA_PUT_ADDR(msg, IFLA_ADDRESS, lladdr);
+ *
+ *     // Append a container for nested attributes to carry link information
+ *     if (!(info = nla_nest_start(msg, IFLA_LINKINFO)))
+ *         goto nla_put_failure;
+ *
+ *     // Put a string attribute into the container
+ *     NLA_PUT_STRING(msg, IFLA_INFO_KIND, "vlan");
+ *
+ *     // Append another container inside the open container to carry
+ *     // vlan specific attributes
+ *     if (!(vlan = nla_nest_start(msg, IFLA_INFO_DATA)))
+ *         goto nla_put_failure;
+ *
+ *     // add vlan specific info attributes here...
+ *
+ *     // Finish nesting the vlan attributes and close the second container.
+ *     nla_nest_end(msg, vlan);
+ *
+ *     // Finish nesting the link info attribute and close the first container.
+ *     nla_nest_end(msg, info);
+ *
+ *     return msg;
+ *
+ * // If any of the construction macros fails, we end up here.
+ * nla_put_failure:
+ *     nlmsg_free(msg);
+ *     return NULL;
+ * }
+ * @endcode
+ *
+ * @par Example 2.1 Parsing a netlink message with attributes.
+ * @code
+ * int parse_message(struct nl_msg *msg)
+ * {
+ *     // The policy defines two attributes: a 32 bit integer and a container
+ *     // for nested attributes.
+ *     struct nla_policy attr_policy[ATTR_MAX+1] = {
+ *         [ATTR_FOO] = { .type = NLA_U32 },
+ *         [ATTR_BAR] = { .type = NLA_NESTED },
+ *     };
+ *     struct nlattr *attrs[ATTR_MAX+1];
+ *     int err;
+ *
+ *     // The nlmsg_parse() function will make sure that the message contains
+ *     // enough payload to hold the header (struct my_hdr), validates any
+ *     // attributes attached to the messages and stores a pointer to each
+ *     // attribute in the attrs[] array accessable by attribute type.
+ *     if ((err = nlmsg_parse(nlmsg_hdr(msg), sizeof(struct my_hdr), attrs,
+ *                            ATTR_MAX, attr_policy)) < 0)
+ *         goto errout;
+ *
+ *     if (attrs[ATTR_FOO]) {
+ *         // It is safe to directly access the attribute payload without
+ *         // any further checks since nlmsg_parse() enforced the policy.
+ *         uint32_t foo = nla_get_u32(attrs[ATTR_FOO]);
+ *     }
+ *
+ *     if (attrs[ATTR_BAR]) {
+ *         struct nlattr *nested[NESTED_MAX+1];
+ *
+ *         // Attributes nested in a container can be parsed the same way
+ *         // as top level attributes.
+ *         if ((err = nla_parse_nested(nested, NESTED_MAX, attrs[ATTR_BAR],
+ *                                     nested_policy)) < 0)
+ *             goto errout;
+ *
+ *         // Process nested attributes here.
+ *     }
+ *
+ *     err = 0;
+ * errout:
+ *     return err;
+ * }
+ * @endcode
+ *
+ * @{
+ */
+
+/**
+ * @name Attribute Size Calculation
+ * @{
+ */
+
+/** @} */
+
+/**
+ * @name Parsing Attributes
+ * @{
+ */
+
+/**
+ * Check if the attribute header and payload can be accessed safely.
+ * @arg nla            Attribute of any kind.
+ * @arg remaining      Number of bytes remaining in attribute stream.
+ *
+ * Verifies that the header and payload do not exceed the number of
+ * bytes left in the attribute stream. This function must be called
+ * before access the attribute header or payload when iterating over
+ * the attribute stream using nla_next().
+ *
+ * @return True if the attribute can be accessed safely, false otherwise.
+ */
+int nla_ok(const struct nlattr *nla, int remaining)
+{
+       return remaining >= sizeof(*nla) &&
+              nla->nla_len >= sizeof(*nla) &&
+              nla->nla_len <= remaining;
+}
+
+/**
+ * Return next attribute in a stream of attributes.
+ * @arg nla            Attribute of any kind.
+ * @arg remaining      Variable to count remaining bytes in stream.
+ *
+ * Calculates the offset to the next attribute based on the attribute
+ * given. The attribute provided is assumed to be accessible, the
+ * caller is responsible to use nla_ok() beforehand. The offset (length
+ * of specified attribute including padding) is then subtracted from
+ * the remaining bytes variable and a pointer to the next attribute is
+ * returned.
+ *
+ * nla_next() can be called as long as remainig is >0.
+ *
+ * @return Pointer to next attribute.
+ */
+struct nlattr *nla_next(const struct nlattr *nla, int *remaining)
+{
+       int totlen = NLA_ALIGN(nla->nla_len);
+
+       *remaining -= totlen;
+       return (struct nlattr *) ((char *) nla + totlen);
+}
+
+static uint16_t nla_attr_minlen[NLA_TYPE_MAX+1] = {
+       [NLA_U8]        = sizeof(uint8_t),
+       [NLA_U16]       = sizeof(uint16_t),
+       [NLA_U32]       = sizeof(uint32_t),
+       [NLA_U64]       = sizeof(uint64_t),
+       [NLA_STRING]    = 1,
+};
+
+static int validate_nla(struct nlattr *nla, int maxtype,
+                       struct nla_policy *policy)
+{
+       struct nla_policy *pt;
+       int minlen = 0, type = nla_type(nla);
+
+       if (type <= 0 || type > maxtype)
+               return 0;
+
+       pt = &policy[type];
+
+       if (pt->type > NLA_TYPE_MAX)
+               BUG();
+
+       if (pt->minlen)
+               minlen = pt->minlen;
+       else if (pt->type != NLA_UNSPEC)
+               minlen = nla_attr_minlen[pt->type];
+
+       if (pt->type == NLA_FLAG && nla_len(nla) > 0)
+               return -NLE_RANGE;
+
+       if (nla_len(nla) < minlen)
+               return -NLE_RANGE;
+
+       if (pt->maxlen && nla_len(nla) > pt->maxlen)
+               return -NLE_RANGE;
+
+       if (pt->type == NLA_STRING) {
+               char *data = nla_data(nla);
+               if (data[nla_len(nla) - 1] != '\0')
+                       return -NLE_INVAL;
+       }
+
+       return 0;
+}
+
+
+/**
+ * Create attribute index based on a stream of attributes.
+ * @arg tb             Index array to be filled (maxtype+1 elements).
+ * @arg maxtype                Maximum attribute type expected and accepted.
+ * @arg head           Head of attribute stream.
+ * @arg len            Length of attribute stream.
+ * @arg policy         Attribute validation policy.
+ *
+ * Iterates over the stream of attributes and stores a pointer to each
+ * attribute in the index array using the attribute type as index to
+ * the array. Attribute with a type greater than the maximum type
+ * specified will be silently ignored in order to maintain backwards
+ * compatibility. If \a policy is not NULL, the attribute will be
+ * validated using the specified policy.
+ *
+ * @see nla_validate
+ * @return 0 on success or a negative error code.
+ */
+int nla_parse(struct nlattr *tb[], int maxtype, struct nlattr *head, int len,
+             struct nla_policy *policy)
+{
+       struct nlattr *nla;
+       int rem, err;
+
+       memset(tb, 0, sizeof(struct nlattr *) * (maxtype + 1));
+
+       nla_for_each_attr(nla, head, len, rem) {
+               int type = nla_type(nla);
+
+               if (type == 0) {
+                       fprintf(stderr, "Illegal nla->nla_type == 0\n");
+                       continue;
+               }
+
+               if (type <= maxtype) {
+                       if (policy) {
+                               err = validate_nla(nla, maxtype, policy);
+                               if (err < 0)
+                                       goto errout;
+                       }
+
+                       tb[type] = nla;
+               }
+       }
+
+       if (rem > 0)
+               fprintf(stderr, "netlink: %d bytes leftover after parsing "
+                      "attributes.\n", rem);
+
+       err = 0;
+errout:
+       return err;
+}
+
+/**
+ * Validate a stream of attributes.
+ * @arg head           Head of attributes stream.
+ * @arg len            Length of attributes stream.
+ * @arg maxtype                Maximum attribute type expected and accepted.
+ * @arg policy         Validation policy.
+ *
+ * Iterates over the stream of attributes and validates each attribute
+ * one by one using the specified policy. Attributes with a type greater
+ * than the maximum type specified will be silently ignored in order to
+ * maintain backwards compatibility.
+ *
+ * See \ref attr_datatypes for more details on what kind of validation
+ * checks are performed on each attribute data type.
+ *
+ * @return 0 on success or a negative error code.
+ */
+int nla_validate(struct nlattr *head, int len, int maxtype,
+                struct nla_policy *policy)
+{
+       struct nlattr *nla;
+       int rem, err;
+
+       nla_for_each_attr(nla, head, len, rem) {
+               err = validate_nla(nla, maxtype, policy);
+               if (err < 0)
+                       goto errout;
+       }
+
+       err = 0;
+errout:
+       return err;
+}
+
+/**
+ * Find a single attribute in a stream of attributes.
+ * @arg head           Head of attributes stream.
+ * @arg len            Length of attributes stream.
+ * @arg attrtype       Attribute type to look for.
+ *
+ * Iterates over the stream of attributes and compares each type with
+ * the type specified. Returns the first attribute which matches the
+ * type.
+ *
+ * @return Pointer to attribute found or NULL.
+ */
+struct nlattr *nla_find(struct nlattr *head, int len, int attrtype)
+{
+       struct nlattr *nla;
+       int rem;
+
+       nla_for_each_attr(nla, head, len, rem)
+               if (nla_type(nla) == attrtype)
+                       return nla;
+
+       return NULL;
+}
+
+/** @} */
+
+/**
+ * @name Unspecific Attribute
+ * @{
+ */
+
+/**
+ * Reserve space for a attribute.
+ * @arg msg            Netlink Message.
+ * @arg attrtype       Attribute Type.
+ * @arg attrlen                Length of payload.
+ *
+ * Reserves room for a attribute in the specified netlink message and
+ * fills in the attribute header (type, length). Returns NULL if there
+ * is unsuficient space for the attribute.
+ *
+ * Any padding between payload and the start of the next attribute is
+ * zeroed out.
+ *
+ * @return Pointer to start of attribute or NULL on failure.
+ */
+struct nlattr *nla_reserve(struct nl_msg *msg, int attrtype, int attrlen)
+{
+       struct nlattr *nla;
+       int tlen;
+       
+       tlen = NLMSG_ALIGN(msg->nm_nlh->nlmsg_len) + nla_total_size(attrlen);
+
+       if ((tlen + msg->nm_nlh->nlmsg_len) > msg->nm_size)
+               return NULL;
+
+       nla = (struct nlattr *) nlmsg_tail(msg->nm_nlh);
+       nla->nla_type = attrtype;
+       nla->nla_len = nla_attr_size(attrlen);
+
+       memset((unsigned char *) nla + nla->nla_len, 0, nla_padlen(attrlen));
+       msg->nm_nlh->nlmsg_len = tlen;
+
+       NL_DBG(2, "msg %p: Reserved %d bytes at offset +%td for attr %d "
+                 "nlmsg_len=%d\n", msg, attrlen,
+                 (void *) nla - nlmsg_data(msg->nm_nlh),
+                 attrtype, msg->nm_nlh->nlmsg_len);
+
+       return nla;
+}
+
+/**
+ * Add a unspecific attribute to netlink message.
+ * @arg msg            Netlink message.
+ * @arg attrtype       Attribute type.
+ * @arg datalen                Length of data to be used as payload.
+ * @arg data           Pointer to data to be used as attribute payload.
+ *
+ * Reserves room for a unspecific attribute and copies the provided data
+ * into the message as payload of the attribute. Returns an error if there
+ * is insufficient space for the attribute.
+ *
+ * @see nla_reserve
+ * @return 0 on success or a negative error code.
+ */
+int nla_put(struct nl_msg *msg, int attrtype, int datalen, const void *data)
+{
+       struct nlattr *nla;
+
+       nla = nla_reserve(msg, attrtype, datalen);
+       if (!nla)
+               return -NLE_NOMEM;
+
+       memcpy(nla_data(nla), data, datalen);
+       NL_DBG(2, "msg %p: Wrote %d bytes at offset +%td for attr %d\n",
+              msg, datalen, (void *) nla - nlmsg_data(msg->nm_nlh), attrtype);
+
+       return 0;
+}
+
+
+
+/** @} */
diff --git a/package/libs/libnl-tiny/src/cache.c b/package/libs/libnl-tiny/src/cache.c
new file mode 100644 (file)
index 0000000..0e14574
--- /dev/null
@@ -0,0 +1,839 @@
+/*
+ * lib/cache.c         Caching Module
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
+ */
+
+/**
+ * @ingroup cache_mngt
+ * @defgroup cache Cache
+ *
+ * @code
+ *   Cache Management             |    | Type Specific Cache Operations
+ *                                      
+ *                                |    | +----------------+ +------------+
+ *                                       | request update | | msg_parser |
+ *                                |    | +----------------+ +------------+
+ *                                     +- - - - -^- - - - - - - -^- -|- - - -
+ *    nl_cache_update:            |              |               |   |
+ *          1) --------- co_request_update ------+               |   |
+ *                                |                              |   |
+ *          2) destroy old cache     +----------- pp_cb ---------|---+
+ *                                |  |                           |
+ *          3) ---------- nl_recvmsgs ----------+   +- cb_valid -+
+ *             +--------------+   |  |          |   |
+ *             | nl_cache_add |<-----+   + - - -v- -|- - - - - - - - - - -
+ *             +--------------+   |      | +-------------+
+ *                                         | nl_recvmsgs |
+ *                                |      | +-----|-^-----+
+ *                                           +---v-|---+
+ *                                |      |   | nl_recv |
+ *                                           +---------+
+ *                                |      |                 Core Netlink
+ * @endcode
+ * 
+ * @{
+ */
+
+#include <netlink-local.h>
+#include <netlink/netlink.h>
+#include <netlink/cache.h>
+#include <netlink/object.h>
+#include <netlink/utils.h>
+
+/**
+ * @name Access Functions
+ * @{
+ */
+
+#ifdef disabled
+/**
+ * Return the number of items in the cache
+ * @arg cache          cache handle
+ */
+int nl_cache_nitems(struct nl_cache *cache)
+{
+       return cache->c_nitems;
+}
+
+/**
+ * Return the number of items matching a filter in the cache
+ * @arg cache          Cache object.
+ * @arg filter         Filter object.
+ */
+int nl_cache_nitems_filter(struct nl_cache *cache, struct nl_object *filter)
+{
+       struct nl_object_ops *ops;
+       struct nl_object *obj;
+       int nitems = 0;
+
+       if (cache->c_ops == NULL)
+               BUG();
+
+       ops = cache->c_ops->co_obj_ops;
+       
+       nl_list_for_each_entry(obj, &cache->c_items, ce_list) {
+               if (filter && !nl_object_match_filter(obj, filter))
+                       continue;
+
+               nitems++;
+       }
+
+       return nitems;
+}
+
+/**
+ * Returns \b true if the cache is empty.
+ * @arg cache          Cache to check
+ * @return \a true if the cache is empty, otherwise \b false is returned.
+ */
+int nl_cache_is_empty(struct nl_cache *cache)
+{
+       return nl_list_empty(&cache->c_items);
+}
+
+/**
+ * Return the operations set of the cache
+ * @arg cache          cache handle
+ */
+struct nl_cache_ops *nl_cache_get_ops(struct nl_cache *cache)
+{
+       return cache->c_ops;
+}
+
+/**
+ * Return the first element in the cache
+ * @arg cache          cache handle
+ */
+struct nl_object *nl_cache_get_first(struct nl_cache *cache)
+{
+       if (nl_list_empty(&cache->c_items))
+               return NULL;
+
+       return nl_list_entry(cache->c_items.next,
+                            struct nl_object, ce_list);
+}
+
+/**
+ * Return the last element in the cache
+ * @arg cache          cache handle
+ */
+struct nl_object *nl_cache_get_last(struct nl_cache *cache)
+{
+       if (nl_list_empty(&cache->c_items))
+               return NULL;
+
+       return nl_list_entry(cache->c_items.prev,
+                            struct nl_object, ce_list);
+}
+
+/**
+ * Return the next element in the cache
+ * @arg obj            current object
+ */
+struct nl_object *nl_cache_get_next(struct nl_object *obj)
+{
+       if (nl_list_at_tail(obj, &obj->ce_cache->c_items, ce_list))
+               return NULL;
+       else
+               return nl_list_entry(obj->ce_list.next,
+                                    struct nl_object, ce_list);
+}
+
+/**
+ * Return the previous element in the cache
+ * @arg obj            current object
+ */
+struct nl_object *nl_cache_get_prev(struct nl_object *obj)
+{
+       if (nl_list_at_head(obj, &obj->ce_cache->c_items, ce_list))
+               return NULL;
+       else
+               return nl_list_entry(obj->ce_list.prev,
+                                    struct nl_object, ce_list);
+}
+#endif
+
+/** @} */
+
+/**
+ * @name Cache Creation/Deletion
+ * @{
+ */
+
+/**
+ * Allocate an empty cache
+ * @arg ops            cache operations to base the cache on
+ * 
+ * @return A newly allocated and initialized cache.
+ */
+struct nl_cache *nl_cache_alloc(struct nl_cache_ops *ops)
+{
+       struct nl_cache *cache;
+
+       cache = calloc(1, sizeof(*cache));
+       if (!cache)
+               return NULL;
+
+       nl_init_list_head(&cache->c_items);
+       cache->c_ops = ops;
+
+       NL_DBG(2, "Allocated cache %p <%s>.\n", cache, nl_cache_name(cache));
+
+       return cache;
+}
+
+int nl_cache_alloc_and_fill(struct nl_cache_ops *ops, struct nl_sock *sock,
+                           struct nl_cache **result)
+{
+       struct nl_cache *cache;
+       int err;
+       
+       if (!(cache = nl_cache_alloc(ops)))
+               return -NLE_NOMEM;
+
+       if (sock && (err = nl_cache_refill(sock, cache)) < 0) {
+               nl_cache_free(cache);
+               return err;
+       }
+
+       *result = cache;
+       return 0;
+}
+
+#ifdef disabled
+/**
+ * Allocate an empty cache based on type name
+ * @arg kind           Name of cache type
+ * @return A newly allocated and initialized cache.
+ */
+int nl_cache_alloc_name(const char *kind, struct nl_cache **result)
+{
+       struct nl_cache_ops *ops;
+       struct nl_cache *cache;
+
+       ops = nl_cache_ops_lookup(kind);
+       if (!ops)
+               return -NLE_NOCACHE;
+
+       if (!(cache = nl_cache_alloc(ops)))
+               return -NLE_NOMEM;
+
+       *result = cache;
+       return 0;
+}
+
+/**
+ * Allocate a new cache containing a subset of a cache
+ * @arg orig           Original cache to be based on
+ * @arg filter         Filter defining the subset to be filled into new cache
+ * @return A newly allocated cache or NULL.
+ */
+struct nl_cache *nl_cache_subset(struct nl_cache *orig,
+                                struct nl_object *filter)
+{
+       struct nl_cache *cache;
+       struct nl_object_ops *ops;
+       struct nl_object *obj;
+
+       if (!filter)
+               BUG();
+
+       cache = nl_cache_alloc(orig->c_ops);
+       if (!cache)
+               return NULL;
+
+       ops = orig->c_ops->co_obj_ops;
+
+       nl_list_for_each_entry(obj, &orig->c_items, ce_list) {
+               if (!nl_object_match_filter(obj, filter))
+                       continue;
+
+               nl_cache_add(cache, obj);
+       }
+
+       return cache;
+}
+#endif
+
+/**
+ * Clear a cache.
+ * @arg cache          cache to clear
+ *
+ * Removes all elements of a cache.
+ */
+void nl_cache_clear(struct nl_cache *cache)
+{
+       struct nl_object *obj, *tmp;
+
+       NL_DBG(1, "Clearing cache %p <%s>...\n", cache, nl_cache_name(cache));
+
+       nl_list_for_each_entry_safe(obj, tmp, &cache->c_items, ce_list)
+               nl_cache_remove(obj);
+}
+
+/**
+ * Free a cache.
+ * @arg cache          Cache to free.
+ *
+ * Removes all elements of a cache and frees all memory.
+ *
+ * @note Use this function if you are working with allocated caches.
+ */
+void nl_cache_free(struct nl_cache *cache)
+{
+       if (!cache)
+               return;
+
+       nl_cache_clear(cache);
+       NL_DBG(1, "Freeing cache %p <%s>...\n", cache, nl_cache_name(cache));
+       free(cache);
+}
+
+/** @} */
+
+/**
+ * @name Cache Modifications
+ * @{
+ */
+
+static int __cache_add(struct nl_cache *cache, struct nl_object *obj)
+{
+       obj->ce_cache = cache;
+
+       nl_list_add_tail(&obj->ce_list, &cache->c_items);
+       cache->c_nitems++;
+
+       NL_DBG(1, "Added %p to cache %p <%s>.\n",
+              obj, cache, nl_cache_name(cache));
+
+       return 0;
+}
+
+/**
+ * Add object to a cache.
+ * @arg cache          Cache to add object to
+ * @arg obj            Object to be added to the cache
+ *
+ * Adds the given object to the specified cache. The object is cloned
+ * if it has been added to another cache already.
+ *
+ * @return 0 or a negative error code.
+ */
+int nl_cache_add(struct nl_cache *cache, struct nl_object *obj)
+{
+       struct nl_object *new;
+
+       if (cache->c_ops->co_obj_ops != obj->ce_ops)
+               return -NLE_OBJ_MISMATCH;
+
+       if (!nl_list_empty(&obj->ce_list)) {
+               new = nl_object_clone(obj);
+               if (!new)
+                       return -NLE_NOMEM;
+       } else {
+               nl_object_get(obj);
+               new = obj;
+       }
+
+       return __cache_add(cache, new);
+}
+
+#ifdef disabled
+/**
+ * Move object from one cache to another
+ * @arg cache          Cache to move object to.
+ * @arg obj            Object subject to be moved
+ *
+ * Removes the given object from its associated cache if needed
+ * and adds it to the new cache.
+ *
+ * @return 0 on success or a negative error code.
+ */
+int nl_cache_move(struct nl_cache *cache, struct nl_object *obj)
+{
+       if (cache->c_ops->co_obj_ops != obj->ce_ops)
+               return -NLE_OBJ_MISMATCH;
+
+       NL_DBG(3, "Moving object %p to cache %p\n", obj, cache);
+       
+       /* Acquire reference, if already in a cache this will be
+        * reverted during removal */
+       nl_object_get(obj);
+
+       if (!nl_list_empty(&obj->ce_list))
+               nl_cache_remove(obj);
+
+       return __cache_add(cache, obj);
+}
+#endif
+
+/**
+ * Removes an object from a cache.
+ * @arg obj            Object to remove from its cache
+ *
+ * Removes the object \c obj from the cache it is assigned to, since
+ * an object can only be assigned to one cache at a time, the cache
+ * must ne be passed along with it.
+ */
+void nl_cache_remove(struct nl_object *obj)
+{
+       struct nl_cache *cache = obj->ce_cache;
+
+       if (cache == NULL)
+               return;
+
+       nl_list_del(&obj->ce_list);
+       obj->ce_cache = NULL;
+       nl_object_put(obj);
+       cache->c_nitems--;
+
+       NL_DBG(1, "Deleted %p from cache %p <%s>.\n",
+              obj, cache, nl_cache_name(cache));
+}
+
+#ifdef disabled
+/**
+ * Search for an object in a cache
+ * @arg cache          Cache to search in.
+ * @arg needle         Object to look for.
+ *
+ * Iterates over the cache and looks for an object with identical
+ * identifiers as the needle.
+ *
+ * @return Reference to object or NULL if not found.
+ * @note The returned object must be returned via nl_object_put().
+ */
+struct nl_object *nl_cache_search(struct nl_cache *cache,
+                                 struct nl_object *needle)
+{
+       struct nl_object *obj;
+
+       nl_list_for_each_entry(obj, &cache->c_items, ce_list) {
+               if (nl_object_identical(obj, needle)) {
+                       nl_object_get(obj);
+                       return obj;
+               }
+       }
+
+       return NULL;
+}
+#endif
+
+/** @} */
+
+/**
+ * @name Synchronization
+ * @{
+ */
+
+/**
+ * Request a full dump from the kernel to fill a cache
+ * @arg sk             Netlink socket.
+ * @arg cache          Cache subjected to be filled.
+ *
+ * Send a dumping request to the kernel causing it to dump all objects
+ * related to the specified cache to the netlink socket.
+ *
+ * Use nl_cache_pickup() to read the objects from the socket and fill them
+ * into a cache.
+ */
+int nl_cache_request_full_dump(struct nl_sock *sk, struct nl_cache *cache)
+{
+       NL_DBG(2, "Requesting dump from kernel for cache %p <%s>...\n",
+                 cache, nl_cache_name(cache));
+
+       if (cache->c_ops->co_request_update == NULL)
+               return -NLE_OPNOTSUPP;
+
+       return cache->c_ops->co_request_update(cache, sk);
+}
+
+/** @cond SKIP */
+struct update_xdata {
+       struct nl_cache_ops *ops;
+       struct nl_parser_param *params;
+};
+
+static int update_msg_parser(struct nl_msg *msg, void *arg)
+{
+       struct update_xdata *x = arg;
+       
+       return nl_cache_parse(x->ops, &msg->nm_src, msg->nm_nlh, x->params);
+}
+/** @endcond */
+
+int __cache_pickup(struct nl_sock *sk, struct nl_cache *cache,
+                  struct nl_parser_param *param)
+{
+       int err;
+       struct nl_cb *cb;
+       struct update_xdata x = {
+               .ops = cache->c_ops,
+               .params = param,
+       };
+
+       NL_DBG(1, "Picking up answer for cache %p <%s>...\n",
+                 cache, nl_cache_name(cache));
+
+       cb = nl_cb_clone(sk->s_cb);
+       if (cb == NULL)
+               return -NLE_NOMEM;
+
+       nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, update_msg_parser, &x);
+
+       err = nl_recvmsgs(sk, cb);
+       if (err < 0)
+               NL_DBG(2, "While picking up for %p <%s>, recvmsgs() returned " \
+                      "%d: %s", cache, nl_cache_name(cache),
+                      err, nl_geterror(err));
+
+       nl_cb_put(cb);
+
+       return err;
+}
+
+static int pickup_cb(struct nl_object *c, struct nl_parser_param *p)
+{
+       return nl_cache_add((struct nl_cache *) p->pp_arg, c);
+}
+
+/**
+ * Pickup a netlink dump response and put it into a cache.
+ * @arg sk             Netlink socket.
+ * @arg cache          Cache to put items into.
+ *
+ * Waits for netlink messages to arrive, parses them and puts them into
+ * the specified cache.
+ *
+ * @return 0 on success or a negative error code.
+ */
+int nl_cache_pickup(struct nl_sock *sk, struct nl_cache *cache)
+{
+       struct nl_parser_param p = {
+               .pp_cb = pickup_cb,
+               .pp_arg = cache,
+       };
+
+       return __cache_pickup(sk, cache, &p);
+}
+
+#ifdef disabled
+static int cache_include(struct nl_cache *cache, struct nl_object *obj,
+                        struct nl_msgtype *type, change_func_t cb)
+{
+       struct nl_object *old;
+
+       switch (type->mt_act) {
+       case NL_ACT_NEW:
+       case NL_ACT_DEL:
+               old = nl_cache_search(cache, obj);
+               if (old) {
+                       nl_cache_remove(old);
+                       if (type->mt_act == NL_ACT_DEL) {
+                               if (cb)
+                                       cb(cache, old, NL_ACT_DEL);
+                               nl_object_put(old);
+                       }
+               }
+
+               if (type->mt_act == NL_ACT_NEW) {
+                       nl_cache_move(cache, obj);
+                       if (old == NULL && cb)
+                               cb(cache, obj, NL_ACT_NEW);
+                       else if (old) {
+                               if (nl_object_diff(old, obj) && cb)
+                                       cb(cache, obj, NL_ACT_CHANGE);
+
+                               nl_object_put(old);
+                       }
+               }
+               break;
+       default:
+               NL_DBG(2, "Unknown action associated to object %p\n", obj);
+               return 0;
+       }
+
+       return 0;
+}
+
+int nl_cache_include(struct nl_cache *cache, struct nl_object *obj,
+                    change_func_t change_cb)
+{
+       struct nl_cache_ops *ops = cache->c_ops;
+       int i;
+
+       if (ops->co_obj_ops != obj->ce_ops)
+               return -NLE_OBJ_MISMATCH;
+
+       for (i = 0; ops->co_msgtypes[i].mt_id >= 0; i++)
+               if (ops->co_msgtypes[i].mt_id == obj->ce_msgtype)
+                       return cache_include(cache, obj, &ops->co_msgtypes[i],
+                                            change_cb);
+
+       return -NLE_MSGTYPE_NOSUPPORT;
+}
+
+static int resync_cb(struct nl_object *c, struct nl_parser_param *p)
+{
+       struct nl_cache_assoc *ca = p->pp_arg;
+
+       return nl_cache_include(ca->ca_cache, c, ca->ca_change);
+}
+
+int nl_cache_resync(struct nl_sock *sk, struct nl_cache *cache,
+                   change_func_t change_cb)
+{
+       struct nl_object *obj, *next;
+       struct nl_cache_assoc ca = {
+               .ca_cache = cache,
+               .ca_change = change_cb,
+       };
+       struct nl_parser_param p = {
+               .pp_cb = resync_cb,
+               .pp_arg = &ca,
+       };
+       int err;
+
+       NL_DBG(1, "Resyncing cache %p <%s>...\n", cache, nl_cache_name(cache));
+
+       /* Mark all objects so we can see if some of them are obsolete */
+       nl_cache_mark_all(cache);
+
+       err = nl_cache_request_full_dump(sk, cache);
+       if (err < 0)
+               goto errout;
+
+       err = __cache_pickup(sk, cache, &p);
+       if (err < 0)
+               goto errout;
+
+       nl_list_for_each_entry_safe(obj, next, &cache->c_items, ce_list)
+               if (nl_object_is_marked(obj))
+                       nl_cache_remove(obj);
+
+       NL_DBG(1, "Finished resyncing %p <%s>\n", cache, nl_cache_name(cache));
+
+       err = 0;
+errout:
+       return err;
+}
+#endif
+
+/** @} */
+
+/**
+ * @name Parsing
+ * @{
+ */
+
+/** @cond SKIP */
+int nl_cache_parse(struct nl_cache_ops *ops, struct sockaddr_nl *who,
+                  struct nlmsghdr *nlh, struct nl_parser_param *params)
+{
+       int i, err;
+
+       if (!nlmsg_valid_hdr(nlh, ops->co_hdrsize))
+               return -NLE_MSG_TOOSHORT;
+
+       for (i = 0; ops->co_msgtypes[i].mt_id >= 0; i++) {
+               if (ops->co_msgtypes[i].mt_id == nlh->nlmsg_type) {
+                       err = ops->co_msg_parser(ops, who, nlh, params);
+                       if (err != -NLE_OPNOTSUPP)
+                               goto errout;
+               }
+       }
+
+
+       err = -NLE_MSGTYPE_NOSUPPORT;
+errout:
+       return err;
+}
+/** @endcond */
+
+/**
+ * Parse a netlink message and add it to the cache.
+ * @arg cache          cache to add element to
+ * @arg msg            netlink message
+ *
+ * Parses a netlink message by calling the cache specific message parser
+ * and adds the new element to the cache.
+ *
+ * @return 0 or a negative error code.
+ */
+int nl_cache_parse_and_add(struct nl_cache *cache, struct nl_msg *msg)
+{
+       struct nl_parser_param p = {
+               .pp_cb = pickup_cb,
+               .pp_arg = cache,
+       };
+
+       return nl_cache_parse(cache->c_ops, NULL, nlmsg_hdr(msg), &p);
+}
+
+/**
+ * (Re)fill a cache with the contents in the kernel.
+ * @arg sk             Netlink socket.
+ * @arg cache          cache to update
+ *
+ * Clears the specified cache and fills it with the current state in
+ * the kernel.
+ *
+ * @return 0 or a negative error code.
+ */
+int nl_cache_refill(struct nl_sock *sk, struct nl_cache *cache)
+{
+       int err;
+
+       err = nl_cache_request_full_dump(sk, cache);
+       if (err < 0)
+               return err;
+
+       NL_DBG(2, "Upading cache %p <%s>, request sent, waiting for dump...\n",
+              cache, nl_cache_name(cache));
+       nl_cache_clear(cache);
+
+       return nl_cache_pickup(sk, cache);
+}
+
+/** @} */
+#ifdef disabled
+
+/**
+ * @name Utillities
+ * @{
+ */
+
+/**
+ * Mark all objects in a cache
+ * @arg cache          Cache to mark all objects in
+ */
+void nl_cache_mark_all(struct nl_cache *cache)
+{
+       struct nl_object *obj;
+
+       NL_DBG(2, "Marking all objects in cache %p <%s>...\n",
+                 cache, nl_cache_name(cache));
+
+       nl_list_for_each_entry(obj, &cache->c_items, ce_list)
+               nl_object_mark(obj);
+}
+
+/** @} */
+
+/**
+ * @name Dumping
+ * @{
+ */
+/**
+ * Dump all elements of a cache.
+ * @arg cache          cache to dump
+ * @arg params         dumping parameters
+ *
+ * Dumps all elements of the \a cache to the file descriptor \a fd.
+ */
+void nl_cache_dump(struct nl_cache *cache, struct nl_dump_params *params)
+{
+       nl_cache_dump_filter(cache, params, NULL);
+}
+
+/**
+ * Dump all elements of a cache (filtered).
+ * @arg cache          cache to dump
+ * @arg params         dumping parameters (optional)
+ * @arg filter         filter object
+ *
+ * Dumps all elements of the \a cache to the file descriptor \a fd
+ * given they match the given filter \a filter.
+ */
+void nl_cache_dump_filter(struct nl_cache *cache,
+                         struct nl_dump_params *params,
+                         struct nl_object *filter)
+{
+       int type = params ? params->dp_type : NL_DUMP_DETAILS;
+       struct nl_object_ops *ops;
+       struct nl_object *obj;
+
+       NL_DBG(2, "Dumping cache %p <%s> filter %p\n",
+              cache, nl_cache_name(cache), filter);
+
+       if (type > NL_DUMP_MAX || type < 0)
+               BUG();
+
+       if (cache->c_ops == NULL)
+               BUG();
+
+       ops = cache->c_ops->co_obj_ops;
+       if (!ops->oo_dump[type])
+               return;
+
+       nl_list_for_each_entry(obj, &cache->c_items, ce_list) {
+               if (filter && !nl_object_match_filter(obj, filter))
+                       continue;
+
+               NL_DBG(4, "Dumping object %p...\n", obj);
+               dump_from_ops(obj, params);
+       }
+}
+
+/** @} */
+
+/**
+ * @name Iterators
+ * @{
+ */
+
+/**
+ * Call a callback on each element of the cache.
+ * @arg cache          cache to iterate on
+ * @arg cb             callback function
+ * @arg arg            argument passed to callback function
+ *
+ * Calls a callback function \a cb on each element of the \a cache.
+ * The argument \a arg is passed on the callback function.
+ */
+void nl_cache_foreach(struct nl_cache *cache,
+                     void (*cb)(struct nl_object *, void *), void *arg)
+{
+       nl_cache_foreach_filter(cache, NULL, cb, arg);
+}
+
+/**
+ * Call a callback on each element of the cache (filtered).
+ * @arg cache          cache to iterate on
+ * @arg filter         filter object
+ * @arg cb             callback function
+ * @arg arg            argument passed to callback function
+ *
+ * Calls a callback function \a cb on each element of the \a cache
+ * that matches the \a filter. The argument \a arg is passed on
+ * to the callback function.
+ */
+void nl_cache_foreach_filter(struct nl_cache *cache, struct nl_object *filter,
+                            void (*cb)(struct nl_object *, void *), void *arg)
+{
+       struct nl_object *obj, *tmp;
+       struct nl_object_ops *ops;
+
+       if (cache->c_ops == NULL)
+               BUG();
+
+       ops = cache->c_ops->co_obj_ops;
+
+       nl_list_for_each_entry_safe(obj, tmp, &cache->c_items, ce_list) {
+               if (filter && !nl_object_match_filter(obj, filter))
+                       continue;
+
+               cb(obj, arg);
+       }
+}
+
+/** @} */
+#endif
+
+/** @} */
diff --git a/package/libs/libnl-tiny/src/cache_mngt.c b/package/libs/libnl-tiny/src/cache_mngt.c
new file mode 100644 (file)
index 0000000..5c32d2a
--- /dev/null
@@ -0,0 +1,253 @@
+/*
+ * lib/cache_mngt.c    Cache Management
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
+ */
+
+/**
+ * @ingroup core
+ * @defgroup cache_mngt Caching
+ * @{
+ */
+
+#include <netlink-local.h>
+#include <netlink/netlink.h>
+#include <netlink/cache.h>
+#include <netlink/utils.h>
+
+static struct nl_cache_ops *cache_ops;
+
+/**
+ * @name Cache Operations Sets
+ * @{
+ */
+
+/**
+ * Lookup the set cache operations of a certain cache type
+ * @arg name           name of the cache type
+ *
+ * @return The cache operations or NULL if no operations
+ *         have been registered under the specified name.
+ */
+struct nl_cache_ops *nl_cache_ops_lookup(const char *name)
+{
+       struct nl_cache_ops *ops;
+
+       for (ops = cache_ops; ops; ops = ops->co_next)
+               if (!strcmp(ops->co_name, name))
+                       return ops;
+
+       return NULL;
+}
+
+/**
+ * Associate a message type to a set of cache operations
+ * @arg protocol               netlink protocol
+ * @arg msgtype                        netlink message type
+ *
+ * Associates the specified netlink message type with
+ * a registered set of cache operations.
+ *
+ * @return The cache operations or NULL if no association
+ *         could be made.
+ */
+struct nl_cache_ops *nl_cache_ops_associate(int protocol, int msgtype)
+{
+       int i;
+       struct nl_cache_ops *ops;
+
+       for (ops = cache_ops; ops; ops = ops->co_next) {
+               if (ops->co_protocol != protocol)
+                       continue;
+
+               for (i = 0; ops->co_msgtypes[i].mt_id >= 0; i++)
+                       if (ops->co_msgtypes[i].mt_id == msgtype)
+                               return ops;
+       }
+
+       return NULL;
+}
+
+#ifdef disabled
+
+/**
+ * Lookup message type cache association
+ * @arg ops                    cache operations
+ * @arg msgtype                        netlink message type
+ *
+ * Searches for a matching message type association ing the specified
+ * cache operations.
+ *
+ * @return A message type association or NULL.
+ */
+struct nl_msgtype *nl_msgtype_lookup(struct nl_cache_ops *ops, int msgtype)
+{
+       int i;
+
+       for (i = 0; ops->co_msgtypes[i].mt_id >= 0; i++)
+               if (ops->co_msgtypes[i].mt_id == msgtype)
+                       return &ops->co_msgtypes[i];
+
+       return NULL;
+}
+
+static struct nl_cache_ops *cache_ops_lookup_for_obj(struct nl_object_ops *obj_ops)
+{
+       struct nl_cache_ops *ops;
+
+       for (ops = cache_ops; ops; ops = ops->co_next)
+               if (ops->co_obj_ops == obj_ops)
+                       return ops;
+
+       return NULL;
+
+}
+
+/**
+ * Call a function for each registered cache operation
+ * @arg cb             Callback function to be called
+ * @arg arg            User specific argument.
+ */
+void nl_cache_ops_foreach(void (*cb)(struct nl_cache_ops *, void *), void *arg)
+{
+       struct nl_cache_ops *ops;
+
+       for (ops = cache_ops; ops; ops = ops->co_next)
+               cb(ops, arg);
+}
+#endif
+
+/**
+ * Register a set of cache operations
+ * @arg ops            cache operations
+ *
+ * Called by users of caches to announce the avaibility of
+ * a certain cache type.
+ *
+ * @return 0 on success or a negative error code.
+ */
+int nl_cache_mngt_register(struct nl_cache_ops *ops)
+{
+       if (!ops->co_name || !ops->co_obj_ops)
+               return -NLE_INVAL;
+
+       if (nl_cache_ops_lookup(ops->co_name))
+               return -NLE_EXIST;
+
+       ops->co_next = cache_ops;
+       cache_ops = ops;
+
+       NL_DBG(1, "Registered cache operations %s\n", ops->co_name);
+
+       return 0;
+}
+
+/**
+ * Unregister a set of cache operations
+ * @arg ops            cache operations
+ *
+ * Called by users of caches to announce a set of
+ * cache operations is no longer available. The
+ * specified cache operations must have been registered
+ * previously using nl_cache_mngt_register()
+ *
+ * @return 0 on success or a negative error code
+ */
+int nl_cache_mngt_unregister(struct nl_cache_ops *ops)
+{
+       struct nl_cache_ops *t, **tp;
+
+       for (tp = &cache_ops; (t=*tp) != NULL; tp = &t->co_next)
+               if (t == ops)
+                       break;
+
+       if (!t)
+               return -NLE_NOCACHE;
+
+       NL_DBG(1, "Unregistered cache operations %s\n", ops->co_name);
+
+       *tp = t->co_next;
+       return 0;
+}
+
+/** @} */
+
+/**
+ * @name Global Cache Provisioning/Requiring
+ * @{
+ */
+#ifdef disabled
+/**
+ * Provide a cache for global use
+ * @arg cache          cache to provide
+ *
+ * Offers the specified cache to be used by other modules.
+ * Only one cache per type may be shared at a time,
+ * a previsouly provided caches will be overwritten.
+ */
+void nl_cache_mngt_provide(struct nl_cache *cache)
+{
+       struct nl_cache_ops *ops;
+
+       ops = cache_ops_lookup_for_obj(cache->c_ops->co_obj_ops);
+       if (!ops)
+               BUG();
+       else
+               ops->co_major_cache = cache;
+}
+
+/**
+ * Unprovide a cache for global use
+ * @arg cache          cache to unprovide
+ *
+ * Cancels the offer to use a cache globally. The
+ * cache will no longer be returned via lookups but
+ * may still be in use.
+ */
+void nl_cache_mngt_unprovide(struct nl_cache *cache)
+{
+       struct nl_cache_ops *ops;
+
+       ops = cache_ops_lookup_for_obj(cache->c_ops->co_obj_ops);
+       if (!ops)
+               BUG();
+       else if (ops->co_major_cache == cache)
+               ops->co_major_cache = NULL;
+}
+
+/**
+ * Demand the use of a global cache
+ * @arg name           name of the required object type
+ *
+ * Trys to find a cache of the specified type for global
+ * use.
+ *
+ * @return A cache provided by another subsystem of the
+ *         specified type marked to be available.
+ */
+struct nl_cache *nl_cache_mngt_require(const char *name)
+{
+       struct nl_cache_ops *ops;
+
+       ops = nl_cache_ops_lookup(name);
+       if (!ops || !ops->co_major_cache) {
+               fprintf(stderr, "Application BUG: Your application must "
+                       "call nl_cache_mngt_provide() and\nprovide a valid "
+                       "%s cache to be used for internal lookups.\nSee the "
+                       " API documentation for more details.\n", name);
+
+               return NULL;
+       }
+       
+       return ops->co_major_cache;
+}
+
+#endif
+/** @} */
+
+/** @} */
diff --git a/package/libs/libnl-tiny/src/error.c b/package/libs/libnl-tiny/src/error.c
new file mode 100644 (file)
index 0000000..71ae722
--- /dev/null
@@ -0,0 +1,108 @@
+/*
+ * lib/error.c         Error Handling
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2008 Thomas Graf <tgraf@suug.ch>
+ */
+
+#include <netlink-local.h>
+#include <netlink/netlink.h>
+
+static const char *errmsg[NLE_MAX+1] = {
+[NLE_SUCCESS]          = "Success",
+[NLE_FAILURE]          = "Unspecific failure",
+[NLE_INTR]             = "Interrupted system call",
+[NLE_BAD_SOCK]         = "Bad socket",
+[NLE_AGAIN]            = "Try again",
+[NLE_NOMEM]            = "Out of memory",
+[NLE_EXIST]            = "Object exists",
+[NLE_INVAL]            = "Invalid input data or parameter",
+[NLE_RANGE]            = "Input data out of range",
+[NLE_MSGSIZE]          = "Message size not sufficient",
+[NLE_OPNOTSUPP]                = "Operation not supported",
+[NLE_AF_NOSUPPORT]     = "Address family not supported",
+[NLE_OBJ_NOTFOUND]     = "Object not found",
+[NLE_NOATTR]           = "Attribute not available",
+[NLE_MISSING_ATTR]     = "Missing attribute",
+[NLE_AF_MISMATCH]      = "Address family mismatch",
+[NLE_SEQ_MISMATCH]     = "Message sequence number mismatch",
+[NLE_MSG_OVERFLOW]     = "Kernel reported message overflow",
+[NLE_MSG_TRUNC]                = "Kernel reported truncated message",
+[NLE_NOADDR]           = "Invalid address for specified address family",
+[NLE_SRCRT_NOSUPPORT]  = "Source based routing not supported",
+[NLE_MSG_TOOSHORT]     = "Netlink message is too short",
+[NLE_MSGTYPE_NOSUPPORT]        = "Netlink message type is not supported",
+[NLE_OBJ_MISMATCH]     = "Object type does not match cache",
+[NLE_NOCACHE]          = "Unknown or invalid cache type",
+[NLE_BUSY]             = "Object busy",
+[NLE_PROTO_MISMATCH]   = "Protocol mismatch",
+[NLE_NOACCESS]         = "No Access",
+[NLE_PERM]             = "Operation not permitted",
+};
+
+/**
+ * Return error message for an error code
+ * @return error message
+ */
+const char *nl_geterror(int error)
+{
+       error = abs(error);
+
+       if (error > NLE_MAX)
+               error = NLE_FAILURE;
+
+       return errmsg[error];
+}
+
+/**
+ * Print a libnl error message
+ * @arg s              error message prefix
+ *
+ * Prints the error message of the call that failed last.
+ *
+ * If s is not NULL and *s is not a null byte the argument
+ * string is printed, followed by a colon and a blank. Then
+ * the error message and a new-line.
+ */
+void nl_perror(int error, const char *s)
+{
+       if (s && *s)
+               fprintf(stderr, "%s: %s\n", s, nl_geterror(error));
+       else
+               fprintf(stderr, "%s\n", nl_geterror(error));
+}
+
+int nl_syserr2nlerr(int error)
+{
+       error = abs(error);
+
+       switch (error) {
+       case EBADF:             return NLE_BAD_SOCK;
+       case EADDRINUSE:        return NLE_EXIST;
+       case EEXIST:            return NLE_EXIST;
+       case EADDRNOTAVAIL:     return NLE_NOADDR;
+       case ENOENT:            return NLE_OBJ_NOTFOUND;
+       case EINTR:             return NLE_INTR;
+       case EAGAIN:            return NLE_AGAIN;
+       case ENOTSOCK:          return NLE_BAD_SOCK;
+       case ENOPROTOOPT:       return NLE_INVAL;
+       case EFAULT:            return NLE_INVAL;
+       case EACCES:            return NLE_NOACCESS;
+       case EINVAL:            return NLE_INVAL;
+       case ENOBUFS:           return NLE_NOMEM;
+       case ENOMEM:            return NLE_NOMEM;
+       case EAFNOSUPPORT:      return NLE_AF_NOSUPPORT;
+       case EPROTONOSUPPORT:   return NLE_PROTO_MISMATCH;
+       case EOPNOTSUPP:        return NLE_OPNOTSUPP;
+       case EPERM:             return NLE_PERM;
+       case EBUSY:             return NLE_BUSY;
+       default:                return NLE_FAILURE;
+       }
+}
+
+/** @} */
+
diff --git a/package/libs/libnl-tiny/src/genl.c b/package/libs/libnl-tiny/src/genl.c
new file mode 100644 (file)
index 0000000..055be91
--- /dev/null
@@ -0,0 +1,268 @@
+/*
+ * lib/genl/genl.c             Generic Netlink
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
+ */
+
+/**
+ * @defgroup genl Generic Netlink
+ *
+ * @par Message Format
+ * @code
+ *  <------- NLMSG_ALIGN(hlen) ------> <---- NLMSG_ALIGN(len) --->
+ * +----------------------------+- - -+- - - - - - - - - - -+- - -+
+ * |           Header           | Pad |       Payload       | Pad |
+ * |      struct nlmsghdr       |     |                     |     |
+ * +----------------------------+- - -+- - - - - - - - - - -+- - -+
+ * @endcode
+ * @code
+ *  <-------- GENL_HDRLEN -------> <--- hdrlen -->
+ *                                 <------- genlmsg_len(ghdr) ------>
+ * +------------------------+- - -+---------------+- - -+------------+
+ * | Generic Netlink Header | Pad | Family Header | Pad | Attributes |
+ * |    struct genlmsghdr   |     |               |     |            |
+ * +------------------------+- - -+---------------+- - -+------------+
+ * genlmsg_data(ghdr)--------------^                     ^
+ * genlmsg_attrdata(ghdr, hdrlen)-------------------------
+ * @endcode
+ *
+ * @par Example
+ * @code
+ * #include <netlink/netlink.h>
+ * #include <netlink/genl/genl.h>
+ * #include <netlink/genl/ctrl.h>
+ *
+ * struct nl_sock *sock;
+ * struct nl_msg *msg;
+ * int family;
+ *
+ * // Allocate a new netlink socket
+ * sock = nl_socket_alloc();
+ *
+ * // Connect to generic netlink socket on kernel side
+ * genl_connect(sock);
+ *
+ * // Ask kernel to resolve family name to family id
+ * family = genl_ctrl_resolve(sock, "generic_netlink_family_name");
+ *
+ * // Construct a generic netlink by allocating a new message, fill in
+ * // the header and append a simple integer attribute.
+ * msg = nlmsg_alloc();
+ * genlmsg_put(msg, NL_AUTO_PID, NL_AUTO_SEQ, family, 0, NLM_F_ECHO,
+ *             CMD_FOO_GET, FOO_VERSION);
+ * nla_put_u32(msg, ATTR_FOO, 123);
+ *
+ * // Send message over netlink socket
+ * nl_send_auto_complete(sock, msg);
+ *
+ * // Free message
+ * nlmsg_free(msg);
+ *
+ * // Prepare socket to receive the answer by specifying the callback
+ * // function to be called for valid messages.
+ * nl_socket_modify_cb(sock, NL_CB_VALID, NL_CB_CUSTOM, parse_cb, NULL);
+ *
+ * // Wait for the answer and receive it
+ * nl_recvmsgs_default(sock);
+ *
+ * static int parse_cb(struct nl_msg *msg, void *arg)
+ * {
+ *     struct nlmsghdr *nlh = nlmsg_hdr(msg);
+ *     struct nlattr *attrs[ATTR_MAX+1];
+ *
+ *     // Validate message and parse attributes
+ *     genlmsg_parse(nlh, 0, attrs, ATTR_MAX, policy);
+ *
+ *     if (attrs[ATTR_FOO]) {
+ *         uint32_t value = nla_get_u32(attrs[ATTR_FOO]);
+ *         ...
+ *     }
+ *
+ *     return 0;
+ * }
+ * @endcode
+ * @{
+ */
+
+#include <netlink-generic.h>
+#include <netlink/netlink.h>
+#include <netlink/genl/genl.h>
+#include <netlink/utils.h>
+
+/**
+ * @name Socket Creating
+ * @{
+ */
+
+int genl_connect(struct nl_sock *sk)
+{
+       return nl_connect(sk, NETLINK_GENERIC);
+}
+
+/** @} */
+
+/**
+ * @name Sending
+ * @{
+ */
+
+/**
+ * Send trivial generic netlink message
+ * @arg sk             Netlink socket.
+ * @arg family         Generic netlink family
+ * @arg cmd            Command
+ * @arg version                Version
+ * @arg flags          Additional netlink message flags.
+ *
+ * Fills out a routing netlink request message and sends it out
+ * using nl_send_simple().
+ *
+ * @return 0 on success or a negative error code.
+ */
+int genl_send_simple(struct nl_sock *sk, int family, int cmd,
+                    int version, int flags)
+{
+       struct genlmsghdr hdr = {
+               .cmd = cmd,
+               .version = version,
+       };
+
+       return nl_send_simple(sk, family, flags, &hdr, sizeof(hdr));
+}
+
+/** @} */
+
+
+/**
+ * @name Message Parsing
+ * @{
+ */
+
+int genlmsg_valid_hdr(struct nlmsghdr *nlh, int hdrlen)
+{
+       struct genlmsghdr *ghdr;
+
+       if (!nlmsg_valid_hdr(nlh, GENL_HDRLEN))
+               return 0;
+
+       ghdr = nlmsg_data(nlh);
+       if (genlmsg_len(ghdr) < NLMSG_ALIGN(hdrlen))
+               return 0;
+
+       return 1;
+}
+
+int genlmsg_validate(struct nlmsghdr *nlh, int hdrlen, int maxtype,
+                  struct nla_policy *policy)
+{
+       struct genlmsghdr *ghdr;
+
+       if (!genlmsg_valid_hdr(nlh, hdrlen))
+               return -NLE_MSG_TOOSHORT;
+
+       ghdr = nlmsg_data(nlh);
+       return nla_validate(genlmsg_attrdata(ghdr, hdrlen),
+                           genlmsg_attrlen(ghdr, hdrlen), maxtype, policy);
+}
+
+int genlmsg_parse(struct nlmsghdr *nlh, int hdrlen, struct nlattr *tb[],
+                 int maxtype, struct nla_policy *policy)
+{
+       struct genlmsghdr *ghdr;
+
+       if (!genlmsg_valid_hdr(nlh, hdrlen))
+               return -NLE_MSG_TOOSHORT;
+
+       ghdr = nlmsg_data(nlh);
+       return nla_parse(tb, maxtype, genlmsg_attrdata(ghdr, hdrlen),
+                        genlmsg_attrlen(ghdr, hdrlen), policy);
+}
+
+/**
+ * Get head of message payload
+ * @arg gnlh   genetlink messsage header
+ */
+void *genlmsg_data(const struct genlmsghdr *gnlh)
+{
+       return ((unsigned char *) gnlh + GENL_HDRLEN);
+}
+
+/**
+ * Get lenght of message payload
+ * @arg gnlh   genetlink message header
+ */
+int genlmsg_len(const struct genlmsghdr *gnlh)
+{
+       struct nlmsghdr *nlh = (struct nlmsghdr *)((unsigned char *)gnlh -
+                                                       NLMSG_HDRLEN);
+       return (nlh->nlmsg_len - GENL_HDRLEN - NLMSG_HDRLEN);
+}
+
+/**
+ * Get head of attribute data
+ * @arg gnlh   generic netlink message header
+ * @arg hdrlen length of family specific header
+ */
+struct nlattr *genlmsg_attrdata(const struct genlmsghdr *gnlh, int hdrlen)
+{
+       return genlmsg_data(gnlh) + NLMSG_ALIGN(hdrlen);
+}
+
+/**
+ * Get length of attribute data
+ * @arg gnlh   generic netlink message header
+ * @arg hdrlen length of family specific header
+ */
+int genlmsg_attrlen(const struct genlmsghdr *gnlh, int hdrlen)
+{
+       return genlmsg_len(gnlh) - NLMSG_ALIGN(hdrlen);
+}
+
+/** @} */
+
+/**
+ * @name Message Building
+ * @{
+ */
+
+/**
+ * Add generic netlink header to netlink message
+ * @arg msg            netlink message
+ * @arg pid            netlink process id or NL_AUTO_PID
+ * @arg seq            sequence number of message or NL_AUTO_SEQ
+ * @arg family         generic netlink family
+ * @arg hdrlen         length of user specific header
+ * @arg flags          message flags
+ * @arg cmd            generic netlink command
+ * @arg version                protocol version
+ *
+ * Returns pointer to user specific header.
+ */
+void *genlmsg_put(struct nl_msg *msg, uint32_t pid, uint32_t seq, int family,
+                 int hdrlen, int flags, uint8_t cmd, uint8_t version)
+{
+       struct nlmsghdr *nlh;
+       struct genlmsghdr hdr = {
+               .cmd = cmd,
+               .version = version,
+       };
+
+       nlh = nlmsg_put(msg, pid, seq, family, GENL_HDRLEN + hdrlen, flags);
+       if (nlh == NULL)
+               return NULL;
+
+       memcpy(nlmsg_data(nlh), &hdr, sizeof(hdr));
+       NL_DBG(2, "msg %p: Added generic netlink header cmd=%d version=%d\n",
+              msg, cmd, version);
+
+       return nlmsg_data(nlh) + GENL_HDRLEN;
+}
+
+/** @} */
+
+/** @} */
diff --git a/package/libs/libnl-tiny/src/genl_ctrl.c b/package/libs/libnl-tiny/src/genl_ctrl.c
new file mode 100644 (file)
index 0000000..1301642
--- /dev/null
@@ -0,0 +1,302 @@
+/*
+ * lib/genl/ctrl.c             Generic Netlink Controller
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
+ */
+
+/**
+ * @ingroup genl_mngt
+ * @defgroup ctrl Controller
+ * @brief
+ *
+ * @{
+ */
+
+#include <netlink-generic.h>
+#include <netlink/netlink.h>
+#include <netlink/genl/genl.h>
+#include <netlink/genl/family.h>
+#include <netlink/genl/mngt.h>
+#include <netlink/genl/ctrl.h>
+#include <netlink/utils.h>
+
+/** @cond SKIP */
+#define CTRL_VERSION           0x0001
+
+static struct nl_cache_ops genl_ctrl_ops;
+/** @endcond */
+
+static int ctrl_request_update(struct nl_cache *c, struct nl_sock *h)
+{
+       return genl_send_simple(h, GENL_ID_CTRL, CTRL_CMD_GETFAMILY,
+                               CTRL_VERSION, NLM_F_DUMP);
+}
+
+static struct nla_policy ctrl_policy[CTRL_ATTR_MAX+1] = {
+       [CTRL_ATTR_FAMILY_ID]   = { .type = NLA_U16 },
+       [CTRL_ATTR_FAMILY_NAME] = { .type = NLA_STRING,
+                                   .maxlen = GENL_NAMSIZ },
+       [CTRL_ATTR_VERSION]     = { .type = NLA_U32 },
+       [CTRL_ATTR_HDRSIZE]     = { .type = NLA_U32 },
+       [CTRL_ATTR_MAXATTR]     = { .type = NLA_U32 },
+       [CTRL_ATTR_OPS]         = { .type = NLA_NESTED },
+};
+
+static struct nla_policy family_op_policy[CTRL_ATTR_OP_MAX+1] = {
+       [CTRL_ATTR_OP_ID]       = { .type = NLA_U32 },
+       [CTRL_ATTR_OP_FLAGS]    = { .type = NLA_U32 },
+};
+
+static int ctrl_msg_parser(struct nl_cache_ops *ops, struct genl_cmd *cmd,
+                          struct genl_info *info, void *arg)
+{
+       struct genl_family *family;
+       struct nl_parser_param *pp = arg;
+       int err;
+
+       family = genl_family_alloc();
+       if (family == NULL) {
+               err = -NLE_NOMEM;
+               goto errout;
+       }
+
+       if (info->attrs[CTRL_ATTR_FAMILY_NAME] == NULL) {
+               err = -NLE_MISSING_ATTR;
+               goto errout;
+       }
+
+       if (info->attrs[CTRL_ATTR_FAMILY_ID] == NULL) {
+               err = -NLE_MISSING_ATTR;
+               goto errout;
+       }
+
+       family->ce_msgtype = info->nlh->nlmsg_type;
+       genl_family_set_id(family,
+                          nla_get_u16(info->attrs[CTRL_ATTR_FAMILY_ID]));
+       genl_family_set_name(family,
+                    nla_get_string(info->attrs[CTRL_ATTR_FAMILY_NAME]));
+
+       if (info->attrs[CTRL_ATTR_VERSION]) {
+               uint32_t version = nla_get_u32(info->attrs[CTRL_ATTR_VERSION]);
+               genl_family_set_version(family, version);
+       }
+
+       if (info->attrs[CTRL_ATTR_HDRSIZE]) {
+               uint32_t hdrsize = nla_get_u32(info->attrs[CTRL_ATTR_HDRSIZE]);
+               genl_family_set_hdrsize(family, hdrsize);
+       }
+
+       if (info->attrs[CTRL_ATTR_MAXATTR]) {
+               uint32_t maxattr = nla_get_u32(info->attrs[CTRL_ATTR_MAXATTR]);
+               genl_family_set_maxattr(family, maxattr);
+       }
+
+       if (info->attrs[CTRL_ATTR_OPS]) {
+               struct nlattr *nla, *nla_ops;
+               int remaining;
+
+               nla_ops = info->attrs[CTRL_ATTR_OPS];
+               nla_for_each_nested(nla, nla_ops, remaining) {
+                       struct nlattr *tb[CTRL_ATTR_OP_MAX+1];
+                       int flags = 0, id;
+
+                       err = nla_parse_nested(tb, CTRL_ATTR_OP_MAX, nla,
+                                              family_op_policy);
+                       if (err < 0)
+                               goto errout;
+
+                       if (tb[CTRL_ATTR_OP_ID] == NULL) {
+                               err = -NLE_MISSING_ATTR;
+                               goto errout;
+                       }
+                       
+                       id = nla_get_u32(tb[CTRL_ATTR_OP_ID]);
+
+                       if (tb[CTRL_ATTR_OP_FLAGS])
+                               flags = nla_get_u32(tb[CTRL_ATTR_OP_FLAGS]);
+
+                       err = genl_family_add_op(family, id, flags);
+                       if (err < 0)
+                               goto errout;
+
+               }
+       }
+
+       err = pp->pp_cb((struct nl_object *) family, pp);
+errout:
+       genl_family_put(family);
+       return err;
+}
+
+/**
+ * @name Cache Management
+ * @{
+ */
+
+int genl_ctrl_alloc_cache(struct nl_sock *sock, struct nl_cache **result)
+{
+       return nl_cache_alloc_and_fill(&genl_ctrl_ops, sock, result);
+}
+
+/**
+ * Look up generic netlink family by id in the provided cache.
+ * @arg cache          Generic netlink family cache.
+ * @arg id             Family identifier.
+ *
+ * Searches through the cache looking for a registered family
+ * matching the specified identifier. The caller will own a
+ * reference on the returned object which needs to be given
+ * back after usage using genl_family_put().
+ *
+ * @return Generic netlink family object or NULL if no match was found.
+ */
+struct genl_family *genl_ctrl_search(struct nl_cache *cache, int id)
+{
+       struct genl_family *fam;
+
+       if (cache->c_ops != &genl_ctrl_ops)
+               BUG();
+
+       nl_list_for_each_entry(fam, &cache->c_items, ce_list) {
+               if (fam->gf_id == id) {
+                       nl_object_get((struct nl_object *) fam);
+                       return fam;
+               }
+       }
+
+       return NULL;
+}
+
+/**
+ * @name Resolver
+ * @{
+ */
+
+/**
+ * Look up generic netlink family by family name in the provided cache.
+ * @arg cache          Generic netlink family cache.
+ * @arg name           Family name.
+ *
+ * Searches through the cache looking for a registered family
+ * matching the specified name. The caller will own a reference
+ * on the returned object which needs to be given back after
+ * usage using genl_family_put().
+ *
+ * @return Generic netlink family object or NULL if no match was found.
+ */
+struct genl_family *genl_ctrl_search_by_name(struct nl_cache *cache,
+                                           const char *name)
+{
+       struct genl_family *fam;
+
+       if (cache->c_ops != &genl_ctrl_ops)
+               BUG();
+
+       nl_list_for_each_entry(fam, &cache->c_items, ce_list) {
+               if (!strcmp(name, fam->gf_name)) {
+                       nl_object_get((struct nl_object *) fam);
+                       return fam;
+               }
+       }
+
+       return NULL;
+}
+
+/** @} */
+
+/**
+ * Resolve generic netlink family name to its identifier
+ * @arg sk             Netlink socket.
+ * @arg name           Name of generic netlink family
+ *
+ * Resolves the generic netlink family name to its identifer and returns
+ * it.
+ *
+ * @return A positive identifier or a negative error code.
+ */
+int genl_ctrl_resolve(struct nl_sock *sk, const char *name)
+{
+       struct nl_cache *cache;
+       struct genl_family *family;
+       int err;
+
+       if ((err = genl_ctrl_alloc_cache(sk, &cache)) < 0)
+               return err;
+
+       family = genl_ctrl_search_by_name(cache, name);
+       if (family == NULL) {
+               err = -NLE_OBJ_NOTFOUND;
+               goto errout;
+       }
+
+       err = genl_family_get_id(family);
+       genl_family_put(family);
+errout:
+       nl_cache_free(cache);
+
+       return err;
+}
+
+/** @} */
+
+static struct genl_cmd genl_cmds[] = {
+       {
+               .c_id           = CTRL_CMD_NEWFAMILY,
+               .c_name         = "NEWFAMILY" ,
+               .c_maxattr      = CTRL_ATTR_MAX,
+               .c_attr_policy  = ctrl_policy,
+               .c_msg_parser   = ctrl_msg_parser,
+       },
+       {
+               .c_id           = CTRL_CMD_DELFAMILY,
+               .c_name         = "DELFAMILY" ,
+       },
+       {
+               .c_id           = CTRL_CMD_GETFAMILY,
+               .c_name         = "GETFAMILY" ,
+       },
+       {
+               .c_id           = CTRL_CMD_NEWOPS,
+               .c_name         = "NEWOPS" ,
+       },
+       {
+               .c_id           = CTRL_CMD_DELOPS,
+               .c_name         = "DELOPS" ,
+       },
+};
+
+static struct genl_ops genl_ops = {
+       .o_cmds                 = genl_cmds,
+       .o_ncmds                = ARRAY_SIZE(genl_cmds),
+};
+
+/** @cond SKIP */
+extern struct nl_object_ops genl_family_ops;
+/** @endcond */
+
+static struct nl_cache_ops genl_ctrl_ops = {
+       .co_name                = "genl/family",
+       .co_hdrsize             = GENL_HDRSIZE(0),
+       .co_msgtypes            = GENL_FAMILY(GENL_ID_CTRL, "nlctrl"),
+       .co_genl                = &genl_ops,
+       .co_protocol            = NETLINK_GENERIC,
+       .co_request_update      = ctrl_request_update,
+       .co_obj_ops             = &genl_family_ops,
+};
+
+static void __init ctrl_init(void)
+{
+       genl_register(&genl_ctrl_ops);
+}
+
+static void __exit ctrl_exit(void)
+{
+       genl_unregister(&genl_ctrl_ops);
+}
+
+/** @} */
diff --git a/package/libs/libnl-tiny/src/genl_family.c b/package/libs/libnl-tiny/src/genl_family.c
new file mode 100644 (file)
index 0000000..88aaad9
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+ * lib/genl/family.c           Generic Netlink Family
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
+ */
+
+/**
+ * @ingroup genl
+ * @defgroup genl_family Generic Netlink Family
+ * @brief
+ *
+ * @{
+ */
+
+#include <netlink-generic.h>
+#include <netlink/netlink.h>
+#include <netlink/genl/genl.h>
+#include <netlink/genl/family.h>
+#include <netlink/utils.h>
+
+struct nl_object_ops genl_family_ops;
+/** @endcond */
+
+static void family_constructor(struct nl_object *c)
+{
+       struct genl_family *family = (struct genl_family *) c;
+
+       nl_init_list_head(&family->gf_ops);
+}
+
+static void family_free_data(struct nl_object *c)
+{
+       struct genl_family *family = (struct genl_family *) c;
+       struct genl_family_op *ops, *tmp;
+
+       if (family == NULL)
+               return;
+
+       nl_list_for_each_entry_safe(ops, tmp, &family->gf_ops, o_list) {
+               nl_list_del(&ops->o_list);
+               free(ops);
+       }
+}
+
+static int family_clone(struct nl_object *_dst, struct nl_object *_src)
+{
+       struct genl_family *dst = nl_object_priv(_dst);
+       struct genl_family *src = nl_object_priv(_src);
+       struct genl_family_op *ops;
+       int err;
+
+       nl_list_for_each_entry(ops, &src->gf_ops, o_list) {
+               err = genl_family_add_op(dst, ops->o_id, ops->o_flags);
+               if (err < 0)
+                       return err;
+       }
+       
+       return 0;
+}
+
+static int family_compare(struct nl_object *_a, struct nl_object *_b,
+                         uint32_t attrs, int flags)
+{
+       struct genl_family *a = (struct genl_family *) _a;
+       struct genl_family *b = (struct genl_family *) _b;
+       int diff = 0;
+
+#define FAM_DIFF(ATTR, EXPR) ATTR_DIFF(attrs, FAMILY_ATTR_##ATTR, a, b, EXPR)
+
+       diff |= FAM_DIFF(ID,            a->gf_id != b->gf_id);
+       diff |= FAM_DIFF(VERSION,       a->gf_version != b->gf_version);
+       diff |= FAM_DIFF(HDRSIZE,       a->gf_hdrsize != b->gf_hdrsize);
+       diff |= FAM_DIFF(MAXATTR,       a->gf_maxattr != b->gf_maxattr);
+       diff |= FAM_DIFF(NAME,          strcmp(a->gf_name, b->gf_name));
+
+#undef FAM_DIFF
+
+       return diff;
+}
+
+
+/**
+ * @name Family Object
+ * @{
+ */
+
+struct genl_family *genl_family_alloc(void)
+{
+       return (struct genl_family *) nl_object_alloc(&genl_family_ops);
+}
+
+void genl_family_put(struct genl_family *family)
+{
+       nl_object_put((struct nl_object *) family);
+}
+
+/** @} */
+
+
+int genl_family_add_op(struct genl_family *family, int id, int flags)
+{
+       struct genl_family_op *op;
+
+       op = calloc(1, sizeof(*op));
+       if (op == NULL)
+               return -NLE_NOMEM;
+
+       op->o_id = id;
+       op->o_flags = flags;
+
+       nl_list_add_tail(&op->o_list, &family->gf_ops);
+       family->ce_mask |= FAMILY_ATTR_OPS;
+
+       return 0;
+}
+
+/** @} */
+
+/** @cond SKIP */
+struct nl_object_ops genl_family_ops = {
+       .oo_name                = "genl/family",
+       .oo_size                = sizeof(struct genl_family),
+       .oo_constructor         = family_constructor,
+       .oo_free_data           = family_free_data,
+       .oo_clone               = family_clone,
+       .oo_compare             = family_compare,
+       .oo_id_attrs            = FAMILY_ATTR_ID,
+};
+/** @endcond */
+
+/** @} */
diff --git a/package/libs/libnl-tiny/src/genl_mngt.c b/package/libs/libnl-tiny/src/genl_mngt.c
new file mode 100644 (file)
index 0000000..6c65179
--- /dev/null
@@ -0,0 +1,274 @@
+/*
+ * lib/genl/mngt.c             Generic Netlink Management
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
+ */
+
+/**
+ * @ingroup genl
+ * @defgroup genl_mngt Management
+ *
+ * @par 1) Registering a generic netlink module
+ * @code
+ * #include <netlink/genl/mngt.h>
+ *
+ * // First step is to define all the commands being used in
+ * // particular generic netlink family. The ID and name are
+ * // mandatory to be filled out. A callback function and
+ * // most the attribute policy that comes with it must be
+ * // defined for commands expected to be issued towards
+ * // userspace.
+ * static struct genl_cmd foo_cmds[] = {
+ *     {
+ *             .c_id           = FOO_CMD_NEW,
+ *             .c_name         = "NEWFOO" ,
+ *             .c_maxattr      = FOO_ATTR_MAX,
+ *             .c_attr_policy  = foo_policy,
+ *             .c_msg_parser   = foo_msg_parser,
+ *     },
+ *     {
+ *             .c_id           = FOO_CMD_DEL,
+ *             .c_name         = "DELFOO" ,
+ *     },
+ * };
+ *
+ * // The list of commands must then be integrated into a
+ * // struct genl_ops serving as handle for this particular
+ * // family.
+ * static struct genl_ops my_genl_ops = {
+ *     .o_cmds                 = foo_cmds,
+ *     .o_ncmds                = ARRAY_SIZE(foo_cmds),
+ * };
+ *
+ * // Using the above struct genl_ops an arbitary number of
+ * // cache handles can be associated to it.
+ * //
+ * // The macro GENL_HDRSIZE() must be used to specify the
+ * // length of the header to automatically take headers on
+ * // generic layers into account.
+ * //
+ * // The macro GENL_FAMILY() is used to represent the generic
+ * // netlink family id.
+ * static struct nl_cache_ops genl_foo_ops = {
+ *     .co_name                = "genl/foo",
+ *     .co_hdrsize             = GENL_HDRSIZE(sizeof(struct my_hdr)),
+ *     .co_msgtypes            = GENL_FAMILY(GENL_ID_GENERATE, "foo"),
+ *     .co_genl                = &my_genl_ops,
+ *     .co_protocol            = NETLINK_GENERIC,
+ *     .co_request_update      = foo_request_update,
+ *     .co_obj_ops             = &genl_foo_ops,
+ * };
+ *
+ * // Finally each cache handle for a generic netlink family
+ * // must be registered using genl_register().
+ * static void __init foo_init(void)
+ * {
+ *     genl_register(&genl_foo_ops);
+ * }
+ *
+ * // ... respectively unregsted again.
+ * static void __exit foo_exit(void)
+ * {
+ *     genl_unregister(&genl_foo_ops);
+ * }
+ * @endcode
+ * @{
+ */
+
+#include <netlink-generic.h>
+#include <netlink/netlink.h>
+#include <netlink/genl/genl.h>
+#include <netlink/genl/mngt.h>
+#include <netlink/genl/family.h>
+#include <netlink/genl/ctrl.h>
+#include <netlink/utils.h>
+
+static NL_LIST_HEAD(genl_ops_list);
+
+static int genl_msg_parser(struct nl_cache_ops *ops, struct sockaddr_nl *who,
+                          struct nlmsghdr *nlh, struct nl_parser_param *pp)
+{
+       int i, err;
+       struct genlmsghdr *ghdr;
+       struct genl_cmd *cmd;
+
+       ghdr = nlmsg_data(nlh);
+
+       if (ops->co_genl == NULL)
+               BUG();
+
+       for (i = 0; i < ops->co_genl->o_ncmds; i++) {
+               cmd = &ops->co_genl->o_cmds[i];
+               if (cmd->c_id == ghdr->cmd)
+                       goto found;
+       }
+
+       err = -NLE_MSGTYPE_NOSUPPORT;
+       goto errout;
+
+found:
+       if (cmd->c_msg_parser == NULL)
+               err = -NLE_OPNOTSUPP;
+       else {
+               struct nlattr *tb[cmd->c_maxattr + 1];
+               struct genl_info info = {
+                       .who = who,
+                       .nlh = nlh,
+                       .genlhdr = ghdr,
+                       .userhdr = genlmsg_data(ghdr),
+                       .attrs = tb,
+               };
+
+               err = nlmsg_parse(nlh, ops->co_hdrsize, tb, cmd->c_maxattr,
+                                 cmd->c_attr_policy);
+               if (err < 0)
+                       goto errout;
+
+               err = cmd->c_msg_parser(ops, cmd, &info, pp);
+       }
+errout:
+       return err;
+
+}
+
+#ifdef disabled
+char *genl_op2name(int family, int op, char *buf, size_t len)
+{
+       struct genl_ops *ops;
+       int i;
+
+       nl_list_for_each_entry(ops, &genl_ops_list, o_list) {
+               if (ops->o_family == family) {
+                       for (i = 0; i < ops->o_ncmds; i++) {
+                               struct genl_cmd *cmd;
+                               cmd = &ops->o_cmds[i];
+
+                               if (cmd->c_id == op) {
+                                       strncpy(buf, cmd->c_name, len - 1);
+                                       return buf;
+                               }
+                       }
+               }
+       }
+
+       strncpy(buf, "unknown", len - 1);
+       return NULL;
+}
+#endif
+
+/**
+ * @name Register/Unregister
+ * @{
+ */
+
+/**
+ * Register generic netlink operations
+ * @arg ops            cache operations
+ */
+int genl_register(struct nl_cache_ops *ops)
+{
+       int err;
+
+       if (ops->co_protocol != NETLINK_GENERIC) {
+               err = -NLE_PROTO_MISMATCH;
+               goto errout;
+       }
+
+       if (ops->co_hdrsize < GENL_HDRSIZE(0)) {
+               err = -NLE_INVAL;
+               goto errout;
+       }
+
+       if (ops->co_genl == NULL) {
+               err = -NLE_INVAL;
+               goto errout;
+       }
+
+       ops->co_genl->o_cache_ops = ops;
+       ops->co_genl->o_name = ops->co_msgtypes[0].mt_name;
+       ops->co_genl->o_family = ops->co_msgtypes[0].mt_id;
+       ops->co_msg_parser = genl_msg_parser;
+
+       /* FIXME: check for dup */
+
+       nl_list_add_tail(&ops->co_genl->o_list, &genl_ops_list);
+
+       err = nl_cache_mngt_register(ops);
+errout:
+       return err;
+}
+
+/**
+ * Unregister generic netlink operations
+ * @arg ops            cache operations
+ */
+void genl_unregister(struct nl_cache_ops *ops)
+{
+       nl_cache_mngt_unregister(ops);
+       nl_list_del(&ops->co_genl->o_list);
+}
+
+/** @} */
+
+/**
+ * @name Resolving ID/Name
+ * @{
+ */
+#ifdef disabled
+static int __genl_ops_resolve(struct nl_cache *ctrl, struct genl_ops *ops)
+{
+       struct genl_family *family;
+
+       family = genl_ctrl_search_by_name(ctrl, ops->o_name);
+       if (family != NULL) {
+               ops->o_id = genl_family_get_id(family);
+               genl_family_put(family);
+
+               return 0;
+       }
+
+       return -NLE_OBJ_NOTFOUND;
+}
+
+int genl_ops_resolve(struct nl_sock *sk, struct genl_ops *ops)
+{
+       struct nl_cache *ctrl;
+       int err;
+
+       if ((err = genl_ctrl_alloc_cache(sk, &ctrl)) < 0)
+               goto errout;
+
+       err = __genl_ops_resolve(ctrl, ops);
+
+       nl_cache_free(ctrl);
+errout:
+       return err;
+}
+
+int genl_mngt_resolve(struct nl_sock *sk)
+{
+       struct nl_cache *ctrl;
+       struct genl_ops *ops;
+       int err = 0;
+
+       if ((err = genl_ctrl_alloc_cache(sk, &ctrl)) < 0)
+               goto errout;
+
+       nl_list_for_each_entry(ops, &genl_ops_list, o_list) {
+               err = __genl_ops_resolve(ctrl, ops);
+       }
+
+       nl_cache_free(ctrl);
+errout:
+       return err;
+}
+#endif
+/** @} */
+
+
+/** @} */
diff --git a/package/libs/libnl-tiny/src/handlers.c b/package/libs/libnl-tiny/src/handlers.c
new file mode 100644 (file)
index 0000000..12ebda5
--- /dev/null
@@ -0,0 +1,162 @@
+/*
+ * lib/handlers.c      default netlink message handlers
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
+ */
+
+/**
+ * @ingroup core
+ * @defgroup cb Callbacks/Customization
+ *
+ * @details
+ * @par 1) Setting up a callback set
+ * @code
+ * // Allocate a callback set and initialize it to the verbose default set
+ * struct nl_cb *cb = nl_cb_alloc(NL_CB_VERBOSE);
+ *
+ * // Modify the set to call my_func() for all valid messages
+ * nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, my_func, NULL);
+ *
+ * // Set the error message handler to the verbose default implementation
+ * // and direct it to print all errors to the given file descriptor.
+ * FILE *file = fopen(...);
+ * nl_cb_err(cb, NL_CB_VERBOSE, NULL, file);
+ * @endcode
+ * @{
+ */
+
+#include <netlink-local.h>
+#include <netlink/netlink.h>
+#include <netlink/utils.h>
+#include <netlink/msg.h>
+#include <netlink/handlers.h>
+
+/**
+ * @name Callback Handle Management
+ * @{
+ */
+
+/**
+ * Allocate a new callback handle
+ * @arg kind           callback kind to be used for initialization
+ * @return Newly allocated callback handle or NULL
+ */
+struct nl_cb *nl_cb_alloc(enum nl_cb_kind kind)
+{
+       int i;
+       struct nl_cb *cb;
+
+       if (kind < 0 || kind > NL_CB_KIND_MAX)
+               return NULL;
+
+       cb = calloc(1, sizeof(*cb));
+       if (!cb)
+               return NULL;
+
+       cb->cb_refcnt = 1;
+
+       for (i = 0; i <= NL_CB_TYPE_MAX; i++)
+               nl_cb_set(cb, i, kind, NULL, NULL);
+
+       nl_cb_err(cb, kind, NULL, NULL);
+
+       return cb;
+}
+
+/**
+ * Clone an existing callback handle
+ * @arg orig           original callback handle
+ * @return Newly allocated callback handle being a duplicate of
+ *         orig or NULL
+ */
+struct nl_cb *nl_cb_clone(struct nl_cb *orig)
+{
+       struct nl_cb *cb;
+       
+       cb = nl_cb_alloc(NL_CB_DEFAULT);
+       if (!cb)
+               return NULL;
+
+       memcpy(cb, orig, sizeof(*orig));
+       cb->cb_refcnt = 1;
+
+       return cb;
+}
+
+void nl_cb_put(struct nl_cb *cb)
+{
+       if (!cb)
+               return;
+
+       cb->cb_refcnt--;
+
+       if (cb->cb_refcnt < 0)
+               BUG();
+
+       if (cb->cb_refcnt <= 0)
+               free(cb);
+}
+
+/** @} */
+
+/**
+ * @name Callback Setup
+ * @{
+ */
+
+/**
+ * Set up a callback 
+ * @arg cb             callback set
+ * @arg type           callback to modify
+ * @arg kind           kind of implementation
+ * @arg func           callback function (NL_CB_CUSTOM)
+ * @arg arg            argument passed to callback
+ *
+ * @return 0 on success or a negative error code
+ */
+int nl_cb_set(struct nl_cb *cb, enum nl_cb_type type, enum nl_cb_kind kind,
+             nl_recvmsg_msg_cb_t func, void *arg)
+{
+       if (type < 0 || type > NL_CB_TYPE_MAX)
+               return -NLE_RANGE;
+
+       if (kind < 0 || kind > NL_CB_KIND_MAX)
+               return -NLE_RANGE;
+
+       if (kind == NL_CB_CUSTOM) {
+               cb->cb_set[type] = func;
+               cb->cb_args[type] = arg;
+       }
+
+       return 0;
+}
+
+/**
+ * Set up an error callback
+ * @arg cb             callback set
+ * @arg kind           kind of callback
+ * @arg func           callback function
+ * @arg arg            argument to be passed to callback function
+ */
+int nl_cb_err(struct nl_cb *cb, enum nl_cb_kind kind,
+             nl_recvmsg_err_cb_t func, void *arg)
+{
+       if (kind < 0 || kind > NL_CB_KIND_MAX)
+               return -NLE_RANGE;
+
+       if (kind == NL_CB_CUSTOM) {
+               cb->cb_err = func;
+               cb->cb_err_arg = arg;
+       }
+
+       return 0;
+}
+
+/** @} */
+
+/** @} */
diff --git a/package/libs/libnl-tiny/src/include/linux/gen_stats.h b/package/libs/libnl-tiny/src/include/linux/gen_stats.h
new file mode 100644 (file)
index 0000000..13f4e74
--- /dev/null
@@ -0,0 +1,67 @@
+#ifndef __LINUX_GEN_STATS_H
+#define __LINUX_GEN_STATS_H
+
+#include <linux/types.h>
+
+enum {
+       TCA_STATS_UNSPEC,
+       TCA_STATS_BASIC,
+       TCA_STATS_RATE_EST,
+       TCA_STATS_QUEUE,
+       TCA_STATS_APP,
+       __TCA_STATS_MAX,
+};
+#define TCA_STATS_MAX (__TCA_STATS_MAX - 1)
+
+/**
+ * struct gnet_stats_basic - byte/packet throughput statistics
+ * @bytes: number of seen bytes
+ * @packets: number of seen packets
+ */
+struct gnet_stats_basic
+{
+       __u64   bytes;
+       __u32   packets;
+};
+
+/**
+ * struct gnet_stats_rate_est - rate estimator
+ * @bps: current byte rate
+ * @pps: current packet rate
+ */
+struct gnet_stats_rate_est
+{
+       __u32   bps;
+       __u32   pps;
+};
+
+/**
+ * struct gnet_stats_queue - queuing statistics
+ * @qlen: queue length
+ * @backlog: backlog size of queue
+ * @drops: number of dropped packets
+ * @requeues: number of requeues
+ * @overlimits: number of enqueues over the limit
+ */
+struct gnet_stats_queue
+{
+       __u32   qlen;
+       __u32   backlog;
+       __u32   drops;
+       __u32   requeues;
+       __u32   overlimits;
+};
+
+/**
+ * struct gnet_estimator - rate estimator configuration
+ * @interval: sampling period
+ * @ewma_log: the log of measurement window weight
+ */
+struct gnet_estimator
+{
+       signed char     interval;
+       unsigned char   ewma_log;
+};
+
+
+#endif /* __LINUX_GEN_STATS_H */
diff --git a/package/libs/libnl-tiny/src/include/linux/genetlink.h b/package/libs/libnl-tiny/src/include/linux/genetlink.h
new file mode 100644 (file)
index 0000000..b834ef6
--- /dev/null
@@ -0,0 +1,83 @@
+#ifndef __LINUX_GENERIC_NETLINK_H
+#define __LINUX_GENERIC_NETLINK_H
+
+#include <linux/types.h>
+#include <linux/netlink.h>
+
+#define GENL_NAMSIZ    16      /* length of family name */
+
+#define GENL_MIN_ID    NLMSG_MIN_TYPE
+#define GENL_MAX_ID    1023
+
+struct genlmsghdr {
+       __u8    cmd;
+       __u8    version;
+       __u16   reserved;
+};
+
+#define GENL_HDRLEN    NLMSG_ALIGN(sizeof(struct genlmsghdr))
+
+#define GENL_ADMIN_PERM                0x01
+#define GENL_CMD_CAP_DO                0x02
+#define GENL_CMD_CAP_DUMP      0x04
+#define GENL_CMD_CAP_HASPOL    0x08
+
+/*
+ * List of reserved static generic netlink identifiers:
+ */
+#define GENL_ID_GENERATE       0
+#define GENL_ID_CTRL           NLMSG_MIN_TYPE
+
+/**************************************************************************
+ * Controller
+ **************************************************************************/
+
+enum {
+       CTRL_CMD_UNSPEC,
+       CTRL_CMD_NEWFAMILY,
+       CTRL_CMD_DELFAMILY,
+       CTRL_CMD_GETFAMILY,
+       CTRL_CMD_NEWOPS,
+       CTRL_CMD_DELOPS,
+       CTRL_CMD_GETOPS,
+       CTRL_CMD_NEWMCAST_GRP,
+       CTRL_CMD_DELMCAST_GRP,
+       CTRL_CMD_GETMCAST_GRP, /* unused */
+       __CTRL_CMD_MAX,
+};
+
+#define CTRL_CMD_MAX (__CTRL_CMD_MAX - 1)
+
+enum {
+       CTRL_ATTR_UNSPEC,
+       CTRL_ATTR_FAMILY_ID,
+       CTRL_ATTR_FAMILY_NAME,
+       CTRL_ATTR_VERSION,
+       CTRL_ATTR_HDRSIZE,
+       CTRL_ATTR_MAXATTR,
+       CTRL_ATTR_OPS,
+       CTRL_ATTR_MCAST_GROUPS,
+       __CTRL_ATTR_MAX,
+};
+
+#define CTRL_ATTR_MAX (__CTRL_ATTR_MAX - 1)
+
+enum {
+       CTRL_ATTR_OP_UNSPEC,
+       CTRL_ATTR_OP_ID,
+       CTRL_ATTR_OP_FLAGS,
+       __CTRL_ATTR_OP_MAX,
+};
+
+#define CTRL_ATTR_OP_MAX (__CTRL_ATTR_OP_MAX - 1)
+
+enum {
+       CTRL_ATTR_MCAST_GRP_UNSPEC,
+       CTRL_ATTR_MCAST_GRP_NAME,
+       CTRL_ATTR_MCAST_GRP_ID,
+       __CTRL_ATTR_MCAST_GRP_MAX,
+};
+
+#define CTRL_ATTR_MCAST_GRP_MAX (__CTRL_ATTR_MCAST_GRP_MAX - 1)
+
+#endif /* __LINUX_GENERIC_NETLINK_H */
diff --git a/package/libs/libnl-tiny/src/include/linux/if.h b/package/libs/libnl-tiny/src/include/linux/if.h
new file mode 100644 (file)
index 0000000..4c1bcfe
--- /dev/null
@@ -0,0 +1,131 @@
+/*
+ * INET                An implementation of the TCP/IP protocol suite for the LINUX
+ *             operating system.  INET is implemented using the  BSD Socket
+ *             interface as the means of communication with the user level.
+ *
+ *             Global definitions for the INET interface module.
+ *
+ * Version:    @(#)if.h        1.0.2   04/18/93
+ *
+ * Authors:    Original taken from Berkeley UNIX 4.3, (c) UCB 1982-1988
+ *             Ross Biro
+ *             Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *
+ *             This program is free software; you can redistribute it and/or
+ *             modify it under the terms of the GNU General Public License
+ *             as published by the Free Software Foundation; either version
+ *             2 of the License, or (at your option) any later version.
+ */
+#ifndef _LINUX_IF_H
+#define _LINUX_IF_H
+
+#include <linux/types.h>               /* for "__kernel_caddr_t" et al */
+
+#define        IFNAMSIZ        16
+
+/* Standard interface flags (netdevice->flags). */
+#define        IFF_UP          0x1             /* interface is up              */
+#define        IFF_BROADCAST   0x2             /* broadcast address valid      */
+#define        IFF_DEBUG       0x4             /* turn on debugging            */
+#define        IFF_LOOPBACK    0x8             /* is a loopback net            */
+#define        IFF_POINTOPOINT 0x10            /* interface is has p-p link    */
+#define        IFF_NOTRAILERS  0x20            /* avoid use of trailers        */
+#define        IFF_RUNNING     0x40            /* interface RFC2863 OPER_UP    */
+#define        IFF_NOARP       0x80            /* no ARP protocol              */
+#define        IFF_PROMISC     0x100           /* receive all packets          */
+#define        IFF_ALLMULTI    0x200           /* receive all multicast packets*/
+
+#define IFF_MASTER     0x400           /* master of a load balancer    */
+#define IFF_SLAVE      0x800           /* slave of a load balancer     */
+
+#define IFF_MULTICAST  0x1000          /* Supports multicast           */
+
+#define IFF_PORTSEL    0x2000          /* can set media type           */
+#define IFF_AUTOMEDIA  0x4000          /* auto media select active     */
+#define IFF_DYNAMIC    0x8000          /* dialup device with changing addresses*/
+
+#define IFF_LOWER_UP   0x10000         /* driver signals L1 up         */
+#define IFF_DORMANT    0x20000         /* driver signals dormant       */
+
+#define IFF_ECHO       0x40000         /* echo sent packets            */
+
+#define IFF_VOLATILE   (IFF_LOOPBACK|IFF_POINTOPOINT|IFF_BROADCAST|IFF_ECHO|\
+               IFF_MASTER|IFF_SLAVE|IFF_RUNNING|IFF_LOWER_UP|IFF_DORMANT)
+
+/* Private (from user) interface flags (netdevice->priv_flags). */
+#define IFF_802_1Q_VLAN 0x1             /* 802.1Q VLAN device.          */
+#define IFF_EBRIDGE    0x2             /* Ethernet bridging device.    */
+#define IFF_SLAVE_INACTIVE     0x4     /* bonding slave not the curr. active */
+#define IFF_MASTER_8023AD      0x8     /* bonding master, 802.3ad.     */
+#define IFF_MASTER_ALB 0x10            /* bonding master, balance-alb. */
+#define IFF_BONDING    0x20            /* bonding master or slave      */
+#define IFF_SLAVE_NEEDARP 0x40         /* need ARPs for validation     */
+#define IFF_ISATAP     0x80            /* ISATAP interface (RFC4214)   */
+
+#define IF_GET_IFACE   0x0001          /* for querying only */
+#define IF_GET_PROTO   0x0002
+
+/* For definitions see hdlc.h */
+#define IF_IFACE_V35   0x1000          /* V.35 serial interface        */
+#define IF_IFACE_V24   0x1001          /* V.24 serial interface        */
+#define IF_IFACE_X21   0x1002          /* X.21 serial interface        */
+#define IF_IFACE_T1    0x1003          /* T1 telco serial interface    */
+#define IF_IFACE_E1    0x1004          /* E1 telco serial interface    */
+#define IF_IFACE_SYNC_SERIAL 0x1005    /* can't be set by software     */
+#define IF_IFACE_X21D   0x1006          /* X.21 Dual Clocking (FarSite) */
+
+/* For definitions see hdlc.h */
+#define IF_PROTO_HDLC  0x2000          /* raw HDLC protocol            */
+#define IF_PROTO_PPP   0x2001          /* PPP protocol                 */
+#define IF_PROTO_CISCO 0x2002          /* Cisco HDLC protocol          */
+#define IF_PROTO_FR    0x2003          /* Frame Relay protocol         */
+#define IF_PROTO_FR_ADD_PVC 0x2004     /*    Create FR PVC             */
+#define IF_PROTO_FR_DEL_PVC 0x2005     /*    Delete FR PVC             */
+#define IF_PROTO_X25   0x2006          /* X.25                         */
+#define IF_PROTO_HDLC_ETH 0x2007       /* raw HDLC, Ethernet emulation */
+#define IF_PROTO_FR_ADD_ETH_PVC 0x2008 /*  Create FR Ethernet-bridged PVC */
+#define IF_PROTO_FR_DEL_ETH_PVC 0x2009 /*  Delete FR Ethernet-bridged PVC */
+#define IF_PROTO_FR_PVC        0x200A          /* for reading PVC status       */
+#define IF_PROTO_FR_ETH_PVC 0x200B
+#define IF_PROTO_RAW    0x200C          /* RAW Socket                   */
+
+/* RFC 2863 operational status */
+enum {
+       IF_OPER_UNKNOWN,
+       IF_OPER_NOTPRESENT,
+       IF_OPER_DOWN,
+       IF_OPER_LOWERLAYERDOWN,
+       IF_OPER_TESTING,
+       IF_OPER_DORMANT,
+       IF_OPER_UP,
+};
+
+/* link modes */
+enum {
+       IF_LINK_MODE_DEFAULT,
+       IF_LINK_MODE_DORMANT,   /* limit upward transition to dormant */
+};
+
+/*
+ *     Device mapping structure. I'd just gone off and designed a 
+ *     beautiful scheme using only loadable modules with arguments
+ *     for driver options and along come the PCMCIA people 8)
+ *
+ *     Ah well. The get() side of this is good for WDSETUP, and it'll
+ *     be handy for debugging things. The set side is fine for now and
+ *     being very small might be worth keeping for clean configuration.
+ */
+
+struct ifmap 
+{
+       unsigned long mem_start;
+       unsigned long mem_end;
+       unsigned short base_addr; 
+       unsigned char irq;
+       unsigned char dma;
+       unsigned char port;
+       /* 3 bytes spare */
+};
+
+
+#endif /* _LINUX_IF_H */
diff --git a/package/libs/libnl-tiny/src/include/linux/if_addr.h b/package/libs/libnl-tiny/src/include/linux/if_addr.h
new file mode 100644 (file)
index 0000000..43f3bed
--- /dev/null
@@ -0,0 +1,62 @@
+#ifndef __LINUX_IF_ADDR_H
+#define __LINUX_IF_ADDR_H
+
+#include <linux/netlink.h>
+
+struct ifaddrmsg
+{
+       __u8            ifa_family;
+       __u8            ifa_prefixlen;  /* The prefix length            */
+       __u8            ifa_flags;      /* Flags                        */
+       __u8            ifa_scope;      /* Address scope                */
+       __u32           ifa_index;      /* Link index                   */
+};
+
+/*
+ * Important comment:
+ * IFA_ADDRESS is prefix address, rather than local interface address.
+ * It makes no difference for normally configured broadcast interfaces,
+ * but for point-to-point IFA_ADDRESS is DESTINATION address,
+ * local address is supplied in IFA_LOCAL attribute.
+ */
+enum
+{
+       IFA_UNSPEC,
+       IFA_ADDRESS,
+       IFA_LOCAL,
+       IFA_LABEL,
+       IFA_BROADCAST,
+       IFA_ANYCAST,
+       IFA_CACHEINFO,
+       IFA_MULTICAST,
+       __IFA_MAX,
+};
+
+#define IFA_MAX (__IFA_MAX - 1)
+
+/* ifa_flags */
+#define IFA_F_SECONDARY                0x01
+#define IFA_F_TEMPORARY                IFA_F_SECONDARY
+
+#define        IFA_F_NODAD             0x02
+#define IFA_F_OPTIMISTIC       0x04
+#define        IFA_F_HOMEADDRESS       0x10
+#define IFA_F_DEPRECATED       0x20
+#define IFA_F_TENTATIVE                0x40
+#define IFA_F_PERMANENT                0x80
+
+struct ifa_cacheinfo
+{
+       __u32   ifa_prefered;
+       __u32   ifa_valid;
+       __u32   cstamp; /* created timestamp, hundredths of seconds */
+       __u32   tstamp; /* updated timestamp, hundredths of seconds */
+};
+
+/* backwards compatibility for userspace */
+#ifndef __KERNEL__
+#define IFA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifaddrmsg))))
+#define IFA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifaddrmsg))
+#endif
+
+#endif
diff --git a/package/libs/libnl-tiny/src/include/linux/netlink.h b/package/libs/libnl-tiny/src/include/linux/netlink.h
new file mode 100644 (file)
index 0000000..d252103
--- /dev/null
@@ -0,0 +1,150 @@
+#ifndef __LINUX_NETLINK_H
+#define __LINUX_NETLINK_H
+
+#include <linux/socket.h> /* for sa_family_t */
+#include <linux/types.h>
+
+#define NETLINK_ROUTE          0       /* Routing/device hook                          */
+#define NETLINK_UNUSED         1       /* Unused number                                */
+#define NETLINK_USERSOCK       2       /* Reserved for user mode socket protocols      */
+#define NETLINK_FIREWALL       3       /* Firewalling hook                             */
+#define NETLINK_INET_DIAG      4       /* INET socket monitoring                       */
+#define NETLINK_NFLOG          5       /* netfilter/iptables ULOG */
+#define NETLINK_XFRM           6       /* ipsec */
+#define NETLINK_SELINUX                7       /* SELinux event notifications */
+#define NETLINK_ISCSI          8       /* Open-iSCSI */
+#define NETLINK_AUDIT          9       /* auditing */
+#define NETLINK_FIB_LOOKUP     10      
+#define NETLINK_CONNECTOR      11
+#define NETLINK_NETFILTER      12      /* netfilter subsystem */
+#define NETLINK_IP6_FW         13
+#define NETLINK_DNRTMSG                14      /* DECnet routing messages */
+#define NETLINK_KOBJECT_UEVENT 15      /* Kernel messages to userspace */
+#define NETLINK_GENERIC                16
+/* leave room for NETLINK_DM (DM Events) */
+#define NETLINK_SCSITRANSPORT  18      /* SCSI Transports */
+#define NETLINK_ECRYPTFS       19
+
+#define MAX_LINKS 32           
+
+struct sockaddr_nl
+{
+       sa_family_t     nl_family;      /* AF_NETLINK   */
+       unsigned short  nl_pad;         /* zero         */
+       __u32           nl_pid;         /* port ID      */
+               __u32           nl_groups;      /* multicast groups mask */
+};
+
+struct nlmsghdr
+{
+       __u32           nlmsg_len;      /* Length of message including header */
+       __u16           nlmsg_type;     /* Message content */
+       __u16           nlmsg_flags;    /* Additional flags */
+       __u32           nlmsg_seq;      /* Sequence number */
+       __u32           nlmsg_pid;      /* Sending process port ID */
+};
+
+/* Flags values */
+
+#define NLM_F_REQUEST          1       /* It is request message.       */
+#define NLM_F_MULTI            2       /* Multipart message, terminated by NLMSG_DONE */
+#define NLM_F_ACK              4       /* Reply with ack, with zero or error code */
+#define NLM_F_ECHO             8       /* Echo this request            */
+
+/* Modifiers to GET request */
+#define NLM_F_ROOT     0x100   /* specify tree root    */
+#define NLM_F_MATCH    0x200   /* return all matching  */
+#define NLM_F_ATOMIC   0x400   /* atomic GET           */
+#define NLM_F_DUMP     (NLM_F_ROOT|NLM_F_MATCH)
+
+/* Modifiers to NEW request */
+#define NLM_F_REPLACE  0x100   /* Override existing            */
+#define NLM_F_EXCL     0x200   /* Do not touch, if it exists   */
+#define NLM_F_CREATE   0x400   /* Create, if it does not exist */
+#define NLM_F_APPEND   0x800   /* Add to end of list           */
+
+/*
+   4.4BSD ADD          NLM_F_CREATE|NLM_F_EXCL
+   4.4BSD CHANGE       NLM_F_REPLACE
+
+   True CHANGE         NLM_F_CREATE|NLM_F_REPLACE
+   Append              NLM_F_CREATE
+   Check               NLM_F_EXCL
+ */
+
+#define NLMSG_ALIGNTO  4
+#define NLMSG_ALIGN(len) ( ((len)+NLMSG_ALIGNTO-1) & ~(NLMSG_ALIGNTO-1) )
+#define NLMSG_HDRLEN    ((int) NLMSG_ALIGN(sizeof(struct nlmsghdr)))
+#define NLMSG_LENGTH(len) ((len)+NLMSG_ALIGN(NLMSG_HDRLEN))
+#define NLMSG_SPACE(len) NLMSG_ALIGN(NLMSG_LENGTH(len))
+#define NLMSG_DATA(nlh)  ((void*)(((char*)nlh) + NLMSG_LENGTH(0)))
+#define NLMSG_NEXT(nlh,len)     ((len) -= NLMSG_ALIGN((nlh)->nlmsg_len), \
+                                 (struct nlmsghdr*)(((char*)(nlh)) + NLMSG_ALIGN((nlh)->nlmsg_len)))
+#define NLMSG_OK(nlh,len) ((len) >= (int)sizeof(struct nlmsghdr) && \
+                          (nlh)->nlmsg_len >= sizeof(struct nlmsghdr) && \
+                          (nlh)->nlmsg_len <= (len))
+#define NLMSG_PAYLOAD(nlh,len) ((nlh)->nlmsg_len - NLMSG_SPACE((len)))
+
+#define NLMSG_NOOP             0x1     /* Nothing.             */
+#define NLMSG_ERROR            0x2     /* Error                */
+#define NLMSG_DONE             0x3     /* End of a dump        */
+#define NLMSG_OVERRUN          0x4     /* Data lost            */
+
+#define NLMSG_MIN_TYPE         0x10    /* < 0x10: reserved control messages */
+
+struct nlmsgerr
+{
+       int             error;
+       struct nlmsghdr msg;
+};
+
+#define NETLINK_ADD_MEMBERSHIP 1
+#define NETLINK_DROP_MEMBERSHIP        2
+#define NETLINK_PKTINFO                3
+
+struct nl_pktinfo
+{
+       __u32   group;
+};
+
+#define NET_MAJOR 36           /* Major 36 is reserved for networking                                          */
+
+enum {
+       NETLINK_UNCONNECTED = 0,
+       NETLINK_CONNECTED,
+};
+
+/*
+ *  <------- NLA_HDRLEN ------> <-- NLA_ALIGN(payload)-->
+ * +---------------------+- - -+- - - - - - - - - -+- - -+
+ * |        Header       | Pad |     Payload       | Pad |
+ * |   (struct nlattr)   | ing |                   | ing |
+ * +---------------------+- - -+- - - - - - - - - -+- - -+
+ *  <-------------- nlattr->nla_len -------------->
+ */
+
+struct nlattr
+{
+       __u16           nla_len;
+       __u16           nla_type;
+};
+
+/*
+ * nla_type (16 bits)
+ * +---+---+-------------------------------+
+ * | N | O | Attribute Type                |
+ * +---+---+-------------------------------+
+ * N := Carries nested attributes
+ * O := Payload stored in network byte order
+ *
+ * Note: The N and O flag are mutually exclusive.
+ */
+#define NLA_F_NESTED           (1 << 15)
+#define NLA_F_NET_BYTEORDER    (1 << 14)
+#define NLA_TYPE_MASK          ~(NLA_F_NESTED | NLA_F_NET_BYTEORDER)
+
+#define NLA_ALIGNTO            4
+#define NLA_ALIGN(len)         (((len) + NLA_ALIGNTO - 1) & ~(NLA_ALIGNTO - 1))
+#define NLA_HDRLEN             ((int) NLA_ALIGN(sizeof(struct nlattr)))
+
+#endif /* __LINUX_NETLINK_H */
diff --git a/package/libs/libnl-tiny/src/include/netlink-generic.h b/package/libs/libnl-tiny/src/include/netlink-generic.h
new file mode 100644 (file)
index 0000000..10aa2f0
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * netlink-generic.h   Local Generic Netlink Interface
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
+ */
+
+#ifndef NETLINK_GENL_PRIV_H_
+#define NETLINK_GENL_PRIV_H_
+
+#include <netlink-local.h>
+#include <netlink/netlink.h>
+
+#define GENL_HDRSIZE(hdrlen) (GENL_HDRLEN + (hdrlen))
+
+#endif
diff --git a/package/libs/libnl-tiny/src/include/netlink-local.h b/package/libs/libnl-tiny/src/include/netlink-local.h
new file mode 100644 (file)
index 0000000..330100e
--- /dev/null
@@ -0,0 +1,158 @@
+/*
+ * netlink-local.h             Local Netlink Interface
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
+ */
+
+#ifndef NETLINK_LOCAL_H_
+#define NETLINK_LOCAL_H_
+#define _GNU_SOURCE
+
+#include <stdio.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <math.h>
+#include <time.h>
+#include <stdarg.h>
+#include <ctype.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <inttypes.h>
+#include <assert.h>
+#include <limits.h>
+
+#include <arpa/inet.h>
+#include <netdb.h>
+
+#ifndef SOL_NETLINK
+#define SOL_NETLINK 270
+#endif
+
+#include <linux/types.h>
+
+/* local header copies */
+#include <linux/if.h>
+#include <linux/if_arp.h>
+#include <linux/if_ether.h>
+#include <linux/pkt_sched.h>
+#include <linux/pkt_cls.h>
+#include <linux/gen_stats.h>
+
+#include <netlink/netlink.h>
+#include <netlink/handlers.h>
+#include <netlink/cache.h>
+#include <netlink/object-api.h>
+#include <netlink/cache-api.h>
+#include <netlink-types.h>
+
+struct trans_tbl {
+       int i;
+       const char *a;
+};
+
+#define __ADD(id, name) { .i = id, .a = #name },
+
+struct trans_list {
+       int i;
+       char *a;
+       struct nl_list_head list;
+};
+
+#define NL_DEBUG       1
+
+#define NL_DBG(LVL,FMT,ARG...) \
+       do {} while (0)
+
+#define BUG()                            \
+       do {                                 \
+               fprintf(stderr, "BUG: %s:%d\n",  \
+                       __FILE__, __LINE__);         \
+               assert(0);      \
+       } while (0)
+
+extern int __nl_read_num_str_file(const char *path,
+                                 int (*cb)(long, const char *));
+
+extern int __trans_list_add(int, const char *, struct nl_list_head *);
+extern void __trans_list_clear(struct nl_list_head *);
+
+extern char *__type2str(int, char *, size_t, struct trans_tbl *, size_t);
+extern int __str2type(const char *, struct trans_tbl *, size_t);
+
+extern char *__list_type2str(int, char *, size_t, struct nl_list_head *);
+extern int __list_str2type(const char *, struct nl_list_head *);
+
+extern char *__flags2str(int, char *, size_t, struct trans_tbl *, size_t);
+extern int __str2flags(const char *, struct trans_tbl *, size_t);
+
+extern void dump_from_ops(struct nl_object *, struct nl_dump_params *);
+
+#ifdef disabled
+static inline struct nl_cache *dp_cache(struct nl_object *obj)
+{
+       if (obj->ce_cache == NULL)
+               return nl_cache_mngt_require(obj->ce_ops->oo_name);
+
+       return obj->ce_cache;
+}
+#endif
+
+static inline int nl_cb_call(struct nl_cb *cb, int type, struct nl_msg *msg)
+{
+       return cb->cb_set[type](msg, cb->cb_args[type]);
+}
+
+#define ARRAY_SIZE(X) (sizeof(X) / sizeof((X)[0]))
+#ifndef offsetof
+#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
+#endif
+
+#define __init __attribute__ ((constructor))
+#define __exit __attribute__ ((destructor))
+#undef __deprecated
+#define __deprecated __attribute__ ((deprecated))
+
+#define min(x,y) ({ \
+       typeof(x) _x = (x);     \
+       typeof(y) _y = (y);     \
+       (void) (&_x == &_y);            \
+       _x < _y ? _x : _y; })
+
+#define max(x,y) ({ \
+       typeof(x) _x = (x);     \
+       typeof(y) _y = (y);     \
+       (void) (&_x == &_y);            \
+       _x > _y ? _x : _y; })
+
+extern int nl_cache_parse(struct nl_cache_ops *, struct sockaddr_nl *,
+                         struct nlmsghdr *, struct nl_parser_param *);
+
+
+static inline char *nl_cache_name(struct nl_cache *cache)
+{
+       return cache->c_ops ? cache->c_ops->co_name : "unknown";
+}
+
+#define GENL_FAMILY(id, name) \
+       { \
+               { id, NL_ACT_UNSPEC, name }, \
+               END_OF_MSGTYPES_LIST, \
+       }
+
+static inline int wait_for_ack(struct nl_sock *sk)
+{
+       if (sk->s_flags & NL_NO_AUTO_ACK)
+               return 0;
+       else
+               return nl_wait_for_ack(sk);
+}
+
+#endif
diff --git a/package/libs/libnl-tiny/src/include/netlink-types.h b/package/libs/libnl-tiny/src/include/netlink-types.h
new file mode 100644 (file)
index 0000000..0d00593
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * netlink-types.h     Netlink Types (Private)
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
+ */
+
+#ifndef NETLINK_LOCAL_TYPES_H_
+#define NETLINK_LOCAL_TYPES_H_
+
+#include <netlink/list.h>
+
+struct nl_cache_ops;
+struct nl_sock;
+struct nl_object;
+
+struct nl_cache
+{
+       struct nl_list_head     c_items;
+       int                     c_nitems;
+       int                     c_iarg1;
+       int                     c_iarg2;
+       struct nl_cache_ops *   c_ops;
+};
+
+struct nl_cache_assoc
+{
+       struct nl_cache *       ca_cache;
+       change_func_t           ca_change;
+};
+
+struct nl_cache_mngr
+{
+       int                     cm_protocol;
+       int                     cm_flags;
+       int                     cm_nassocs;
+       struct nl_sock *        cm_handle;
+       struct nl_cache_assoc * cm_assocs;
+};
+
+struct nl_parser_param;
+
+#define LOOSE_COMPARISON       1
+
+
+struct nl_data
+{
+       size_t                  d_size;
+       void *                  d_data;
+};
+
+struct nl_addr
+{
+       int                     a_family;
+       unsigned int            a_maxsize;
+       unsigned int            a_len;
+       int                     a_prefixlen;
+       int                     a_refcnt;
+       char                    a_addr[0];
+};
+
+#define IFQDISCSIZ     32
+
+#define GENL_OP_HAS_POLICY     1
+#define GENL_OP_HAS_DOIT       2
+#define GENL_OP_HAS_DUMPIT     4
+
+struct genl_family_op
+{
+       uint32_t                o_id;
+       uint32_t                o_flags;
+
+       struct nl_list_head     o_list;
+};
+
+
+#endif
diff --git a/package/libs/libnl-tiny/src/include/netlink/addr.h b/package/libs/libnl-tiny/src/include/netlink/addr.h
new file mode 100644 (file)
index 0000000..cc3d201
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * netlink/addr.h              Abstract Address
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
+ */
+
+#ifndef NETLINK_ADDR_H_
+#define NETLINK_ADDR_H_
+
+#include <netlink/netlink.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct nl_addr;
+
+/* Creation */
+extern struct nl_addr *        nl_addr_alloc(size_t);
+extern struct nl_addr *        nl_addr_alloc_attr(struct nlattr *, int);
+extern struct nl_addr *        nl_addr_build(int, void *, size_t);
+extern int             nl_addr_parse(const char *, int, struct nl_addr **);
+extern struct nl_addr *        nl_addr_clone(struct nl_addr *);
+
+/* Destroyage */
+extern void            nl_addr_destroy(struct nl_addr *);
+
+/* Usage Management */
+extern struct nl_addr *        nl_addr_get(struct nl_addr *);
+extern void            nl_addr_put(struct nl_addr *);
+extern int             nl_addr_shared(struct nl_addr *);
+
+extern int             nl_addr_cmp(struct nl_addr *, struct nl_addr *);
+extern int             nl_addr_cmp_prefix(struct nl_addr *, struct nl_addr *);
+extern int             nl_addr_iszero(struct nl_addr *);
+extern int             nl_addr_valid(char *, int);
+extern int             nl_addr_guess_family(struct nl_addr *);
+extern int             nl_addr_fill_sockaddr(struct nl_addr *,
+                                             struct sockaddr *, socklen_t *);
+extern int             nl_addr_info(struct nl_addr *, struct addrinfo **);
+extern int             nl_addr_resolve(struct nl_addr *addr, char *host, size_t hostlen);
+
+/* Access Functions */
+extern void            nl_addr_set_family(struct nl_addr *, int);
+extern int             nl_addr_get_family(struct nl_addr *);
+extern int             nl_addr_set_binary_addr(struct nl_addr *, void *,
+                                               size_t);
+extern void *          nl_addr_get_binary_addr(struct nl_addr *);
+extern unsigned int    nl_addr_get_len(struct nl_addr *);
+extern void            nl_addr_set_prefixlen(struct nl_addr *, int);
+extern unsigned int    nl_addr_get_prefixlen(struct nl_addr *);
+
+/* Address Family Translations */
+extern char *          nl_af2str(int, char *, size_t);
+extern int             nl_str2af(const char *);
+
+/* Translations to Strings */
+extern char *          nl_addr2str(struct nl_addr *, char *, size_t);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/package/libs/libnl-tiny/src/include/netlink/attr.h b/package/libs/libnl-tiny/src/include/netlink/attr.h
new file mode 100644 (file)
index 0000000..3b56a82
--- /dev/null
@@ -0,0 +1,726 @@
+/*
+ * netlink/attr.h              Netlink Attributes
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
+ */
+
+#ifndef NETLINK_ATTR_H_
+#define NETLINK_ATTR_H_
+
+#include <netlink/netlink.h>
+#include <netlink/object.h>
+#include <netlink/addr.h>
+#include <netlink/data.h>
+#include <netlink/msg.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct nl_msg;
+
+/**
+ * @name Basic Attribute Data Types
+ * @{
+ */
+
+ /**
+  * @ingroup attr
+  * Basic attribute data types
+  *
+  * See \ref attr_datatypes for more details.
+  */
+enum {
+       NLA_UNSPEC,     /**< Unspecified type, binary data chunk */
+       NLA_U8,         /**< 8 bit integer */
+       NLA_U16,        /**< 16 bit integer */
+       NLA_U32,        /**< 32 bit integer */
+       NLA_U64,        /**< 64 bit integer */
+       NLA_STRING,     /**< NUL terminated character string */
+       NLA_FLAG,       /**< Flag */
+       NLA_MSECS,      /**< Micro seconds (64bit) */
+       NLA_NESTED,     /**< Nested attributes */
+       __NLA_TYPE_MAX,
+};
+
+#define NLA_TYPE_MAX (__NLA_TYPE_MAX - 1)
+
+/** @} */
+
+/**
+ * @ingroup attr
+ * Attribute validation policy.
+ *
+ * See \ref attr_datatypes for more details.
+ */
+struct nla_policy {
+       /** Type of attribute or NLA_UNSPEC */
+       uint16_t        type;
+
+       /** Minimal length of payload required */
+       uint16_t        minlen;
+
+       /** Maximal length of payload allowed */
+       uint16_t        maxlen;
+};
+
+/* Attribute parsing */
+extern int             nla_ok(const struct nlattr *, int);
+extern struct nlattr * nla_next(const struct nlattr *, int *);
+extern int             nla_parse(struct nlattr **, int, struct nlattr *,
+                                 int, struct nla_policy *);
+extern int             nla_validate(struct nlattr *, int, int,
+                                    struct nla_policy *);
+extern struct nlattr * nla_find(struct nlattr *, int, int);
+
+/* Unspecific attribute */
+extern struct nlattr * nla_reserve(struct nl_msg *, int, int);
+extern int             nla_put(struct nl_msg *, int, int, const void *);
+
+/**
+ * nlmsg_find_attr - find a specific attribute in a netlink message
+ * @arg nlh            netlink message header
+ * @arg hdrlen         length of familiy specific header
+ * @arg attrtype       type of attribute to look for
+ *
+ * Returns the first attribute which matches the specified type.
+ */
+static inline struct nlattr *nlmsg_find_attr(struct nlmsghdr *nlh, int hdrlen, int attrtype)
+{
+       return nla_find(nlmsg_attrdata(nlh, hdrlen),
+                       nlmsg_attrlen(nlh, hdrlen), attrtype);
+}
+
+
+/**
+ * Return size of attribute whithout padding.
+ * @arg payload                Payload length of attribute.
+ *
+ * @code
+ *    <-------- nla_attr_size(payload) --------->
+ *   +------------------+- - -+- - - - - - - - - +- - -+
+ *   | Attribute Header | Pad |     Payload      | Pad |
+ *   +------------------+- - -+- - - - - - - - - +- - -+
+ * @endcode
+ *
+ * @return Size of attribute in bytes without padding.
+ */
+static inline int nla_attr_size(int payload)
+{
+       return NLA_HDRLEN + payload;
+}
+
+/**
+ * Return size of attribute including padding.
+ * @arg payload                Payload length of attribute.
+ *
+ * @code
+ *    <----------- nla_total_size(payload) ----------->
+ *   +------------------+- - -+- - - - - - - - - +- - -+
+ *   | Attribute Header | Pad |     Payload      | Pad |
+ *   +------------------+- - -+- - - - - - - - - +- - -+
+ * @endcode
+ *
+ * @return Size of attribute in bytes.
+ */
+static inline int nla_total_size(int payload)
+{
+       return NLA_ALIGN(nla_attr_size(payload));
+}
+
+/**
+ * Return length of padding at the tail of the attribute.
+ * @arg payload                Payload length of attribute.
+ *
+ * @code
+ *   +------------------+- - -+- - - - - - - - - +- - -+
+ *   | Attribute Header | Pad |     Payload      | Pad |
+ *   +------------------+- - -+- - - - - - - - - +- - -+
+ *                                                <--->  
+ * @endcode
+ *
+ * @return Length of padding in bytes.
+ */
+static inline int nla_padlen(int payload)
+{
+       return nla_total_size(payload) - nla_attr_size(payload);
+}
+
+/**
+ * Return type of the attribute.
+ * @arg nla            Attribute.
+ *
+ * @return Type of attribute.
+ */
+static inline int nla_type(const struct nlattr *nla)
+{
+       return nla->nla_type & NLA_TYPE_MASK;
+}
+
+/**
+ * Return pointer to the payload section.
+ * @arg nla            Attribute.
+ *
+ * @return Pointer to start of payload section.
+ */
+static inline void *nla_data(const struct nlattr *nla)
+{
+       return (char *) nla + NLA_HDRLEN;
+}
+
+/**
+ * Return length of the payload .
+ * @arg nla            Attribute
+ *
+ * @return Length of payload in bytes.
+ */
+static inline int nla_len(const struct nlattr *nla)
+{
+       return nla->nla_len - NLA_HDRLEN;
+}
+
+/**
+ * Copy attribute payload to another memory area.
+ * @arg dest           Pointer to destination memory area.
+ * @arg src            Attribute
+ * @arg count          Number of bytes to copy at most.
+ *
+ * Note: The number of bytes copied is limited by the length of
+ *       the attribute payload.
+ *
+ * @return The number of bytes copied to dest.
+ */
+static inline int nla_memcpy(void *dest, struct nlattr *src, int count)
+{
+       int minlen;
+
+       if (!src)
+               return 0;
+       
+       minlen = min_t(int, count, nla_len(src));
+       memcpy(dest, nla_data(src), minlen);
+
+       return minlen;
+}
+
+
+/**
+ * Add abstract data as unspecific attribute to netlink message.
+ * @arg msg            Netlink message.
+ * @arg attrtype       Attribute type.
+ * @arg data           Abstract data object.
+ *
+ * Equivalent to nla_put() except that the length of the payload is
+ * derived from the abstract data object.
+ *
+ * @see nla_put
+ * @return 0 on success or a negative error code.
+ */
+static inline int nla_put_data(struct nl_msg *msg, int attrtype, struct nl_data *data)
+{
+       return nla_put(msg, attrtype, nl_data_get_size(data),
+                      nl_data_get(data));
+}
+
+/**
+ * Add abstract address as unspecific attribute to netlink message.
+ * @arg msg            Netlink message.
+ * @arg attrtype       Attribute type.
+ * @arg addr           Abstract address object.
+ *
+ * @see nla_put
+ * @return 0 on success or a negative error code.
+ */
+static inline int nla_put_addr(struct nl_msg *msg, int attrtype, struct nl_addr *addr)
+{
+       return nla_put(msg, attrtype, nl_addr_get_len(addr),
+                      nl_addr_get_binary_addr(addr));
+}
+
+/** @} */
+
+/**
+ * @name Integer Attributes
+ */
+
+/**
+ * Add 8 bit integer attribute to netlink message.
+ * @arg msg            Netlink message.
+ * @arg attrtype       Attribute type.
+ * @arg value          Numeric value to store as payload.
+ *
+ * @see nla_put
+ * @return 0 on success or a negative error code.
+ */
+static inline int nla_put_u8(struct nl_msg *msg, int attrtype, uint8_t value)
+{
+       return nla_put(msg, attrtype, sizeof(uint8_t), &value);
+}
+
+/**
+ * Return value of 8 bit integer attribute.
+ * @arg nla            8 bit integer attribute
+ *
+ * @return Payload as 8 bit integer.
+ */
+static inline uint8_t nla_get_u8(struct nlattr *nla)
+{
+       return *(uint8_t *) nla_data(nla);
+}
+
+/**
+ * Add 16 bit integer attribute to netlink message.
+ * @arg msg            Netlink message.
+ * @arg attrtype       Attribute type.
+ * @arg value          Numeric value to store as payload.
+ *
+ * @see nla_put
+ * @return 0 on success or a negative error code.
+ */
+static inline int nla_put_u16(struct nl_msg *msg, int attrtype, uint16_t value)
+{
+       return nla_put(msg, attrtype, sizeof(uint16_t), &value);
+}
+
+/**
+ * Return payload of 16 bit integer attribute.
+ * @arg nla            16 bit integer attribute
+ *
+ * @return Payload as 16 bit integer.
+ */
+static inline uint16_t nla_get_u16(struct nlattr *nla)
+{
+       return *(uint16_t *) nla_data(nla);
+}
+
+/**
+ * Add 32 bit integer attribute to netlink message.
+ * @arg msg            Netlink message.
+ * @arg attrtype       Attribute type.
+ * @arg value          Numeric value to store as payload.
+ *
+ * @see nla_put
+ * @return 0 on success or a negative error code.
+ */
+static inline int nla_put_u32(struct nl_msg *msg, int attrtype, uint32_t value)
+{
+       return nla_put(msg, attrtype, sizeof(uint32_t), &value);
+}
+
+/**
+ * Return payload of 32 bit integer attribute.
+ * @arg nla            32 bit integer attribute.
+ *
+ * @return Payload as 32 bit integer.
+ */
+static inline uint32_t nla_get_u32(struct nlattr *nla)
+{
+       return *(uint32_t *) nla_data(nla);
+}
+
+/**
+ * Add 64 bit integer attribute to netlink message.
+ * @arg msg            Netlink message.
+ * @arg attrtype       Attribute type.
+ * @arg value          Numeric value to store as payload.
+ *
+ * @see nla_put
+ * @return 0 on success or a negative error code.
+ */
+static inline int nla_put_u64(struct nl_msg *msg, int attrtype, uint64_t value)
+{
+       return nla_put(msg, attrtype, sizeof(uint64_t), &value);
+}
+
+/**
+ * Return payload of u64 attribute
+ * @arg nla            u64 netlink attribute
+ *
+ * @return Payload as 64 bit integer.
+ */
+static inline uint64_t nla_get_u64(struct nlattr *nla)
+{
+       uint64_t tmp;
+
+       nla_memcpy(&tmp, nla, sizeof(tmp));
+
+       return tmp;
+}
+
+/**
+ * Add string attribute to netlink message.
+ * @arg msg            Netlink message.
+ * @arg attrtype       Attribute type.
+ * @arg str            NUL terminated string.
+ *
+ * @see nla_put
+ * @return 0 on success or a negative error code.
+ */
+static inline int nla_put_string(struct nl_msg *msg, int attrtype, const char *str)
+{
+       return nla_put(msg, attrtype, strlen(str) + 1, str);
+}
+
+/**
+ * Return payload of string attribute.
+ * @arg nla            String attribute.
+ *
+ * @return Pointer to attribute payload.
+ */
+static inline char *nla_get_string(struct nlattr *nla)
+{
+       return (char *) nla_data(nla);
+}
+
+static inline char *nla_strdup(struct nlattr *nla)
+{
+       return strdup(nla_get_string(nla));
+}
+
+/** @} */
+
+/**
+ * @name Flag Attribute
+ */
+
+/**
+ * Add flag netlink attribute to netlink message.
+ * @arg msg            Netlink message.
+ * @arg attrtype       Attribute type.
+ *
+ * @see nla_put
+ * @return 0 on success or a negative error code.
+ */
+static inline int nla_put_flag(struct nl_msg *msg, int attrtype)
+{
+       return nla_put(msg, attrtype, 0, NULL);
+}
+
+/**
+ * Return true if flag attribute is set.
+ * @arg nla            Flag netlink attribute.
+ *
+ * @return True if flag is set, otherwise false.
+ */
+static inline int nla_get_flag(struct nlattr *nla)
+{
+       return !!nla;
+}
+
+/** @} */
+
+/**
+ * @name Microseconds Attribute
+ */
+
+/**
+ * Add a msecs netlink attribute to a netlink message
+ * @arg n              netlink message
+ * @arg attrtype       attribute type
+ * @arg msecs          number of msecs
+ */
+static inline int nla_put_msecs(struct nl_msg *n, int attrtype, unsigned long msecs)
+{
+       return nla_put_u64(n, attrtype, msecs);
+}
+
+/**
+ * Return payload of msecs attribute
+ * @arg nla            msecs netlink attribute
+ *
+ * @return the number of milliseconds.
+ */
+static inline unsigned long nla_get_msecs(struct nlattr *nla)
+{
+       return nla_get_u64(nla);
+}
+
+/**
+ * Add nested attributes to netlink message.
+ * @arg msg            Netlink message.
+ * @arg attrtype       Attribute type.
+ * @arg nested         Message containing attributes to be nested.
+ *
+ * Takes the attributes found in the \a nested message and appends them
+ * to the message \a msg nested in a container of the type \a attrtype.
+ * The \a nested message may not have a family specific header.
+ *
+ * @see nla_put
+ * @return 0 on success or a negative error code.
+ */
+static inline int nla_put_nested(struct nl_msg *msg, int attrtype, struct nl_msg *nested)
+{
+       return nla_put(msg, attrtype, nlmsg_len(nested->nm_nlh),
+                      nlmsg_data(nested->nm_nlh));
+}
+
+/**
+ * Start a new level of nested attributes.
+ * @arg msg            Netlink message.
+ * @arg attrtype       Attribute type of container.
+ *
+ * @return Pointer to container attribute.
+ */
+static inline struct nlattr *nla_nest_start(struct nl_msg *msg, int attrtype)
+{
+       struct nlattr *start = (struct nlattr *) nlmsg_tail(msg->nm_nlh);
+
+       if (nla_put(msg, attrtype, 0, NULL) < 0)
+               return NULL;
+
+       return start;
+}
+
+/**
+ * Finalize nesting of attributes.
+ * @arg msg            Netlink message.
+ * @arg start          Container attribute as returned from nla_nest_start().
+ *
+ * Corrects the container attribute header to include the appeneded attributes.
+ *
+ * @return 0
+ */
+static inline int nla_nest_end(struct nl_msg *msg, struct nlattr *start)
+{
+       start->nla_len = (unsigned char *) nlmsg_tail(msg->nm_nlh) -
+                               (unsigned char *) start;
+       return 0;
+}
+
+/**
+ * Create attribute index based on nested attribute
+ * @arg tb             Index array to be filled (maxtype+1 elements).
+ * @arg maxtype                Maximum attribute type expected and accepted.
+ * @arg nla            Nested Attribute.
+ * @arg policy         Attribute validation policy.
+ *
+ * Feeds the stream of attributes nested into the specified attribute
+ * to nla_parse().
+ *
+ * @see nla_parse
+ * @return 0 on success or a negative error code.
+ */
+static inline int nla_parse_nested(struct nlattr *tb[], int maxtype, struct nlattr *nla,
+                    struct nla_policy *policy)
+{
+       return nla_parse(tb, maxtype, (struct nlattr *)nla_data(nla), nla_len(nla), policy);
+}
+
+/**
+ * Compare attribute payload with memory area.
+ * @arg nla            Attribute.
+ * @arg data           Memory area to compare to.
+ * @arg size           Number of bytes to compare.
+ *
+ * @see memcmp(3)
+ * @return An integer less than, equal to, or greater than zero.
+ */
+static inline int nla_memcmp(const struct nlattr *nla, const void *data, size_t size)
+{
+       int d = nla_len(nla) - size;
+
+       if (d == 0)
+               d = memcmp(nla_data(nla), data, size);
+
+       return d;
+}
+
+/**
+ * Compare string attribute payload with string
+ * @arg nla            Attribute of type NLA_STRING.
+ * @arg str            NUL terminated string.
+ *
+ * @see strcmp(3)
+ * @return An integer less than, equal to, or greater than zero.
+ */
+static inline int nla_strcmp(const struct nlattr *nla, const char *str)
+{
+       int len = strlen(str) + 1;
+       int d = nla_len(nla) - len;
+
+       if (d == 0)
+               d = memcmp(nla_data(nla), str, len);
+
+       return d;
+}
+
+/**
+ * Copy string attribute payload to a buffer.
+ * @arg dst            Pointer to destination buffer.
+ * @arg nla            Attribute of type NLA_STRING.
+ * @arg dstsize                Size of destination buffer in bytes.
+ *
+ * Copies at most dstsize - 1 bytes to the destination buffer.
+ * The result is always a valid NUL terminated string. Unlike
+ * strlcpy the destination buffer is always padded out.
+ *
+ * @return The length of string attribute without the terminating NUL.
+ */
+static inline size_t nla_strlcpy(char *dst, const struct nlattr *nla, size_t dstsize)
+{
+       size_t srclen = (size_t)nla_len(nla);
+       char *src = (char*)nla_data(nla);
+
+       if (srclen > 0 && src[srclen - 1] == '\0')
+               srclen--;
+
+       if (dstsize > 0) {
+               size_t len = (srclen >= dstsize) ? dstsize - 1 : srclen;
+
+               memset(dst, 0, dstsize);
+               memcpy(dst, src, len);
+       }
+
+       return srclen;
+}
+
+
+/**
+ * @name Attribute Construction (Exception Based)
+ * @{
+ */
+
+/**
+ * @ingroup attr
+ * Add unspecific attribute to netlink message.
+ * @arg msg            Netlink message.
+ * @arg attrtype       Attribute type.
+ * @arg attrlen                Length of attribute payload.
+ * @arg data           Head of attribute payload.
+ */
+#define NLA_PUT(msg, attrtype, attrlen, data) \
+       do { \
+               if (nla_put(msg, attrtype, attrlen, data) < 0) \
+                       goto nla_put_failure; \
+       } while(0)
+
+/**
+ * @ingroup attr
+ * Add atomic type attribute to netlink message.
+ * @arg msg            Netlink message.
+ * @arg type           Atomic type.
+ * @arg attrtype       Attribute type.
+ * @arg value          Head of attribute payload.
+ */
+#define NLA_PUT_TYPE(msg, type, attrtype, value) \
+       do { \
+               type __tmp = value; \
+               NLA_PUT(msg, attrtype, sizeof(type), &__tmp); \
+       } while(0)
+
+/**
+ * Add 8 bit integer attribute to netlink message.
+ * @arg msg            Netlink message.
+ * @arg attrtype       Attribute type.
+ * @arg value          Numeric value.
+ */
+#define NLA_PUT_U8(msg, attrtype, value) \
+       NLA_PUT_TYPE(msg, uint8_t, attrtype, value)
+
+/**
+ * Add 16 bit integer attribute to netlink message.
+ * @arg msg            Netlink message.
+ * @arg attrtype       Attribute type.
+ * @arg value          Numeric value.
+ */
+#define NLA_PUT_U16(msg, attrtype, value) \
+       NLA_PUT_TYPE(msg, uint16_t, attrtype, value)
+
+/**
+ * Add 32 bit integer attribute to netlink message.
+ * @arg msg            Netlink message.
+ * @arg attrtype       Attribute type.
+ * @arg value          Numeric value.
+ */
+#define NLA_PUT_U32(msg, attrtype, value) \
+       NLA_PUT_TYPE(msg, uint32_t, attrtype, value)
+
+/**
+ * Add 64 bit integer attribute to netlink message.
+ * @arg msg            Netlink message.
+ * @arg attrtype       Attribute type.
+ * @arg value          Numeric value.
+ */
+#define NLA_PUT_U64(msg, attrtype, value) \
+       NLA_PUT_TYPE(msg, uint64_t, attrtype, value)
+
+/**
+ * Add string attribute to netlink message.
+ * @arg msg            Netlink message.
+ * @arg attrtype       Attribute type.
+ * @arg value          NUL terminated character string.
+ */
+#define NLA_PUT_STRING(msg, attrtype, value) \
+       NLA_PUT(msg, attrtype, strlen(value) + 1, value)
+
+/**
+ * Add flag attribute to netlink message.
+ * @arg msg            Netlink message.
+ * @arg attrtype       Attribute type.
+ */
+#define NLA_PUT_FLAG(msg, attrtype) \
+       NLA_PUT(msg, attrtype, 0, NULL)
+
+/**
+ * Add msecs attribute to netlink message.
+ * @arg msg            Netlink message.
+ * @arg attrtype       Attribute type.
+ * @arg msecs          Numeric value in micro seconds.
+ */
+#define NLA_PUT_MSECS(msg, attrtype, msecs) \
+       NLA_PUT_U64(msg, attrtype, msecs)
+
+/**
+ * Add address attribute to netlink message.
+ * @arg msg            Netlink message.
+ * @arg attrtype       Attribute type.
+ * @arg addr           Abstract address object.
+ */
+#define NLA_PUT_ADDR(msg, attrtype, addr) \
+       NLA_PUT(msg, attrtype, nl_addr_get_len(addr), \
+               nl_addr_get_binary_addr(addr))
+
+/** @} */
+
+/**
+ * @name Iterators
+ * @{
+ */
+
+/**
+ * @ingroup attr
+ * Iterate over a stream of attributes
+ * @arg pos    loop counter, set to current attribute
+ * @arg head   head of attribute stream
+ * @arg len    length of attribute stream
+ * @arg rem    initialized to len, holds bytes currently remaining in stream
+ */
+#define nla_for_each_attr(pos, head, len, rem) \
+       for (pos = head, rem = len; \
+            nla_ok(pos, rem); \
+            pos = nla_next(pos, &(rem)))
+
+/**
+ * @ingroup attr
+ * Iterate over a stream of nested attributes
+ * @arg pos    loop counter, set to current attribute
+ * @arg nla    attribute containing the nested attributes
+ * @arg rem    initialized to len, holds bytes currently remaining in stream
+ */
+#define nla_for_each_nested(pos, nla, rem) \
+       for (pos = (struct nlattr *)nla_data(nla), rem = nla_len(nla); \
+            nla_ok(pos, rem); \
+            pos = nla_next(pos, &(rem)))
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/package/libs/libnl-tiny/src/include/netlink/cache-api.h b/package/libs/libnl-tiny/src/include/netlink/cache-api.h
new file mode 100644 (file)
index 0000000..22fc449
--- /dev/null
@@ -0,0 +1,199 @@
+/*
+ * netlink/cache-api.h         Caching API
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
+ */
+
+#ifndef NETLINK_CACHE_API_H_
+#define NETLINK_CACHE_API_H_
+
+#include <netlink/netlink.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @ingroup cache
+ * @defgroup cache_api Cache Implementation
+ * @brief
+ *
+ * @par 1) Cache Definition
+ * @code
+ * struct nl_cache_ops my_cache_ops = {
+ *     .co_name                = "route/link",
+ *     .co_protocol            = NETLINK_ROUTE,
+ *     .co_hdrsize             = sizeof(struct ifinfomsg),
+ *     .co_obj_ops             = &my_obj_ops,
+ * };
+ * @endcode
+ *
+ * @par 2) 
+ * @code
+ * // The simplest way to fill a cache is by providing a request-update
+ * // function which must trigger a complete dump on the kernel-side of
+ * // whatever the cache covers.
+ * static int my_request_update(struct nl_cache *cache,
+ *                             struct nl_sock *socket)
+ * {
+ *     // In this example, we request a full dump of the interface table
+ *     return nl_rtgen_request(socket, RTM_GETLINK, AF_UNSPEC, NLM_F_DUMP);
+ * }
+ *
+ * // The resulting netlink messages sent back will be fed into a message
+ * // parser one at a time. The message parser has to extract all relevant
+ * // information from the message and create an object reflecting the
+ * // contents of the message and pass it on to the parser callback function
+ * // provide which will add the object to the cache.
+ * static int my_msg_parser(struct nl_cache_ops *ops, struct sockaddr_nl *who,
+ *                         struct nlmsghdr *nlh, struct nl_parser_param *pp)
+ * {
+ *     struct my_obj *obj;
+ *
+ *     obj = my_obj_alloc();
+ *     obj->ce_msgtype = nlh->nlmsg_type;
+ *
+ *     // Parse the netlink message and continue creating the object.
+ *
+ *     err = pp->pp_cb((struct nl_object *) obj, pp);
+ *     if (err < 0)
+ *             goto errout;
+ * }
+ *
+ * struct nl_cache_ops my_cache_ops = {
+ *     ...
+ *     .co_request_update      = my_request_update,
+ *     .co_msg_parser          = my_msg_parser,
+ * };
+ * @endcode
+ *
+ * @par 3) Notification based Updates
+ * @code
+ * // Caches can be kept up-to-date based on notifications if the kernel
+ * // sends out notifications whenever an object is added/removed/changed.
+ * //
+ * // It is trivial to support this, first a list of groups needs to be
+ * // defined which are required to join in order to receive all necessary
+ * // notifications. The groups are separated by address family to support
+ * // the common situation where a separate group is used for each address
+ * // family. If there is only one group, simply specify AF_UNSPEC.
+ * static struct nl_af_group addr_groups[] = {
+ *     { AF_INET,      RTNLGRP_IPV4_IFADDR },
+ *     { AF_INET6,     RTNLGRP_IPV6_IFADDR },
+ *     { END_OF_GROUP_LIST },
+ * };
+ *
+ * // In order for the caching system to know the meaning of each message
+ * // type it requires a table which maps each supported message type to
+ * // a cache action, e.g. RTM_NEWADDR means address has been added or
+ * // updated, RTM_DELADDR means address has been removed.
+ * static struct nl_cache_ops rtnl_addr_ops = {
+ *     ...
+ *     .co_msgtypes            = {
+ *                                     { RTM_NEWADDR, NL_ACT_NEW, "new" },
+ *                                     { RTM_DELADDR, NL_ACT_DEL, "del" },
+ *                                     { RTM_GETADDR, NL_ACT_GET, "get" },
+ *                                     END_OF_MSGTYPES_LIST,
+ *                             },
+ *     .co_groups              = addr_groups,
+ * };
+ *
+ * // It is now possible to keep the cache up-to-date using the cache manager.
+ * @endcode
+ * @{
+ */
+
+enum {
+       NL_ACT_UNSPEC,
+       NL_ACT_NEW,
+       NL_ACT_DEL,
+       NL_ACT_GET,
+       NL_ACT_SET,
+       NL_ACT_CHANGE,
+       __NL_ACT_MAX,
+};
+
+#define NL_ACT_MAX (__NL_ACT_MAX - 1)
+
+#define END_OF_MSGTYPES_LIST   { -1, -1, NULL }
+
+/**
+ * Message type to cache action association
+ */
+struct nl_msgtype
+{
+       /** Netlink message type */
+       int                     mt_id;
+
+       /** Cache action to take */
+       int                     mt_act;
+
+       /** Name of operation for human-readable printing */
+       char *                  mt_name;
+};
+
+/**
+ * Address family to netlink group association
+ */
+struct nl_af_group
+{
+       /** Address family */
+       int                     ag_family;
+
+       /** Netlink group identifier */
+       int                     ag_group;
+};
+
+#define END_OF_GROUP_LIST AF_UNSPEC, 0
+
+struct nl_parser_param
+{
+       int             (*pp_cb)(struct nl_object *, struct nl_parser_param *);
+       void *            pp_arg;
+};
+
+/**
+ * Cache Operations
+ */
+struct nl_cache_ops
+{
+       char  *                 co_name;
+
+       int                     co_hdrsize;
+       int                     co_protocol;
+       struct nl_af_group *    co_groups;
+       
+       /**
+        * Called whenever an update of the cache is required. Must send
+        * a request message to the kernel requesting a complete dump.
+        */
+       int   (*co_request_update)(struct nl_cache *, struct nl_sock *);
+
+       /**
+        * Called whenever a message was received that needs to be parsed.
+        * Must parse the message and call the paser callback function
+        * (nl_parser_param) provided via the argument.
+        */
+       int   (*co_msg_parser)(struct nl_cache_ops *, struct sockaddr_nl *,
+                              struct nlmsghdr *, struct nl_parser_param *);
+
+       struct nl_object_ops *  co_obj_ops;
+
+       struct nl_cache_ops *co_next;
+       struct nl_cache *co_major_cache;
+       struct genl_ops *       co_genl;
+       struct nl_msgtype       co_msgtypes[];
+};
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/package/libs/libnl-tiny/src/include/netlink/cache.h b/package/libs/libnl-tiny/src/include/netlink/cache.h
new file mode 100644 (file)
index 0000000..09719f3
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ * netlink/cache.h             Caching Module
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
+ */
+
+#ifndef NETLINK_CACHE_H_
+#define NETLINK_CACHE_H_
+
+#include <netlink/netlink.h>
+#include <netlink/msg.h>
+#include <netlink/utils.h>
+#include <netlink/object.h>
+#include <netlink/cache-api.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct nl_cache;
+
+typedef void (*change_func_t)(struct nl_cache *, struct nl_object *, int);
+
+/* Access Functions */
+extern int                     nl_cache_nitems(struct nl_cache *);
+extern int                     nl_cache_nitems_filter(struct nl_cache *,
+                                                      struct nl_object *);
+extern struct nl_cache_ops *   nl_cache_get_ops(struct nl_cache *);
+extern struct nl_object *      nl_cache_get_first(struct nl_cache *);
+extern struct nl_object *      nl_cache_get_last(struct nl_cache *);
+extern struct nl_object *      nl_cache_get_next(struct nl_object *);
+extern struct nl_object *      nl_cache_get_prev(struct nl_object *);
+
+extern struct nl_cache *       nl_cache_alloc(struct nl_cache_ops *);
+extern int                     nl_cache_alloc_and_fill(struct nl_cache_ops *,
+                                                       struct nl_sock *,
+                                                       struct nl_cache **);
+extern int                     nl_cache_alloc_name(const char *,
+                                                   struct nl_cache **);
+extern struct nl_cache *       nl_cache_subset(struct nl_cache *,
+                                               struct nl_object *);
+extern void                    nl_cache_clear(struct nl_cache *);
+extern void                    nl_cache_free(struct nl_cache *);
+
+/* Cache modification */
+extern int                     nl_cache_add(struct nl_cache *,
+                                            struct nl_object *);
+extern int                     nl_cache_parse_and_add(struct nl_cache *,
+                                                      struct nl_msg *);
+extern void                    nl_cache_remove(struct nl_object *);
+extern int                     nl_cache_refill(struct nl_sock *,
+                                               struct nl_cache *);
+extern int                     nl_cache_pickup(struct nl_sock *,
+                                               struct nl_cache *);
+extern int                     nl_cache_resync(struct nl_sock *,
+                                               struct nl_cache *,
+                                               change_func_t);
+extern int                     nl_cache_include(struct nl_cache *,
+                                                struct nl_object *,
+                                                change_func_t);
+
+/* General */
+extern int                     nl_cache_is_empty(struct nl_cache *);
+extern void                    nl_cache_mark_all(struct nl_cache *);
+
+/* Dumping */
+extern void                    nl_cache_dump(struct nl_cache *,
+                                             struct nl_dump_params *);
+extern void                    nl_cache_dump_filter(struct nl_cache *,
+                                                    struct nl_dump_params *,
+                                                    struct nl_object *);
+
+/* Iterators */
+#ifdef disabled
+extern void                    nl_cache_foreach(struct nl_cache *,
+                                                void (*cb)(struct nl_object *,
+                                                           void *),
+                                                void *arg);
+extern void                    nl_cache_foreach_filter(struct nl_cache *,
+                                                       struct nl_object *,
+                                                       void (*cb)(struct
+                                                                  nl_object *,
+                                                                  void *),
+                                                       void *arg);
+#endif
+
+/* --- cache management --- */
+
+/* Cache type management */
+extern struct nl_cache_ops *   nl_cache_ops_lookup(const char *);
+extern struct nl_cache_ops *   nl_cache_ops_associate(int, int);
+extern struct nl_msgtype *     nl_msgtype_lookup(struct nl_cache_ops *, int);
+extern void                    nl_cache_ops_foreach(void (*cb)(struct nl_cache_ops *, void *), void *);
+extern int                     nl_cache_mngt_register(struct nl_cache_ops *);
+extern int                     nl_cache_mngt_unregister(struct nl_cache_ops *);
+
+/* Global cache provisioning/requiring */
+extern void                    nl_cache_mngt_provide(struct nl_cache *);
+extern void                    nl_cache_mngt_unprovide(struct nl_cache *);
+extern struct nl_cache *       nl_cache_mngt_require(const char *);
+
+struct nl_cache_mngr;
+
+#define NL_AUTO_PROVIDE                1
+
+extern int                     nl_cache_mngr_alloc(struct nl_sock *,
+                                                   int, int,
+                                                   struct nl_cache_mngr **);
+extern int                     nl_cache_mngr_add(struct nl_cache_mngr *,
+                                                 const char *,
+                                                 change_func_t,
+                                                 struct nl_cache **);
+extern int                     nl_cache_mngr_get_fd(struct nl_cache_mngr *);
+extern int                     nl_cache_mngr_poll(struct nl_cache_mngr *,
+                                                  int);
+extern int                     nl_cache_mngr_data_ready(struct nl_cache_mngr *);
+extern void                    nl_cache_mngr_free(struct nl_cache_mngr *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/package/libs/libnl-tiny/src/include/netlink/data.h b/package/libs/libnl-tiny/src/include/netlink/data.h
new file mode 100644 (file)
index 0000000..071159e
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * netlink/data.h      Abstract Data
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
+ */
+
+#ifndef NETLINK_DATA_H_
+#define NETLINK_DATA_H_
+
+#include <netlink/netlink.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct nl_data;
+
+/* General */
+extern struct nl_data *        nl_data_alloc(void *, size_t);
+extern struct nl_data * nl_data_alloc_attr(struct nlattr *);
+extern struct nl_data *        nl_data_clone(struct nl_data *);
+extern int             nl_data_append(struct nl_data *, void *, size_t);
+extern void            nl_data_free(struct nl_data *);
+
+/* Access Functions */
+extern void *          nl_data_get(struct nl_data *);
+extern size_t          nl_data_get_size(struct nl_data *);
+
+/* Misc */
+extern int             nl_data_cmp(struct nl_data *, struct nl_data *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/package/libs/libnl-tiny/src/include/netlink/errno.h b/package/libs/libnl-tiny/src/include/netlink/errno.h
new file mode 100644 (file)
index 0000000..0b43da0
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * netlink/errno.h             Error Numbers
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2008 Thomas Graf <tgraf@suug.ch>
+ */
+
+#ifndef NETLINK_ERRNO_H_
+#define NETLINK_ERRNO_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define NLE_SUCCESS            0
+#define NLE_FAILURE            1
+#define NLE_INTR               2
+#define NLE_BAD_SOCK           3
+#define NLE_AGAIN              4
+#define NLE_NOMEM              5
+#define NLE_EXIST              6
+#define NLE_INVAL              7
+#define NLE_RANGE              8
+#define NLE_MSGSIZE            9
+#define NLE_OPNOTSUPP          10
+#define NLE_AF_NOSUPPORT       11
+#define NLE_OBJ_NOTFOUND       12
+#define NLE_NOATTR             13
+#define NLE_MISSING_ATTR       14
+#define NLE_AF_MISMATCH                15
+#define NLE_SEQ_MISMATCH       16
+#define NLE_MSG_OVERFLOW       17
+#define NLE_MSG_TRUNC          18
+#define NLE_NOADDR             19
+#define NLE_SRCRT_NOSUPPORT    20
+#define NLE_MSG_TOOSHORT       21
+#define NLE_MSGTYPE_NOSUPPORT  22
+#define NLE_OBJ_MISMATCH       23
+#define NLE_NOCACHE            24
+#define NLE_BUSY               25
+#define NLE_PROTO_MISMATCH     26
+#define NLE_NOACCESS           27
+#define NLE_PERM               28
+
+#define NLE_MAX                        NLE_PERM
+
+extern const char *    nl_geterror(int);
+extern void            nl_perror(int, const char *);
+extern int             nl_syserr2nlerr(int);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/package/libs/libnl-tiny/src/include/netlink/genl/ctrl.h b/package/libs/libnl-tiny/src/include/netlink/genl/ctrl.h
new file mode 100644 (file)
index 0000000..1ae62f4
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * netlink/genl/ctrl.h         Generic Netlink Controller
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
+ */
+
+#ifndef NETLINK_GENL_CTRL_H_
+#define NETLINK_GENL_CTRL_H_
+
+#include <netlink/netlink.h>
+#include <netlink/cache.h>
+#include <netlink/addr.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct genl_family;
+
+extern int                     genl_ctrl_alloc_cache(struct nl_sock *,
+                                                     struct nl_cache **);
+extern struct genl_family *    genl_ctrl_search(struct nl_cache *, int);
+extern struct genl_family *    genl_ctrl_search_by_name(struct nl_cache *,
+                                                        const char *);
+extern int                     genl_ctrl_resolve(struct nl_sock *,
+                                                 const char *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/package/libs/libnl-tiny/src/include/netlink/genl/family.h b/package/libs/libnl-tiny/src/include/netlink/genl/family.h
new file mode 100644 (file)
index 0000000..0257cbe
--- /dev/null
@@ -0,0 +1,130 @@
+/*
+ * netlink/genl/family.h       Generic Netlink Family
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
+ */
+
+#ifndef NETLINK_GENL_FAMILY_H_
+#define NETLINK_GENL_FAMILY_H_
+
+#include <netlink/netlink.h>
+#include <netlink/cache.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** @cond SKIP */
+#define FAMILY_ATTR_ID         0x01
+#define FAMILY_ATTR_NAME       0x02
+#define FAMILY_ATTR_VERSION    0x04
+#define FAMILY_ATTR_HDRSIZE    0x08
+#define FAMILY_ATTR_MAXATTR    0x10
+#define FAMILY_ATTR_OPS                0x20
+
+
+struct genl_family
+{
+       NLHDR_COMMON
+
+       uint16_t                gf_id;
+       char                    gf_name[GENL_NAMSIZ];
+       uint32_t                gf_version;
+       uint32_t                gf_hdrsize;
+       uint32_t                gf_maxattr;
+
+       struct nl_list_head     gf_ops;
+};
+
+
+extern struct genl_family *    genl_family_alloc(void);
+extern void                    genl_family_put(struct genl_family *);
+
+extern int                     genl_family_add_op(struct genl_family *,
+                                                  int, int);
+
+/**
+ * @name Attributes
+ * @{
+ */
+
+static inline unsigned int genl_family_get_id(struct genl_family *family)
+{
+       if (family->ce_mask & FAMILY_ATTR_ID)
+               return family->gf_id;
+       else
+               return GENL_ID_GENERATE;
+}
+
+static inline void genl_family_set_id(struct genl_family *family, unsigned int id)
+{
+       family->gf_id = id;
+       family->ce_mask |= FAMILY_ATTR_ID;
+}
+
+static inline char *genl_family_get_name(struct genl_family *family)
+{
+       if (family->ce_mask & FAMILY_ATTR_NAME)
+               return family->gf_name;
+       else
+               return NULL;
+}
+
+static inline void genl_family_set_name(struct genl_family *family, const char *name)
+{
+       strncpy(family->gf_name, name, GENL_NAMSIZ-1);
+       family->ce_mask |= FAMILY_ATTR_NAME;
+}
+
+static inline uint8_t genl_family_get_version(struct genl_family *family)
+{
+       if (family->ce_mask & FAMILY_ATTR_VERSION)
+               return family->gf_version;
+       else
+               return 0;
+}
+
+static inline void genl_family_set_version(struct genl_family *family, uint8_t version)
+{
+       family->gf_version = version;
+       family->ce_mask |= FAMILY_ATTR_VERSION;
+}
+
+static inline uint32_t genl_family_get_hdrsize(struct genl_family *family)
+{
+       if (family->ce_mask & FAMILY_ATTR_HDRSIZE)
+               return family->gf_hdrsize;
+       else
+               return 0;
+}
+
+static inline void genl_family_set_hdrsize(struct genl_family *family, uint32_t hdrsize)
+{
+       family->gf_hdrsize = hdrsize;
+       family->ce_mask |= FAMILY_ATTR_HDRSIZE;
+}
+
+static inline uint32_t genl_family_get_maxattr(struct genl_family *family)
+{
+       if (family->ce_mask & FAMILY_ATTR_MAXATTR)
+               return family->gf_maxattr;
+       else
+               return family->gf_maxattr;
+}
+
+static inline void genl_family_set_maxattr(struct genl_family *family, uint32_t maxattr)
+{
+       family->gf_maxattr = maxattr;
+       family->ce_mask |= FAMILY_ATTR_MAXATTR;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/package/libs/libnl-tiny/src/include/netlink/genl/genl.h b/package/libs/libnl-tiny/src/include/netlink/genl/genl.h
new file mode 100644 (file)
index 0000000..3f3340c
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * netlink/genl/genl.h         Generic Netlink
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
+ */
+
+#ifndef NETLINK_GENL_H_
+#define NETLINK_GENL_H_
+
+#include <netlink/netlink.h>
+#include <netlink/msg.h>
+#include <netlink/attr.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int             genl_connect(struct nl_sock *);
+
+extern int             genl_send_simple(struct nl_sock *, int, int,
+                                        int, int);
+
+extern void *          genlmsg_put(struct nl_msg *, uint32_t, uint32_t,
+                                   int, int, int, uint8_t, uint8_t);
+
+extern int             genlmsg_valid_hdr(struct nlmsghdr *, int);
+extern int             genlmsg_validate(struct nlmsghdr *, int, int,
+                                        struct nla_policy *);
+extern int             genlmsg_parse(struct nlmsghdr *, int, struct nlattr **,
+                                     int, struct nla_policy *);
+extern void *          genlmsg_data(const struct genlmsghdr *);
+extern int             genlmsg_len(const struct genlmsghdr *);
+extern struct nlattr * genlmsg_attrdata(const struct genlmsghdr *, int);
+extern int             genlmsg_attrlen(const struct genlmsghdr *, int);
+
+extern char *          genl_op2name(int, int, char *, size_t);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/package/libs/libnl-tiny/src/include/netlink/genl/mngt.h b/package/libs/libnl-tiny/src/include/netlink/genl/mngt.h
new file mode 100644 (file)
index 0000000..8b0244f
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * netlink/genl/mngt.h         Generic Netlink Management
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
+ */
+
+#ifndef NETLINK_GENL_MNGT_H_
+#define NETLINK_GENL_MNGT_H_
+
+#include <netlink/netlink.h>
+#include <netlink/attr.h>
+#include <netlink/list.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct nl_cache_ops;
+
+struct genl_info
+{
+       struct sockaddr_nl *    who;
+       struct nlmsghdr *       nlh;
+       struct genlmsghdr *     genlhdr;
+       void *                  userhdr;
+       struct nlattr **        attrs;
+};
+
+/**
+ * @ingroup genl_mngt
+ * Generic Netlink Command
+ */
+struct genl_cmd
+{
+       /** Unique command identifier */
+       int                     c_id;
+
+       /** Name/description of command */
+       char *                  c_name;
+
+       /**
+        * Maximum attribute identifier, must be provided if
+        * a message parser is available.
+        */
+       int                     c_maxattr;
+
+       int                   (*c_msg_parser)(struct nl_cache_ops *,
+                                             struct genl_cmd *,
+                                             struct genl_info *, void *);
+
+       /**
+        * Attribute validation policy (optional)
+        */
+       struct nla_policy *     c_attr_policy;
+};
+
+/**
+ * @ingroup genl_mngt
+ * Generic Netlink Operations
+ */
+struct genl_ops
+{
+       int                     o_family;
+       int                     o_id;
+       char *                  o_name;
+       struct nl_cache_ops *   o_cache_ops;
+       struct genl_cmd *       o_cmds;
+       int                     o_ncmds;
+
+       /* linked list of all genl cache operations */
+       struct nl_list_head     o_list;
+};
+
+
+extern int             genl_register(struct nl_cache_ops *);
+extern void            genl_unregister(struct nl_cache_ops *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/package/libs/libnl-tiny/src/include/netlink/handlers.h b/package/libs/libnl-tiny/src/include/netlink/handlers.h
new file mode 100644 (file)
index 0000000..7fb53b4
--- /dev/null
@@ -0,0 +1,230 @@
+/*
+ * netlink/handlers.c  default netlink message handlers
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
+ */
+
+#ifndef NETLINK_HANDLERS_H_
+#define NETLINK_HANDLERS_H_
+
+#include <stdio.h>
+#include <stdint.h>
+#include <sys/types.h>
+#include <netlink/netlink-compat.h>
+#include <netlink/netlink-kernel.h>
+#include <netlink/types.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct nl_sock;
+struct nl_msg;
+struct nl_cb;
+/**
+ * @name Callback Typedefs
+ * @{
+ */
+
+/**
+ * nl_recvmsgs() callback for message processing customization
+ * @ingroup cb
+ * @arg msg            netlink message being processed
+ * @arg arg            argument passwd on through caller
+ */
+typedef int (*nl_recvmsg_msg_cb_t)(struct nl_msg *msg, void *arg);
+
+/**
+ * nl_recvmsgs() callback for error message processing customization
+ * @ingroup cb
+ * @arg nla            netlink address of the peer
+ * @arg nlerr          netlink error message being processed
+ * @arg arg            argument passed on through caller
+ */
+typedef int (*nl_recvmsg_err_cb_t)(struct sockaddr_nl *nla,
+                                  struct nlmsgerr *nlerr, void *arg);
+
+/** @} */
+
+/**
+ * Callback actions
+ * @ingroup cb
+ */
+enum nl_cb_action {
+       /** Proceed with wathever would come next */
+       NL_OK,
+       /** Skip this message */
+       NL_SKIP,
+       /** Stop parsing altogether and discard remaining messages */
+       NL_STOP,
+};
+
+/**
+ * Callback kinds
+ * @ingroup cb
+ */
+enum nl_cb_kind {
+       /** Default handlers (quiet) */
+       NL_CB_DEFAULT,
+       /** Verbose default handlers (error messages printed) */
+       NL_CB_VERBOSE,
+       /** Debug handlers for debugging */
+       NL_CB_DEBUG,
+       /** Customized handler specified by the user */
+       NL_CB_CUSTOM,
+       __NL_CB_KIND_MAX,
+};
+
+#define NL_CB_KIND_MAX (__NL_CB_KIND_MAX - 1)
+
+/**
+ * Callback types
+ * @ingroup cb
+ */
+enum nl_cb_type {
+       /** Message is valid */
+       NL_CB_VALID,
+       /** Last message in a series of multi part messages received */
+       NL_CB_FINISH,
+       /** Report received that data was lost */
+       NL_CB_OVERRUN,
+       /** Message wants to be skipped */
+       NL_CB_SKIPPED,
+       /** Message is an acknowledge */
+       NL_CB_ACK,
+       /** Called for every message received */
+       NL_CB_MSG_IN,
+       /** Called for every message sent out except for nl_sendto() */
+       NL_CB_MSG_OUT,
+       /** Message is malformed and invalid */
+       NL_CB_INVALID,
+       /** Called instead of internal sequence number checking */
+       NL_CB_SEQ_CHECK,
+       /** Sending of an acknowledge message has been requested */
+       NL_CB_SEND_ACK,
+       __NL_CB_TYPE_MAX,
+};
+
+#define NL_CB_TYPE_MAX (__NL_CB_TYPE_MAX - 1)
+
+struct nl_cb
+{
+       nl_recvmsg_msg_cb_t     cb_set[NL_CB_TYPE_MAX+1];
+       void *                  cb_args[NL_CB_TYPE_MAX+1];
+       
+       nl_recvmsg_err_cb_t     cb_err;
+       void *                  cb_err_arg;
+
+       /** May be used to replace nl_recvmsgs with your own implementation
+        * in all internal calls to nl_recvmsgs. */
+       int                     (*cb_recvmsgs_ow)(struct nl_sock *,
+                                                 struct nl_cb *);
+
+       /** Overwrite internal calls to nl_recv, must return the number of
+        * octets read and allocate a buffer for the received data. */
+       int                     (*cb_recv_ow)(struct nl_sock *,
+                                             struct sockaddr_nl *,
+                                             unsigned char **,
+                                             struct ucred **);
+
+       /** Overwrites internal calls to nl_send, must send the netlink
+        * message. */
+       int                     (*cb_send_ow)(struct nl_sock *,
+                                             struct nl_msg *);
+
+       int                     cb_refcnt;
+};
+
+
+extern struct nl_cb *  nl_cb_alloc(enum nl_cb_kind);
+extern struct nl_cb *  nl_cb_clone(struct nl_cb *);
+extern void            nl_cb_put(struct nl_cb *);
+
+extern int  nl_cb_set(struct nl_cb *, enum nl_cb_type, enum nl_cb_kind,
+                     nl_recvmsg_msg_cb_t, void *);
+extern int  nl_cb_err(struct nl_cb *, enum nl_cb_kind, nl_recvmsg_err_cb_t,
+                     void *);
+
+static inline struct nl_cb *nl_cb_get(struct nl_cb *cb)
+{
+       cb->cb_refcnt++;
+
+       return cb;
+}
+
+/**
+ * Set up a all callbacks
+ * @arg cb             callback set
+ * @arg kind           kind of callback
+ * @arg func           callback function
+ * @arg arg            argument to be passwd to callback function
+ *
+ * @return 0 on success or a negative error code
+ */
+static inline int nl_cb_set_all(struct nl_cb *cb, enum nl_cb_kind kind,
+                 nl_recvmsg_msg_cb_t func, void *arg)
+{
+       int i, err;
+
+       for (i = 0; i <= NL_CB_TYPE_MAX; i++) {
+               err = nl_cb_set(cb,(enum nl_cb_type)i, kind, func, arg);
+               if (err < 0)
+                       return err;
+       }
+
+       return 0;
+}
+
+
+/**
+ * @name Overwriting
+ * @{
+ */
+
+/**
+ * Overwrite internal calls to nl_recvmsgs()
+ * @arg cb             callback set
+ * @arg func           replacement callback for nl_recvmsgs()
+ */
+static inline void nl_cb_overwrite_recvmsgs(struct nl_cb *cb,
+                             int (*func)(struct nl_sock *, struct nl_cb *))
+{
+       cb->cb_recvmsgs_ow = func;
+}
+
+/**
+ * Overwrite internal calls to nl_recv()
+ * @arg cb             callback set
+ * @arg func           replacement callback for nl_recv()
+ */
+static inline void nl_cb_overwrite_recv(struct nl_cb *cb,
+                         int (*func)(struct nl_sock *, struct sockaddr_nl *,
+                                     unsigned char **, struct ucred **))
+{
+       cb->cb_recv_ow = func;
+}
+
+/**
+ * Overwrite internal calls to nl_send()
+ * @arg cb             callback set
+ * @arg func           replacement callback for nl_send()
+ */
+static inline void nl_cb_overwrite_send(struct nl_cb *cb,
+                         int (*func)(struct nl_sock *, struct nl_msg *))
+{
+       cb->cb_send_ow = func;
+}
+
+/** @} */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/package/libs/libnl-tiny/src/include/netlink/list.h b/package/libs/libnl-tiny/src/include/netlink/list.h
new file mode 100644 (file)
index 0000000..c6876a7
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * netlink/list.h      Netlink List Utilities
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
+ */
+
+#ifndef NETLINK_LIST_H_
+#define NETLINK_LIST_H_
+
+struct nl_list_head
+{
+       struct nl_list_head *   next;
+       struct nl_list_head *   prev;
+};
+
+
+static inline void __nl_list_add(struct nl_list_head *obj,
+                                struct nl_list_head *prev,
+                                struct nl_list_head *next)
+{
+       prev->next = obj;
+       obj->prev = prev;
+       next->prev = obj;
+       obj->next = next;
+}
+
+static inline void nl_list_add_tail(struct nl_list_head *obj,
+                                   struct nl_list_head *head)
+{
+       __nl_list_add(obj, head->prev, head);
+}
+
+static inline void nl_list_add_head(struct nl_list_head *obj,
+                                   struct nl_list_head *head)
+{
+       __nl_list_add(obj, head, head->next);
+}
+
+static inline void nl_list_del(struct nl_list_head *obj)
+{
+       obj->next->prev = obj->prev;
+       obj->prev->next = obj->next;
+}
+
+static inline int nl_list_empty(struct nl_list_head *head)
+{
+       return head->next == head;
+}
+
+#define nl_container_of(ptr, type, member) ({                  \
+        const typeof( ((type *)0)->member ) *__mptr = (ptr);   \
+        (type *)( (char *)__mptr - ((size_t) &((type *)0)->member));})
+
+#define nl_list_entry(ptr, type, member) \
+       nl_container_of(ptr, type, member)
+
+#define nl_list_at_tail(pos, head, member) \
+       ((pos)->member.next == (head))
+
+#define nl_list_at_head(pos, head, member) \
+       ((pos)->member.prev == (head))
+
+#define NL_LIST_HEAD(name) \
+       struct nl_list_head name = { &(name), &(name) }
+
+#define nl_list_first_entry(head, type, member)                        \
+       nl_list_entry((head)->next, type, member)
+
+#define nl_list_for_each_entry(pos, head, member)                              \
+       for (pos = nl_list_entry((head)->next, typeof(*pos), member);   \
+            &(pos)->member != (head);  \
+            (pos) = nl_list_entry((pos)->member.next, typeof(*(pos)), member))
+
+#define nl_list_for_each_entry_safe(pos, n, head, member)                      \
+       for (pos = nl_list_entry((head)->next, typeof(*pos), member),   \
+               n = nl_list_entry(pos->member.next, typeof(*pos), member);      \
+            &(pos)->member != (head);                                  \
+            pos = n, n = nl_list_entry(n->member.next, typeof(*n), member))
+
+#define nl_init_list_head(head) \
+       do { (head)->next = (head); (head)->prev = (head); } while (0)
+
+#endif
diff --git a/package/libs/libnl-tiny/src/include/netlink/msg.h b/package/libs/libnl-tiny/src/include/netlink/msg.h
new file mode 100644 (file)
index 0000000..b3e2b0b
--- /dev/null
@@ -0,0 +1,308 @@
+/*
+ * netlink/msg.c               Netlink Messages Interface
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
+ */
+
+#ifndef NETLINK_MSG_H_
+#define NETLINK_MSG_H_
+
+#include <netlink/netlink.h>
+#include <netlink/object.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct nla_policy;
+
+#define NL_DONTPAD     0
+
+/**
+ * @ingroup msg
+ * @brief
+ * Will cause the netlink pid to be set to the pid assigned to
+ * the netlink handle (socket) just before sending the message off.
+ * @note Requires the use of nl_send_auto_complete()!
+ */
+#define NL_AUTO_PID    0
+
+/**
+ * @ingroup msg
+ * @brief
+ * May be used to refer to a sequence number which should be
+ * automatically set just before sending the message off.
+ * @note Requires the use of nl_send_auto_complete()!
+ */
+#define NL_AUTO_SEQ    0
+
+#define NL_MSG_CRED_PRESENT 1
+
+struct nl_msg
+{
+       int                     nm_protocol;
+       int                     nm_flags;
+       struct sockaddr_nl      nm_src;
+       struct sockaddr_nl      nm_dst;
+       struct ucred            nm_creds;
+       struct nlmsghdr *       nm_nlh;
+       size_t                  nm_size;
+       int                     nm_refcnt;
+};
+
+
+struct nl_msg;
+struct nl_tree;
+struct ucred;
+
+/* message parsing */
+extern int               nlmsg_ok(const struct nlmsghdr *, int);
+extern struct nlmsghdr *  nlmsg_next(struct nlmsghdr *, int *);
+extern int               nlmsg_parse(struct nlmsghdr *, int, struct nlattr **,
+                                     int, struct nla_policy *);
+extern int               nlmsg_validate(struct nlmsghdr *, int, int,
+                                        struct nla_policy *);
+
+extern struct nl_msg *   nlmsg_alloc(void);
+extern struct nl_msg *   nlmsg_alloc_size(size_t);
+extern struct nl_msg *   nlmsg_alloc_simple(int, int);
+extern void              nlmsg_set_default_size(size_t);
+extern struct nl_msg *   nlmsg_inherit(struct nlmsghdr *);
+extern struct nl_msg *   nlmsg_convert(struct nlmsghdr *);
+extern void *            nlmsg_reserve(struct nl_msg *, size_t, int);
+extern int               nlmsg_append(struct nl_msg *, void *, size_t, int);
+
+extern struct nlmsghdr *  nlmsg_put(struct nl_msg *, uint32_t, uint32_t,
+                                   int, int, int);
+extern void              nlmsg_free(struct nl_msg *);
+
+extern int               nl_msg_parse(struct nl_msg *,
+                                      void (*cb)(struct nl_object *, void *),
+                                      void *);
+
+extern void            nl_msg_dump(struct nl_msg *, FILE *);
+
+/**
+ * length of netlink message not including padding
+ * @arg payload                length of message payload
+ */
+static inline int nlmsg_msg_size(int payload)
+{
+       return NLMSG_HDRLEN + payload;
+}
+
+/**
+ * length of netlink message including padding
+ * @arg payload                length of message payload
+ */
+static inline int nlmsg_total_size(int payload)
+{
+       return NLMSG_ALIGN(nlmsg_msg_size(payload));
+}
+
+/**
+ * length of padding at the message's tail
+ * @arg payload                length of message payload
+ */
+static inline int nlmsg_padlen(int payload)
+{
+       return nlmsg_total_size(payload) - nlmsg_msg_size(payload);
+}
+
+/**
+ * head of message payload
+ * @arg nlh            netlink messsage header
+ */
+static inline void *nlmsg_data(const struct nlmsghdr *nlh)
+{
+       return (unsigned char *) nlh + NLMSG_HDRLEN;
+}
+
+static inline void *nlmsg_tail(const struct nlmsghdr *nlh)
+{
+       return (unsigned char *) nlh + NLMSG_ALIGN(nlh->nlmsg_len);
+}
+
+/**
+ * length of message payload
+ * @arg nlh            netlink message header
+ */
+static inline int nlmsg_len(const struct nlmsghdr *nlh)
+{
+       return nlh->nlmsg_len - NLMSG_HDRLEN;
+}
+
+/**
+ * head of attributes data
+ * @arg nlh            netlink message header
+ * @arg hdrlen         length of family specific header
+ */
+static inline struct nlattr *nlmsg_attrdata(const struct nlmsghdr *nlh, int hdrlen)
+{
+       unsigned char *data = (unsigned char*)nlmsg_data(nlh);
+       return (struct nlattr *) (data + NLMSG_ALIGN(hdrlen));
+}
+
+/**
+ * length of attributes data
+ * @arg nlh            netlink message header
+ * @arg hdrlen         length of family specific header
+ */
+static inline int nlmsg_attrlen(const struct nlmsghdr *nlh, int hdrlen)
+{
+       return nlmsg_len(nlh) - NLMSG_ALIGN(hdrlen);
+}
+
+static inline int nlmsg_valid_hdr(const struct nlmsghdr *nlh, int hdrlen)
+{
+       if (nlh->nlmsg_len < (uint)nlmsg_msg_size(hdrlen))
+               return 0;
+
+       return 1;
+}
+
+
+static inline void nlmsg_set_proto(struct nl_msg *msg, int protocol)
+{
+       msg->nm_protocol = protocol;
+}
+
+static inline int nlmsg_get_proto(struct nl_msg *msg)
+{
+       return msg->nm_protocol;
+}
+
+static inline size_t nlmsg_get_max_size(struct nl_msg *msg)
+{
+       return msg->nm_size;
+}
+
+static inline void nlmsg_set_src(struct nl_msg *msg, struct sockaddr_nl *addr)
+{
+       memcpy(&msg->nm_src, addr, sizeof(*addr));
+}
+
+static inline struct sockaddr_nl *nlmsg_get_src(struct nl_msg *msg)
+{
+       return &msg->nm_src;
+}
+
+static inline void nlmsg_set_dst(struct nl_msg *msg, struct sockaddr_nl *addr)
+{
+       memcpy(&msg->nm_dst, addr, sizeof(*addr));
+}
+
+static inline struct sockaddr_nl *nlmsg_get_dst(struct nl_msg *msg)
+{
+       return &msg->nm_dst;
+}
+
+static inline void nlmsg_set_creds(struct nl_msg *msg, struct ucred *creds)
+{
+       memcpy(&msg->nm_creds, creds, sizeof(*creds));
+       msg->nm_flags |= NL_MSG_CRED_PRESENT;
+}
+
+static inline struct ucred *nlmsg_get_creds(struct nl_msg *msg)
+{
+       if (msg->nm_flags & NL_MSG_CRED_PRESENT)
+               return &msg->nm_creds;
+       return NULL;
+}
+
+/**
+ * Return actual netlink message
+ * @arg n              netlink message
+ * 
+ * Returns the actual netlink message casted to the type of the netlink
+ * message header.
+ * 
+ * @return A pointer to the netlink message.
+ */
+static inline struct nlmsghdr *nlmsg_hdr(struct nl_msg *n)
+{
+       return n->nm_nlh;
+}
+
+/**
+ * Acquire a reference on a netlink message
+ * @arg msg            message to acquire reference from
+ */
+static inline void nlmsg_get(struct nl_msg *msg)
+{
+       msg->nm_refcnt++;
+}
+
+/**
+ * Expand maximum payload size of a netlink message
+ * @arg n              Netlink message.
+ * @arg newlen         New maximum payload size.
+ *
+ * Reallocates the payload section of a netlink message and increases
+ * the maximum payload size of the message.
+ *
+ * @note Any pointers pointing to old payload block will be stale and
+ *       need to be refetched. Therfore, do not expand while constructing
+ *       nested attributes or while reserved data blocks are held.
+ *
+ * @return 0 on success or a negative error code.
+ */
+static inline int nlmsg_expand(struct nl_msg *n, size_t newlen)
+{
+       void *tmp;
+
+       if (newlen <= n->nm_size)
+               return -NLE_INVAL;
+
+       tmp = realloc(n->nm_nlh, newlen);
+       if (tmp == NULL)
+               return -NLE_NOMEM;
+
+       n->nm_nlh = (struct nlmsghdr*)tmp;
+       n->nm_size = newlen;
+
+       return 0;
+}
+
+
+/**
+ * @name Iterators
+ * @{
+ */
+
+/**
+ * @ingroup msg
+ * Iterate over a stream of attributes in a message
+ * @arg pos    loop counter, set to current attribute
+ * @arg nlh    netlink message header
+ * @arg hdrlen length of family header
+ * @arg rem    initialized to len, holds bytes currently remaining in stream
+ */
+#define nlmsg_for_each_attr(pos, nlh, hdrlen, rem) \
+       nla_for_each_attr(pos, nlmsg_attrdata(nlh, hdrlen), \
+                         nlmsg_attrlen(nlh, hdrlen), rem)
+
+/**
+ * Iterate over a stream of messages
+ * @arg pos    loop counter, set to current message
+ * @arg head   head of message stream
+ * @arg len    length of message stream
+ * @arg rem    initialized to len, holds bytes currently remaining in stream
+ */
+#define nlmsg_for_each_msg(pos, head, len, rem) \
+       for (pos = head, rem = len; \
+            nlmsg_ok(pos, rem); \
+            pos = nlmsg_next(pos, &(rem)))
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/package/libs/libnl-tiny/src/include/netlink/netlink-compat.h b/package/libs/libnl-tiny/src/include/netlink/netlink-compat.h
new file mode 100644 (file)
index 0000000..17ec9fc
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * netlink/netlink-compat.h    Netlink Compatability
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
+ */
+
+#ifndef NETLINK_COMPAT_H_
+#define NETLINK_COMPAT_H_
+
+#if !defined _LINUX_SOCKET_H && !defined _BITS_SOCKADDR_H
+typedef unsigned short  sa_family_t;
+#endif
+
+#ifndef IFNAMSIZ 
+/** Maximum length of a interface name */
+#define IFNAMSIZ 16
+#endif
+
+/* patch 2.4.x if_arp */
+#ifndef ARPHRD_INFINIBAND
+#define ARPHRD_INFINIBAND 32
+#endif
+
+/* patch 2.4.x eth header file */
+#ifndef ETH_P_MPLS_UC
+#define ETH_P_MPLS_UC  0x8847 
+#endif
+
+#ifndef ETH_P_MPLS_MC
+#define ETH_P_MPLS_MC   0x8848
+#endif
+
+#ifndef  ETH_P_EDP2
+#define ETH_P_EDP2      0x88A2
+#endif
+
+#ifndef ETH_P_HDLC
+#define ETH_P_HDLC      0x0019 
+#endif
+
+#ifndef AF_LLC
+#define AF_LLC         26
+#endif
+
+#endif
diff --git a/package/libs/libnl-tiny/src/include/netlink/netlink-kernel.h b/package/libs/libnl-tiny/src/include/netlink/netlink-kernel.h
new file mode 100644 (file)
index 0000000..a0f5535
--- /dev/null
@@ -0,0 +1,196 @@
+#ifndef __LINUX_NETLINK_H
+#define __LINUX_NETLINK_H
+
+/**
+ * Netlink socket address
+ * @ingroup nl
+ */
+struct sockaddr_nl
+{
+       /** socket family (AF_NETLINK) */
+       sa_family_t     nl_family;
+
+       /** Padding (unused) */
+       unsigned short  nl_pad;
+
+       /** Unique process ID  */
+       uint32_t        nl_pid;
+
+       /** Multicast group subscriptions */
+       uint32_t        nl_groups;
+};
+
+/**
+ * Netlink message header
+ * @ingroup msg
+ */
+struct nlmsghdr
+{
+       /**
+        * Length of message including header.
+        */
+       uint32_t        nlmsg_len;
+
+       /**
+        * Message type (content type)
+        */
+       uint16_t        nlmsg_type;
+
+       /**
+        * Message flags
+        */
+       uint16_t        nlmsg_flags;
+
+       /**
+        * Sequence number
+        */
+       uint32_t        nlmsg_seq;
+
+       /**
+        * Netlink PID of the proccess sending the message.
+        */
+       uint32_t        nlmsg_pid;
+};
+
+/**
+ * @name Standard message flags
+ * @{
+ */
+
+/**
+ * Must be set on all request messages (typically from user space to
+ * kernel space).
+ * @ingroup msg
+ */
+#define NLM_F_REQUEST          1
+
+/**
+ * Indicates the message is part of a multipart message terminated
+ * by NLMSG_DONE.
+ */
+#define NLM_F_MULTI            2
+
+/**
+ * Request for an acknowledgment on success.
+ */
+#define NLM_F_ACK              4
+
+/**
+ * Echo this request
+ */
+#define NLM_F_ECHO             8
+
+/** @} */
+
+/**
+ * @name Additional message flags for GET requests
+ * @{
+ */
+
+/**
+ * Return the complete table instead of a single entry.
+ * @ingroup msg
+ */
+#define NLM_F_ROOT     0x100
+
+/**
+ * Return all entries matching criteria passed in message content.
+ */
+#define NLM_F_MATCH    0x200
+
+/**
+ * Return an atomic snapshot of the table being referenced. This
+ * may require special privileges because it has the potential to
+ * interrupt service in the FE for a longer time.
+ */
+#define NLM_F_ATOMIC   0x400
+
+/**
+ * Dump all entries
+ */
+#define NLM_F_DUMP     (NLM_F_ROOT|NLM_F_MATCH)
+
+/** @} */
+
+/**
+ * @name Additional messsage flags for NEW requests
+ * @{
+ */
+
+/**
+ * Replace existing matching config object with this request.
+ * @ingroup msg
+ */
+#define NLM_F_REPLACE  0x100
+
+/**
+ * Don't replace the config object if it already exists.
+ */
+#define NLM_F_EXCL     0x200
+
+/**
+ * Create config object if it doesn't already exist.
+ */
+#define NLM_F_CREATE   0x400
+
+/**
+ * Add to the end of the object list.
+ */
+#define NLM_F_APPEND   0x800
+
+/** @} */
+
+/**
+ * @name Standard Message types
+ * @{
+ */
+
+/**
+ * No operation, message must be ignored
+ * @ingroup msg
+ */
+#define NLMSG_NOOP             0x1
+
+/**
+ * The message signals an error and the payload contains a nlmsgerr
+ * structure. This can be looked at as a NACK and typically it is
+ * from FEC to CPC.
+ */
+#define NLMSG_ERROR            0x2
+
+/**
+ * Message terminates a multipart message.
+ */
+#define NLMSG_DONE             0x3
+
+/**
+ * The message signals that data got lost
+ */
+#define NLMSG_OVERRUN          0x4
+
+/**
+ * Lower limit of reserved message types
+ */
+#define NLMSG_MIN_TYPE         0x10
+
+/** @} */
+
+/**
+ * Netlink error message
+ * @ingroup msg
+ */
+struct nlmsgerr
+{
+       /** Error code (errno number) */
+       int             error;
+
+       /** Original netlink message causing the error */
+       struct nlmsghdr msg;
+};
+
+struct nl_pktinfo
+{
+       __u32   group;
+};
+
+#endif /* __LINUX_NETLINK_H */
diff --git a/package/libs/libnl-tiny/src/include/netlink/netlink.h b/package/libs/libnl-tiny/src/include/netlink/netlink.h
new file mode 100644 (file)
index 0000000..e06fb7f
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+ * netlink/netlink.h           Netlink Interface
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
+ */
+
+#ifndef NETLINK_NETLINK_H_
+#define NETLINK_NETLINK_H_
+
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/poll.h>
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <netdb.h>
+#include <netlink/netlink-compat.h>
+#include <linux/netlink.h>
+#include <linux/genetlink.h>
+#include <netlink/version.h>
+#include <netlink/errno.h>
+#include <netlink/types.h>
+#include <netlink/handlers.h>
+#include <netlink/socket.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int nl_debug;
+extern struct nl_dump_params nl_debug_dp;
+
+/* Connection Management */
+extern int                     nl_connect(struct nl_sock *, int);
+extern void                    nl_close(struct nl_sock *);
+
+/* Send */
+extern int                     nl_sendto(struct nl_sock *, void *, size_t);
+extern int                     nl_sendmsg(struct nl_sock *, struct nl_msg *,
+                                          struct msghdr *);
+extern int                     nl_send(struct nl_sock *, struct nl_msg *);
+extern int                     nl_send_auto_complete(struct nl_sock *,
+                                                     struct nl_msg *);
+extern int                     nl_send_simple(struct nl_sock *, int, int,
+                                              void *, size_t);
+
+/* Receive */
+extern int                     nl_recv(struct nl_sock *,
+                                       struct sockaddr_nl *, unsigned char **,
+                                       struct ucred **);
+extern int                     nl_recvmsgs(struct nl_sock *sk, struct nl_cb *cb);
+
+extern int                     nl_wait_for_ack(struct nl_sock *);
+
+/* Netlink Family Translations */
+extern char *                  nl_nlfamily2str(int, char *, size_t);
+extern int                     nl_str2nlfamily(const char *);
+
+/**
+ * Receive a set of message from a netlink socket using handlers in nl_sock.
+ * @arg sk             Netlink socket.
+ *
+ * Calls nl_recvmsgs() with the handlers configured in the netlink socket.
+ */
+static inline int nl_recvmsgs_default(struct nl_sock *sk)
+{
+       return nl_recvmsgs(sk, sk->s_cb);
+}
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/package/libs/libnl-tiny/src/include/netlink/object-api.h b/package/libs/libnl-tiny/src/include/netlink/object-api.h
new file mode 100644 (file)
index 0000000..8a44fe9
--- /dev/null
@@ -0,0 +1,331 @@
+/*
+ * netlink/object-api.c                Object API
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2007 Thomas Graf <tgraf@suug.ch>
+ */
+
+#ifndef NETLINK_OBJECT_API_H_
+#define NETLINK_OBJECT_API_H_
+
+#include <netlink/netlink.h>
+#include <netlink/utils.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @ingroup object
+ * @defgroup object_api Object API
+ * @brief
+ *
+ * @par 1) Object Definition
+ * @code
+ * // Define your object starting with the common object header
+ * struct my_obj {
+ *     NLHDR_COMMON
+ *     int             my_data;
+ * };
+ *
+ * // Fill out the object operations structure
+ * struct nl_object_ops my_ops = {
+ *     .oo_name        = "my_obj",
+ *     .oo_size        = sizeof(struct my_obj),
+ * };
+ *
+ * // At this point the object can be allocated, you may want to provide a
+ * // separate _alloc() function to ease allocting objects of this kind.
+ * struct nl_object *obj = nl_object_alloc(&my_ops);
+ *
+ * // And release it again...
+ * nl_object_put(obj);
+ * @endcode
+ *
+ * @par 2) Allocating additional data
+ * @code
+ * // You may require to allocate additional data and store it inside
+ * // object, f.e. assuming there is a field `ptr'.
+ * struct my_obj {
+ *     NLHDR_COMMON
+ *     void *          ptr;
+ * };
+ *
+ * // And at some point you may assign allocated data to this field:
+ * my_obj->ptr = calloc(1, ...);
+ *
+ * // In order to not introduce any memory leaks you have to release
+ * // this data again when the last reference is given back.
+ * static void my_obj_free_data(struct nl_object *obj)
+ * {
+ *     struct my_obj *my_obj = nl_object_priv(obj);
+ *
+ *     free(my_obj->ptr);
+ * }
+ *
+ * // Also when the object is cloned, you must ensure for your pointer
+ * // stay valid even if one of the clones is freed by either making
+ * // a clone as well or increase the reference count.
+ * static int my_obj_clone(struct nl_object *src, struct nl_object *dst)
+ * {
+ *     struct my_obj *my_src = nl_object_priv(src);
+ *     struct my_obj *my_dst = nl_object_priv(dst);
+ *
+ *     if (src->ptr) {
+ *             dst->ptr = calloc(1, ...);
+ *             memcpy(dst->ptr, src->ptr, ...);
+ *     }
+ * }
+ *
+ * struct nl_object_ops my_ops = {
+ *     ...
+ *     .oo_free_data   = my_obj_free_data,
+ *     .oo_clone       = my_obj_clone,
+ * };
+ * @endcode
+ *
+ * @par 3) Object Dumping
+ * @code
+ * static int my_obj_dump_detailed(struct nl_object *obj,
+ *                                struct nl_dump_params *params)
+ * {
+ *     struct my_obj *my_obj = nl_object_priv(obj);
+ *
+ *     // It is absolutely essential to use nl_dump() when printing
+ *     // any text to make sure the dumping parameters are respected.
+ *     nl_dump(params, "Obj Integer: %d\n", my_obj->my_int);
+ *
+ *     // Before we can dump the next line, make sure to prefix
+ *     // this line correctly.
+ *     nl_new_line(params);
+ *
+ *     // You may also split a line into multiple nl_dump() calls.
+ *     nl_dump(params, "String: %s ", my_obj->my_string);
+ *     nl_dump(params, "String-2: %s\n", my_obj->another_string);
+ * }
+ *
+ * struct nl_object_ops my_ops = {
+ *     ...
+ *     .oo_dump[NL_DUMP_FULL]  = my_obj_dump_detailed,
+ * };
+ * @endcode
+ *
+ * @par 4) Object Attributes
+ * @code
+ * // The concept of object attributes is optional but can ease the typical
+ * // case of objects that have optional attributes, e.g. a route may have a
+ * // nexthop assigned but it is not required to.
+ *
+ * // The first step to define your object specific bitmask listing all
+ * // attributes
+ * #define MY_ATTR_FOO         (1<<0)
+ * #define MY_ATTR_BAR         (1<<1)
+ *
+ * // When assigning an optional attribute to the object, make sure
+ * // to mark its availability.
+ * my_obj->foo = 123123;
+ * my_obj->ce_mask |= MY_ATTR_FOO;
+ *
+ * // At any time you may use this mask to check for the availability
+ * // of the attribute, e.g. while dumping
+ * if (my_obj->ce_mask & MY_ATTR_FOO)
+ *     nl_dump(params, "foo %d ", my_obj->foo);
+ *
+ * // One of the big advantages of this concept is that it allows for
+ * // standardized comparisons which make it trivial for caches to
+ * // identify unique objects by use of unified comparison functions.
+ * // In order for it to work, your object implementation must provide
+ * // a comparison function and define a list of attributes which
+ * // combined together make an object unique.
+ *
+ * static int my_obj_compare(struct nl_object *_a, struct nl_object *_b,
+ *                          uint32_t attrs, int flags)
+ * {
+ *     struct my_obj *a = nl_object_priv(_a):
+ *     struct my_obj *b = nl_object_priv(_b):
+ *     int diff = 0;
+ *
+ *     // We help ourselves in defining our own DIFF macro which will
+ *     // call ATTR_DIFF() on both objects which will make sure to only
+ *     // compare the attributes if required.
+ *     #define MY_DIFF(ATTR, EXPR) ATTR_DIFF(attrs, MY_ATTR_##ATTR, a, b, EXPR)
+ *
+ *     // Call our own diff macro for each attribute to build a bitmask
+ *     // representing the attributes which mismatch.
+ *     diff |= MY_DIFF(FOO, a->foo != b->foo)
+ *     diff |= MY_DIFF(BAR, strcmp(a->bar, b->bar))
+ *
+ *     return diff;
+ * }
+ *
+ * // In order to identify identical objects with differing attributes
+ * // you must specify the attributes required to uniquely identify
+ * // your object. Make sure to not include too many attributes, this
+ * // list is used when caches look for an old version of an object.
+ * struct nl_object_ops my_ops = {
+ *     ...
+ *     .oo_id_attrs            = MY_ATTR_FOO,
+ *     .oo_compare             = my_obj_compare,
+ * };
+ * @endcode
+ * @{
+ */
+
+/**
+ * Common Object Header
+ *
+ * This macro must be included as first member in every object
+ * definition to allow objects to be cached.
+ */
+#define NLHDR_COMMON                           \
+       int                     ce_refcnt;      \
+       struct nl_object_ops *  ce_ops;         \
+       struct nl_cache *       ce_cache;       \
+       struct nl_list_head     ce_list;        \
+       int                     ce_msgtype;     \
+       int                     ce_flags;       \
+       uint32_t                ce_mask;
+
+/**
+ * Return true if attribute is available in both objects
+ * @arg A              an object
+ * @arg B              another object
+ * @arg ATTR           attribute bit
+ *
+ * @return True if the attribute is available, otherwise false is returned.
+ */
+#define AVAILABLE(A, B, ATTR)  (((A)->ce_mask & (B)->ce_mask) & (ATTR))
+
+/**
+ * Return true if attributes mismatch
+ * @arg A              an object
+ * @arg B              another object
+ * @arg ATTR           attribute bit
+ * @arg EXPR           Comparison expression
+ *
+ * This function will check if the attribute in question is available
+ * in both objects, if not this will count as a mismatch.
+ *
+ * If available the function will execute the expression which must
+ * return true if the attributes mismatch.
+ *
+ * @return True if the attribute mismatch, or false if they match.
+ */
+#define ATTR_MISMATCH(A, B, ATTR, EXPR)        (!AVAILABLE(A, B, ATTR) || (EXPR))
+
+/**
+ * Return attribute bit if attribute does not match
+ * @arg LIST           list of attributes to be compared
+ * @arg ATTR           attribute bit
+ * @arg A              an object
+ * @arg B              another object
+ * @arg EXPR           Comparison expression
+ *
+ * This function will check if the attribute in question is available
+ * in both objects, if not this will count as a mismatch.
+ *
+ * If available the function will execute the expression which must
+ * return true if the attributes mismatch.
+ *
+ * In case the attributes mismatch, the attribute is returned, otherwise
+ * 0 is returned.
+ *
+ * @code
+ * diff |= ATTR_DIFF(attrs, MY_ATTR_FOO, a, b, a->foo != b->foo);
+ * @endcode
+ */
+#define ATTR_DIFF(LIST, ATTR, A, B, EXPR) \
+({     int diff = 0; \
+       if (((LIST) & (ATTR)) && ATTR_MISMATCH(A, B, ATTR, EXPR)) \
+               diff = ATTR; \
+       diff; })
+
+/**
+ * Object Operations
+ */
+struct nl_object;
+struct nl_object_ops
+{
+       /**
+        * Unique name of object type
+        *
+        * Must be in the form family/name, e.g. "route/addr"
+        */
+       char *          oo_name;
+
+       /** Size of object including its header */
+       size_t          oo_size;
+
+       /* List of attributes needed to uniquely identify the object */
+       uint32_t        oo_id_attrs;
+
+       /**
+        * Constructor function
+        *
+        * Will be called when a new object of this type is allocated.
+        * Can be used to initialize members such as lists etc.
+        */
+       void  (*oo_constructor)(struct nl_object *);
+
+       /**
+        * Destructor function
+        *
+        * Will be called when an object is freed. Must free all
+        * resources which may have been allocated as part of this
+        * object.
+        */
+       void  (*oo_free_data)(struct nl_object *);
+
+       /**
+        * Cloning function
+        *
+        * Will be called when an object needs to be cloned. Please
+        * note that the generic object code will make an exact
+        * copy of the object first, therefore you only need to take
+        * care of members which require reference counting etc.
+        *
+        * May return a negative error code to abort cloning.
+        */
+       int  (*oo_clone)(struct nl_object *, struct nl_object *);
+
+       /**
+        * Dumping functions
+        *
+        * Will be called when an object is dumped. The implementations
+        * have to use nl_dump(), nl_dump_line(), and nl_new_line() to
+        * dump objects.
+        *
+        * The functions must return the number of lines printed.
+        */
+       void (*oo_dump[NL_DUMP_MAX+1])(struct nl_object *,
+                                      struct nl_dump_params *);
+
+       /**
+        * Comparison function
+        *
+        * Will be called when two objects of the same type are
+        * compared. It takes the two objects in question, an object
+        * specific bitmask defining which attributes should be
+        * compared and flags to control the behaviour.
+        *
+        * The function must return a bitmask with the relevant bit
+        * set for each attribute that mismatches.
+        */
+       int   (*oo_compare)(struct nl_object *, struct nl_object *,
+                           uint32_t, int);
+
+
+       char *(*oo_attrs2str)(int, char *, size_t);
+};
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/package/libs/libnl-tiny/src/include/netlink/object.h b/package/libs/libnl-tiny/src/include/netlink/object.h
new file mode 100644 (file)
index 0000000..8aabe7b
--- /dev/null
@@ -0,0 +1,164 @@
+/*
+ * netlink/object.c    Generic Cacheable Object
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
+ */
+
+#ifndef NETLINK_OBJECT_H_
+#define NETLINK_OBJECT_H_
+
+#include <netlink/netlink.h>
+#include <netlink/utils.h>
+#include <netlink/object-api.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define NL_OBJ_MARK            1
+
+struct nl_cache;
+struct nl_object;
+struct nl_object_ops;
+
+struct nl_object
+{
+       NLHDR_COMMON
+};
+
+#define OBJ_CAST(ptr)          ((struct nl_object *) (ptr))
+
+/* General */
+extern struct nl_object *      nl_object_alloc(struct nl_object_ops *);
+extern void                    nl_object_free(struct nl_object *);
+extern struct nl_object *      nl_object_clone(struct nl_object *obj);
+
+#ifdef disabled
+
+extern int                     nl_object_alloc_name(const char *,
+                                                    struct nl_object **);
+extern void                    nl_object_dump(struct nl_object *,
+                                              struct nl_dump_params *);
+
+extern uint32_t                        nl_object_diff(struct nl_object *,
+                                              struct nl_object *);
+extern int                     nl_object_match_filter(struct nl_object *,
+                                                      struct nl_object *);
+extern int                     nl_object_identical(struct nl_object *,
+                                                   struct nl_object *);
+extern char *                  nl_object_attrs2str(struct nl_object *,
+                                                   uint32_t attrs, char *buf,
+                                                   size_t);
+#endif
+/**
+ * Check whether this object is used by multiple users
+ * @arg obj            object to check
+ * @return true or false
+ */
+static inline int nl_object_shared(struct nl_object *obj)
+{
+       return obj->ce_refcnt > 1;
+}
+
+
+static inline void nl_object_get(struct nl_object *obj)
+{
+       obj->ce_refcnt++;
+}
+
+static inline void nl_object_put(struct nl_object *obj)
+{
+       if (!obj)
+               return;
+
+       obj->ce_refcnt--;
+
+       if (obj->ce_refcnt <= 0)
+               nl_object_free(obj);
+}
+
+
+/**
+ * @name Marks
+ * @{
+ */
+
+/**
+ * Add mark to object
+ * @arg obj            Object to mark
+ */
+static inline void nl_object_mark(struct nl_object *obj)
+{
+       obj->ce_flags |= NL_OBJ_MARK;
+}
+
+/**
+ * Remove mark from object
+ * @arg obj            Object to unmark
+ */
+static inline void nl_object_unmark(struct nl_object *obj)
+{
+       obj->ce_flags &= ~NL_OBJ_MARK;
+}
+
+/**
+ * Return true if object is marked
+ * @arg obj            Object to check
+ * @return true if object is marked, otherwise false
+ */
+static inline int nl_object_is_marked(struct nl_object *obj)
+{
+       return (obj->ce_flags & NL_OBJ_MARK);
+}
+
+/** @} */
+
+#ifdef disabled
+/**
+ * Return list of attributes present in an object
+ * @arg obj            an object
+ * @arg buf            destination buffer
+ * @arg len            length of destination buffer
+ *
+ * @return destination buffer.
+ */
+static inline char *nl_object_attr_list(struct nl_object *obj, char *buf, size_t len)
+{
+       return nl_object_attrs2str(obj, obj->ce_mask, buf, len);
+}
+#endif
+
+/**
+ * @name Attributes
+ * @{
+ */
+
+static inline int nl_object_get_refcnt(struct nl_object *obj)
+{
+       return obj->ce_refcnt;
+}
+
+static inline struct nl_cache *nl_object_get_cache(struct nl_object *obj)
+{
+       return obj->ce_cache;
+}
+
+static inline void *           nl_object_priv(struct nl_object *obj)
+{
+       return obj;
+}
+
+
+/** @} */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/package/libs/libnl-tiny/src/include/netlink/socket.h b/package/libs/libnl-tiny/src/include/netlink/socket.h
new file mode 100644 (file)
index 0000000..9f7f422
--- /dev/null
@@ -0,0 +1,221 @@
+/*
+ * netlink/socket.h            Netlink Socket
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
+ */
+
+#ifndef NETLINK_SOCKET_H_
+#define NETLINK_SOCKET_H_
+
+#include <netlink/types.h>
+#include <netlink/handlers.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define NL_SOCK_BUFSIZE_SET    (1<<0)
+#define NL_SOCK_PASSCRED       (1<<1)
+#define NL_OWN_PORT            (1<<2)
+#define NL_MSG_PEEK            (1<<3)
+#define NL_NO_AUTO_ACK         (1<<4)
+
+struct nl_cb;
+struct nl_sock
+{
+       struct sockaddr_nl      s_local;
+       struct sockaddr_nl      s_peer;
+       int                     s_fd;
+       int                     s_proto;
+       unsigned int            s_seq_next;
+       unsigned int            s_seq_expect;
+       int                     s_flags;
+       struct nl_cb *          s_cb;
+};
+
+
+extern struct nl_sock *        nl_socket_alloc(void);
+extern struct nl_sock *        nl_socket_alloc_cb(struct nl_cb *);
+extern void            nl_socket_free(struct nl_sock *);
+
+extern void            nl_socket_set_local_port(struct nl_sock *, uint32_t);
+
+extern int             nl_socket_add_memberships(struct nl_sock *, int, ...);
+extern int             nl_socket_drop_memberships(struct nl_sock *, int, ...);
+
+extern int             nl_socket_set_buffer_size(struct nl_sock *, int, int);
+extern int             nl_socket_set_passcred(struct nl_sock *, int);
+extern int             nl_socket_recv_pktinfo(struct nl_sock *, int);
+
+extern void            nl_socket_disable_seq_check(struct nl_sock *);
+
+extern int             nl_socket_set_nonblocking(struct nl_sock *);
+
+/**
+ * Use next sequence number
+ * @arg sk             Netlink socket.
+ *
+ * Uses the next available sequence number and increases the counter
+ * by one for subsequent calls.
+ *
+ * @return Unique serial sequence number
+ */
+static inline unsigned int nl_socket_use_seq(struct nl_sock *sk)
+{
+       return sk->s_seq_next++;
+}
+
+/**
+ * Disable automatic request for ACK
+ * @arg sk             Netlink socket.
+ *
+ * The default behaviour of a socket is to request an ACK for
+ * each message sent to allow for the caller to synchronize to
+ * the completion of the netlink operation. This function
+ * disables this behaviour and will result in requests being
+ * sent which will not have the NLM_F_ACK flag set automatically.
+ * However, it is still possible for the caller to set the
+ * NLM_F_ACK flag explicitely.
+ */
+static inline void nl_socket_disable_auto_ack(struct nl_sock *sk)
+{
+       sk->s_flags |= NL_NO_AUTO_ACK;
+}
+
+/**
+ * Enable automatic request for ACK (default)
+ * @arg sk             Netlink socket.
+ * @see nl_socket_disable_auto_ack
+ */
+static inline void nl_socket_enable_auto_ack(struct nl_sock *sk)
+{
+       sk->s_flags &= ~NL_NO_AUTO_ACK;
+}
+
+/**
+ * @name Source Idenficiation
+ * @{
+ */
+
+static inline uint32_t nl_socket_get_local_port(struct nl_sock *sk)
+{
+       return sk->s_local.nl_pid;
+}
+
+/**
+ * Join multicast groups (deprecated)
+ * @arg sk             Netlink socket.
+ * @arg groups         Bitmask of groups to join.
+ *
+ * This function defines the old way of joining multicast group which
+ * has to be done prior to calling nl_connect(). It works on any kernel
+ * version but is very limited as only 32 groups can be joined.
+ */
+static inline void nl_join_groups(struct nl_sock *sk, int groups)
+{
+       sk->s_local.nl_groups |= groups;
+}
+
+/**
+ * @name Peer Identfication
+ * @{
+ */
+
+static inline uint32_t nl_socket_get_peer_port(struct nl_sock *sk)
+{
+       return sk->s_peer.nl_pid;
+}
+
+static inline void nl_socket_set_peer_port(struct nl_sock *sk, uint32_t port)
+{
+       sk->s_peer.nl_pid = port;
+}
+
+/** @} */
+
+/**
+ * @name File Descriptor
+ * @{
+ */
+
+static inline int nl_socket_get_fd(struct nl_sock *sk)
+{
+       return sk->s_fd;
+}
+
+/**
+ * Enable use of MSG_PEEK when reading from socket
+ * @arg sk             Netlink socket.
+ */
+static inline void nl_socket_enable_msg_peek(struct nl_sock *sk)
+{
+       sk->s_flags |= NL_MSG_PEEK;
+}
+
+/**
+ * Disable use of MSG_PEEK when reading from socket
+ * @arg sk             Netlink socket.
+ */
+static inline void nl_socket_disable_msg_peek(struct nl_sock *sk)
+{
+       sk->s_flags &= ~NL_MSG_PEEK;
+}
+
+/**
+ * @name Callback Handler
+ * @{
+ */
+
+static inline struct nl_cb *nl_socket_get_cb(struct nl_sock *sk)
+{
+       return nl_cb_get(sk->s_cb);
+}
+
+static inline void nl_socket_set_cb(struct nl_sock *sk, struct nl_cb *cb)
+{
+       nl_cb_put(sk->s_cb);
+       sk->s_cb = nl_cb_get(cb);
+}
+
+/**
+ * Modify the callback handler associated to the socket
+ * @arg sk             Netlink socket.
+ * @arg type           which type callback to set
+ * @arg kind           kind of callback
+ * @arg func           callback function
+ * @arg arg            argument to be passwd to callback function
+ *
+ * @see nl_cb_set
+ */
+static inline int nl_socket_modify_cb(struct nl_sock *sk, enum nl_cb_type type,
+                       enum nl_cb_kind kind, nl_recvmsg_msg_cb_t func,
+                       void *arg)
+{
+       return nl_cb_set(sk->s_cb, type, kind, func, arg);
+}
+
+/** @} */
+
+static inline int nl_socket_add_membership(struct nl_sock *sk, int group)
+{
+       return nl_socket_add_memberships(sk, group, 0);
+}
+
+
+static inline int nl_socket_drop_membership(struct nl_sock *sk, int group)
+{
+       return nl_socket_drop_memberships(sk, group, 0);
+}
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/package/libs/libnl-tiny/src/include/netlink/types.h b/package/libs/libnl-tiny/src/include/netlink/types.h
new file mode 100644 (file)
index 0000000..de81ace
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * netlink/netlink-types.h     Netlink Types
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
+ */
+
+#ifndef __NETLINK_TYPES_H_
+#define __NETLINK_TYPES_H_
+
+#include <stdio.h>
+
+/**
+ * Dumping types (dp_type)
+ * @ingroup utils
+ */
+enum nl_dump_type {
+       NL_DUMP_LINE,           /**< Dump object briefly on one line */
+       NL_DUMP_DETAILS,        /**< Dump all attributes but no statistics */
+       NL_DUMP_STATS,          /**< Dump all attributes including statistics */
+       NL_DUMP_ENV,            /**< Dump all attribtues as env variables */
+       __NL_DUMP_MAX,
+};
+#define NL_DUMP_MAX (__NL_DUMP_MAX - 1)
+
+/**
+ * Dumping parameters
+ * @ingroup utils
+ */
+struct nl_dump_params
+{
+       /**
+        * Specifies the type of dump that is requested.
+        */
+       enum nl_dump_type       dp_type;
+
+       /**
+        * Specifies the number of whitespaces to be put in front
+        * of every new line (indentation).
+        */
+       int                     dp_prefix;
+
+       /**
+        * Causes the cache index to be printed for each element.
+        */
+       int                     dp_print_index;
+
+       /**
+        * Causes each element to be prefixed with the message type.
+        */
+       int                     dp_dump_msgtype;
+
+       /**
+        * A callback invoked for output
+        *
+        * Passed arguments are:
+        *  - dumping parameters
+        *  - string to append to the output
+        */
+       void                    (*dp_cb)(struct nl_dump_params *, char *);
+
+       /**
+        * A callback invoked for every new line, can be used to
+        * customize the indentation.
+        *
+        * Passed arguments are:
+        *  - dumping parameters
+        *  - line number starting from 0
+        */
+       void                    (*dp_nl_cb)(struct nl_dump_params *, int);
+
+       /**
+        * User data pointer, can be used to pass data to callbacks.
+        */
+       void                    *dp_data;
+
+       /**
+        * File descriptor the dumping output should go to
+        */
+       FILE *                  dp_fd;
+
+       /**
+        * Alternatively the output may be redirected into a buffer
+        */
+       char *                  dp_buf;
+
+       /**
+        * Length of the buffer dp_buf
+        */
+       size_t                  dp_buflen;
+
+       /**
+        * PRIVATE
+        * Set if a dump was performed prior to the actual dump handler.
+        */
+       int                     dp_pre_dump;
+
+       /**
+        * PRIVATE
+        * Owned by the current caller
+        */
+       int                     dp_ivar;
+
+       unsigned int            dp_line;
+};
+
+#ifndef __GNUC__
+#define __extension__
+#endif
+
+#define min_t(type,x,y) \
+       __extension__({ type __x = (x); type __y = (y); __x < __y ? __x: __y; })
+#define max_t(type,x,y) \
+       __extension__({ type __x = (x); type __y = (y); __x > __y ? __x: __y; })
+
+
+#endif
diff --git a/package/libs/libnl-tiny/src/include/netlink/utils.h b/package/libs/libnl-tiny/src/include/netlink/utils.h
new file mode 100644 (file)
index 0000000..480bab6
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ * netlink/utils.h             Utility Functions
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
+ */
+
+#ifndef NETLINK_UTILS_H_
+#define NETLINK_UTILS_H_
+
+#include <netlink/netlink.h>
+#include <netlink/list.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @name Probability Constants
+ * @{
+ */
+
+/**
+ * Lower probability limit
+ * @ingroup utils
+ */
+#define NL_PROB_MIN 0x0
+
+/**
+ * Upper probability limit
+ * @ingroup utils
+ */
+#define NL_PROB_MAX 0xffffffff
+
+/** @} */
+
+/* unit pretty-printing */
+extern double  nl_cancel_down_bytes(unsigned long long, char **);
+extern double  nl_cancel_down_bits(unsigned long long, char **);
+extern double  nl_cancel_down_us(uint32_t, char **);
+
+/* generic unit translations */
+extern long    nl_size2int(const char *);
+extern long    nl_prob2int(const char *);
+
+/* time translations */
+extern int     nl_get_hz(void);
+extern uint32_t        nl_us2ticks(uint32_t);
+extern uint32_t        nl_ticks2us(uint32_t);
+extern int     nl_str2msec(const char *, uint64_t *);
+extern char *  nl_msec2str(uint64_t, char *, size_t);
+
+/* link layer protocol translations */
+extern char *  nl_llproto2str(int, char *, size_t);
+extern int     nl_str2llproto(const char *);
+
+/* ethernet protocol translations */
+extern char *  nl_ether_proto2str(int, char *, size_t);
+extern int     nl_str2ether_proto(const char *);
+
+/* IP protocol translations */
+extern char *  nl_ip_proto2str(int, char *, size_t);
+extern int     nl_str2ip_proto(const char *);
+
+/* Dumping helpers */
+extern void    nl_new_line(struct nl_dump_params *);
+extern void    nl_dump(struct nl_dump_params *, const char *, ...);
+extern void    nl_dump_line(struct nl_dump_params *, const char *, ...);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/package/libs/libnl-tiny/src/include/netlink/version.h b/package/libs/libnl-tiny/src/include/netlink/version.h
new file mode 100644 (file)
index 0000000..6a316d4
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+ * netlink/version.h   Compile Time Versioning Information
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2008 Thomas Graf <tgraf@suug.ch>
+ */
+
+#ifndef NETLINK_VERSION_H_
+#define NETLINK_VERSION_H_
+
+#define LIBNL_STRING "libnl"
+#define LIBNL_VERSION "2.0"
+
+#endif
diff --git a/package/libs/libnl-tiny/src/include/unl.h b/package/libs/libnl-tiny/src/include/unl.h
new file mode 100644 (file)
index 0000000..4fe7dc7
--- /dev/null
@@ -0,0 +1,47 @@
+#ifndef __UNL_H
+#define __UNL_H
+
+#include <netlink/netlink.h>
+#include <netlink/genl/genl.h>
+#include <netlink/genl/family.h>
+#include <stdbool.h>
+
+struct unl {
+       struct nl_sock *sock;
+       struct nl_cache *cache;
+       struct genl_family *family;
+       char *family_name;
+       int hdrlen;
+       bool loop_done;
+};
+
+int unl_genl_init(struct unl *unl, const char *family);
+void unl_free(struct unl *unl);
+
+typedef int (*unl_cb)(struct nl_msg *, void *);
+
+struct nl_msg *unl_genl_msg(struct unl *unl, int cmd, bool dump);
+int unl_genl_request(struct unl *unl, struct nl_msg *msg, unl_cb handler, void *arg);
+int unl_genl_request_single(struct unl *unl, struct nl_msg *msg, struct nl_msg **dest);
+void unl_genl_loop(struct unl *unl, unl_cb handler, void *arg);
+
+int unl_genl_multicast_id(struct unl *unl, const char *name);
+int unl_genl_subscribe(struct unl *unl, const char *name);
+int unl_genl_unsubscribe(struct unl *unl, const char *name);
+
+int unl_nl80211_phy_lookup(const char *name);
+int unl_nl80211_wdev_to_phy(struct unl *unl, int wdev);
+struct nl_msg *unl_nl80211_phy_msg(struct unl *unl, int phy, int cmd, bool dump);
+struct nl_msg *unl_nl80211_vif_msg(struct unl *unl, int dev, int cmd, bool dump);
+
+static inline void unl_loop_done(struct unl *unl)
+{
+       unl->loop_done = true;
+}
+
+static inline struct nlattr *unl_find_attr(struct unl *unl, struct nl_msg *msg, int attr)
+{
+       return nlmsg_find_attr(nlmsg_hdr(msg), unl->hdrlen, attr);
+}
+
+#endif
diff --git a/package/libs/libnl-tiny/src/msg.c b/package/libs/libnl-tiny/src/msg.c
new file mode 100644 (file)
index 0000000..e84c281
--- /dev/null
@@ -0,0 +1,566 @@
+/*
+ * lib/msg.c           Netlink Messages Interface
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
+ */
+
+/**
+ * @ingroup core
+ * @defgroup msg Messages
+ * Netlink Message Construction/Parsing Interface
+ * 
+ * The following information is partly extracted from RFC3549
+ * (ftp://ftp.rfc-editor.org/in-notes/rfc3549.txt)
+ *
+ * @par Message Format
+ * Netlink messages consist of a byte stream with one or multiple
+ * Netlink headers and an associated payload.  If the payload is too big
+ * to fit into a single message it, can be split over multiple Netlink
+ * messages, collectively called a multipart message.  For multipart
+ * messages, the first and all following headers have the \c NLM_F_MULTI
+ * Netlink header flag set, except for the last header which has the
+ * Netlink header type \c NLMSG_DONE.
+ *
+ * @par
+ * The Netlink message header (\link nlmsghdr struct nlmsghdr\endlink) is shown below.
+ * @code   
+ * 0                   1                   2                   3
+ * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |                          Length                             |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |            Type              |           Flags              |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |                      Sequence Number                        |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |                      Process ID (PID)                       |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * @endcode
+ *
+ * @par
+ * The netlink message header and payload must be aligned properly:
+ * @code
+ *  <------- NLMSG_ALIGN(hlen) ------> <---- NLMSG_ALIGN(len) --->
+ * +----------------------------+- - -+- - - - - - - - - - -+- - -+
+ * |           Header           | Pad |       Payload       | Pad |
+ * |      struct nlmsghdr       |     |                     |     |
+ * +----------------------------+- - -+- - - - - - - - - - -+- - -+
+ * @endcode
+ * @par
+ * Message Format:
+ * @code
+ *    <--- nlmsg_total_size(payload)  --->
+ *    <-- nlmsg_msg_size(payload) ->
+ *   +----------+- - -+-------------+- - -+-------- - -
+ *   | nlmsghdr | Pad |   Payload   | Pad | nlmsghdr
+ *   +----------+- - -+-------------+- - -+-------- - -
+ *   nlmsg_data(nlh)---^                   ^
+ *   nlmsg_next(nlh)-----------------------+
+ * @endcode
+ * @par
+ * The payload may consist of arbitary data but may have strict
+ * alignment and formatting rules depening on the specific netlink
+ * families.
+ * @par
+ * @code
+ *    <---------------------- nlmsg_len(nlh) --------------------->
+ *    <------ hdrlen ------>       <- nlmsg_attrlen(nlh, hdrlen) ->
+ *   +----------------------+- - -+--------------------------------+
+ *   |     Family Header    | Pad |           Attributes           |
+ *   +----------------------+- - -+--------------------------------+
+ *   nlmsg_attrdata(nlh, hdrlen)---^
+ * @endcode
+ * @par The ACK Netlink Message
+ * This message is actually used to denote both an ACK and a NACK.
+ * Typically, the direction is from FEC to CPC (in response to an ACK
+ * request message).  However, the CPC should be able to send ACKs back
+ * to FEC when requested.
+ * @code
+ *  0                   1                   2                   3
+ *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |                       Netlink message header                  |
+ * |                       type = NLMSG_ERROR                      |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |                          Error code                           |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |                       OLD Netlink message header              |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * @endcode
+ *
+ * @par Example
+ * @code
+ * // Various methods exist to create/allocate a new netlink
+ * // message. 
+ * //
+ * // nlmsg_alloc() will allocate an empty netlink message with
+ * // a maximum payload size which defaults to the page size of
+ * // the system. This default size can be modified using the
+ * // function nlmsg_set_default_size().
+ * struct nl_msg *msg = nlmsg_alloc();
+ *
+ * // Very often, the message type and message flags are known
+ * // at allocation time while the other fields are auto generated:
+ * struct nl_msg *msg = nlmsg_alloc_simple(MY_TYPE, MY_FLAGS);
+ *
+ * // Alternatively an existing netlink message header can be used
+ * // to inherit the header values:
+ * struct nlmsghdr hdr = {
+ *     .nlmsg_type = MY_TYPE,
+ *     .nlmsg_flags = MY_FLAGS,
+ * };
+ * struct nl_msg *msg = nlmsg_inherit(&hdr);
+ *
+ * // Last but not least, netlink messages received from netlink sockets
+ * // can be converted into nl_msg objects using nlmsg_convert(). This
+ * // will create a message with a maximum payload size which equals the
+ * // length of the existing netlink message, therefore no more data can
+ * // be appened without calling nlmsg_expand() first.
+ * struct nl_msg *msg = nlmsg_convert(nlh_from_nl_sock);
+ *
+ * // Payload may be added to the message via nlmsg_append(). The fourth
+ * // parameter specifies the number of alignment bytes the data should
+ * // be padding with at the end. Common values are 0 to disable it or
+ * // NLMSG_ALIGNTO to ensure proper netlink message padding.
+ * nlmsg_append(msg, &mydata, sizeof(mydata), 0);
+ *
+ * // Sometimes it may be necessary to reserve room for data but defer
+ * // the actual copying to a later point, nlmsg_reserve() can be used
+ * // for this purpose:
+ * void *data = nlmsg_reserve(msg, sizeof(mydata), NLMSG_ALIGNTO);
+ *
+ * // Attributes may be added using the attributes interface.
+ *
+ * // After successful use of the message, the memory must be freed
+ * // using nlmsg_free()
+ * nlmsg_free(msg);
+ * @endcode
+ * 
+ * @par 4) Parsing messages
+ * @code
+ * int n;
+ * unsigned char *buf;
+ * struct nlmsghdr *hdr;
+ *
+ * n = nl_recv(handle, NULL, &buf);
+ * 
+ * hdr = (struct nlmsghdr *) buf;
+ * while (nlmsg_ok(hdr, n)) {
+ *     // Process message here...
+ *     hdr = nlmsg_next(hdr, &n);
+ * }
+ * @endcode
+ * @{
+ */
+
+#include <netlink-local.h>
+#include <netlink/netlink.h>
+#include <netlink/utils.h>
+#include <netlink/cache.h>
+#include <netlink/attr.h>
+#include <netlink/msg.h>
+#include <linux/socket.h>
+
+static size_t default_msg_size;
+
+static void __init init_msg_size(void)
+{
+       default_msg_size = getpagesize();
+}
+
+/**
+ * @name Attribute Access
+ * @{
+ */
+
+//** @} */
+
+/**
+ * @name Message Parsing
+ * @{
+ */
+
+/**
+ * check if the netlink message fits into the remaining bytes
+ * @arg nlh            netlink message header
+ * @arg remaining      number of bytes remaining in message stream
+ */
+int nlmsg_ok(const struct nlmsghdr *nlh, int remaining)
+{
+       return (remaining >= sizeof(struct nlmsghdr) &&
+               nlh->nlmsg_len >= sizeof(struct nlmsghdr) &&
+               nlh->nlmsg_len <= remaining);
+}
+
+/**
+ * next netlink message in message stream
+ * @arg nlh            netlink message header
+ * @arg remaining      number of bytes remaining in message stream
+ *
+ * @returns the next netlink message in the message stream and
+ * decrements remaining by the size of the current message.
+ */
+struct nlmsghdr *nlmsg_next(struct nlmsghdr *nlh, int *remaining)
+{
+       int totlen = NLMSG_ALIGN(nlh->nlmsg_len);
+
+       *remaining -= totlen;
+
+       return (struct nlmsghdr *) ((unsigned char *) nlh + totlen);
+}
+
+/**
+ * parse attributes of a netlink message
+ * @arg nlh            netlink message header
+ * @arg hdrlen         length of family specific header
+ * @arg tb             destination array with maxtype+1 elements
+ * @arg maxtype                maximum attribute type to be expected
+ * @arg policy         validation policy
+ *
+ * See nla_parse()
+ */
+int nlmsg_parse(struct nlmsghdr *nlh, int hdrlen, struct nlattr *tb[],
+               int maxtype, struct nla_policy *policy)
+{
+       if (!nlmsg_valid_hdr(nlh, hdrlen))
+               return -NLE_MSG_TOOSHORT;
+
+       return nla_parse(tb, maxtype, nlmsg_attrdata(nlh, hdrlen),
+                        nlmsg_attrlen(nlh, hdrlen), policy);
+}
+
+/**
+ * nlmsg_validate - validate a netlink message including attributes
+ * @arg nlh            netlinket message header
+ * @arg hdrlen         length of familiy specific header
+ * @arg maxtype                maximum attribute type to be expected
+ * @arg policy         validation policy
+ */
+int nlmsg_validate(struct nlmsghdr *nlh, int hdrlen, int maxtype,
+                  struct nla_policy *policy)
+{
+       if (!nlmsg_valid_hdr(nlh, hdrlen))
+               return -NLE_MSG_TOOSHORT;
+
+       return nla_validate(nlmsg_attrdata(nlh, hdrlen),
+                           nlmsg_attrlen(nlh, hdrlen), maxtype, policy);
+}
+
+/** @} */
+
+/**
+ * @name Message Building/Access
+ * @{
+ */
+
+static struct nl_msg *__nlmsg_alloc(size_t len)
+{
+       struct nl_msg *nm;
+
+       nm = calloc(1, sizeof(*nm));
+       if (!nm)
+               goto errout;
+
+       nm->nm_refcnt = 1;
+
+       nm->nm_nlh = malloc(len);
+       if (!nm->nm_nlh)
+               goto errout;
+
+       memset(nm->nm_nlh, 0, sizeof(struct nlmsghdr));
+
+       nm->nm_protocol = -1;
+       nm->nm_size = len;
+       nm->nm_nlh->nlmsg_len = nlmsg_total_size(0);
+
+       NL_DBG(2, "msg %p: Allocated new message, maxlen=%zu\n", nm, len);
+
+       return nm;
+errout:
+       free(nm);
+       return NULL;
+}
+
+/**
+ * Allocate a new netlink message with the default maximum payload size.
+ *
+ * Allocates a new netlink message without any further payload. The
+ * maximum payload size defaults to PAGESIZE or as otherwise specified
+ * with nlmsg_set_default_size().
+ *
+ * @return Newly allocated netlink message or NULL.
+ */
+struct nl_msg *nlmsg_alloc(void)
+{
+       return __nlmsg_alloc(default_msg_size);
+}
+
+/**
+ * Allocate a new netlink message with maximum payload size specified.
+ */
+struct nl_msg *nlmsg_alloc_size(size_t max)
+{
+       return __nlmsg_alloc(max);
+}
+
+/**
+ * Allocate a new netlink message and inherit netlink message header
+ * @arg hdr            Netlink message header template
+ *
+ * Allocates a new netlink message and inherits the original message
+ * header. If \a hdr is not NULL it will be used as a template for
+ * the netlink message header, otherwise the header is left blank.
+ * 
+ * @return Newly allocated netlink message or NULL
+ */
+struct nl_msg *nlmsg_inherit(struct nlmsghdr *hdr)
+{
+       struct nl_msg *nm;
+
+       nm = nlmsg_alloc();
+       if (nm && hdr) {
+               struct nlmsghdr *new = nm->nm_nlh;
+
+               new->nlmsg_type = hdr->nlmsg_type;
+               new->nlmsg_flags = hdr->nlmsg_flags;
+               new->nlmsg_seq = hdr->nlmsg_seq;
+               new->nlmsg_pid = hdr->nlmsg_pid;
+       }
+
+       return nm;
+}
+
+/**
+ * Allocate a new netlink message
+ * @arg nlmsgtype      Netlink message type
+ * @arg flags          Message flags.
+ *
+ * @return Newly allocated netlink message or NULL.
+ */
+struct nl_msg *nlmsg_alloc_simple(int nlmsgtype, int flags)
+{
+       struct nl_msg *msg;
+       struct nlmsghdr nlh = {
+               .nlmsg_type = nlmsgtype,
+               .nlmsg_flags = flags,
+       };
+
+       msg = nlmsg_inherit(&nlh);
+       if (msg)
+               NL_DBG(2, "msg %p: Allocated new simple message\n", msg);
+
+       return msg;
+}
+
+/**
+ * Set the default maximum message payload size for allocated messages
+ * @arg max            Size of payload in bytes.
+ */
+void nlmsg_set_default_size(size_t max)
+{
+       if (max < nlmsg_total_size(0))
+               max = nlmsg_total_size(0);
+
+       default_msg_size = max;
+}
+
+/**
+ * Convert a netlink message received from a netlink socket to a nl_msg
+ * @arg hdr            Netlink message received from netlink socket.
+ *
+ * Allocates a new netlink message and copies all of the data pointed to
+ * by \a hdr into the new message object.
+ *
+ * @return Newly allocated netlink message or NULL.
+ */
+struct nl_msg *nlmsg_convert(struct nlmsghdr *hdr)
+{
+       struct nl_msg *nm;
+
+       nm = __nlmsg_alloc(NLMSG_ALIGN(hdr->nlmsg_len));
+       if (!nm)
+               goto errout;
+
+       memcpy(nm->nm_nlh, hdr, hdr->nlmsg_len);
+
+       return nm;
+errout:
+       nlmsg_free(nm);
+       return NULL;
+}
+
+/**
+ * Reserve room for additional data in a netlink message
+ * @arg n              netlink message
+ * @arg len            length of additional data to reserve room for
+ * @arg pad            number of bytes to align data to
+ *
+ * Reserves room for additional data at the tail of the an
+ * existing netlink message. Eventual padding required will
+ * be zeroed out.
+ *
+ * @return Pointer to start of additional data tailroom or NULL.
+ */
+void *nlmsg_reserve(struct nl_msg *n, size_t len, int pad)
+{
+       void *buf = n->nm_nlh;
+       size_t nlmsg_len = n->nm_nlh->nlmsg_len;
+       size_t tlen;
+
+       tlen = pad ? ((len + (pad - 1)) & ~(pad - 1)) : len;
+
+       if ((tlen + nlmsg_len) > n->nm_size)
+               return NULL;
+
+       buf += nlmsg_len;
+       n->nm_nlh->nlmsg_len += tlen;
+
+       if (tlen > len)
+               memset(buf + len, 0, tlen - len);
+
+       NL_DBG(2, "msg %p: Reserved %zu bytes, pad=%d, nlmsg_len=%d\n",
+                 n, len, pad, n->nm_nlh->nlmsg_len);
+
+       return buf;
+}
+
+/**
+ * Append data to tail of a netlink message
+ * @arg n              netlink message
+ * @arg data           data to add
+ * @arg len            length of data
+ * @arg pad            Number of bytes to align data to.
+ *
+ * Extends the netlink message as needed and appends the data of given
+ * length to the message. 
+ *
+ * @return 0 on success or a negative error code
+ */
+int nlmsg_append(struct nl_msg *n, void *data, size_t len, int pad)
+{
+       void *tmp;
+
+       tmp = nlmsg_reserve(n, len, pad);
+       if (tmp == NULL)
+               return -NLE_NOMEM;
+
+       memcpy(tmp, data, len);
+       NL_DBG(2, "msg %p: Appended %zu bytes with padding %d\n", n, len, pad);
+
+       return 0;
+}
+
+/**
+ * Add a netlink message header to a netlink message
+ * @arg n              netlink message
+ * @arg pid            netlink process id or NL_AUTO_PID
+ * @arg seq            sequence number of message or NL_AUTO_SEQ
+ * @arg type           message type
+ * @arg payload                length of message payload
+ * @arg flags          message flags
+ *
+ * Adds or overwrites the netlink message header in an existing message
+ * object. If \a payload is greater-than zero additional room will be
+ * reserved, f.e. for family specific headers. It can be accesed via
+ * nlmsg_data().
+ *
+ * @return A pointer to the netlink message header or NULL.
+ */
+struct nlmsghdr *nlmsg_put(struct nl_msg *n, uint32_t pid, uint32_t seq,
+                          int type, int payload, int flags)
+{
+       struct nlmsghdr *nlh;
+
+       if (n->nm_nlh->nlmsg_len < NLMSG_HDRLEN)
+               BUG();
+
+       nlh = (struct nlmsghdr *) n->nm_nlh;
+       nlh->nlmsg_type = type;
+       nlh->nlmsg_flags = flags;
+       nlh->nlmsg_pid = pid;
+       nlh->nlmsg_seq = seq;
+
+       NL_DBG(2, "msg %p: Added netlink header type=%d, flags=%d, pid=%d, "
+                 "seq=%d\n", n, type, flags, pid, seq);
+
+       if (payload > 0 &&
+           nlmsg_reserve(n, payload, NLMSG_ALIGNTO) == NULL)
+               return NULL;
+
+       return nlh;
+}
+
+/**
+ * Release a reference from an netlink message
+ * @arg msg            message to release reference from
+ *
+ * Frees memory after the last reference has been released.
+ */
+void nlmsg_free(struct nl_msg *msg)
+{
+       if (!msg)
+               return;
+
+       msg->nm_refcnt--;
+       NL_DBG(4, "Returned message reference %p, %d remaining\n",
+              msg, msg->nm_refcnt);
+
+       if (msg->nm_refcnt < 0)
+               BUG();
+
+       if (msg->nm_refcnt <= 0) {
+               free(msg->nm_nlh);
+               free(msg);
+               NL_DBG(2, "msg %p: Freed\n", msg);
+       }
+}
+
+/** @} */
+
+/**
+ * @name Direct Parsing
+ * @{
+ */
+
+/** @cond SKIP */
+struct dp_xdata {
+       void (*cb)(struct nl_object *, void *);
+       void *arg;
+};
+/** @endcond */
+
+static int parse_cb(struct nl_object *obj, struct nl_parser_param *p)
+{
+       struct dp_xdata *x = p->pp_arg;
+
+       x->cb(obj, x->arg);
+       return 0;
+}
+
+int nl_msg_parse(struct nl_msg *msg, void (*cb)(struct nl_object *, void *),
+                void *arg)
+{
+       struct nl_cache_ops *ops;
+       struct nl_parser_param p = {
+               .pp_cb = parse_cb
+       };
+       struct dp_xdata x = {
+               .cb = cb,
+               .arg = arg,
+       };
+
+       ops = nl_cache_ops_associate(nlmsg_get_proto(msg),
+                                    nlmsg_hdr(msg)->nlmsg_type);
+       if (ops == NULL)
+               return -NLE_MSGTYPE_NOSUPPORT;
+       p.pp_arg = &x;
+
+       return nl_cache_parse(ops, NULL, nlmsg_hdr(msg), &p);
+}
+
+/** @} */
diff --git a/package/libs/libnl-tiny/src/nl.c b/package/libs/libnl-tiny/src/nl.c
new file mode 100644 (file)
index 0000000..99e9aeb
--- /dev/null
@@ -0,0 +1,720 @@
+/*
+ * lib/nl.c            Core Netlink Interface
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
+ */
+
+/**
+ * @defgroup core Core
+ *
+ * @details
+ * @par 1) Connecting the socket
+ * @code
+ * // Bind and connect the socket to a protocol, NETLINK_ROUTE in this example.
+ * nl_connect(sk, NETLINK_ROUTE);
+ * @endcode
+ *
+ * @par 2) Sending data
+ * @code
+ * // The most rudimentary method is to use nl_sendto() simply pushing
+ * // a piece of data to the other netlink peer. This method is not
+ * // recommended.
+ * const char buf[] = { 0x01, 0x02, 0x03, 0x04 };
+ * nl_sendto(sk, buf, sizeof(buf));
+ *
+ * // A more comfortable interface is nl_send() taking a pointer to
+ * // a netlink message.
+ * struct nl_msg *msg = my_msg_builder();
+ * nl_send(sk, nlmsg_hdr(msg));
+ *
+ * // nl_sendmsg() provides additional control over the sendmsg() message
+ * // header in order to allow more specific addressing of multiple peers etc.
+ * struct msghdr hdr = { ... };
+ * nl_sendmsg(sk, nlmsg_hdr(msg), &hdr);
+ *
+ * // You're probably too lazy to fill out the netlink pid, sequence number
+ * // and message flags all the time. nl_send_auto_complete() automatically
+ * // extends your message header as needed with an appropriate sequence
+ * // number, the netlink pid stored in the netlink socket and the message
+ * // flags NLM_F_REQUEST and NLM_F_ACK (if not disabled in the socket)
+ * nl_send_auto_complete(sk, nlmsg_hdr(msg));
+ *
+ * // Simple protocols don't require the complex message construction interface
+ * // and may favour nl_send_simple() to easly send a bunch of payload
+ * // encapsulated in a netlink message header.
+ * nl_send_simple(sk, MY_MSG_TYPE, 0, buf, sizeof(buf));
+ * @endcode
+ *
+ * @par 3) Receiving data
+ * @code
+ * // nl_recv() receives a single message allocating a buffer for the message
+ * // content and gives back the pointer to you.
+ * struct sockaddr_nl peer;
+ * unsigned char *msg;
+ * nl_recv(sk, &peer, &msg);
+ *
+ * // nl_recvmsgs() receives a bunch of messages until the callback system
+ * // orders it to state, usually after receving a compolete multi part
+ * // message series.
+ * nl_recvmsgs(sk, my_callback_configuration);
+ *
+ * // nl_recvmsgs_default() acts just like nl_recvmsg() but uses the callback
+ * // configuration stored in the socket.
+ * nl_recvmsgs_default(sk);
+ *
+ * // In case you want to wait for the ACK to be recieved that you requested
+ * // with your latest message, you can call nl_wait_for_ack()
+ * nl_wait_for_ack(sk);
+ * @endcode
+ *
+ * @par 4) Closing
+ * @code
+ * // Close the socket first to release kernel memory
+ * nl_close(sk);
+ * @endcode
+ * 
+ * @{
+ */
+
+#include <netlink-local.h>
+#include <netlink/netlink.h>
+#include <netlink/utils.h>
+#include <netlink/handlers.h>
+#include <netlink/msg.h>
+#include <netlink/attr.h>
+
+/**
+ * @name Connection Management
+ * @{
+ */
+
+/**
+ * Create and connect netlink socket.
+ * @arg sk             Netlink socket.
+ * @arg protocol       Netlink protocol to use.
+ *
+ * Creates a netlink socket using the specified protocol, binds the socket
+ * and issues a connection attempt.
+ *
+ * @return 0 on success or a negative error code.
+ */
+int nl_connect(struct nl_sock *sk, int protocol)
+{
+       int err;
+       socklen_t addrlen;
+
+       sk->s_fd = socket(AF_NETLINK, SOCK_RAW, protocol);
+       if (sk->s_fd < 0) {
+               err = -nl_syserr2nlerr(errno);
+               goto errout;
+       }
+
+       if (!(sk->s_flags & NL_SOCK_BUFSIZE_SET)) {
+               err = nl_socket_set_buffer_size(sk, 0, 0);
+               if (err < 0)
+                       goto errout;
+       }
+
+       err = bind(sk->s_fd, (struct sockaddr*) &sk->s_local,
+                  sizeof(sk->s_local));
+       if (err < 0) {
+               err = -nl_syserr2nlerr(errno);
+               goto errout;
+       }
+
+       addrlen = sizeof(sk->s_local);
+       err = getsockname(sk->s_fd, (struct sockaddr *) &sk->s_local,
+                         &addrlen);
+       if (err < 0) {
+               err = -nl_syserr2nlerr(errno);
+               goto errout;
+       }
+
+       if (addrlen != sizeof(sk->s_local)) {
+               err = -NLE_NOADDR;
+               goto errout;
+       }
+
+       if (sk->s_local.nl_family != AF_NETLINK) {
+               err = -NLE_AF_NOSUPPORT;
+               goto errout;
+       }
+
+       sk->s_proto = protocol;
+
+       return 0;
+errout:
+       close(sk->s_fd);
+       sk->s_fd = -1;
+
+       return err;
+}
+
+/**
+ * Close/Disconnect netlink socket.
+ * @arg sk             Netlink socket.
+ */
+void nl_close(struct nl_sock *sk)
+{
+       if (sk->s_fd >= 0) {
+               close(sk->s_fd);
+               sk->s_fd = -1;
+       }
+
+       sk->s_proto = 0;
+}
+
+/** @} */
+
+/**
+ * @name Send
+ * @{
+ */
+
+/**
+ * Send raw data over netlink socket.
+ * @arg sk             Netlink socket.
+ * @arg buf            Data buffer.
+ * @arg size           Size of data buffer.
+ * @return Number of characters written on success or a negative error code.
+ */
+int nl_sendto(struct nl_sock *sk, void *buf, size_t size)
+{
+       int ret;
+
+       ret = sendto(sk->s_fd, buf, size, 0, (struct sockaddr *)
+                    &sk->s_peer, sizeof(sk->s_peer));
+       if (ret < 0)
+               return -nl_syserr2nlerr(errno);
+
+       return ret;
+}
+
+/**
+ * Send netlink message with control over sendmsg() message header.
+ * @arg sk             Netlink socket.
+ * @arg msg            Netlink message to be sent.
+ * @arg hdr            Sendmsg() message header.
+ * @return Number of characters sent on sucess or a negative error code.
+ */
+int nl_sendmsg(struct nl_sock *sk, struct nl_msg *msg, struct msghdr *hdr)
+{
+       struct nl_cb *cb;
+       int ret;
+
+       struct iovec iov = {
+               .iov_base = (void *) nlmsg_hdr(msg),
+               .iov_len = nlmsg_hdr(msg)->nlmsg_len,
+       };
+
+       hdr->msg_iov = &iov;
+       hdr->msg_iovlen = 1;
+
+       nlmsg_set_src(msg, &sk->s_local);
+
+       cb = sk->s_cb;
+       if (cb->cb_set[NL_CB_MSG_OUT])
+               if (nl_cb_call(cb, NL_CB_MSG_OUT, msg) != NL_OK)
+                       return 0;
+
+       ret = sendmsg(sk->s_fd, hdr, 0);
+       if (ret < 0)
+               return -nl_syserr2nlerr(errno);
+
+       return ret;
+}
+
+
+/**
+ * Send netlink message.
+ * @arg sk             Netlink socket.
+ * @arg msg            Netlink message to be sent.
+ * @see nl_sendmsg()
+ * @return Number of characters sent on success or a negative error code.
+ */
+int nl_send(struct nl_sock *sk, struct nl_msg *msg)
+{
+       struct sockaddr_nl *dst;
+       struct ucred *creds;
+       
+       struct msghdr hdr = {
+               .msg_name = (void *) &sk->s_peer,
+               .msg_namelen = sizeof(struct sockaddr_nl),
+       };
+
+       /* Overwrite destination if specified in the message itself, defaults
+        * to the peer address of the socket.
+        */
+       dst = nlmsg_get_dst(msg);
+       if (dst->nl_family == AF_NETLINK)
+               hdr.msg_name = dst;
+
+       /* Add credentials if present. */
+       creds = nlmsg_get_creds(msg);
+       if (creds != NULL) {
+               char buf[CMSG_SPACE(sizeof(struct ucred))];
+               struct cmsghdr *cmsg;
+
+               hdr.msg_control = buf;
+               hdr.msg_controllen = sizeof(buf);
+
+               cmsg = CMSG_FIRSTHDR(&hdr);
+               cmsg->cmsg_level = SOL_SOCKET;
+               cmsg->cmsg_type = SCM_CREDENTIALS;
+               cmsg->cmsg_len = CMSG_LEN(sizeof(struct ucred));
+               memcpy(CMSG_DATA(cmsg), creds, sizeof(struct ucred));
+       }
+
+       return nl_sendmsg(sk, msg, &hdr);
+}
+
+/**
+ * Send netlink message and check & extend header values as needed.
+ * @arg sk             Netlink socket.
+ * @arg msg            Netlink message to be sent.
+ *
+ * Checks the netlink message \c nlh for completness and extends it
+ * as required before sending it out. Checked fields include pid,
+ * sequence nr, and flags.
+ *
+ * @see nl_send()
+ * @return Number of characters sent or a negative error code.
+ */
+int nl_send_auto_complete(struct nl_sock *sk, struct nl_msg *msg)
+{
+       struct nlmsghdr *nlh;
+       struct nl_cb *cb = sk->s_cb;
+
+       nlh = nlmsg_hdr(msg);
+       if (nlh->nlmsg_pid == 0)
+               nlh->nlmsg_pid = sk->s_local.nl_pid;
+
+       if (nlh->nlmsg_seq == 0)
+               nlh->nlmsg_seq = sk->s_seq_next++;
+
+       if (msg->nm_protocol == -1)
+               msg->nm_protocol = sk->s_proto;
+       
+       nlh->nlmsg_flags |= NLM_F_REQUEST;
+
+       if (!(sk->s_flags & NL_NO_AUTO_ACK))
+               nlh->nlmsg_flags |= NLM_F_ACK;
+
+       if (cb->cb_send_ow)
+               return cb->cb_send_ow(sk, msg);
+       else
+               return nl_send(sk, msg);
+}
+
+/**
+ * Send simple netlink message using nl_send_auto_complete()
+ * @arg sk             Netlink socket.
+ * @arg type           Netlink message type.
+ * @arg flags          Netlink message flags.
+ * @arg buf            Data buffer.
+ * @arg size           Size of data buffer.
+ *
+ * Builds a netlink message with the specified type and flags and
+ * appends the specified data as payload to the message.
+ *
+ * @see nl_send_auto_complete()
+ * @return Number of characters sent on success or a negative error code.
+ */
+int nl_send_simple(struct nl_sock *sk, int type, int flags, void *buf,
+                  size_t size)
+{
+       int err;
+       struct nl_msg *msg;
+
+       msg = nlmsg_alloc_simple(type, flags);
+       if (!msg)
+               return -NLE_NOMEM;
+
+       if (buf && size) {
+               err = nlmsg_append(msg, buf, size, NLMSG_ALIGNTO);
+               if (err < 0)
+                       goto errout;
+       }
+       
+
+       err = nl_send_auto_complete(sk, msg);
+errout:
+       nlmsg_free(msg);
+
+       return err;
+}
+
+/** @} */
+
+/**
+ * @name Receive
+ * @{
+ */
+
+/**
+ * Receive data from netlink socket
+ * @arg sk             Netlink socket.
+ * @arg nla            Destination pointer for peer's netlink address.
+ * @arg buf            Destination pointer for message content.
+ * @arg creds          Destination pointer for credentials.
+ *
+ * Receives a netlink message, allocates a buffer in \c *buf and
+ * stores the message content. The peer's netlink address is stored
+ * in \c *nla. The caller is responsible for freeing the buffer allocated
+ * in \c *buf if a positive value is returned.  Interruped system calls
+ * are handled by repeating the read. The input buffer size is determined
+ * by peeking before the actual read is done.
+ *
+ * A non-blocking sockets causes the function to return immediately with
+ * a return value of 0 if no data is available.
+ *
+ * @return Number of octets read, 0 on EOF or a negative error code.
+ */
+int nl_recv(struct nl_sock *sk, struct sockaddr_nl *nla,
+           unsigned char **buf, struct ucred **creds)
+{
+       int n;
+       int flags = 0;
+       static int page_size = 0;
+       struct iovec iov;
+       struct msghdr msg = {
+               .msg_name = (void *) nla,
+               .msg_namelen = sizeof(struct sockaddr_nl),
+               .msg_iov = &iov,
+               .msg_iovlen = 1,
+               .msg_control = NULL,
+               .msg_controllen = 0,
+               .msg_flags = 0,
+       };
+       struct cmsghdr *cmsg;
+
+       if (sk->s_flags & NL_MSG_PEEK)
+               flags |= MSG_PEEK;
+
+       if (page_size == 0)
+               page_size = getpagesize();
+
+       iov.iov_len = page_size;
+       iov.iov_base = *buf = malloc(iov.iov_len);
+
+       if (sk->s_flags & NL_SOCK_PASSCRED) {
+               msg.msg_controllen = CMSG_SPACE(sizeof(struct ucred));
+               msg.msg_control = calloc(1, msg.msg_controllen);
+       }
+retry:
+
+       n = recvmsg(sk->s_fd, &msg, flags);
+       if (!n)
+               goto abort;
+       else if (n < 0) {
+               if (errno == EINTR) {
+                       NL_DBG(3, "recvmsg() returned EINTR, retrying\n");
+                       goto retry;
+               } else if (errno == EAGAIN) {
+                       NL_DBG(3, "recvmsg() returned EAGAIN, aborting\n");
+                       goto abort;
+               } else {
+                       free(msg.msg_control);
+                       free(*buf);
+                       return -nl_syserr2nlerr(errno);
+               }
+       }
+
+       if (iov.iov_len < n ||
+           msg.msg_flags & MSG_TRUNC) {
+               /* Provided buffer is not long enough, enlarge it
+                * and try again. */
+               iov.iov_len *= 2;
+               iov.iov_base = *buf = realloc(*buf, iov.iov_len);
+               goto retry;
+       } else if (msg.msg_flags & MSG_CTRUNC) {
+               msg.msg_controllen *= 2;
+               msg.msg_control = realloc(msg.msg_control, msg.msg_controllen);
+               goto retry;
+       } else if (flags != 0) {
+               /* Buffer is big enough, do the actual reading */
+               flags = 0;
+               goto retry;
+       }
+
+       if (msg.msg_namelen != sizeof(struct sockaddr_nl)) {
+               free(msg.msg_control);
+               free(*buf);
+               return -NLE_NOADDR;
+       }
+
+       for (cmsg = CMSG_FIRSTHDR(&msg); cmsg; cmsg = CMSG_NXTHDR(&msg, cmsg)) {
+               if (cmsg->cmsg_level == SOL_SOCKET &&
+                   cmsg->cmsg_type == SCM_CREDENTIALS) {
+                       *creds = calloc(1, sizeof(struct ucred));
+                       memcpy(*creds, CMSG_DATA(cmsg), sizeof(struct ucred));
+                       break;
+               }
+       }
+
+       free(msg.msg_control);
+       return n;
+
+abort:
+       free(msg.msg_control);
+       free(*buf);
+       return 0;
+}
+
+#define NL_CB_CALL(cb, type, msg) \
+do { \
+       err = nl_cb_call(cb, type, msg); \
+       switch (err) { \
+       case NL_OK: \
+               err = 0; \
+               break; \
+       case NL_SKIP: \
+               goto skip; \
+       case NL_STOP: \
+               goto stop; \
+       default: \
+               goto out; \
+       } \
+} while (0)
+
+static int recvmsgs(struct nl_sock *sk, struct nl_cb *cb)
+{
+       int n, err = 0, multipart = 0;
+       unsigned char *buf = NULL;
+       struct nlmsghdr *hdr;
+       struct sockaddr_nl nla = {0};
+       struct nl_msg *msg = NULL;
+       struct ucred *creds = NULL;
+
+continue_reading:
+       NL_DBG(3, "Attempting to read from %p\n", sk);
+       if (cb->cb_recv_ow)
+               n = cb->cb_recv_ow(sk, &nla, &buf, &creds);
+       else
+               n = nl_recv(sk, &nla, &buf, &creds);
+
+       if (n <= 0)
+               return n;
+
+       NL_DBG(3, "recvmsgs(%p): Read %d bytes\n", sk, n);
+
+       hdr = (struct nlmsghdr *) buf;
+       while (nlmsg_ok(hdr, n)) {
+               NL_DBG(3, "recgmsgs(%p): Processing valid message...\n", sk);
+
+               nlmsg_free(msg);
+               msg = nlmsg_convert(hdr);
+               if (!msg) {
+                       err = -NLE_NOMEM;
+                       goto out;
+               }
+
+               nlmsg_set_proto(msg, sk->s_proto);
+               nlmsg_set_src(msg, &nla);
+               if (creds)
+                       nlmsg_set_creds(msg, creds);
+
+               /* Raw callback is the first, it gives the most control
+                * to the user and he can do his very own parsing. */
+               if (cb->cb_set[NL_CB_MSG_IN])
+                       NL_CB_CALL(cb, NL_CB_MSG_IN, msg);
+
+               /* Sequence number checking. The check may be done by
+                * the user, otherwise a very simple check is applied
+                * enforcing strict ordering */
+               if (cb->cb_set[NL_CB_SEQ_CHECK])
+                       NL_CB_CALL(cb, NL_CB_SEQ_CHECK, msg);
+               else if (hdr->nlmsg_seq != sk->s_seq_expect) {
+                       if (cb->cb_set[NL_CB_INVALID])
+                               NL_CB_CALL(cb, NL_CB_INVALID, msg);
+                       else {
+                               err = -NLE_SEQ_MISMATCH;
+                               goto out;
+                       }
+               }
+
+               if (hdr->nlmsg_type == NLMSG_DONE ||
+                   hdr->nlmsg_type == NLMSG_ERROR ||
+                   hdr->nlmsg_type == NLMSG_NOOP ||
+                   hdr->nlmsg_type == NLMSG_OVERRUN) {
+                       /* We can't check for !NLM_F_MULTI since some netlink
+                        * users in the kernel are broken. */
+                       sk->s_seq_expect++;
+                       NL_DBG(3, "recvmsgs(%p): Increased expected " \
+                              "sequence number to %d\n",
+                              sk, sk->s_seq_expect);
+               }
+
+               if (hdr->nlmsg_flags & NLM_F_MULTI)
+                       multipart = 1;
+       
+               /* Other side wishes to see an ack for this message */
+               if (hdr->nlmsg_flags & NLM_F_ACK) {
+                       if (cb->cb_set[NL_CB_SEND_ACK])
+                               NL_CB_CALL(cb, NL_CB_SEND_ACK, msg);
+                       else {
+                               /* FIXME: implement */
+                       }
+               }
+
+               /* messages terminates a multpart message, this is
+                * usually the end of a message and therefore we slip
+                * out of the loop by default. the user may overrule
+                * this action by skipping this packet. */
+               if (hdr->nlmsg_type == NLMSG_DONE) {
+                       multipart = 0;
+                       if (cb->cb_set[NL_CB_FINISH])
+                               NL_CB_CALL(cb, NL_CB_FINISH, msg);
+               }
+
+               /* Message to be ignored, the default action is to
+                * skip this message if no callback is specified. The
+                * user may overrule this action by returning
+                * NL_PROCEED. */
+               else if (hdr->nlmsg_type == NLMSG_NOOP) {
+                       if (cb->cb_set[NL_CB_SKIPPED])
+                               NL_CB_CALL(cb, NL_CB_SKIPPED, msg);
+                       else
+                               goto skip;
+               }
+
+               /* Data got lost, report back to user. The default action is to
+                * quit parsing. The user may overrule this action by retuning
+                * NL_SKIP or NL_PROCEED (dangerous) */
+               else if (hdr->nlmsg_type == NLMSG_OVERRUN) {
+                       if (cb->cb_set[NL_CB_OVERRUN])
+                               NL_CB_CALL(cb, NL_CB_OVERRUN, msg);
+                       else {
+                               err = -NLE_MSG_OVERFLOW;
+                               goto out;
+                       }
+               }
+
+               /* Message carries a nlmsgerr */
+               else if (hdr->nlmsg_type == NLMSG_ERROR) {
+                       struct nlmsgerr *e = nlmsg_data(hdr);
+
+                       if (hdr->nlmsg_len < nlmsg_msg_size(sizeof(*e))) {
+                               /* Truncated error message, the default action
+                                * is to stop parsing. The user may overrule
+                                * this action by returning NL_SKIP or
+                                * NL_PROCEED (dangerous) */
+                               if (cb->cb_set[NL_CB_INVALID])
+                                       NL_CB_CALL(cb, NL_CB_INVALID, msg);
+                               else {
+                                       err = -NLE_MSG_TRUNC;
+                                       goto out;
+                               }
+                       } else if (e->error) {
+                               /* Error message reported back from kernel. */
+                               if (cb->cb_err) {
+                                       err = cb->cb_err(&nla, e,
+                                                          cb->cb_err_arg);
+                                       if (err < 0)
+                                               goto out;
+                                       else if (err == NL_SKIP)
+                                               goto skip;
+                                       else if (err == NL_STOP) {
+                                               err = -nl_syserr2nlerr(e->error);
+                                               goto out;
+                                       }
+                               } else {
+                                       err = -nl_syserr2nlerr(e->error);
+                                       goto out;
+                               }
+                       } else if (cb->cb_set[NL_CB_ACK])
+                               NL_CB_CALL(cb, NL_CB_ACK, msg);
+               } else {
+                       /* Valid message (not checking for MULTIPART bit to
+                        * get along with broken kernels. NL_SKIP has no
+                        * effect on this.  */
+                       if (cb->cb_set[NL_CB_VALID])
+                               NL_CB_CALL(cb, NL_CB_VALID, msg);
+               }
+skip:
+               err = 0;
+               hdr = nlmsg_next(hdr, &n);
+       }
+       
+       nlmsg_free(msg);
+       free(buf);
+       free(creds);
+       buf = NULL;
+       msg = NULL;
+       creds = NULL;
+
+       if (multipart) {
+               /* Multipart message not yet complete, continue reading */
+               goto continue_reading;
+       }
+stop:
+       err = 0;
+out:
+       nlmsg_free(msg);
+       free(buf);
+       free(creds);
+
+       return err;
+}
+
+/**
+ * Receive a set of messages from a netlink socket.
+ * @arg sk             Netlink socket.
+ * @arg cb             set of callbacks to control behaviour.
+ *
+ * Repeatedly calls nl_recv() or the respective replacement if provided
+ * by the application (see nl_cb_overwrite_recv()) and parses the
+ * received data as netlink messages. Stops reading if one of the
+ * callbacks returns NL_STOP or nl_recv returns either 0 or a negative error code.
+ *
+ * A non-blocking sockets causes the function to return immediately if
+ * no data is available.
+ *
+ * @return 0 on success or a negative error code from nl_recv().
+ */
+int nl_recvmsgs(struct nl_sock *sk, struct nl_cb *cb)
+{
+       if (cb->cb_recvmsgs_ow)
+               return cb->cb_recvmsgs_ow(sk, cb);
+       else
+               return recvmsgs(sk, cb);
+}
+
+
+static int ack_wait_handler(struct nl_msg *msg, void *arg)
+{
+       return NL_STOP;
+}
+
+/**
+ * Wait for ACK.
+ * @arg sk             Netlink socket.
+ * @pre The netlink socket must be in blocking state.
+ *
+ * Waits until an ACK is received for the latest not yet acknowledged
+ * netlink message.
+ */
+int nl_wait_for_ack(struct nl_sock *sk)
+{
+       int err;
+       struct nl_cb *cb;
+
+       cb = nl_cb_clone(sk->s_cb);
+       if (cb == NULL)
+               return -NLE_NOMEM;
+
+       nl_cb_set(cb, NL_CB_ACK, NL_CB_CUSTOM, ack_wait_handler, NULL);
+       err = nl_recvmsgs(sk, cb);
+       nl_cb_put(cb);
+
+       return err;
+}
+
+/** @} */
+
+/** @} */
diff --git a/package/libs/libnl-tiny/src/object.c b/package/libs/libnl-tiny/src/object.c
new file mode 100644 (file)
index 0000000..f915551
--- /dev/null
@@ -0,0 +1,279 @@
+/*
+ * lib/object.c                Generic Cacheable Object
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
+ */
+
+/**
+ * @ingroup cache
+ * @defgroup object Object
+ * @{
+ */
+
+#include <netlink-local.h>
+#include <netlink/netlink.h>
+#include <netlink/cache.h>
+#include <netlink/object.h>
+#include <netlink/utils.h>
+
+static inline struct nl_object_ops *obj_ops(struct nl_object *obj)
+{
+       if (!obj->ce_ops)
+               BUG();
+
+       return obj->ce_ops;
+}
+
+/**
+ * @name Object Creation/Deletion
+ * @{
+ */
+
+/**
+ * Allocate a new object of kind specified by the operations handle
+ * @arg ops            cache operations handle
+ * @return The new object or NULL
+ */
+struct nl_object *nl_object_alloc(struct nl_object_ops *ops)
+{
+       struct nl_object *new;
+
+       if (ops->oo_size < sizeof(*new))
+               BUG();
+
+       new = calloc(1, ops->oo_size);
+       if (!new)
+               return NULL;
+
+       new->ce_refcnt = 1;
+       nl_init_list_head(&new->ce_list);
+
+       new->ce_ops = ops;
+       if (ops->oo_constructor)
+               ops->oo_constructor(new);
+
+       NL_DBG(4, "Allocated new object %p\n", new);
+
+       return new;
+}
+
+#ifdef disabled
+/**
+ * Allocate a new object of kind specified by the name
+ * @arg kind           name of object type
+ * @return The new object or nULL
+ */
+int nl_object_alloc_name(const char *kind, struct nl_object **result)
+{
+       struct nl_cache_ops *ops;
+
+       ops = nl_cache_ops_lookup(kind);
+       if (!ops)
+               return -NLE_OPNOTSUPP;
+
+       if (!(*result = nl_object_alloc(ops->co_obj_ops)))
+               return -NLE_NOMEM;
+
+       return 0;
+}
+#endif
+
+struct nl_derived_object {
+       NLHDR_COMMON
+       char data;
+};
+
+/**
+ * Allocate a new object and copy all data from an existing object
+ * @arg obj            object to inherite data from
+ * @return The new object or NULL.
+ */
+struct nl_object *nl_object_clone(struct nl_object *obj)
+{
+       struct nl_object *new;
+       struct nl_object_ops *ops = obj_ops(obj);
+       int doff = offsetof(struct nl_derived_object, data);
+       int size;
+
+       new = nl_object_alloc(ops);
+       if (!new)
+               return NULL;
+
+       size = ops->oo_size - doff;
+       if (size < 0)
+               BUG();
+
+       new->ce_ops = obj->ce_ops;
+       new->ce_msgtype = obj->ce_msgtype;
+
+       if (size)
+               memcpy((void *)new + doff, (void *)obj + doff, size);
+
+       if (ops->oo_clone) {
+               if (ops->oo_clone(new, obj) < 0) {
+                       nl_object_free(new);
+                       return NULL;
+               }
+       } else if (size && ops->oo_free_data)
+               BUG();
+
+       return new;
+}
+
+/**
+ * Free a cacheable object
+ * @arg obj            object to free
+ *
+ * @return 0 or a negative error code.
+ */
+void nl_object_free(struct nl_object *obj)
+{
+       struct nl_object_ops *ops = obj_ops(obj);
+
+       if (obj->ce_refcnt > 0)
+               NL_DBG(1, "Warning: Freeing object in use...\n");
+
+       if (obj->ce_cache)
+               nl_cache_remove(obj);
+
+       if (ops->oo_free_data)
+               ops->oo_free_data(obj);
+
+       free(obj);
+
+       NL_DBG(4, "Freed object %p\n", obj);
+}
+
+/** @} */
+
+/**
+ * @name Reference Management
+ * @{
+ */
+
+/** @} */
+
+/**
+ * @name Utillities
+ * @{
+ */
+
+#ifdef disabled
+/**
+ * Dump this object according to the specified parameters
+ * @arg obj            object to dump
+ * @arg params         dumping parameters
+ */
+void nl_object_dump(struct nl_object *obj, struct nl_dump_params *params)
+{
+       dump_from_ops(obj, params);
+}
+
+/**
+ * Check if the identifiers of two objects are identical 
+ * @arg a              an object
+ * @arg b              another object of same type
+ *
+ * @return true if both objects have equal identifiers, otherwise false.
+ */
+int nl_object_identical(struct nl_object *a, struct nl_object *b)
+{
+       struct nl_object_ops *ops = obj_ops(a);
+       int req_attrs;
+
+       /* Both objects must be of same type */
+       if (ops != obj_ops(b))
+               return 0;
+
+       req_attrs = ops->oo_id_attrs;
+
+       /* Both objects must provide all required attributes to uniquely
+        * identify an object */
+       if ((a->ce_mask & req_attrs) != req_attrs ||
+           (b->ce_mask & req_attrs) != req_attrs)
+               return 0;
+
+       /* Can't judge unless we can compare */
+       if (ops->oo_compare == NULL)
+               return 0;
+
+       return !(ops->oo_compare(a, b, req_attrs, 0));
+}
+
+/**
+ * Compute bitmask representing difference in attribute values
+ * @arg a              an object
+ * @arg b              another object of same type
+ *
+ * The bitmask returned is specific to an object type, each bit set represents
+ * an attribute which mismatches in either of the two objects. Unavailability
+ * of an attribute in one object and presence in the other is regarded a
+ * mismatch as well.
+ *
+ * @return Bitmask describing differences or 0 if they are completely identical.
+ */
+uint32_t nl_object_diff(struct nl_object *a, struct nl_object *b)
+{
+       struct nl_object_ops *ops = obj_ops(a);
+
+       if (ops != obj_ops(b) || ops->oo_compare == NULL)
+               return UINT_MAX;
+
+       return ops->oo_compare(a, b, ~0, 0);
+}
+
+/**
+ * Match a filter against an object
+ * @arg obj            object to check
+ * @arg filter         object of same type acting as filter
+ *
+ * @return 1 if the object matches the filter or 0
+ *           if no filter procedure is available or if the
+ *           filter does not match.
+ */
+int nl_object_match_filter(struct nl_object *obj, struct nl_object *filter)
+{
+       struct nl_object_ops *ops = obj_ops(obj);
+
+       if (ops != obj_ops(filter) || ops->oo_compare == NULL)
+               return 0;
+       
+       return !(ops->oo_compare(obj, filter, filter->ce_mask,
+                                LOOSE_COMPARISON));
+}
+
+/**
+ * Convert bitmask of attributes to a character string
+ * @arg obj            object of same type as attribute bitmask
+ * @arg attrs          bitmask of attribute types
+ * @arg buf            destination buffer
+ * @arg len            length of destination buffer
+ *
+ * Converts the bitmask of attribute types into a list of attribute
+ * names separated by comas.
+ *
+ * @return destination buffer.
+ */
+char *nl_object_attrs2str(struct nl_object *obj, uint32_t attrs,
+                         char *buf, size_t len)
+{
+       struct nl_object_ops *ops = obj_ops(obj);
+
+       if (ops->oo_attrs2str != NULL)
+               return ops->oo_attrs2str(attrs, buf, len);
+       else {
+               memset(buf, 0, len);
+               return buf;
+       }
+}
+
+#endif
+
+/** @} */
+
+/** @} */
diff --git a/package/libs/libnl-tiny/src/socket.c b/package/libs/libnl-tiny/src/socket.c
new file mode 100644 (file)
index 0000000..1429825
--- /dev/null
@@ -0,0 +1,406 @@
+/*
+ * lib/socket.c                Netlink Socket
+ *
+ *     This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU Lesser General Public
+ *     License as published by the Free Software Foundation version 2.1
+ *     of the License.
+ *
+ * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
+ */
+
+/**
+ * @ingroup core
+ * @defgroup socket Socket
+ * @{
+ */
+
+#include <netlink-local.h>
+#include <netlink/netlink.h>
+#include <netlink/utils.h>
+#include <netlink/handlers.h>
+#include <netlink/msg.h>
+#include <netlink/attr.h>
+
+static uint32_t used_ports_map[32];
+
+static uint32_t generate_local_port(void)
+{
+       int i, n;
+       uint32_t pid = getpid() & 0x3FFFFF;
+
+       for (i = 0; i < 32; i++) {
+               if (used_ports_map[i] == 0xFFFFFFFF)
+                       continue;
+
+               for (n = 0; n < 32; n++) {
+                       if (1UL & (used_ports_map[i] >> n))
+                               continue;
+
+                       used_ports_map[i] |= (1UL << n);
+                       n += (i * 32);
+
+                       /* PID_MAX_LIMIT is currently at 2^22, leaving 10 bit
+                        * to, i.e. 1024 unique ports per application. */
+                       return pid + (n << 22);
+
+               }
+       }
+
+       /* Out of sockets in our own PID namespace, what to do? FIXME */
+       return UINT_MAX;
+}
+
+static void release_local_port(uint32_t port)
+{
+       int nr;
+
+       if (port == UINT_MAX)
+               return;
+       
+       nr = port >> 22;
+       used_ports_map[nr / 32] &= ~(1 << nr % 32);
+}
+
+/**
+ * @name Allocation
+ * @{
+ */
+
+static struct nl_sock *__alloc_socket(struct nl_cb *cb)
+{
+       struct nl_sock *sk;
+
+       sk = calloc(1, sizeof(*sk));
+       if (!sk)
+               return NULL;
+
+       sk->s_fd = -1;
+       sk->s_cb = cb;
+       sk->s_local.nl_family = AF_NETLINK;
+       sk->s_peer.nl_family = AF_NETLINK;
+       sk->s_seq_expect = sk->s_seq_next = time(0);
+       sk->s_local.nl_pid = generate_local_port();
+       if (sk->s_local.nl_pid == UINT_MAX) {
+               nl_socket_free(sk);
+               return NULL;
+       }
+
+       return sk;
+}
+
+/**
+ * Allocate new netlink socket
+ *
+ * @return Newly allocated netlink socket or NULL.
+ */
+struct nl_sock *nl_socket_alloc(void)
+{
+       struct nl_cb *cb;
+       
+       cb = nl_cb_alloc(NL_CB_DEFAULT);
+       if (!cb)
+               return NULL;
+
+       return __alloc_socket(cb);
+}
+
+/**
+ * Allocate new socket with custom callbacks
+ * @arg cb             Callback handler
+ *
+ * The reference to the callback handler is taken into account
+ * automatically, it is released again upon calling nl_socket_free().
+ *
+ *@return Newly allocted socket handle or NULL.
+ */
+struct nl_sock *nl_socket_alloc_cb(struct nl_cb *cb)
+{
+       if (cb == NULL)
+               BUG();
+
+       return __alloc_socket(nl_cb_get(cb));
+}
+
+/**
+ * Free a netlink socket.
+ * @arg sk             Netlink socket.
+ */
+void nl_socket_free(struct nl_sock *sk)
+{
+       if (!sk)
+               return;
+
+       if (sk->s_fd >= 0)
+               close(sk->s_fd);
+
+       if (!(sk->s_flags & NL_OWN_PORT))
+               release_local_port(sk->s_local.nl_pid);
+
+       nl_cb_put(sk->s_cb);
+       free(sk);
+}
+
+/** @} */
+
+/**
+ * @name Sequence Numbers
+ * @{
+ */
+
+static int noop_seq_check(struct nl_msg *msg, void *arg)
+{
+       return NL_OK;
+}
+
+
+/**
+ * Disable sequence number checking.
+ * @arg sk             Netlink socket.
+ *
+ * Disables checking of sequence numbers on the netlink socket This is
+ * required to allow messages to be processed which were not requested by
+ * a preceding request message, e.g. netlink events.
+ *
+ * @note This function modifies the NL_CB_SEQ_CHECK configuration in
+ * the callback handle associated with the socket.
+ */
+void nl_socket_disable_seq_check(struct nl_sock *sk)
+{
+       nl_cb_set(sk->s_cb, NL_CB_SEQ_CHECK,
+                 NL_CB_CUSTOM, noop_seq_check, NULL);
+}
+
+/** @} */
+
+/**
+ * Set local port of socket
+ * @arg sk             Netlink socket.
+ * @arg port           Local port identifier
+ *
+ * Assigns a local port identifier to the socket. If port is 0
+ * a unique port identifier will be generated automatically.
+ */
+void nl_socket_set_local_port(struct nl_sock *sk, uint32_t port)
+{
+       if (port == 0) {
+               port = generate_local_port(); 
+               sk->s_flags &= ~NL_OWN_PORT;
+       } else  {
+               if (!(sk->s_flags & NL_OWN_PORT))
+                       release_local_port(sk->s_local.nl_pid);
+               sk->s_flags |= NL_OWN_PORT;
+       }
+
+       sk->s_local.nl_pid = port;
+}
+
+/** @} */
+
+/**
+ * @name Group Subscriptions
+ * @{
+ */
+
+/**
+ * Join groups
+ * @arg sk             Netlink socket
+ * @arg group          Group identifier
+ *
+ * Joins the specified groups using the modern socket option which
+ * is available since kernel version 2.6.14. It allows joining an
+ * almost arbitary number of groups without limitation.  The list
+ * of groups has to be terminated by 0 (%NFNLGRP_NONE).
+ *
+ * Make sure to use the correct group definitions as the older
+ * bitmask definitions for nl_join_groups() are likely to still
+ * be present for backward compatibility reasons.
+ *
+ * @return 0 on sucess or a negative error code.
+ */
+int nl_socket_add_memberships(struct nl_sock *sk, int group, ...)
+{
+       int err;
+       va_list ap;
+
+       if (sk->s_fd == -1)
+               return -NLE_BAD_SOCK;
+
+       va_start(ap, group);
+
+       while (group != 0) {
+               if (group < 0)
+                       return -NLE_INVAL;
+
+               err = setsockopt(sk->s_fd, SOL_NETLINK, NETLINK_ADD_MEMBERSHIP,
+                                                &group, sizeof(group));
+               if (err < 0)
+                       return -nl_syserr2nlerr(errno);
+
+               group = va_arg(ap, int);
+       }
+
+       va_end(ap);
+
+       return 0;
+}
+
+/**
+ * Leave groups
+ * @arg sk             Netlink socket
+ * @arg group          Group identifier
+ *
+ * Leaves the specified groups using the modern socket option
+ * which is available since kernel version 2.6.14. The list of groups
+ * has to terminated by 0 (%NFNLGRP_NONE).
+ *
+ * @see nl_socket_add_membership
+ * @return 0 on success or a negative error code.
+ */
+int nl_socket_drop_memberships(struct nl_sock *sk, int group, ...)
+{
+       int err;
+       va_list ap;
+
+       if (sk->s_fd == -1)
+               return -NLE_BAD_SOCK;
+
+       va_start(ap, group);
+
+       while (group != 0) {
+               if (group < 0)
+                       return -NLE_INVAL;
+
+               err = setsockopt(sk->s_fd, SOL_NETLINK, NETLINK_DROP_MEMBERSHIP,
+                                                &group, sizeof(group));
+               if (err < 0)
+                       return -nl_syserr2nlerr(errno);
+
+               group = va_arg(ap, int);
+       }
+
+       va_end(ap);
+
+       return 0;
+}
+
+
+/** @} */
+
+/**
+ * Set file descriptor of socket to non-blocking state
+ * @arg sk             Netlink socket.
+ *
+ * @return 0 on success or a negative error code.
+ */
+int nl_socket_set_nonblocking(struct nl_sock *sk)
+{
+       if (sk->s_fd == -1)
+               return -NLE_BAD_SOCK;
+
+       if (fcntl(sk->s_fd, F_SETFL, O_NONBLOCK) < 0)
+               return -nl_syserr2nlerr(errno);
+
+       return 0;
+}
+
+/** @} */
+
+/**
+ * @name Utilities
+ * @{
+ */
+
+/**
+ * Set socket buffer size of netlink socket.
+ * @arg sk             Netlink socket.
+ * @arg rxbuf          New receive socket buffer size in bytes.
+ * @arg txbuf          New transmit socket buffer size in bytes.
+ *
+ * Sets the socket buffer size of a netlink socket to the specified
+ * values \c rxbuf and \c txbuf. Providing a value of \c 0 assumes a
+ * good default value.
+ *
+ * @note It is not required to call this function prior to nl_connect().
+ * @return 0 on sucess or a negative error code.
+ */
+int nl_socket_set_buffer_size(struct nl_sock *sk, int rxbuf, int txbuf)
+{
+       int err;
+
+       if (rxbuf <= 0)
+               rxbuf = 32768;
+
+       if (txbuf <= 0)
+               txbuf = 32768;
+
+       if (sk->s_fd == -1)
+               return -NLE_BAD_SOCK;
+       
+       err = setsockopt(sk->s_fd, SOL_SOCKET, SO_SNDBUF,
+                        &txbuf, sizeof(txbuf));
+       if (err < 0)
+               return -nl_syserr2nlerr(errno);
+
+       err = setsockopt(sk->s_fd, SOL_SOCKET, SO_RCVBUF,
+                        &rxbuf, sizeof(rxbuf));
+       if (err < 0)
+               return -nl_syserr2nlerr(errno);
+
+       sk->s_flags |= NL_SOCK_BUFSIZE_SET;
+
+       return 0;
+}
+
+/**
+ * Enable/disable credential passing on netlink socket.
+ * @arg sk             Netlink socket.
+ * @arg state          New state (0 - disabled, 1 - enabled)
+ *
+ * @return 0 on success or a negative error code
+ */
+int nl_socket_set_passcred(struct nl_sock *sk, int state)
+{
+       int err;
+
+       if (sk->s_fd == -1)
+               return -NLE_BAD_SOCK;
+
+       err = setsockopt(sk->s_fd, SOL_SOCKET, SO_PASSCRED,
+                        &state, sizeof(state));
+       if (err < 0)
+               return -nl_syserr2nlerr(errno);
+
+       if (state)
+               sk->s_flags |= NL_SOCK_PASSCRED;
+       else
+               sk->s_flags &= ~NL_SOCK_PASSCRED;
+
+       return 0;
+}
+
+/**
+ * Enable/disable receival of additional packet information
+ * @arg sk             Netlink socket.
+ * @arg state          New state (0 - disabled, 1 - enabled)
+ *
+ * @return 0 on success or a negative error code
+ */
+int nl_socket_recv_pktinfo(struct nl_sock *sk, int state)
+{
+       int err;
+
+       if (sk->s_fd == -1)
+               return -NLE_BAD_SOCK;
+
+       err = setsockopt(sk->s_fd, SOL_NETLINK, NETLINK_PKTINFO,
+                        &state, sizeof(state));
+       if (err < 0)
+               return -nl_syserr2nlerr(errno);
+
+       return 0;
+}
+
+/** @} */
+
+/** @} */
diff --git a/package/libs/libnl-tiny/src/unl.c b/package/libs/libnl-tiny/src/unl.c
new file mode 100644 (file)
index 0000000..b38dab8
--- /dev/null
@@ -0,0 +1,290 @@
+#define _GNU_SOURCE
+#include <netlink/netlink.h>
+#include <netlink/genl/genl.h>
+#include <netlink/genl/ctrl.h>
+#include <netlink/genl/family.h>
+#include <sys/types.h>
+#include <net/if.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <linux/nl80211.h>
+
+#include "unl.h"
+
+static int unl_init(struct unl *unl)
+{
+       unl->sock = nl_socket_alloc();
+       if (!unl->sock)
+               return -1;
+
+       return 0;
+}
+
+int unl_genl_init(struct unl *unl, const char *family)
+{
+       memset(unl, 0, sizeof(*unl));
+
+       if (unl_init(unl))
+               goto error_out;
+
+       unl->hdrlen = NLMSG_ALIGN(sizeof(struct genlmsghdr));
+       unl->family_name = strdup(family);
+       if (!unl->family_name)
+               goto error;
+
+       if (genl_connect(unl->sock))
+               goto error;
+
+       if (genl_ctrl_alloc_cache(unl->sock, &unl->cache))
+               goto error;
+
+       unl->family = genl_ctrl_search_by_name(unl->cache, family);
+       if (!unl->family)
+               goto error;
+
+       return 0;
+
+error:
+       unl_free(unl);
+error_out:
+       return -1;
+}
+
+void unl_free(struct unl *unl)
+{
+       if (unl->family_name)
+               free(unl->family_name);
+
+       if (unl->sock)
+               nl_socket_free(unl->sock);
+
+       if (unl->cache)
+               nl_cache_free(unl->cache);
+
+       memset(unl, 0, sizeof(*unl));
+}
+
+static int
+ack_handler(struct nl_msg *msg, void *arg)
+{
+       int *err = arg;
+       *err = 0;
+       return NL_STOP;
+}
+
+static int
+finish_handler(struct nl_msg *msg, void *arg)
+{
+       int *err = arg;
+       *err = 0;
+       return NL_SKIP;
+}
+
+static int
+error_handler(struct sockaddr_nl *nla, struct nlmsgerr *err, void *arg)
+{
+       int *ret = arg;
+       *ret = err->error;
+       return NL_SKIP;
+}
+
+struct nl_msg *unl_genl_msg(struct unl *unl, int cmd, bool dump)
+{
+       struct nl_msg *msg;
+       int flags = 0;
+
+       msg = nlmsg_alloc();
+       if (!msg)
+               goto out;
+
+       if (dump)
+               flags |= NLM_F_DUMP;
+
+       genlmsg_put(msg, NL_AUTO_PID, NL_AUTO_SEQ,
+                   genl_family_get_id(unl->family), 0, flags, cmd, 0);
+
+out:
+       return msg;
+}
+
+int unl_genl_request(struct unl *unl, struct nl_msg *msg, unl_cb handler, void *arg)
+{
+       struct nlmsghdr *nlh;
+       struct nl_cb *cb;
+       int err;
+
+       cb = nl_cb_alloc(NL_CB_CUSTOM);
+       nlh = nlmsg_hdr(msg);
+
+       err = nl_send_auto_complete(unl->sock, msg);
+       if (err < 0)
+               goto out;
+
+       err = 1;
+       nl_cb_err(cb, NL_CB_CUSTOM, error_handler, &err);
+       nl_cb_set(cb, NL_CB_FINISH, NL_CB_CUSTOM, finish_handler, &err);
+       nl_cb_set(cb, NL_CB_ACK, NL_CB_CUSTOM, ack_handler, &err);
+       if (handler)
+               nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, handler, arg);
+
+       while (err > 0)
+               nl_recvmsgs(unl->sock, cb);
+
+out:
+       nlmsg_free(msg);
+       nl_cb_put(cb);
+       return err;
+}
+
+static int request_single_cb(struct nl_msg *msg, void *arg)
+{
+       struct nl_msg **dest = arg;
+
+       if (!*dest) {
+               nlmsg_get(msg);
+               *dest = msg;
+       }
+       return NL_SKIP;
+}
+
+int unl_genl_request_single(struct unl *unl, struct nl_msg *msg, struct nl_msg **dest)
+{
+       *dest = NULL;
+       return unl_genl_request(unl, msg, request_single_cb, dest);
+}
+
+static int no_seq_check(struct nl_msg *msg, void *arg)
+{
+       return NL_OK;
+}
+
+void unl_genl_loop(struct unl *unl, unl_cb handler, void *arg)
+{
+       struct nl_cb *cb;
+
+       cb = nl_cb_alloc(NL_CB_CUSTOM);
+       unl->loop_done = false;
+       nl_cb_set(cb, NL_CB_SEQ_CHECK, NL_CB_CUSTOM, no_seq_check, NULL);
+       nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, handler, arg);
+
+       while (!unl->loop_done)
+               nl_recvmsgs(unl->sock, cb);
+
+       nl_cb_put(cb);
+}
+
+int unl_genl_multicast_id(struct unl *unl, const char *name)
+{
+       struct nlattr *tb[CTRL_ATTR_MCAST_GRP_MAX + 1];
+       struct nlattr *groups, *group;
+       struct nl_msg *msg;
+       int ctrlid;
+       int ret = -1;
+       int rem;
+
+       msg = nlmsg_alloc();
+       if (!msg)
+               return -1;
+
+       ctrlid = genl_ctrl_resolve(unl->sock, "nlctrl");
+       genlmsg_put(msg, 0, 0, ctrlid, 0, 0, CTRL_CMD_GETFAMILY, 0);
+       NLA_PUT_STRING(msg, CTRL_ATTR_FAMILY_NAME, unl->family_name);
+       unl_genl_request_single(unl, msg, &msg);
+       if (!msg)
+               return -1;
+
+       groups = unl_find_attr(unl, msg, CTRL_ATTR_MCAST_GROUPS);
+       if (!groups)
+               goto nla_put_failure;
+
+       nla_for_each_nested(group, groups, rem) {
+               const char *gn;
+
+               nla_parse(tb, CTRL_ATTR_MCAST_GRP_MAX, nla_data(group),
+                         nla_len(group), NULL);
+
+               if (!tb[CTRL_ATTR_MCAST_GRP_NAME] ||
+                   !tb[CTRL_ATTR_MCAST_GRP_ID])
+                       continue;
+
+               gn = nla_data(tb[CTRL_ATTR_MCAST_GRP_NAME]);
+               if (strcmp(gn, name) != 0)
+                       continue;
+
+               ret = nla_get_u32(tb[CTRL_ATTR_MCAST_GRP_ID]);
+               break;
+       }
+
+nla_put_failure:
+       nlmsg_free(msg);
+       return ret;
+}
+
+int unl_genl_subscribe(struct unl *unl, const char *name)
+{
+       int mcid;
+
+       mcid = unl_genl_multicast_id(unl, name);
+       if (mcid < 0)
+               return mcid;
+
+       return nl_socket_add_membership(unl->sock, mcid);
+}
+
+int unl_genl_unsubscribe(struct unl *unl, const char *name)
+{
+       int mcid;
+
+       mcid = unl_genl_multicast_id(unl, name);
+       if (mcid < 0)
+               return mcid;
+
+       return nl_socket_drop_membership(unl->sock, mcid);
+}
+
+int unl_nl80211_phy_lookup(const char *name)
+{
+       char buf[32];
+       int fd, pos;
+
+       snprintf(buf, sizeof(buf), "/sys/class/ieee80211/%s/index", name);
+
+       fd = open(buf, O_RDONLY);
+       if (fd < 0)
+               return -1;
+       pos = read(fd, buf, sizeof(buf) - 1);
+       if (pos < 0) {
+               close(fd);
+               return -1;
+       }
+       buf[pos] = '\0';
+       close(fd);
+       return atoi(buf);
+}
+
+int unl_nl80211_wdev_to_phy(struct unl *unl, int wdev)
+{
+       struct nl_msg *msg;
+       struct nlattr *attr;
+       int ret = -1;
+
+       msg = unl_genl_msg(unl, NL80211_CMD_GET_INTERFACE, false);
+       if (!msg)
+               return -1;
+
+       NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, wdev);
+       if (unl_genl_request_single(unl, msg, &msg) < 0)
+               return -1;
+
+       attr = unl_find_attr(unl, msg, NL80211_ATTR_WIPHY);
+       if (!attr)
+               goto out;
+
+       ret = nla_get_u32(attr);
+out:
+nla_put_failure:
+       nlmsg_free(msg);
+       return ret;
+}
+
+
diff --git a/package/libs/libnl/Makefile b/package/libs/libnl/Makefile
new file mode 100644 (file)
index 0000000..1375699
--- /dev/null
@@ -0,0 +1,56 @@
+#
+# Copyright (C) 2006-2009 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=libnl
+PKG_VERSION:=2.0
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=http://www.infradead.org/~tgr/libnl/files/
+PKG_MD5SUM:=6aaf1e9802a17a7d702bb0638044ffa7
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/libnl
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=netlink socket library
+  URL:=http://people.suug.ch/~tgr/libnl/
+endef
+
+define Package/libnl/description
+ This package contains a library for applications dealing with netlink sockets
+endef
+
+TARGET_CFLAGS += -ffunction-sections $(FPIC)
+
+define Build/Compile
+       $(call Build/Compile/Default)
+       make -C $(PKG_BUILD_DIR) \
+               DESTDIR="$(PKG_INSTALL_DIR)" \
+               install
+endef
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)
+       $(CP) $(PKG_INSTALL_DIR)/* $(1)/
+       mkdir -p $(1)/usr/include/libnl
+       $(CP) $(PKG_BUILD_DIR)/include/linux $(1)/usr/include/libnl/
+endef
+
+define Package/libnl/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libnl-route.so.* $(1)/usr/lib/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libnl-genl.so.* $(1)/usr/lib/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libnl-nf.so.* $(1)/usr/lib/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libnl-route.so.* $(1)/usr/lib/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libnl.so.* $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,libnl))
diff --git a/package/libs/libnl/patches/110-offsetof.patch b/package/libs/libnl/patches/110-offsetof.patch
new file mode 100644 (file)
index 0000000..fa944a9
--- /dev/null
@@ -0,0 +1,12 @@
+--- a/include/netlink-local.h
++++ b/include/netlink-local.h
+@@ -337,7 +337,9 @@ static inline int nl_cb_call(struct nl_c
+ }
+ #define ARRAY_SIZE(X) (sizeof(X) / sizeof((X)[0]))
++#ifndef offsetof
+ #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
++#endif
+ #define __init __attribute__ ((constructor))
+ #define __exit __attribute__ ((destructor))
diff --git a/package/libs/libnl/patches/160-update_includes_for_iw.patch b/package/libs/libnl/patches/160-update_includes_for_iw.patch
new file mode 100644 (file)
index 0000000..ad36dab
--- /dev/null
@@ -0,0 +1,34 @@
+--- a/include/linux/genetlink.h
++++ b/include/linux/genetlink.h
+@@ -39,6 +39,9 @@ enum {
+       CTRL_CMD_NEWOPS,
+       CTRL_CMD_DELOPS,
+       CTRL_CMD_GETOPS,
++      CTRL_CMD_NEWMCAST_GRP,
++      CTRL_CMD_DELMCAST_GRP,
++      CTRL_CMD_GETMCAST_GRP, /* unused */
+       __CTRL_CMD_MAX,
+ };
+@@ -52,6 +55,7 @@ enum {
+       CTRL_ATTR_HDRSIZE,
+       CTRL_ATTR_MAXATTR,
+       CTRL_ATTR_OPS,
++      CTRL_ATTR_MCAST_GROUPS,
+       __CTRL_ATTR_MAX,
+ };
+@@ -66,4 +70,13 @@ enum {
+ #define CTRL_ATTR_OP_MAX (__CTRL_ATTR_OP_MAX - 1)
++enum {
++      CTRL_ATTR_MCAST_GRP_UNSPEC,
++      CTRL_ATTR_MCAST_GRP_NAME,
++      CTRL_ATTR_MCAST_GRP_ID,
++      __CTRL_ATTR_MCAST_GRP_MAX,
++};
++
++#define CTRL_ATTR_MCAST_GRP_MAX (__CTRL_ATTR_MCAST_GRP_MAX - 1)
++
+ #endif        /* __LINUX_GENERIC_NETLINK_H */
diff --git a/package/libs/libpcap/Config.in b/package/libs/libpcap/Config.in
new file mode 100644 (file)
index 0000000..ef32c1b
--- /dev/null
@@ -0,0 +1,15 @@
+menu "Configuration"
+       depends PACKAGE_libpcap
+
+config PCAP_HAS_USB
+       bool "Include USB support"
+       depends PACKAGE_kmod-usb-core
+       default n
+
+config PCAP_HAS_BT
+       bool "Include bluetooth support"
+       depends PACKAGE_kmod-bluetooth
+       depends BROKEN
+       default n
+
+endmenu
diff --git a/package/libs/libpcap/Makefile b/package/libs/libpcap/Makefile
new file mode 100644 (file)
index 0000000..ba65498
--- /dev/null
@@ -0,0 +1,83 @@
+#
+# Copyright (C) 2006-2011 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=libpcap
+PKG_VERSION:=1.1.1
+PKG_RELEASE:=2
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=http://www.tcpdump.org/release/
+PKG_MD5SUM:=1bca27d206970badae248cfa471bbb47
+
+PKG_INSTALL:=1
+PKG_BUILD_PARALLEL:=1
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/kernel.mk
+
+define Package/libpcap
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=Low-level packet capture library
+  URL:=http://www.tcpdump.org/
+  MENU:=1
+endef
+
+define Package/libpcap/description
+This package contains a system-independent library for user-level network packet
+capture.
+endef
+
+define Package/libpcap/config
+       source "$(SOURCE)/Config.in"
+endef
+
+TARGET_CFLAGS += \
+       -ffunction-sections \
+       -fdata-sections
+
+CONFIGURE_VARS += \
+       ac_cv_linux_vers=$(LINUX_VERSION)
+
+CONFIGURE_ARGS += \
+       --enable-shared \
+       --enable-static \
+       --disable-yydebug \
+       --enable-ipv6 \
+       --with-build-cc="$(HOSTCC)" \
+       --with-pcap=linux \
+       --without-septel \
+       --without-dag \
+       --without-libnl
+
+MAKE_FLAGS += \
+       CCOPT="$(TARGET_CFLAGS) -I$(BUILD_DIR)/linux/include"
+
+define Build/Configure
+       $(call Build/Configure/Default)
+       $(if $(CONFIG_PCAP_HAS_USB),,$(SED) '/^#define PCAP_SUPPORT_USB/D' $(PKG_BUILD_DIR)/config.h)
+       $(if $(CONFIG_PCAP_HAS_USB),,$(SED) 's/pcap-usb-linux.c *//' $(PKG_BUILD_DIR)/Makefile)
+       $(if $(CONFIG_PCAP_HAS_BT),,$(SED) '/^#define PCAP_SUPPORT_BT/D' $(PKG_BUILD_DIR)/config.h)
+       $(if $(CONFIG_PCAP_HAS_BT),,$(SED) 's/pcap-bt-linux.c *//' $(PKG_BUILD_DIR)/Makefile)
+endef
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/pcap* $(1)/usr/include/
+
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcap.{a,so*} $(1)/usr/lib/
+endef
+
+define Package/libpcap/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcap.so* $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,libpcap))
diff --git a/package/libs/libpcap/patches/100-debian_shared_lib.patch b/package/libs/libpcap/patches/100-debian_shared_lib.patch
new file mode 100644 (file)
index 0000000..5be33b0
--- /dev/null
@@ -0,0 +1,178 @@
+Debian-specific modifications to the upstream Makefile.in to
+build a shared library.
+---
+ Makefile.in  |   45 ++++++++++++++++++++++++++++++++++++++++++---
+ configure    |    2 +-
+ configure.in |    2 +-
+ 3 files changed, 44 insertions(+), 5 deletions(-)
+
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -40,6 +40,14 @@ mandir = @mandir@
+ srcdir = @srcdir@
+ VPATH = @srcdir@
++# some defines for shared library compilation
++MAJ=1.1
++LIBVERSION=$(MAJ).1
++LIBNAME=pcap
++LIBRARY=lib$(LIBNAME).a
++SOLIBRARY=lib$(LIBNAME).so
++SHAREDLIB=$(SOLIBRARY).$(LIBVERSION)
++
+ #
+ # You shouldn't need to edit anything below.
+ #
+@@ -59,6 +67,7 @@ PROG=libpcap
+ # Standard CFLAGS
+ CFLAGS = $(CCOPT) $(INCLS) $(DEFS)
++CFLAGS_SHARED = -shared -Wl,-soname,$(SOLIBRARY).$(MAJ)
+ INSTALL = @INSTALL@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+@@ -78,7 +87,11 @@ YACC = @V_YACC@
+ # problem if you don't own the file but can write to the directory.
+ .c.o:
+       @rm -f $@
+-      $(CC) $(CFLAGS) -c $(srcdir)/$*.c
++      $(CC) $(CFLAGS) -c -o $@ $(srcdir)/$*.c
++
++%_pic.o: %.c
++      @rm -f $@
++      $(CC) -fPIC $(CFLAGS) -c -o $@ $(srcdir)/$*.c
+ PSRC =        pcap-@V_PCAP@.c @USB_SRC@ @BT_SRC@ @CAN_SRC@
+ FSRC =  fad-@V_FINDALLDEVS@.c
+@@ -94,6 +107,7 @@ SRC =       $(PSRC) $(FSRC) $(CSRC) $(SSRC) $(
+ # We would like to say "OBJ = $(SRC:.c=.o)" but Ultrix's make cannot
+ # hack the extra indirection
+ OBJ = $(PSRC:.c=.o) $(FSRC:.c=.o) $(CSRC:.c=.o) $(SSRC:.c=.o) $(GENSRC:.c=.o) $(LIBOBJS)
++OBJ_PIC = $(PSRC:.c=_pic.o) $(FSRC:.c=_pic.o) $(CSRC:.c=_pic.o) $(SSRC:.c=_pic.o) $(GENSRC:.c=_pic.o)
+ PUBHDR = \
+       pcap.h \
+       pcap-bpf.h \
+@@ -131,7 +145,7 @@ TAGFILES = \
+ CLEANFILES = $(OBJ) libpcap.* filtertest findalldevstest selpolltest \
+       opentest $(PROG)-`cat $(srcdir)/VERSION`.tar.gz $(GENSRC) $(GENHDR) \
+-      lex.yy.c pcap-config
++      lex.yy.c pcap-config $(OBJ_PIC)
+ MAN1 = pcap-config.1
+@@ -324,21 +338,14 @@ EXTRA_DIST = \
+       Win32/Src/inet_net.c \
+       Win32/Src/inet_pton.c
+-all: libpcap.a shared pcap-config
++all: libpcap.a shared pcap-config $(SHAREDLIB)
+ libpcap.a: $(OBJ)
+       @rm -f $@
+       ar rc $@ $(OBJ) $(ADDLARCHIVEOBJS)
+       $(RANLIB) $@
+-shared: libpcap.$(DYEXT)
+-
+-libpcap.so: $(OBJ)
+-      @rm -f $@
+-      VER=`cat $(srcdir)/VERSION`; \
+-      MAJOR_VER=`sed 's/\([0-9][0-9]*\)\..*/\1/' $(srcdir)/VERSION`; \
+-      @V_SHLIB_CMD@ @V_SHLIB_OPT@ @V_SONAME_OPT@$@.$$MAJOR_VER $(LDFLAGS) \
+-          -o $@.$$VER $(OBJ) $(ADDLOBJS) $(LIBS)
++shared: $(SHAREDLIB)
+ #
+ # The following rule succeeds, but the result is untested.
+@@ -409,6 +416,13 @@ libpcap.shareda: $(OBJ)
+ #
+ libpcap.none:
++$(SHAREDLIB): $(OBJ_PIC)
++      -@rm -f $@
++      -@rm -f $(SOLIBRARY) $(SOLIBRARY).$(MAJ)
++      $(CC) $(CFLAGS_SHARED) -o $(SHAREDLIB) $(OBJ_PIC) -lc
++      ln -s $(SHAREDLIB) $(SOLIBRARY).$(MAJ)
++      ln -s $(SOLIBRARY).$(MAJ) $(SOLIBRARY)
++
+ scanner.c: $(srcdir)/scanner.l
+       @rm -f $@
+       $(srcdir)/runlex.sh $(LEX) -o$@ $<
+@@ -416,6 +430,9 @@ scanner.c: $(srcdir)/scanner.l
+ scanner.o: scanner.c tokdefs.h
+       $(CC) $(CFLAGS) -c scanner.c
++scanner_pic.o: scanner.c tokdefs.h
++      $(CC) -fPIC $(CFLAGS) -o $@ -c scanner.c
++
+ pcap.o: version.h
+ tokdefs.h: grammar.c
+@@ -429,9 +446,17 @@ grammar.o: grammar.c
+       @rm -f $@
+       $(CC) $(CFLAGS) -Dyylval=pcap_lval -c grammar.c
++grammar_pic.o: grammar.c
++      @rm -f $@
++      $(CC) -fPIC $(CFLAGS) -Dyylval=pcap_lval -o $@ -c grammar.c
++
+ version.o: version.c
+       $(CC) $(CFLAGS) -c version.c
++version_pic.o: version.c
++      $(CC) -fPIC $(CFLAGS) -c version.c -o $@
++
++
+ snprintf.o: $(srcdir)/missing/snprintf.c
+       $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/snprintf.c
+@@ -469,6 +494,9 @@ bpf_filter.c: $(srcdir)/bpf/net/bpf_filt
+ bpf_filter.o: bpf_filter.c
+       $(CC) $(CFLAGS) -c bpf_filter.c
++bpf_filter_pic.o: bpf_filter.c
++      $(CC) -fPIC $(CFLAGS) -c bpf_filter.c -o $@
++
+ #
+ # Generate the pcap-config script.
+ #
+@@ -562,14 +590,12 @@ install: install-shared install-archive 
+                   $(DESTDIR)$(mandir)/man@MAN_MISC_INFO@/`echo $$i | sed 's/.manmisc.in/.@MAN_MISC_INFO@/'`; done
+ install-shared: install-shared-$(DYEXT)
+-install-shared-so: libpcap.so
++install-shared-so: $(SHAREDLIB)
+       [ -d $(DESTDIR)$(libdir) ] || \
+           (mkdir -p $(DESTDIR)$(libdir); chmod 755 $(DESTDIR)$(libdir))
+-      VER=`cat $(srcdir)/VERSION`; \
+-      MAJOR_VER=`sed 's/\([0-9][0-9]*\)\..*/\1/' $(srcdir)/VERSION`; \
+-      $(INSTALL_PROGRAM) libpcap.so.$$VER $(DESTDIR)$(libdir)/libpcap.so.$$VER; \
+-      ln -sf libpcap.so.$$VER $(DESTDIR)$(libdir)/libpcap.so.$$MAJOR_VER; \
+-      ln -sf libpcap.so.$$MAJOR_VER $(DESTDIR)$(libdir)/libpcap.so
++      $(INSTALL_DATA) $(SHAREDLIB) $(DESTDIR)$(libdir)/
++      ln -sf $(SHAREDLIB) $(DESTDIR)$(libdir)/$(SOLIBRARY).$(MAJ)
++      ln -sf $(SOLIBRARY).$(MAJ) $(DESTDIR)$(libdir)/$(SOLIBRARY)
+ install-shared-dylib: libpcap.dylib
+       [ -d $(DESTDIR)$(libdir) ] || \
+           (mkdir -p $(DESTDIR)$(libdir); chmod 755 $(DESTDIR)$(libdir))
+--- a/configure
++++ b/configure
+@@ -3229,7 +3229,7 @@ _ACEOF
+                   # or accepts command-line arguments like
+                   # those the GNU linker accepts.
+                   #
+-                  V_CCOPT="$V_CCOPT -fpic"
++                  V_CCOPT="$V_CCOPT"
+                   V_SONAME_OPT="-Wl,-soname,"
+                   V_RPATH_OPT="-Wl,-rpath,"
+                   ;;
+@@ -3292,7 +3292,7 @@ _ACEOF
+                   #
+                   # "cc" is GCC.
+                   #
+-                  V_CCOPT="$V_CCOPT -fpic"
++                  V_CCOPT="$V_CCOPT"
+                   V_SHLIB_CMD="\$(CC)"
+                   V_SHLIB_OPT="-shared"
+                   V_SONAME_OPT="-Wl,-soname,"
diff --git a/package/libs/libpcap/patches/102-makefile_disable_manpages.patch b/package/libs/libpcap/patches/102-makefile_disable_manpages.patch
new file mode 100644 (file)
index 0000000..4674df5
--- /dev/null
@@ -0,0 +1,89 @@
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -532,62 +532,12 @@ install: install-shared install-archive 
+           (mkdir -p $(DESTDIR)$(includedir); chmod 755 $(DESTDIR)$(includedir))
+       [ -d $(DESTDIR)$(includedir)/pcap ] || \
+           (mkdir -p $(DESTDIR)$(includedir)/pcap; chmod 755 $(DESTDIR)$(includedir)/pcap)
+-      [ -d $(DESTDIR)$(mandir)/man1 ] || \
+-          (mkdir -p $(DESTDIR)$(mandir)/man1; chmod 755 $(DESTDIR)$(mandir)/man1)
+-      [ -d $(DESTDIR)$(mandir)/man3 ] || \
+-          (mkdir -p $(DESTDIR)$(mandir)/man3; chmod 755 $(DESTDIR)$(mandir)/man3)
+-      [ -d $(DESTDIR)$(mandir)/man@MAN_FILE_FORMATS@ ] || \
+-          (mkdir -p $(DESTDIR)$(mandir)/man@MAN_FILE_FORMATS@; chmod 755 $(DESTDIR)$(mandir)/man@MAN_FILE_FORMATS@)
+-      [ -d $(DESTDIR)$(mandir)/man@MAN_MISC_INFO@ ] || \
+-          (mkdir -p $(DESTDIR)$(mandir)/man@MAN_MISC_INFO@; chmod 755 $(DESTDIR)$(mandir)/man@MAN_MISC_INFO@)
+       for i in $(PUBHDR); do \
+               $(INSTALL_DATA) $(srcdir)/$$i \
+                   $(DESTDIR)$(includedir)/$$i; done
+       [ -d $(DESTDIR)$(bindir) ] || \
+           (mkdir -p $(DESTDIR)$(bindir); chmod 755 $(DESTDIR)$(bindir))
+       $(INSTALL_PROGRAM) pcap-config $(DESTDIR)$(bindir)/pcap-config
+-      for i in $(MAN1); do \
+-              $(INSTALL_DATA) $(srcdir)/$$i \
+-                  $(DESTDIR)$(mandir)/man1/$$i; done
+-      for i in $(MAN3PCAP_NOEXPAND); do \
+-              $(INSTALL_DATA) $(srcdir)/$$i \
+-                  $(DESTDIR)$(mandir)/man3/$$i; done
+-      for i in $(MAN3PCAP_EXPAND:.in=); do \
+-              $(INSTALL_DATA) $$i \
+-                  $(DESTDIR)$(mandir)/man3/$$i; done
+-      rm -f $(DESTDIR)$(mandir)/man3/pcap_datalink_val_to_description.3pcap
+-      ln $(DESTDIR)$(mandir)/man3/pcap_datalink_val_to_name.3pcap \
+-               $(DESTDIR)$(mandir)/man3/pcap_datalink_val_to_description.3pcap
+-      rm -f $(DESTDIR)$(mandir)/man3/pcap_dump_fopen.3pcap
+-      ln $(DESTDIR)$(mandir)/man3/pcap_dump_open.3pcap \
+-               $(DESTDIR)$(mandir)/man3/pcap_dump_fopen.3pcap
+-      rm -f $(DESTDIR)$(mandir)/man3/pcap_perror.3pcap
+-      ln $(DESTDIR)$(mandir)/man3/pcap_geterr.3pcap \
+-               $(DESTDIR)$(mandir)/man3/pcap_perror.3pcap
+-      rm -f $(DESTDIR)$(mandir)/man3/pcap_sendpacket.3pcap
+-      ln $(DESTDIR)$(mandir)/man3/pcap_inject.3pcap \
+-               $(DESTDIR)$(mandir)/man3/pcap_sendpacket.3pcap
+-      rm -f $(DESTDIR)$(mandir)/man3/pcap_dispatch.3pcap
+-      ln $(DESTDIR)$(mandir)/man3/pcap_loop.3pcap \
+-               $(DESTDIR)$(mandir)/man3/pcap_dispatch.3pcap
+-      rm -f $(DESTDIR)$(mandir)/man3/pcap_minor_version.3pcap
+-      ln $(DESTDIR)$(mandir)/man3/pcap_major_version.3pcap \
+-               $(DESTDIR)$(mandir)/man3/pcap_minor_version.3pcap
+-      rm -f $(DESTDIR)$(mandir)/man3/pcap_next.3pcap
+-      ln $(DESTDIR)$(mandir)/man3/pcap_next_ex.3pcap \
+-               $(DESTDIR)$(mandir)/man3/pcap_next.3pcap
+-      rm -f $(DESTDIR)$(mandir)/man3/pcap_fopen_offline.3pcap
+-      ln $(DESTDIR)$(mandir)/man3/pcap_open_offline.3pcap \
+-               $(DESTDIR)$(mandir)/man3/pcap_fopen_offline.3pcap
+-      rm -f $(DESTDIR)$(mandir)/man3/pcap_getnonblock.3pcap
+-      ln $(DESTDIR)$(mandir)/man3/pcap_setnonblock.3pcap \
+-               $(DESTDIR)$(mandir)/man3/pcap_getnonblock.3pcap
+-      for i in $(MANFILE); do \
+-              $(INSTALL_DATA) `echo $$i | sed 's/.manfile.in/.manfile/'` \
+-                  $(DESTDIR)$(mandir)/man@MAN_FILE_FORMATS@/`echo $$i | sed 's/.manfile.in/.@MAN_FILE_FORMATS@/'`; done
+-      for i in $(MANMISC); do \
+-              $(INSTALL_DATA) `echo $$i | sed 's/.manmisc.in/.manmisc/'` \
+-                  $(DESTDIR)$(mandir)/man@MAN_MISC_INFO@/`echo $$i | sed 's/.manmisc.in/.@MAN_MISC_INFO@/'`; done
+ install-shared: install-shared-$(DYEXT)
+ install-shared-so: $(SHAREDLIB)
+@@ -642,23 +592,6 @@ uninstall: uninstall-shared
+               rm -f $(DESTDIR)$(includedir)/$$i; done
+       -rmdir $(DESTDIR)$(includedir)/pcap
+       rm -f $(DESTDIR)/$(bindir)/pcap-config
+-      for i in $(MAN1); do \
+-              rm -f $(DESTDIR)$(mandir)/man1/$$i; done
+-      for i in $(MAN3PCAP); do \
+-              rm -f $(DESTDIR)$(mandir)/man3/$$i; done
+-      rm -f $(DESTDIR)$(mandir)/man3/pcap_datalink_val_to_description.3pcap
+-      rm -f $(DESTDIR)$(mandir)/man3/pcap_dump_fopen.3pcap
+-      rm -f $(DESTDIR)$(mandir)/man3/pcap_perror.3pcap
+-      rm -f $(DESTDIR)$(mandir)/man3/pcap_sendpacket.3pcap
+-      rm -f $(DESTDIR)$(mandir)/man3/pcap_dispatch.3pcap
+-      rm -f $(DESTDIR)$(mandir)/man3/pcap_minor_version.3pcap
+-      rm -f $(DESTDIR)$(mandir)/man3/pcap_next.3pcap
+-      rm -f $(DESTDIR)$(mandir)/man3/pcap_fopen_offline.3pcap
+-      rm -f $(DESTDIR)$(mandir)/man3/pcap_getnonblock.3pcap
+-      for i in $(MANFILE); do \
+-              rm -f $(DESTDIR)$(mandir)/man@MAN_FILE_FORMATS@/`echo $$i | sed 's/.manfile.in/.@MAN_FILE_FORMATS@/'`; done
+-      for i in $(MANMISC); do \
+-              rm -f $(DESTDIR)$(mandir)/man@MAN_MISC_INFO@/`echo $$i | sed 's/.manmisc.in/.@MAN_MISC_INFO@/'`; done
+ uninstall-shared: uninstall-shared-$(DYEXT)
+ uninstall-shared-so:
diff --git a/package/libs/libpcap/patches/103-makefile_flex_workaround.patch b/package/libs/libpcap/patches/103-makefile_flex_workaround.patch
new file mode 100644 (file)
index 0000000..a90e0ce
--- /dev/null
@@ -0,0 +1,14 @@
+
+       Copyright (C) 2006 Markus Wigge
+
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -56,7 +56,7 @@ LD = /usr/bin/ld
+ CC = @CC@
+ CCOPT = @V_CCOPT@
+ INCLS = -I. @V_INCLS@
+-DEFS = @DEFS@ @V_DEFS@
++DEFS = -D_BSD_SOURCE @DEFS@ @V_DEFS@
+ ADDLOBJS = @ADDLOBJS@
+ ADDLARCHIVEOBJS = @ADDLARCHIVEOBJS@
+ LIBS = @LIBS@
diff --git a/package/libs/libpcap/patches/201-space_optimization.patch b/package/libs/libpcap/patches/201-space_optimization.patch
new file mode 100644 (file)
index 0000000..f3eec4c
--- /dev/null
@@ -0,0 +1,133 @@
+--- a/gencode.c
++++ b/gencode.c
+@@ -491,20 +491,6 @@ pcap_compile_nopcap(int snaplen_arg, int
+ }
+ /*
+- * Clean up a "struct bpf_program" by freeing all the memory allocated
+- * in it.
+- */
+-void
+-pcap_freecode(struct bpf_program *program)
+-{
+-      program->bf_len = 0;
+-      if (program->bf_insns != NULL) {
+-              free((char *)program->bf_insns);
+-              program->bf_insns = NULL;
+-      }
+-}
+-
+-/*
+  * Backpatch the blocks in 'list' to 'target'.  The 'sense' field indicates
+  * which of the jt and jf fields has been resolved and which is a pointer
+  * back to another unresolved block (or nil).  At least one of the fields
+--- a/pcap.c
++++ b/pcap.c
+@@ -748,6 +748,59 @@ static const u_char charmap[] = {
+       (u_char)'\374', (u_char)'\375', (u_char)'\376', (u_char)'\377',
+ };
++/*
++ * Clean up a "struct bpf_program" by freeing all the memory allocated
++ * in it.
++ */
++void
++pcap_freecode(struct bpf_program *program)
++{
++      program->bf_len = 0;
++      if (program->bf_insns != NULL) {
++              free((char *)program->bf_insns);
++              program->bf_insns = NULL;
++      }
++}
++
++/*
++ * Make a copy of a BPF program and put it in the "fcode" member of
++ * a "pcap_t".
++ *
++ * If we fail to allocate memory for the copy, fill in the "errbuf"
++ * member of the "pcap_t" with an error message, and return -1;
++ * otherwise, return 0.
++ */
++int
++install_bpf_program(pcap_t *p, struct bpf_program *fp)
++{
++      size_t prog_size;
++
++      /*
++       * Validate the program.
++       */
++      if (!bpf_validate(fp->bf_insns, fp->bf_len)) {
++              snprintf(p->errbuf, sizeof(p->errbuf),
++                      "BPF program is not valid");
++              return (-1);
++      }
++
++      /*
++       * Free up any already installed program.
++       */
++      pcap_freecode(&p->fcode);
++
++      prog_size = sizeof(*fp->bf_insns) * fp->bf_len;
++      p->fcode.bf_len = fp->bf_len;
++      p->fcode.bf_insns = (struct bpf_insn *)malloc(prog_size);
++      if (p->fcode.bf_insns == NULL) {
++              snprintf(p->errbuf, sizeof(p->errbuf),
++                       "malloc: %s", pcap_strerror(errno));
++              return (-1);
++      }
++      memcpy(p->fcode.bf_insns, fp->bf_insns, prog_size);
++      return (0);
++}
++
+ int
+ pcap_strcasecmp(const char *s1, const char *s2)
+ {
+--- a/optimize.c
++++ b/optimize.c
+@@ -2292,45 +2292,6 @@ icode_to_fcode(root, lenp)
+       return fp;
+ }
+-/*
+- * Make a copy of a BPF program and put it in the "fcode" member of
+- * a "pcap_t".
+- *
+- * If we fail to allocate memory for the copy, fill in the "errbuf"
+- * member of the "pcap_t" with an error message, and return -1;
+- * otherwise, return 0.
+- */
+-int
+-install_bpf_program(pcap_t *p, struct bpf_program *fp)
+-{
+-      size_t prog_size;
+-
+-      /*
+-       * Validate the program.
+-       */
+-      if (!bpf_validate(fp->bf_insns, fp->bf_len)) {
+-              snprintf(p->errbuf, sizeof(p->errbuf),
+-                      "BPF program is not valid");
+-              return (-1);
+-      }
+-
+-      /*
+-       * Free up any already installed program.
+-       */
+-      pcap_freecode(&p->fcode);
+-
+-      prog_size = sizeof(*fp->bf_insns) * fp->bf_len;
+-      p->fcode.bf_len = fp->bf_len;
+-      p->fcode.bf_insns = (struct bpf_insn *)malloc(prog_size);
+-      if (p->fcode.bf_insns == NULL) {
+-              snprintf(p->errbuf, sizeof(p->errbuf),
+-                       "malloc: %s", pcap_strerror(errno));
+-              return (-1);
+-      }
+-      memcpy(p->fcode.bf_insns, fp->bf_insns, prog_size);
+-      return (0);
+-}
+-
+ #ifdef BDEBUG
+ static void
+ opt_dump(root)
diff --git a/package/libs/libpcap/patches/202-protocol_api.patch b/package/libs/libpcap/patches/202-protocol_api.patch
new file mode 100644 (file)
index 0000000..892aeb7
--- /dev/null
@@ -0,0 +1,141 @@
+--- a/pcap-int.h
++++ b/pcap-int.h
+@@ -209,6 +209,7 @@ struct pcap_opt {
+       char    *source;
+       int     promisc;
+       int     rfmon;
++      int proto;      /* protocol for packet socket (linux) */
+ };
+ /*
+--- a/pcap-linux.c
++++ b/pcap-linux.c
+@@ -335,7 +335,7 @@ static int iface_get_id(int fd, const ch
+ static int    iface_get_mtu(int fd, const char *device, char *ebuf);
+ static int    iface_get_arptype(int fd, const char *device, char *ebuf);
+ #ifdef HAVE_PF_PACKET_SOCKETS
+-static int    iface_bind(int fd, int ifindex, char *ebuf);
++static int    iface_bind(int fd, int ifindex, char *ebuf, unsigned short proto);
+ #ifdef IW_MODE_MONITOR
+ static int    has_wext(int sock_fd, const char *device, char *ebuf);
+ #endif /* IW_MODE_MONITOR */
+@@ -881,7 +881,7 @@ pcap_can_set_rfmon_linux(pcap_t *handle)
+        * (We assume that if we have Wireless Extensions support
+        * we also have PF_PACKET support.)
+        */
+-      sock_fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
++      sock_fd = socket(PF_PACKET, SOCK_RAW, p->opt.proto);
+       if (sock_fd == -1) {
+               (void)snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
+                   "socket: %s", pcap_strerror(errno));
+@@ -1128,6 +1128,9 @@ pcap_activate_linux(pcap_t *handle)
+       handle->read_op = pcap_read_linux;
+       handle->stats_op = pcap_stats_linux;
++      if (handle->opt.proto < 0)
++              handle->opt.proto = (int) htons(ETH_P_ALL);
++
+       /*
+        * The "any" device is a special device which causes us not
+        * to bind to a particular device and thus to look at all
+@@ -2684,8 +2687,8 @@ activate_new(pcap_t *handle)
+        * try a SOCK_RAW socket for the raw interface.
+        */
+       sock_fd = is_any_device ?
+-              socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_ALL)) :
+-              socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
++              socket(PF_PACKET, SOCK_DGRAM, handle->opt.proto) :
++              socket(PF_PACKET, SOCK_RAW, handle->opt.proto);
+       if (sock_fd == -1) {
+               snprintf(handle->errbuf, PCAP_ERRBUF_SIZE, "socket: %s",
+@@ -2783,7 +2786,7 @@ activate_new(pcap_t *handle)
+                               return PCAP_ERROR;
+                       }
+                       sock_fd = socket(PF_PACKET, SOCK_DGRAM,
+-                          htons(ETH_P_ALL));
++                          handle->opt.proto);
+                       if (sock_fd == -1) {
+                               snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
+                                   "socket: %s", pcap_strerror(errno));
+@@ -2835,7 +2838,7 @@ activate_new(pcap_t *handle)
+               }
+               if ((err = iface_bind(sock_fd, handle->md.ifindex,
+-                  handle->errbuf)) != 1) {
++                  handle->errbuf, handle->opt.proto)) != 1) {
+                       close(sock_fd);
+                       if (err < 0)
+                               return err;
+@@ -3640,7 +3643,7 @@ iface_get_id(int fd, const char *device,
+  *  or a PCAP_ERROR_ value on a hard error.
+  */
+ static int
+-iface_bind(int fd, int ifindex, char *ebuf)
++iface_bind(int fd, int ifindex, char *ebuf, unsigned short proto)
+ {
+       struct sockaddr_ll      sll;
+       int                     err;
+@@ -3649,7 +3652,7 @@ iface_bind(int fd, int ifindex, char *eb
+       memset(&sll, 0, sizeof(sll));
+       sll.sll_family          = AF_PACKET;
+       sll.sll_ifindex         = ifindex;
+-      sll.sll_protocol        = htons(ETH_P_ALL);
++      sll.sll_protocol        = proto;
+       if (bind(fd, (struct sockaddr *) &sll, sizeof(sll)) == -1) {
+               if (errno == ENETDOWN) {
+@@ -4359,7 +4362,7 @@ activate_old(pcap_t *handle)
+       /* Open the socket */
+-      handle->fd = socket(PF_INET, SOCK_PACKET, htons(ETH_P_ALL));
++      handle->fd = socket(PF_INET, SOCK_PACKET, handle->opt.proto);
+       if (handle->fd == -1) {
+               snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
+                        "socket: %s", pcap_strerror(errno));
+--- a/pcap.c
++++ b/pcap.c
+@@ -258,6 +258,8 @@ pcap_create_common(const char *source, c
+       pcap_set_snaplen(p, 65535);     /* max packet size */
+       p->opt.promisc = 0;
+       p->opt.buffer_size = 0;
++      p->opt.proto = -1;
++
+       return (p);
+ }
+@@ -317,6 +319,15 @@ pcap_set_buffer_size(pcap_t *p, int buff
+       return 0;
+ }
++int
++pcap_set_protocol(pcap_t *p, unsigned short proto)
++{
++      if (pcap_check_activated(p))
++              return PCAP_ERROR_ACTIVATED;
++      p->opt.proto = proto;
++      return 0;
++}
++
+ int
+ pcap_activate(pcap_t *p)
+ {
+--- a/pcap/pcap.h
++++ b/pcap/pcap.h
+@@ -68,6 +68,7 @@ extern "C" {
+ #define PCAP_VERSION_MINOR 4
+ #define PCAP_ERRBUF_SIZE 256
++#define HAS_PROTO_EXTENSION
+ /*
+  * Compatibility for systems that have a bpf.h that
+@@ -276,6 +277,7 @@ int        pcap_can_set_rfmon(pcap_t *);
+ int   pcap_set_rfmon(pcap_t *, int);
+ int   pcap_set_timeout(pcap_t *, int);
+ int   pcap_set_buffer_size(pcap_t *, int);
++int   pcap_set_protocol(pcap_t *, unsigned short);
+ int   pcap_activate(pcap_t *);
+ pcap_t        *pcap_open_live(const char *, int, int, int, char *);
diff --git a/package/libs/libpcap/patches/203-undef_iw_mode_monitor.patch b/package/libs/libpcap/patches/203-undef_iw_mode_monitor.patch
new file mode 100644 (file)
index 0000000..508c659
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/pcap-linux.c
++++ b/pcap-linux.c
+@@ -254,6 +254,8 @@ static const char rcsid[] _U_ =
+ typedef int           socklen_t;
+ #endif
++#undef IW_MODE_MONITOR
++
+ #ifndef MSG_TRUNC
+ /*
+  * This is being compiled on a system that lacks MSG_TRUNC; define it
diff --git a/package/libs/libreadline/Makefile b/package/libs/libreadline/Makefile
new file mode 100644 (file)
index 0000000..90219e5
--- /dev/null
@@ -0,0 +1,66 @@
+# 
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=readline
+PKG_VERSION:=5.2
+PKG_RELEASE:=2
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=@GNU/readline
+PKG_MD5SUM:=e39331f32ad14009b9ff49cc10c5e751
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/libreadline
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=Command lines edition library
+  URL:=http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html
+endef
+
+define Package/libreadline/description
+       The Readline library provides a set of functions for use by applications 
+       that allow users to edit command lines as they are typed in. Both Emacs 
+       and vi editing modes are available. The Readline library includes 
+       additional functions to maintain a list of previously-entered command 
+       lines, to recall and perhaps reedit those lines, and perform csh-like 
+       history expansion on previous commands.
+endef
+
+define Build/Configure
+       $(call Build/Configure/Default, \
+               --enable-shared \
+               --enable-static \
+               --without-curses \
+       )
+endef
+
+TARGET_CPPFLAGS:=-I. -I.. $(TARGET_CPPFLAGS)
+
+TARGET_CFLAGS += $(FPIC)
+
+define Build/Compile
+       $(MAKE) -C $(PKG_BUILD_DIR) \
+               DESTDIR="$(PKG_INSTALL_DIR)" \
+               all install
+endef
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/readline $(1)/usr/include/
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{history,readline}.{a,so,so.5,so.5.2} $(1)/usr/lib/
+endef
+
+define Package/libreadline/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{history,readline}.{so,so.5,so.5.2} $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,libreadline))
diff --git a/package/libs/libreadline/patches/100-fix_avr32_compile b/package/libs/libreadline/patches/100-fix_avr32_compile
new file mode 100644 (file)
index 0000000..4d55b80
--- /dev/null
@@ -0,0 +1,20 @@
+--- a/support/config.sub
++++ b/support/config.sub
+@@ -228,7 +228,7 @@ case $basic_machine in
+       | a29k \
+       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+-      | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
++      | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+       | clipper \
+       | d10v | d30v | dlx | dsp16xx \
+       | fr30 | frv \
+@@ -293,7 +293,7 @@ case $basic_machine in
+       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+       | amd64-* \
+       | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+-      | avr-* \
++      | avr-* | avr32-* \
+       | bs2000-* \
+       | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* \
+       | clipper-* | cydra-* \
diff --git a/package/libs/librpc/Makefile b/package/libs/librpc/Makefile
new file mode 100644 (file)
index 0000000..34cedbb
--- /dev/null
@@ -0,0 +1,28 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=librpc
+PKG_VERSION:=0.9.32-rc2
+PKG_RELEASE=$(PKG_SOURCE_VERSION)
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL:=git://nbd.name/uclibc-rpc.git
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
+PKG_SOURCE_VERSION:=0a2179bbc0844928f2a0ec01dba93d9b5d6d41a7
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
+CMAKE_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/cmake.mk
+
+define Package/librpc
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=uClibc RPC library
+endef
+
+define Package/librpc/install
+       $(INSTALL_DIR) $(1)/lib/
+       $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/librpc.so $(1)/lib/
+endef
+
+$(eval $(call BuildPackage,librpc))
diff --git a/package/libs/librpc/patches/100-compat_fix.patch b/package/libs/librpc/patches/100-compat_fix.patch
new file mode 100644 (file)
index 0000000..a0f03f6
--- /dev/null
@@ -0,0 +1,214 @@
+--- a/compat.h
++++ /dev/null
+@@ -1,32 +0,0 @@
+-#ifndef __UCLIBC_COMPAT_H
+-#define __UCLIBC_COMPAT_H
+-
+-#define _XOPEN_SOURCE
+-#define _GNU_SOURCE
+-
+-#include <features.h>
+-#include <errno.h>
+-
+-#undef __UCLIBC_HAS_THREADS__
+-#include <bits/uClibc_mutex.h>
+-#include <sys/poll.h>
+-
+-#if 0
+-#undef __UCLIBC_MUTEX_LOCK
+-#undef __UCLIBC_MUTEX_UNLOCK
+-#define __UCLIBC_MUTEX_LOCK(M) pthread_mutex_lock(&(M))
+-#define __UCLIBC_MUTEX_UNLOCK(M) pthread_mutex_unlock(&(M))
+-#endif
+-
+-#define smallint int
+-
+-#define _(...) __VA_ARGS__
+-#define internal_function
+-#define attribute_hidden
+-#define attribute_unused
+-#define attribute_noreturn
+-#define libc_hidden_def(...)
+-
+-#define __set_errno(_val) errno = _val
+-
+-#endif
+--- a/rcmd.c
++++ b/rcmd.c
+@@ -85,7 +85,6 @@ static char sccsid[] = "@(#)rcmd.c   8.3 (
+ #include <wchar.h>
+ #endif
+ #include <sys/uio.h>
+-#include <bits/uClibc_alloc.h>
+ /* some forward declarations */
+--- a/create_xid.c
++++ b/create_xid.c
+@@ -28,7 +28,6 @@
+ /* The RPC code is not threadsafe, but new code should be threadsafe. */
+-#include <bits/uClibc_mutex.h>
+ __UCLIBC_MUTEX_STATIC(mylock, PTHREAD_MUTEX_INITIALIZER);
+ static smallint is_initialized;
+--- a/getrpcent.c
++++ b/getrpcent.c
+@@ -257,7 +257,6 @@ static struct rpcent *interpret(register
+ #if defined(__UCLIBC_HAS_REENTRANT_RPC__)
+-#include <bits/uClibc_mutex.h>
+ __UCLIBC_MUTEX_STATIC(mylock, PTHREAD_MUTEX_INITIALIZER);
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1,7 +1,7 @@
+ cmake_minimum_required(VERSION 2.6)
+ PROJECT(rpc C)
+-ADD_DEFINITIONS(-Os -Wall --std=gnu99 -g3 -I. -include compat.h)
++ADD_DEFINITIONS(-Os -Wall --std=gnu99 -g3 -I. -include rpc/compat.h)
+ FILE(GLOB SOURCES *.c)
+--- a/rpc/types.h
++++ b/rpc/types.h
+@@ -33,6 +33,8 @@
+ #ifndef _RPC_TYPES_H
+ #define _RPC_TYPES_H 1
++#include "compat.h"
++
+ #ifdef _LIBC
+ /* Some adjustments to make the libc source from glibc
+  * compile more easily with uClibc... */
+--- a/clnt_perror.c
++++ b/clnt_perror.c
+@@ -246,7 +246,7 @@ clnt_sperror (CLIENT * rpch, const char 
+     case RPC_CANTSEND:
+     case RPC_CANTRECV:
+-      __glibc_strerror_r (e.re_errno, chrbuf, sizeof chrbuf);
++      strerror_r (e.re_errno, chrbuf, sizeof chrbuf);
+       len = sprintf (str, "; errno = %s", chrbuf);
+       str += len;
+       break;
+@@ -336,7 +336,7 @@ clnt_spcreateerror (const char *msg)
+       (void) strcpy(cp, " - ");
+       cp += strlen(cp);
+-      __glibc_strerror_r (ce->cf_error.re_errno, chrbuf, sizeof chrbuf);
++      strerror_r (ce->cf_error.re_errno, chrbuf, sizeof chrbuf);
+       (void) strcpy(cp, chrbuf);
+       cp += strlen(cp);
+       break;
+--- a/rpc_thread.c
++++ b/rpc_thread.c
+@@ -13,9 +13,6 @@
+ #ifdef __UCLIBC_HAS_THREADS__
+-#include <bits/libc-tsd.h>
+-#include <bits/libc-lock.h>
+-
+ /* Variable used in non-threaded applications or for the first thread.  */
+ static struct rpc_thread_variables __libc_tsd_RPC_VARS_mem;
+ __libc_tsd_define (, RPC_VARS)
+@@ -52,16 +49,17 @@ rpc_thread_multi (void)
+   __libc_tsd_set (RPC_VARS, &__libc_tsd_RPC_VARS_mem);
+ }
++__UCLIBC_MUTEX_STATIC(mylock, PTHREAD_MUTEX_INITIALIZER);
+ struct rpc_thread_variables attribute_hidden *
+ __rpc_thread_variables (void)
+ {
+-      __libc_once_define (static, once);
+       struct rpc_thread_variables *tvp;
++      __UCLIBC_MUTEX_LOCK(mylock);
+       tvp = __libc_tsd_get (RPC_VARS);
+       if (tvp == NULL) {
+-              __libc_once (once, rpc_thread_multi);
++              rpc_thread_multi();
+               tvp = __libc_tsd_get (RPC_VARS);
+               if (tvp == NULL) {
+                       tvp = calloc (1, sizeof *tvp);
+@@ -71,6 +69,7 @@ __rpc_thread_variables (void)
+                               tvp = __libc_tsd_get (RPC_VARS);
+               }
+       }
++      __UCLIBC_MUTEX_UNLOCK(mylock);
+       return tvp;
+ }
+--- /dev/null
++++ b/rpc/compat.h
+@@ -0,0 +1,53 @@
++#ifndef __UCLIBC_COMPAT_H
++#define __UCLIBC_COMPAT_H
++
++#define _XOPEN_SOURCE
++#define _GNU_SOURCE
++
++#include <features.h>
++#include <errno.h>
++
++#ifndef __UCLIBC_HAS_THREADS__
++#define __UCLIBC_HAS_THREADS__
++#endif
++
++#include <sys/poll.h>
++#include <pthread.h>
++
++#ifdef __UCLIBC__
++#include <bits/libc-lock.h>
++#else
++#undef __UCLIBC_MUTEX_STATIC
++#undef __UCLIBC_MUTEX_LOCK
++#undef __UCLIBC_MUTEX_UNLOCK
++#define __UCLIBC_MUTEX_STATIC(M,I) static pthread_mutex_t M = I
++#define __UCLIBC_MUTEX_LOCK(M) pthread_mutex_lock(&(M))
++#define __UCLIBC_MUTEX_UNLOCK(M) pthread_mutex_unlock(&(M))
++#endif
++
++#define smallint int
++
++#define _(...) __VA_ARGS__
++#define internal_function
++#define attribute_hidden
++#define attribute_unused
++#define attribute_noreturn
++#define libc_hidden_def(...)
++
++#ifndef libc_hidden_proto
++#define libc_hidden_proto(name, attrs...)
++#endif
++
++#define __set_errno(_val) errno = _val
++
++# define attribute_tls_model_ie __attribute__ ((tls_model ("initial-exec")))
++
++# define __libc_tsd_define(CLASS, KEY)  \
++  CLASS __thread void *__libc_tsd_##KEY attribute_tls_model_ie;
++
++# define __libc_tsd_address(KEY)    (&__libc_tsd_##KEY)
++# define __libc_tsd_get(KEY)        (__libc_tsd_##KEY)
++# define __libc_tsd_set(KEY, VALUE) (__libc_tsd_##KEY = (VALUE))
++
++
++#endif
+--- a/rpc/netdb.h
++++ b/rpc/netdb.h
+@@ -41,6 +41,8 @@
+ #define __need_size_t
+ #include <stddef.h>
++#include "types.h"
++
+ __BEGIN_DECLS
+ struct rpcent
diff --git a/package/libs/libtool/Makefile b/package/libs/libtool/Makefile
new file mode 100644 (file)
index 0000000..b33eda1
--- /dev/null
@@ -0,0 +1,49 @@
+# 
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=libtool
+PKG_VERSION:=2.4
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=@GNU/libtool
+PKG_MD5SUM:=b32b04148ecdd7344abc6fe8bd1bb021
+
+PKG_BUILD_PARALLEL:=0
+
+include $(INCLUDE_DIR)/package.mk
+
+CONFIGURE_PREFIX=$(STAGING_DIR)/host
+export GLOBAL_LIBDIR=$(STAGING_DIR)/usr/lib
+
+define Package/libltdl
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=A generic dynamic object loading library
+  URL:=http://www.gnu.org/software/libtool/
+endef
+
+define Build/InstallDev
+       $(MAKE) -C $(PKG_BUILD_DIR) \
+               bindir="$(2)/bin" \
+               datadir="$(2)/share" \
+               prefix="$(2)" \
+               exec_prefix="$(2)" \
+               install
+       $(INSTALL_DIR) $(1)/usr/lib $(1)/usr/include
+       mv $(2)/lib/* $(1)/usr/lib/
+       mv $(2)/include/* $(1)/usr/include/
+endef
+
+define Package/libltdl/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_BUILD_DIR)/libltdl/.libs/libltdl.so.* $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,libltdl))
diff --git a/package/libs/libubox/Makefile b/package/libs/libubox/Makefile
new file mode 100644 (file)
index 0000000..845f380
--- /dev/null
@@ -0,0 +1,64 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=libubox
+PKG_VERSION:=2012-07-08
+PKG_RELEASE=$(PKG_SOURCE_VERSION)
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL:=git://nbd.name/luci2/libubox.git
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
+PKG_SOURCE_VERSION:=cca2ed6c8cdb3555fea43ff63ba1c9905dd7a164
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
+PKG_MIRROR_MD5SUM:=dfd44c10b4aeccbdab9ae22774fb02e3
+CMAKE_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/cmake.mk
+
+define Package/libubox
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=Basic utility library
+  DEPENDS:=
+endef
+
+define Package/libblobmsg-json
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=blobmsg <-> json conversion library
+  DEPENDS:=+libjson +libubox
+endef
+
+define Package/jshn
+  SECTION:=utils
+  CATEGORY:=Utilities
+  DEPENDS:=+libjson
+  TITLE:=JSON SHell Notation
+endef
+
+define Package/jshn/description
+  Library for parsing and generating JSON from shell scripts
+endef
+
+TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include
+
+define Package/libubox/install
+       $(INSTALL_DIR) $(1)/lib/
+       $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libubox.so $(1)/lib/
+endef
+
+define Package/libblobmsg-json/install
+       $(INSTALL_DIR) $(1)/lib/
+       $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libblobmsg_json.so $(1)/lib/
+endef
+
+define Package/jshn/install
+       $(INSTALL_DIR) $(1)/usr/bin $(1)/usr/share/libubox
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/jshn $(1)/usr/bin
+       $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/libubox/jshn.sh $(1)/usr/share/libubox
+endef
+
+$(eval $(call BuildPackage,libubox))
+$(eval $(call BuildPackage,libblobmsg-json))
+$(eval $(call BuildPackage,jshn))
+
diff --git a/package/libs/ncurses/Makefile b/package/libs/ncurses/Makefile
new file mode 100644 (file)
index 0000000..9c682ac
--- /dev/null
@@ -0,0 +1,151 @@
+#
+# Copyright (C) 2006-2011 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=ncurses
+PKG_VERSION:=5.7
+PKG_RELEASE:=5
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=@GNU/ncurses
+PKG_MD5SUM:=cce05daf61a64501ef6cd8da1f727ec6
+
+PKG_INSTALL:=1
+PKG_BUILD_PARALLEL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/libncurses
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=Terminal handling library
+  URL:=http://www.gnu.org/software/ncurses/
+  DEPENDS:= +terminfo
+  VARIANT:=libncurses
+endef
+
+define Package/terminfo
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=Terminal Info Database (ncurses)
+  URL:=http://www.gnu.org/software/ncurses/
+  VARIANT:=libncurses
+endef
+
+define Package/libncursesw
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=Terminal handling library (Unicode)
+  URL:=http://www.gnu.org/software/ncurses/
+  VARIANT:=libncursesw
+endef
+
+TARGET_CFLAGS += $(FPIC)
+
+CONFIGURE_ARGS += \
+       --enable-echo \
+       --enable-const \
+       --enable-overwrite \
+       --disable-rpath \
+       --without-ada \
+       --without-debug \
+       --without-profile \
+       --without-progs \
+       --disable-big-core \
+       --disable-home-terminfo \
+       --with-normal \
+       --with-shared \
+       --with-terminfo-dirs=/usr/share/terminfo \
+       --with-default-terminfo-dir=/usr/share/terminfo
+
+ifeq ($(HOST_OS),FreeBSD)
+       CONFIGURE_ARGS +=
+               --with-terminfo=/usr/share/terminfo.db 
+endif
+
+ifeq ($(BUILD_VARIANT),libncursesw)
+       CONFIGURE_ARGS += \
+               --enable-widec \
+               --with-build-cppflags=-D_GNU_SOURCE
+endif
+
+MAKE_FLAGS += \
+       BUILD_CC="$(HOSTCC)" \
+       HOSTCC="$(HOSTCC)" \
+       HOSTCCFLAGS="" \
+       libs
+
+define Build/Install/Default
+       $(MAKE_VARS) \
+       $(MAKE) -C $(PKG_BUILD_DIR)/$(MAKE_PATH) \
+               $(MAKE_INSTALL_FLAGS) \
+               $(1) install.libs install.data;
+endef
+
+define Package/terminfo/install
+       echo ""
+ifneq ($(HOST_OS),FreeBSD)
+       $(INSTALL_DIR) $(1)/usr/share/terminfo
+       (cd $(PKG_INSTALL_DIR)/usr/share/terminfo; \
+               for dir in ??; do \
+                       [ -d "$$$$dir" ] || continue; \
+                       mv $$$$dir $$$$(echo -ne "\x$$$$dir"); \
+               done \
+       )
+       for file in a/ansi d/dumb l/linux r/rxvt r/rxvt-unicode s/screen v/vt100 v/vt102 x/xterm x/xterm-color; do \
+               $(INSTALL_DIR) $(1)/usr/share/terminfo/`dirname $$$$file`; \
+               $(CP) $(PKG_INSTALL_DIR)/usr/share/terminfo/$$$$file \
+                       $(1)/usr/share/terminfo/$$$$file; \
+       done
+endif
+endef
+
+define Package/libncurses/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{curses,ncurses,panel,menu,form}.so* $(1)/usr/lib/
+endef
+
+define Package/libncursesw/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{ncurses,panel,menu,form}w.so* $(1)/usr/lib/
+endef
+
+ifeq ($(BUILD_VARIANT),libncursesw)
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include/ncursesw/
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/*.h $(1)/usr/include/ncursesw/
+
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{ncurses,panel,menu,form}w.{a,so*} $(1)/usr/lib/
+
+       $(INSTALL_DIR) $(1)/usr/bin $(2)/bin
+       $(CP) $(PKG_INSTALL_DIR)/usr/bin/ncursesw5-config $(2)/bin/
+       $(SED) 's,^\(prefix\|exec_prefix\)=.*,\1=$(STAGING_DIR)/usr,g' -e 's/$$$$INCS //g' \
+               $(2)/bin/ncursesw5-config
+       ln -sf $(STAGING_DIR)/host/bin/ncursesw5-config $(1)/usr/bin/ncursesw5-config
+endef
+else
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/*.h $(1)/usr/include/
+
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{curses,ncurses,panel,menu,form}.{a,so*} $(1)/usr/lib/
+
+       $(INSTALL_DIR) $(1)/usr/bin $(2)/bin
+       $(CP) $(PKG_INSTALL_DIR)/usr/bin/ncurses5-config $(2)/bin/
+       $(SED) 's,^\(prefix\|exec_prefix\)=.*,\1=$(STAGING_DIR)/usr,g' \
+               $(2)/bin/ncurses5-config
+       ln -sf $(STAGING_DIR)/host/bin/ncurses5-config $(1)/usr/bin/ncurses5-config
+endef
+endif
+
+$(eval $(call BuildPackage,terminfo))
+$(eval $(call BuildPackage,libncurses))
+$(eval $(call BuildPackage,libncursesw))
diff --git a/package/libs/ncurses/patches/100-ncurses-5.6-20080112-urxvt.patch b/package/libs/ncurses/patches/100-ncurses-5.6-20080112-urxvt.patch
new file mode 100644 (file)
index 0000000..39e60ba
--- /dev/null
@@ -0,0 +1,175 @@
+--- a/misc/terminfo.src
++++ b/misc/terminfo.src
+@@ -3965,6 +3965,172 @@ rxvt-cygwin-native|rxvt terminal emulato
+ rxvt-16color|xterm with 16 colors like aixterm,
+       ncv#32, use=ibm+16color, use=rxvt,
++# rxvt-unicode
++# http://cvs.schmorp.de/rxvt-unicode/doc/etc/rxvt-unicode.terminfo?revision=1.20
++# From: Thomas Dickey <dickey@clark.net> 04 Oct 1997
++# Updated: Ã–zgür Kesim <kesim@math.fu-berlin.de> 02 Nov 1997
++# Updated: Marc Lehmann <pcg@goof.com>, 17 Feb 2005
++rxvt-unicode|rxvt-unicode terminal (X Window System),
++      am,
++      bce,
++      eo,
++      km,
++      msgr,
++      xenl,
++      hs,
++      cols#80,
++      it#8,
++      lines#24,
++      acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~-A.B+C\,D0EhFiG,
++      bel=^G,
++      blink=\E[5m,
++      bold=\E[1m,
++      civis=\E[?25l,
++      clear=\E[H\E[2J,
++      cnorm=\E[?25h,
++      cr=^M,
++      csr=\E[%i%p1%d;%p2%dr,
++      cub=\E[%p1%dD,
++      cub1=^H,
++      cud=\E[%p1%dB,
++      cud1=^J,
++      cuf=\E[%p1%dC,
++      cuf1=\E[C,
++      cup=\E[%i%p1%d;%p2%dH,
++      cuu=\E[%p1%dA,
++      cuu1=\E[A,
++      cvvis=\E[?25h,
++      dch=\E[%p1%dP,
++      dch1=\E[P,
++      dl=\E[%p1%dM,
++      dl1=\E[M,
++      ed=\E[J,
++      el=\E[K,
++      el1=\E[1K,
++      flash=\E[?5h$<20/>\E[?5l,
++      home=\E[H,
++      hpa=\E[%i%p1%dG,
++      ht=^I,
++      hts=\EH,
++      ich=\E[%p1%d@,
++      ich1=\E[@,
++      il=\E[%p1%dL,
++      il1=\E[L,
++      ind=^J,
++      is1=\E[?47l\E=\E[?1l,
++      is2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l,
++      kDC=\E[3$,
++      kIC=\E2$,
++      kEND=\E[8$,
++      kHOM=\E[7$,
++      kLFT=\E[d,
++      kNXT=\E[6$,
++      kPRV=\E[5$,
++      kRIT=\E[c,
++      kbs=\177,
++      ka1=\EOw,
++      ka3=\EOy,
++      kb2=\EOu,
++      kc1=\EOq,
++      kc3=\EOs,
++      kcbt=\E[Z,
++      kcub1=\E[D,
++      kcud1=\E[B,
++      kcuf1=\E[C,
++      kcuu1=\E[A,
++      kdch1=\E[3~,
++      kel=\E[8\^,
++      kend=\E[8~,
++      kent=\EOM,
++      kf1=\E[11~,
++      kf10=\E[21~,
++      kf11=\E[23~,
++      kf12=\E[24~,
++      kf13=\E[25~,
++      kf14=\E[26~,
++      kf15=\E[28~,
++      kf16=\E[29~,
++      kf17=\E[31~,
++      kf18=\E[32~,
++      kf19=\E[33~,
++      kf2=\E[12~,
++      kf20=\E[34~,
++      kf3=\E[13~,
++      kf4=\E[14~,
++      kf5=\E[15~,
++      kf6=\E[17~,
++      kf7=\E[18~,
++      kf8=\E[19~,
++      kf9=\E[20~,
++      kfnd=\E[1~,
++      khome=\E[7~,
++      kich1=\E[2~,
++      kmous=\E[M,
++      knp=\E[6~,
++      kpp=\E[5~,
++      kslt=\E[4~,
++      rc=\E8,
++      rev=\E[7m,
++      ri=\EM,
++      rmso=\E[27m,
++      rmul=\E[24m,
++      rs1=\Ec,
++      rs2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l\E>,
++      sgr0=\E[m\017,
++      enacs=,
++      smacs=\E(0,
++      rmacs=\E(B,
++      smso=\E[7m,
++      smul=\E[4m,
++      tbc=\E[3g,
++      vpa=\E[%i%p1%dd,
++      colors#88,
++      pairs#256,
++      btns#5,
++      lm#0,
++      ccc,
++      npc,
++      mc5i,
++      ncv#0,
++      mir,
++      xon,
++      bw,
++      ech=\E[%p1%dX,
++      mc0=\E[i,
++      mc4=\E[4i,
++      mc5=\E[5i,
++      sitm=\E[3m,
++      ritm=\E[23m,
++      smam=\E[?7h,
++      rmam=\E[?7l,
++      smir=\E[4h,
++      rmir=\E[4l,
++      smcup=\E[?1049h,
++      rmcup=\E[r\E[?1049l,
++      smkx=\E=,
++      rmkx=\E>,
++      indn=\E[%p1%dS,
++      rin=\E[%p1%dT,
++      sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m%?%p9%t\E(0%e\E(B%;,
++      op=\E[39;49m,
++      setaf=\E[38;5;%p1%dm,
++      setab=\E[48;5;%p1%dm,
++      setf=%?%p1%{7}%>%t\E[38;5;%p1%dm%e\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m%;,
++      setb=%?%p1%{7}%>%t\E[48;5;%p1%dm%e\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m%;,
++      initc=\E]4;%p1%d;rgb\:%p2%{65535}%*%{1000}%/%4.4X/%p3%{65535}%*%{1000}%/%4.4X/%p4%{65535}%*%{1000}%/%4.4X\E\\,
++      sc=\E7,
++      s0ds=\E(B,
++      s1ds=\E(0,
++      s2ds=\E*B,
++      s3ds=\E+B,
++      u6=\E[%i%d;%dR,
++      u7=\E[6n,
++      u8=\E[?1;2c,
++      u9=\E[c,
++      tsl=\E]2;,
++      fsl=\007,
++      dsl=\E]2;\007,
++
+ # mrxvt 0.5.3
+ #
+ # mrxvt is based on rxvt 2.7.11, but has by default XTERM_FKEYS defined, which
diff --git a/package/libs/ncurses/patches/101-ncurses-5.6-20080628-kbs.patch b/package/libs/ncurses/patches/101-ncurses-5.6-20080628-kbs.patch
new file mode 100644 (file)
index 0000000..3b3abd7
--- /dev/null
@@ -0,0 +1,52 @@
+--- a/misc/terminfo.src
++++ b/misc/terminfo.src
+@@ -3054,6 +3054,7 @@ xterm-xfree86|xterm terminal emulator (X
+ # This version reflects the current xterm features.
+ xterm-new|modern xterm terminal emulator,
+       npc,
++      kbs=\177,
+       indn=\E[%p1%dS, kDC=\E[3;2~, kEND=\E[1;2F, kHOM=\E[1;2H,
+       kIC=\E[2;2~, kNXT=\E[6;2~, kPRV=\E[5;2~, kb2=\EOE,
+       kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
+@@ -3818,6 +3819,7 @@ mlterm+pcfkeys|fragment for PC-style fke
+ rxvt-basic|rxvt terminal base (X Window System),
+       OTbs, am, bce, eo, mir, msgr, xenl, xon,
+       cols#80, it#8, lines#24,
++      kbs=\177,
+       acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
+       bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l,
+       clear=\E[H\E[2J, cnorm=\E[?25h, cr=^M,
+@@ -3828,7 +3830,7 @@ rxvt-basic|rxvt terminal base (X Window 
+       enacs=\E(B\E)0, flash=\E[?5h\E[?5l, home=\E[H, ht=^I,
+       hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L,
+       ind=^J, is1=\E[?47l\E=\E[?1l,
+-      is2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l, kbs=^H,
++      is2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l,
+       kcbt=\E[Z, kmous=\E[M, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O,
+       rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmkx=\E>, rmso=\E[27m,
+       rmul=\E[24m,
+@@ -4541,6 +4543,7 @@ eterm|gnu emacs term.el terminal emulati
+ screen|VT 100/ANSI X3.64 virtual terminal,
+       OTbs, OTpt, am, km, mir, msgr, xenl, G0,
+       colors#8, cols#80, it#8, lines#24, pairs#64,
++      kbs=\177,
+       acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
+       bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
+       clear=\E[H\E[J, cnorm=\E[34h\E[?25h, cr=^M,
+@@ -4550,7 +4553,7 @@ screen|VT 100/ANSI X3.64 virtual termina
+       cvvis=\E[34l, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM,
+       dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E(B\E)0,
+       flash=\Eg, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@,
+-      il=\E[%p1%dL, il1=\E[L, ind=^J, is2=\E)0, kbs=^H, kcbt=\E[Z,
++      il=\E[%p1%dL, il1=\E[L, ind=^J, is2=\E)0, kcbt=\E[Z,
+       kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
+       kdch1=\E[3~, kend=\E[4~, kf1=\EOP, kf10=\E[21~,
+       kf11=\E[23~, kf12=\E[24~, kf2=\EOQ, kf3=\EOR, kf4=\EOS,
+@@ -4655,6 +4658,7 @@ screen.xterm-r6|screen customized for X1
+ # on Solaris because Sun's curses implementation gets confused.
+ screen.teraterm|disable ncv in teraterm,
+       ncv#127,
++      kbs=^H,
+       acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260i\316j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376,
+       use=screen+fkeys, use=screen,
+ # Other terminals
diff --git a/package/libs/ncurses/patches/500-cross.patch b/package/libs/ncurses/patches/500-cross.patch
new file mode 100644 (file)
index 0000000..ace6252
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/aclocal.m4
++++ b/aclocal.m4
+@@ -4298,7 +4298,7 @@ CF_EOF
+                       EXTRA_LDFLAGS="-Wl,-rpath,\${libdir} $EXTRA_LDFLAGS"
+               fi
+               CF_SHARED_SONAME
+-              MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $[@]'
++              MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-soname,'$cf_shared_soname',-stats,$(LDFLAGS) -lc -o $[@]'
+               ;;
+       openbsd[[2-9]].*)
+               if test "$DFT_LWR_MODEL" = "shared" ; then
diff --git a/package/libs/ncurses/patches/900-terminfo.patch b/package/libs/ncurses/patches/900-terminfo.patch
new file mode 100644 (file)
index 0000000..7aab3db
--- /dev/null
@@ -0,0 +1,20 @@
+--- a/misc/terminfo.src
++++ b/misc/terminfo.src
+@@ -3707,12 +3707,11 @@ konsole-xf3x|KDE console window with key
+ # The value for kbs reflects local customization rather than the settings used
+ # for XFree86 xterm.
+ konsole-xf4x|KDE console window with keyboard for XFree86 4.x xterm,
+-      kend=\EOF, khome=\EOH, use=konsole+pcfkeys,
+-      use=konsole-vt100,
+-# Konsole does not implement shifted cursor-keys.
+-konsole+pcfkeys|konsole subset of xterm+pcfkeys,
+-      kLFT@, kRIT@, kcbt=\E[Z, kind@, kri@, kDN@, kUP@, use=xterm+pcc2,
+-      use=xterm+pcf0,
++      kend=\EOF, kf1=\EOP, kf13=\EO2P, kf14=\EO2Q, kf15=\EO2R,
++      kf16=\EO2S, kf17=\E[15;2~, kf18=\E[17;2~, kf19=\E[18;2~,
++      kf2=\EOQ, kf20=\E[19;2~, kf21=\E[20;2~, kf22=\E[21;2~,
++      kf23=\E[23;2~, kf24=\E[24;2~, kf3=\EOR, kf4=\EOS,
++      khome=\EOH, use=konsole-vt100,
+ # KDE's "vt100" keyboard has no relationship to any terminal that DEC made, but
+ # it is still useful for deriving the other entries.
+ konsole-vt100|KDE console window with vt100 (sic) keyboard,
diff --git a/package/libs/ocf-crypto-headers/Makefile b/package/libs/ocf-crypto-headers/Makefile
new file mode 100644 (file)
index 0000000..fee2a37
--- /dev/null
@@ -0,0 +1,36 @@
+#
+# Copyright (C) 2008-2010 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=ocf-crypto-headers
+PKG_VERSION:=20110720
+PKG_RELEASE:=1
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/ocf-crypto-headers
+  SECTION:=utils
+  CATEGORY:=Utilities
+  TITLE:=OCF-Linux cryptodev header
+  PKGARCH:=all
+  URL:=http://ocf-linux.sourceforge.net/
+endef
+
+define Build/Configure
+endef
+
+define Build/Compile
+endef
+
+define Build/InstallDev
+       mkdir -p $(1)/usr/include/crypto
+       $(CP) ./src/cryptodev.h $(1)/usr/include/crypto
+endef
+
+$(eval $(call BuildPackage,ocf-crypto-headers))
diff --git a/package/libs/ocf-crypto-headers/src/cryptodev.h b/package/libs/ocf-crypto-headers/src/cryptodev.h
new file mode 100644 (file)
index 0000000..cca0ec8
--- /dev/null
@@ -0,0 +1,480 @@
+/*     $FreeBSD: src/sys/opencrypto/cryptodev.h,v 1.25 2007/05/09 19:37:02 gnn Exp $   */
+/*     $OpenBSD: cryptodev.h,v 1.31 2002/06/11 11:14:29 beck Exp $     */
+
+/*-
+ * Linux port done by David McCullough <david_mccullough@mcafee.com>
+ * Copyright (C) 2006-2010 David McCullough
+ * Copyright (C) 2004-2005 Intel Corporation.
+ * The license and original author are listed below.
+ *
+ * The author of this code is Angelos D. Keromytis (angelos@cis.upenn.edu)
+ * Copyright (c) 2002-2006 Sam Leffler, Errno Consulting
+ *
+ * This code was written by Angelos D. Keromytis in Athens, Greece, in
+ * February 2000. Network Security Technologies Inc. (NSTI) kindly
+ * supported the development of this code.
+ *
+ * Copyright (c) 2000 Angelos D. Keromytis
+ *
+ * Permission to use, copy, and modify this software with or without fee
+ * is hereby granted, provided that this entire notice is included in
+ * all source code copies of any software which is or includes a copy or
+ * modification of this software.
+ *
+ * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTY. IN PARTICULAR, NONE OF THE AUTHORS MAKES ANY
+ * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE
+ * MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR
+ * PURPOSE.
+ *
+ * Copyright (c) 2001 Theo de Raadt
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Effort sponsored in part by the Defense Advanced Research Projects
+ * Agency (DARPA) and Air Force Research Laboratory, Air Force
+ * Materiel Command, USAF, under agreement number F30602-01-2-0537.
+ *
+ */
+
+#ifndef _CRYPTO_CRYPTO_H_
+#define _CRYPTO_CRYPTO_H_
+
+/* Some initial values */
+#define CRYPTO_DRIVERS_INITIAL 4
+#define CRYPTO_SW_SESSIONS     32
+
+/* Hash values */
+#define NULL_HASH_LEN          0
+#define MD5_HASH_LEN           16
+#define SHA1_HASH_LEN          20
+#define RIPEMD160_HASH_LEN     20
+#define SHA2_256_HASH_LEN      32
+#define SHA2_384_HASH_LEN      48
+#define SHA2_512_HASH_LEN      64
+#define MD5_KPDK_HASH_LEN      16
+#define SHA1_KPDK_HASH_LEN     20
+/* Maximum hash algorithm result length */
+#define HASH_MAX_LEN           SHA2_512_HASH_LEN /* Keep this updated */
+
+/* HMAC values */
+#define NULL_HMAC_BLOCK_LEN                    1
+#define MD5_HMAC_BLOCK_LEN                     64
+#define SHA1_HMAC_BLOCK_LEN                    64
+#define RIPEMD160_HMAC_BLOCK_LEN       64
+#define SHA2_256_HMAC_BLOCK_LEN                64
+#define SHA2_384_HMAC_BLOCK_LEN                128
+#define SHA2_512_HMAC_BLOCK_LEN                128
+/* Maximum HMAC block length */
+#define HMAC_MAX_BLOCK_LEN             SHA2_512_HMAC_BLOCK_LEN /* Keep this updated */
+#define HMAC_IPAD_VAL                  0x36
+#define HMAC_OPAD_VAL                  0x5C
+
+/* Encryption algorithm block sizes */
+#define NULL_BLOCK_LEN                 1
+#define DES_BLOCK_LEN                  8
+#define DES3_BLOCK_LEN                 8
+#define BLOWFISH_BLOCK_LEN             8
+#define SKIPJACK_BLOCK_LEN             8
+#define CAST128_BLOCK_LEN              8
+#define RIJNDAEL128_BLOCK_LEN  16
+#define AES_BLOCK_LEN                  RIJNDAEL128_BLOCK_LEN
+#define CAMELLIA_BLOCK_LEN             16
+#define ARC4_BLOCK_LEN                 1
+#define EALG_MAX_BLOCK_LEN             AES_BLOCK_LEN /* Keep this updated */
+
+/* Encryption algorithm min and max key sizes */
+#define NULL_MIN_KEY_LEN               0
+#define NULL_MAX_KEY_LEN               0
+#define DES_MIN_KEY_LEN                        8
+#define DES_MAX_KEY_LEN                        8
+#define DES3_MIN_KEY_LEN               24
+#define DES3_MAX_KEY_LEN               24
+#define BLOWFISH_MIN_KEY_LEN   4
+#define BLOWFISH_MAX_KEY_LEN   56
+#define SKIPJACK_MIN_KEY_LEN   10
+#define SKIPJACK_MAX_KEY_LEN   10
+#define CAST128_MIN_KEY_LEN            5
+#define CAST128_MAX_KEY_LEN            16
+#define RIJNDAEL128_MIN_KEY_LEN        16
+#define RIJNDAEL128_MAX_KEY_LEN        32
+#define AES_MIN_KEY_LEN                        RIJNDAEL128_MIN_KEY_LEN
+#define AES_MAX_KEY_LEN                        RIJNDAEL128_MAX_KEY_LEN
+#define CAMELLIA_MIN_KEY_LEN   16
+#define CAMELLIA_MAX_KEY_LEN   32
+#define ARC4_MIN_KEY_LEN               1
+#define ARC4_MAX_KEY_LEN               256
+
+/* Max size of data that can be processed */
+#define CRYPTO_MAX_DATA_LEN            64*1024 - 1
+
+#define CRYPTO_ALGORITHM_MIN   1
+#define CRYPTO_DES_CBC                 1
+#define CRYPTO_3DES_CBC                        2
+#define CRYPTO_BLF_CBC                 3
+#define CRYPTO_CAST_CBC                        4
+#define CRYPTO_SKIPJACK_CBC            5
+#define CRYPTO_MD5_HMAC                        6
+#define CRYPTO_SHA1_HMAC               7
+#define CRYPTO_RIPEMD160_HMAC  8
+#define CRYPTO_MD5_KPDK                        9
+#define CRYPTO_SHA1_KPDK               10
+#define CRYPTO_RIJNDAEL128_CBC 11 /* 128 bit blocksize */
+#define CRYPTO_AES_CBC                 11 /* 128 bit blocksize -- the same as above */
+#define CRYPTO_ARC4                            12
+#define CRYPTO_MD5                             13
+#define CRYPTO_SHA1                            14
+#define CRYPTO_NULL_HMAC               15
+#define CRYPTO_NULL_CBC                        16
+#define CRYPTO_DEFLATE_COMP            17 /* Deflate compression algorithm */
+#define CRYPTO_SHA2_256_HMAC   18
+#define CRYPTO_SHA2_384_HMAC   19
+#define CRYPTO_SHA2_512_HMAC   20
+#define CRYPTO_CAMELLIA_CBC            21
+#define CRYPTO_SHA2_256                        22
+#define CRYPTO_SHA2_384                        23
+#define CRYPTO_SHA2_512                        24
+#define CRYPTO_RIPEMD160               25
+#define        CRYPTO_LZS_COMP                 26
+#define CRYPTO_ALGORITHM_MAX   26 /* Keep updated - see above */
+
+/* Algorithm flags */
+#define CRYPTO_ALG_FLAG_SUPPORTED      0x01 /* Algorithm is supported */
+#define CRYPTO_ALG_FLAG_RNG_ENABLE     0x02 /* Has HW RNG for DH/DSA */
+#define CRYPTO_ALG_FLAG_DSA_SHA                0x04 /* Can do SHA on msg */
+
+/*
+ * Crypto driver/device flags.  They can set in the crid
+ * parameter when creating a session or submitting a key
+ * op to affect the device/driver assigned.  If neither
+ * of these are specified then the crid is assumed to hold
+ * the driver id of an existing (and suitable) device that
+ * must be used to satisfy the request.
+ */
+#define CRYPTO_FLAG_HARDWARE   0x01000000      /* hardware accelerated */
+#define CRYPTO_FLAG_SOFTWARE   0x02000000      /* software implementation */
+
+/* NB: deprecated */
+struct session_op {
+       u_int32_t       cipher;         /* ie. CRYPTO_DES_CBC */
+       u_int32_t       mac;            /* ie. CRYPTO_MD5_HMAC */
+
+       u_int32_t       keylen;         /* cipher key */
+       caddr_t         key;
+       int             mackeylen;      /* mac key */
+       caddr_t         mackey;
+
+       u_int32_t       ses;            /* returns: session # */ 
+};
+
+struct session2_op {
+       u_int32_t       cipher;         /* ie. CRYPTO_DES_CBC */
+       u_int32_t       mac;            /* ie. CRYPTO_MD5_HMAC */
+
+       u_int32_t       keylen;         /* cipher key */
+       caddr_t         key;
+       int             mackeylen;      /* mac key */
+       caddr_t         mackey;
+
+       u_int32_t       ses;            /* returns: session # */ 
+       int             crid;           /* driver id + flags (rw) */
+       int             pad[4];         /* for future expansion */
+};
+
+struct crypt_op {
+       u_int32_t       ses;
+       u_int16_t       op;             /* i.e. COP_ENCRYPT */
+#define COP_NONE       0
+#define COP_ENCRYPT    1
+#define COP_DECRYPT    2
+       u_int16_t       flags;
+#define        COP_F_BATCH     0x0008          /* Batch op if possible */
+       u_int           len;
+       caddr_t         src, dst;       /* become iov[] inside kernel */
+       caddr_t         mac;            /* must be big enough for chosen MAC */
+       caddr_t         iv;
+};
+
+/*
+ * Parameters for looking up a crypto driver/device by
+ * device name or by id.  The latter are returned for
+ * created sessions (crid) and completed key operations.
+ */
+struct crypt_find_op {
+       int             crid;           /* driver id + flags */
+       char            name[32];       /* device/driver name */
+};
+
+/* bignum parameter, in packed bytes, ... */
+struct crparam {
+       caddr_t         crp_p;
+       u_int           crp_nbits;
+};
+
+#define CRK_MAXPARAM   8
+
+struct crypt_kop {
+       u_int           crk_op;         /* ie. CRK_MOD_EXP or other */
+       u_int           crk_status;     /* return status */
+       u_short         crk_iparams;    /* # of input parameters */
+       u_short         crk_oparams;    /* # of output parameters */
+       u_int           crk_crid;       /* NB: only used by CIOCKEY2 (rw) */
+       struct crparam  crk_param[CRK_MAXPARAM];
+};
+#define CRK_ALGORITM_MIN       0
+#define CRK_MOD_EXP            0
+#define CRK_MOD_EXP_CRT                1
+#define CRK_DSA_SIGN           2
+#define CRK_DSA_VERIFY         3
+#define CRK_DH_COMPUTE_KEY     4
+#define CRK_ALGORITHM_MAX      4 /* Keep updated - see below */
+
+#define CRF_MOD_EXP            (1 << CRK_MOD_EXP)
+#define CRF_MOD_EXP_CRT                (1 << CRK_MOD_EXP_CRT)
+#define CRF_DSA_SIGN           (1 << CRK_DSA_SIGN)
+#define CRF_DSA_VERIFY         (1 << CRK_DSA_VERIFY)
+#define CRF_DH_COMPUTE_KEY     (1 << CRK_DH_COMPUTE_KEY)
+
+/*
+ * done against open of /dev/crypto, to get a cloned descriptor.
+ * Please use F_SETFD against the cloned descriptor.
+ */
+#define CRIOGET                _IOWR('c', 100, u_int32_t)
+#define CRIOASYMFEAT   CIOCASYMFEAT
+#define CRIOFINDDEV    CIOCFINDDEV
+
+/* the following are done against the cloned descriptor */
+#define CIOCGSESSION   _IOWR('c', 101, struct session_op)
+#define CIOCFSESSION   _IOW('c', 102, u_int32_t)
+#define CIOCCRYPT      _IOWR('c', 103, struct crypt_op)
+#define CIOCKEY                _IOWR('c', 104, struct crypt_kop)
+#define CIOCASYMFEAT   _IOR('c', 105, u_int32_t)
+#define CIOCGSESSION2  _IOWR('c', 106, struct session2_op)
+#define CIOCKEY2       _IOWR('c', 107, struct crypt_kop)
+#define CIOCFINDDEV    _IOWR('c', 108, struct crypt_find_op)
+
+struct cryptotstat {
+       struct timespec acc;            /* total accumulated time */
+       struct timespec min;            /* min time */
+       struct timespec max;            /* max time */
+       u_int32_t       count;          /* number of observations */
+};
+
+struct cryptostats {
+       u_int32_t       cs_ops;         /* symmetric crypto ops submitted */
+       u_int32_t       cs_errs;        /* symmetric crypto ops that failed */
+       u_int32_t       cs_kops;        /* asymetric/key ops submitted */
+       u_int32_t       cs_kerrs;       /* asymetric/key ops that failed */
+       u_int32_t       cs_intrs;       /* crypto swi thread activations */
+       u_int32_t       cs_rets;        /* crypto return thread activations */
+       u_int32_t       cs_blocks;      /* symmetric op driver block */
+       u_int32_t       cs_kblocks;     /* symmetric op driver block */
+       /*
+        * When CRYPTO_TIMING is defined at compile time and the
+        * sysctl debug.crypto is set to 1, the crypto system will
+        * accumulate statistics about how long it takes to process
+        * crypto requests at various points during processing.
+        */
+       struct cryptotstat cs_invoke;   /* crypto_dipsatch -> crypto_invoke */
+       struct cryptotstat cs_done;     /* crypto_invoke -> crypto_done */
+       struct cryptotstat cs_cb;       /* crypto_done -> callback */
+       struct cryptotstat cs_finis;    /* callback -> callback return */
+
+       u_int32_t       cs_drops;               /* crypto ops dropped due to congestion */
+};
+
+#ifdef __KERNEL__
+
+/* Standard initialization structure beginning */
+struct cryptoini {
+       int             cri_alg;        /* Algorithm to use */
+       int             cri_klen;       /* Key length, in bits */
+       int             cri_mlen;       /* Number of bytes we want from the
+                                          entire hash. 0 means all. */
+       caddr_t         cri_key;        /* key to use */
+       u_int8_t        cri_iv[EALG_MAX_BLOCK_LEN];     /* IV to use */
+       struct cryptoini *cri_next;
+};
+
+/* Describe boundaries of a single crypto operation */
+struct cryptodesc {
+       int             crd_skip;       /* How many bytes to ignore from start */
+       int             crd_len;        /* How many bytes to process */
+       int             crd_inject;     /* Where to inject results, if applicable */
+       int             crd_flags;
+
+#define CRD_F_ENCRYPT          0x01    /* Set when doing encryption */
+#define CRD_F_IV_PRESENT       0x02    /* When encrypting, IV is already in
+                                          place, so don't copy. */
+#define CRD_F_IV_EXPLICIT      0x04    /* IV explicitly provided */
+#define CRD_F_DSA_SHA_NEEDED   0x08    /* Compute SHA-1 of buffer for DSA */
+#define CRD_F_KEY_EXPLICIT     0x10    /* Key explicitly provided */
+#define CRD_F_COMP             0x0f    /* Set when doing compression */
+
+       struct cryptoini        CRD_INI; /* Initialization/context data */
+#define crd_iv         CRD_INI.cri_iv
+#define crd_key                CRD_INI.cri_key
+#define crd_alg                CRD_INI.cri_alg
+#define crd_klen       CRD_INI.cri_klen
+#define crd_mlen       CRD_INI.cri_mlen
+
+       struct cryptodesc *crd_next;
+};
+
+/* Structure describing complete operation */
+struct cryptop {
+       struct list_head crp_next;
+       wait_queue_head_t crp_waitq;
+
+       u_int64_t       crp_sid;        /* Session ID */
+       int             crp_ilen;       /* Input data total length */
+       int             crp_olen;       /* Result total length */
+
+       int             crp_etype;      /*
+                                        * Error type (zero means no error).
+                                        * All error codes except EAGAIN
+                                        * indicate possible data corruption (as in,
+                                        * the data have been touched). On all
+                                        * errors, the crp_sid may have changed
+                                        * (reset to a new one), so the caller
+                                        * should always check and use the new
+                                        * value on future requests.
+                                        */
+       int             crp_flags;
+
+#define CRYPTO_F_SKBUF         0x0001  /* Input/output are skbuf chains */
+#define CRYPTO_F_IOV           0x0002  /* Input/output are uio */
+#define CRYPTO_F_REL           0x0004  /* Must return data in same place */
+#define CRYPTO_F_BATCH         0x0008  /* Batch op if possible */
+#define CRYPTO_F_CBIMM         0x0010  /* Do callback immediately */
+#define CRYPTO_F_DONE          0x0020  /* Operation completed */
+#define CRYPTO_F_CBIFSYNC      0x0040  /* Do CBIMM if op is synchronous */
+
+       caddr_t         crp_buf;        /* Data to be processed */
+       caddr_t         crp_opaque;     /* Opaque pointer, passed along */
+       struct cryptodesc *crp_desc;    /* Linked list of processing descriptors */
+
+       int (*crp_callback)(struct cryptop *); /* Callback function */
+};
+
+#define CRYPTO_BUF_CONTIG      0x0
+#define CRYPTO_BUF_IOV         0x1
+#define CRYPTO_BUF_SKBUF               0x2
+
+#define CRYPTO_OP_DECRYPT      0x0
+#define CRYPTO_OP_ENCRYPT      0x1
+
+/*
+ * Hints passed to process methods.
+ */
+#define CRYPTO_HINT_MORE       0x1     /* more ops coming shortly */
+
+struct cryptkop {
+       struct list_head krp_next;
+       wait_queue_head_t krp_waitq;
+
+       int             krp_flags;
+#define CRYPTO_KF_DONE         0x0001  /* Operation completed */
+#define CRYPTO_KF_CBIMM                0x0002  /* Do callback immediately */
+
+       u_int           krp_op;         /* ie. CRK_MOD_EXP or other */
+       u_int           krp_status;     /* return status */
+       u_short         krp_iparams;    /* # of input parameters */
+       u_short         krp_oparams;    /* # of output parameters */
+       u_int           krp_crid;       /* desired device, etc. */
+       u_int32_t       krp_hid;
+       struct crparam  krp_param[CRK_MAXPARAM];        /* kvm */
+       int             (*krp_callback)(struct cryptkop *);
+};
+
+#include <ocf-compat.h>
+
+/*
+ * Session ids are 64 bits.  The lower 32 bits contain a "local id" which
+ * is a driver-private session identifier.  The upper 32 bits contain a
+ * "hardware id" used by the core crypto code to identify the driver and
+ * a copy of the driver's capabilities that can be used by client code to
+ * optimize operation.
+ */
+#define CRYPTO_SESID2HID(_sid) (((_sid) >> 32) & 0x00ffffff)
+#define CRYPTO_SESID2CAPS(_sid)        (((_sid) >> 32) & 0xff000000)
+#define CRYPTO_SESID2LID(_sid) (((u_int32_t) (_sid)) & 0xffffffff)
+
+extern int crypto_newsession(u_int64_t *sid, struct cryptoini *cri, int hard);
+extern int crypto_freesession(u_int64_t sid);
+#define CRYPTOCAP_F_HARDWARE   CRYPTO_FLAG_HARDWARE
+#define CRYPTOCAP_F_SOFTWARE   CRYPTO_FLAG_SOFTWARE
+#define CRYPTOCAP_F_SYNC       0x04000000      /* operates synchronously */
+extern int32_t crypto_get_driverid(device_t dev, int flags);
+extern int crypto_find_driver(const char *);
+extern device_t crypto_find_device_byhid(int hid);
+extern int crypto_getcaps(int hid);
+extern int crypto_register(u_int32_t driverid, int alg, u_int16_t maxoplen,
+           u_int32_t flags);
+extern int crypto_kregister(u_int32_t, int, u_int32_t);
+extern int crypto_unregister(u_int32_t driverid, int alg);
+extern int crypto_unregister_all(u_int32_t driverid);
+extern int crypto_dispatch(struct cryptop *crp);
+extern int crypto_kdispatch(struct cryptkop *);
+#define CRYPTO_SYMQ    0x1
+#define CRYPTO_ASYMQ   0x2
+extern int crypto_unblock(u_int32_t, int);
+extern void crypto_done(struct cryptop *crp);
+extern void crypto_kdone(struct cryptkop *);
+extern int crypto_getfeat(int *);
+
+extern void crypto_freereq(struct cryptop *crp);
+extern struct cryptop *crypto_getreq(int num);
+
+extern  int crypto_usercrypto;      /* userland may do crypto requests */
+extern  int crypto_userasymcrypto;  /* userland may do asym crypto reqs */
+extern  int crypto_devallowsoft;    /* only use hardware crypto */
+
+/*
+ * random number support,  crypto_unregister_all will unregister
+ */
+extern int crypto_rregister(u_int32_t driverid,
+               int (*read_random)(void *arg, u_int32_t *buf, int len), void *arg);
+extern int crypto_runregister_all(u_int32_t driverid);
+
+/*
+ * Crypto-related utility routines used mainly by drivers.
+ *
+ * XXX these don't really belong here; but for now they're
+ *     kept apart from the rest of the system.
+ */
+struct uio;
+extern void cuio_copydata(struct uio* uio, int off, int len, caddr_t cp);
+extern void cuio_copyback(struct uio* uio, int off, int len, caddr_t cp);
+extern struct iovec *cuio_getptr(struct uio *uio, int loc, int *off);
+
+extern void crypto_copyback(int flags, caddr_t buf, int off, int size,
+           caddr_t in);
+extern void crypto_copydata(int flags, caddr_t buf, int off, int size,
+           caddr_t out);
+extern int crypto_apply(int flags, caddr_t buf, int off, int len,
+           int (*f)(void *, void *, u_int), void *arg);
+
+#endif /* __KERNEL__ */
+#endif /* _CRYPTO_CRYPTO_H_ */
diff --git a/package/libs/openssl/Config.in b/package/libs/openssl/Config.in
new file mode 100644 (file)
index 0000000..11591de
--- /dev/null
@@ -0,0 +1,13 @@
+menu "Configuration"
+       depends on PACKAGE_libopenssl
+
+config OPENSSL_ENGINE_CRYPTO
+       bool
+       prompt "Crypto acceleration support"
+
+config OPENSSL_ENGINE_DIGEST
+       bool
+       depends OPENSSL_ENGINE_CRYPTO
+       prompt "Digests acceleration support"
+
+endmenu
diff --git a/package/libs/openssl/Makefile b/package/libs/openssl/Makefile
new file mode 100644 (file)
index 0000000..cfc3b3d
--- /dev/null
@@ -0,0 +1,179 @@
+#
+# Copyright (C) 2006-2012 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=openssl
+PKG_VERSION:=1.0.1c
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=http://www.openssl.org/source/ \
+       ftp://ftp.funet.fi/pub/crypt/cryptography/libs/openssl/source/ \
+       ftp://ftp.webmonster.de/pub/openssl/source/ \
+       ftp://ftp.sunet.se/pub/security/tools/net/openssl/source/
+PKG_MD5SUM:=ae412727c8c15b67880aef7bd2999b2e
+
+PKG_BUILD_DEPENDS:=ocf-crypto-headers
+PKG_CONFIG_DEPENDS:=CONFIG_OPENSSL_ENGINE_CRYPTO CONFIG_OPENSSL_ENGINE_DIGEST
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/openssl/Default
+  TITLE:=Open source SSL toolkit
+  URL:=http://www.openssl.org/
+endef
+
+define Package/libopenssl/config
+source "$(SOURCE)/Config.in"
+endef
+
+define Package/openssl/Default/description
+The OpenSSL Project is a collaborative effort to develop a robust,
+commercial-grade, full-featured, and Open Source toolkit implementing the Secure
+Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) protocols as well
+as a full-strength general purpose cryptography library.
+endef
+
+define Package/libopenssl
+$(call Package/openssl/Default)
+  SECTION:=libs
+  SUBMENU:=SSL
+  CATEGORY:=Libraries
+  DEPENDS:=+zlib
+  TITLE+= (libraries)
+  MENU:=1
+endef
+
+define Package/libopenssl/description
+$(call Package/openssl/Default/description)
+This package contains the OpenSSL shared libraries, needed by other programs.
+endef
+
+define Package/openssl-util
+  $(call Package/openssl/Default)
+  SECTION:=utils
+  CATEGORY:=Utilities
+  DEPENDS:=+libopenssl
+  TITLE+= (utility)
+endef
+
+define Package/openssl-util/conffiles
+/etc/ssl/openssl.cnf
+endef
+
+define Package/openssl-util/description
+$(call Package/openssl/Default/description)
+This package contains the OpenSSL command-line utility.
+endef
+
+
+OPENSSL_NO_CIPHERS:= no-idea no-md2 no-mdc2 no-rc5 no-sha0 no-smime \
+       no-rmd160 no-aes192 no-ripemd no-camellia no-ans1 no-krb5
+OPENSSL_OPTIONS:= shared no-ec no-err no-hw no-threads zlib-dynamic no-sse2
+
+ifdef CONFIG_OPENSSL_ENGINE_CRYPTO
+  OPENSSL_OPTIONS += -DHAVE_CRYPTODEV
+  ifdef CONFIG_OPENSSL_ENGINE_DIGEST
+    OPENSSL_OPTIONS += -DUSE_CRYPTODEV_DIGESTS
+  endif
+else
+  OPENSSL_OPTIONS += no-engines
+endif
+
+ifeq ($(CONFIG_x86_64),y)
+  OPENSSL_TARGET:=linux-x86_64
+else
+  OPENSSL_OPTIONS+=no-sse2
+  ifeq ($(CONFIG_mips)$(CONFIG_mipsel),y)
+    OPENSSL_TARGET:=linux-mips-openwrt
+  else
+    OPENSSL_TARGET:=linux-generic-openwrt
+    OPENSSL_OPTIONS+=no-perlasm
+  endif
+endif
+
+define Build/Configure
+       (cd $(PKG_BUILD_DIR); \
+               ./Configure $(OPENSSL_TARGET) \
+                       --prefix=/usr \
+                       --openssldir=/etc/ssl \
+                       $(TARGET_CPPFLAGS) \
+                       $(TARGET_LDFLAGS) -ldl \
+                       -DOPENSSL_SMALL_FOOTPRINT \
+                       $(OPENSSL_NO_CIPHERS) \
+                       $(OPENSSL_OPTIONS) \
+       )
+endef
+
+TARGET_CFLAGS += $(FPIC)
+
+define Build/Compile
+       # XXX: OpenSSL "make depend" will look for installed headers before its own,
+       # so remove installed stuff first
+       -$(SUBMAKE) -j1 clean-staging
+       $(MAKE) -C $(PKG_BUILD_DIR) \
+               MAKEDEPPROG="$(TARGET_CROSS)gcc" \
+               OPENWRT_OPTIMIZATION_FLAGS="$(TARGET_CFLAGS)" \
+               $(OPENSSL_MAKEFLAGS) \
+               depend
+       $(_SINGLE)$(MAKE) -C $(PKG_BUILD_DIR) \
+               CC="$(TARGET_CC)" \
+               AR="$(TARGET_CROSS)ar r" \
+               RANLIB="$(TARGET_CROSS)ranlib" \
+               OPENWRT_OPTIMIZATION_FLAGS="$(TARGET_CFLAGS)" \
+               $(OPENSSL_MAKEFLAGS) \
+               all
+       $(MAKE) -C $(PKG_BUILD_DIR) \
+               CC="$(TARGET_CC)" \
+               AR="$(TARGET_CROSS)ar r" \
+               RANLIB="$(TARGET_CROSS)ranlib" \
+               OPENWRT_OPTIMIZATION_FLAGS="$(TARGET_CFLAGS)" \
+               $(OPENSSL_MAKEFLAGS) \
+               build-shared
+       # Work around openssl build bug to link libssl.so with libcrypto.so.
+       -rm $(PKG_BUILD_DIR)/libssl.so.*.*.*
+       $(MAKE) -C $(PKG_BUILD_DIR) \
+               CC="$(TARGET_CC)" \
+               OPENWRT_OPTIMIZATION_FLAGS="$(TARGET_CFLAGS)" \
+               $(OPENSSL_MAKEFLAGS) \
+               do_linux-shared
+       $(MAKE) -C $(PKG_BUILD_DIR) \
+               CC="$(TARGET_CC)" \
+               INSTALL_PREFIX="$(PKG_INSTALL_DIR)" \
+               $(OPENSSL_MAKEFLAGS) \
+               install
+endef
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/openssl $(1)/usr/include/
+       $(INSTALL_DIR) $(1)/usr/lib/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{crypto,ssl}.{a,so*} $(1)/usr/lib/
+       $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/{openssl,libcrypto,libssl}.pc $(1)/usr/lib/pkgconfig/
+       [ -n "$(TARGET_LDFLAGS)" ] && $(SED) 's#$(TARGET_LDFLAGS)##g' $(1)/usr/lib/pkgconfig/{openssl,libcrypto,libssl}.pc || true
+endef
+
+define Package/libopenssl/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libcrypto.so.* $(1)/usr/lib/
+       $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libssl.so.* $(1)/usr/lib/
+endef
+
+define Package/openssl-util/install
+       $(INSTALL_DIR) $(1)/etc/ssl
+       $(CP) $(PKG_INSTALL_DIR)/etc/ssl/openssl.cnf $(1)/etc/ssl/
+       $(INSTALL_DIR) $(1)/etc/ssl/certs
+       $(INSTALL_DIR) $(1)/etc/ssl/private
+       chmod 0700 $(1)/etc/ssl/private
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/openssl $(1)/usr/bin/
+endef
+
+$(eval $(call BuildPackage,libopenssl))
+$(eval $(call BuildPackage,openssl-util))
diff --git a/package/libs/openssl/patches/110-optimize-for-size.patch b/package/libs/openssl/patches/110-optimize-for-size.patch
new file mode 100644 (file)
index 0000000..f301017
--- /dev/null
@@ -0,0 +1,13 @@
+--- a/Configure
++++ b/Configure
+@@ -401,6 +401,10 @@ my %table=(
+ "linux-alpha-ccc","ccc:-fast -readonly_strings -DL_ENDIAN -DTERMIO::-D_REENTRANT:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL:${alpha_asm}",
+ "linux-alpha+bwx-ccc","ccc:-fast -readonly_strings -DL_ENDIAN -DTERMIO::-D_REENTRANT:::SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL:${alpha_asm}",
++# OpenWrt targets
++"linux-mips-openwrt","gcc:-DTERMIO \$(OPENWRT_OPTIMIZATION_FLAGS) -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${mips32_asm}:o32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"linux-generic-openwrt","gcc:-DTERMIO \$(OPENWRT_OPTIMIZATION_FLAGS) -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++
+ # Android: linux-* but without -DTERMIO and pointers to headers and libs.
+ "android","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+ "android-x86","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:".eval{my $asm=${x86_elf_asm};$asm=~s/:elf/:android/;$asm}.":dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
diff --git a/package/libs/openssl/patches/130-perl-path.patch b/package/libs/openssl/patches/130-perl-path.patch
new file mode 100644 (file)
index 0000000..dd4fa54
--- /dev/null
@@ -0,0 +1,64 @@
+--- a/Configure
++++ b/Configure
+@@ -1,4 +1,4 @@
+-:
++#!/usr/bin/perl
+ eval 'exec perl -S $0 ${1+"$@"}'
+     if $running_under_some_shell;
+ ##
+--- a/tools/c_rehash.in
++++ b/tools/c_rehash.in
+@@ -1,4 +1,4 @@
+-#!/usr/local/bin/perl
++#!/usr/bin/perl
+ # Perl c_rehash script, scan all files in a directory
+--- a/util/clean-depend.pl
++++ b/util/clean-depend.pl
+@@ -1,4 +1,4 @@
+-#!/usr/local/bin/perl -w
++#!/usr/bin/perl
+ # Clean the dependency list in a makefile of standard includes...
+ # Written by Ben Laurie <ben@algroup.co.uk> 19 Jan 1999
+--- a/util/mkdef.pl
++++ b/util/mkdef.pl
+@@ -1,4 +1,4 @@
+-#!/usr/local/bin/perl -w
++#!/usr/bin/perl
+ #
+ # generate a .def file
+ #
+--- a/util/mkerr.pl
++++ b/util/mkerr.pl
+@@ -1,4 +1,4 @@
+-#!/usr/local/bin/perl -w
++#!/usr/bin/perl
+ my $config = "crypto/err/openssl.ec";
+ my $hprefix = "openssl/";
+--- a/util/mkstack.pl
++++ b/util/mkstack.pl
+@@ -1,4 +1,4 @@
+-#!/usr/local/bin/perl -w
++#!/usr/bin/perl
+ # This is a utility that searches out "DECLARE_STACK_OF()"
+ # declarations in .h and .c files, and updates/creates/replaces
+--- a/util/pod2man.pl
++++ b/util/pod2man.pl
+@@ -1,4 +1,4 @@
+-: #!/usr/bin/perl-5.005
++#!/usr/bin/perl
+     eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
+       if $running_under_some_shell;
+--- a/util/selftest.pl
++++ b/util/selftest.pl
+@@ -1,4 +1,4 @@
+-#!/usr/local/bin/perl -w
++#!/usr/bin/perl
+ #
+ # Run the test suite and generate a report
+ #
diff --git a/package/libs/openssl/patches/140-makefile-dirs.patch b/package/libs/openssl/patches/140-makefile-dirs.patch
new file mode 100644 (file)
index 0000000..b51ca28
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/Makefile.org
++++ b/Makefile.org
+@@ -135,7 +135,7 @@ FIPSCANLIB=
+ BASEADDR=
+-DIRS=   crypto ssl engines apps test tools
++DIRS=   crypto ssl apps
+ ENGDIRS= ccgost
+ SHLIBDIRS= crypto ssl
diff --git a/package/libs/openssl/patches/150-no_engines.patch b/package/libs/openssl/patches/150-no_engines.patch
new file mode 100644 (file)
index 0000000..62aacc1
--- /dev/null
@@ -0,0 +1,81 @@
+--- a/Configure
++++ b/Configure
+@@ -2000,6 +2000,11 @@ EOF
+       close(OUT);
+   }
+   
++# ugly hack to disable engines
++if($target eq "mingwx") {
++      system("sed -e s/^LIB/XLIB/g -i engines/Makefile");
++}
++
+ print <<EOF;
+ Configured for $target.
+--- a/util/libeay.num
++++ b/util/libeay.num
+@@ -2071,7 +2071,6 @@ PKCS7_ATTR_SIGN_it                      
+ UI_add_error_string                     2633  EXIST::FUNCTION:
+ KRB5_CHECKSUM_free                      2634  EXIST::FUNCTION:
+ OCSP_REQUEST_get_ext                    2635  EXIST::FUNCTION:
+-ENGINE_load_ubsec                       2636  EXIST::FUNCTION:ENGINE,STATIC_ENGINE
+ ENGINE_register_all_digests             2637  EXIST::FUNCTION:ENGINE
+ PKEY_USAGE_PERIOD_it                    2638  EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
+ PKEY_USAGE_PERIOD_it                    2638  EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:
+@@ -2545,7 +2544,6 @@ OCSP_RESPONSE_new                       
+ AES_set_encrypt_key                     3024  EXIST::FUNCTION:AES
+ OCSP_resp_count                         3025  EXIST::FUNCTION:
+ KRB5_CHECKSUM_new                       3026  EXIST::FUNCTION:
+-ENGINE_load_cswift                      3027  EXIST::FUNCTION:ENGINE,STATIC_ENGINE
+ OCSP_onereq_get0_id                     3028  EXIST::FUNCTION:
+ ENGINE_set_default_ciphers              3029  EXIST::FUNCTION:ENGINE
+ NOTICEREF_it                            3030  EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
+@@ -2576,7 +2574,6 @@ ASN1_primitive_free                     
+ i2d_EXTENDED_KEY_USAGE                  3052  EXIST::FUNCTION:
+ i2d_OCSP_SIGNATURE                      3053  EXIST::FUNCTION:
+ asn1_enc_save                           3054  EXIST::FUNCTION:
+-ENGINE_load_nuron                       3055  EXIST::FUNCTION:ENGINE,STATIC_ENGINE
+ _ossl_old_des_pcbc_encrypt              3056  EXIST::FUNCTION:DES
+ PKCS12_MAC_DATA_it                      3057  EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
+ PKCS12_MAC_DATA_it                      3057  EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:
+@@ -2600,7 +2597,6 @@ asn1_get_choice_selector                
+ i2d_KRB5_CHECKSUM                       3072  EXIST::FUNCTION:
+ ENGINE_set_table_flags                  3073  EXIST::FUNCTION:ENGINE
+ AES_options                             3074  EXIST::FUNCTION:AES
+-ENGINE_load_chil                        3075  EXIST::FUNCTION:ENGINE,STATIC_ENGINE
+ OCSP_id_cmp                             3076  EXIST::FUNCTION:
+ OCSP_BASICRESP_new                      3077  EXIST::FUNCTION:
+ OCSP_REQUEST_get_ext_by_NID             3078  EXIST::FUNCTION:
+@@ -2667,7 +2663,6 @@ OCSP_CRLID_it                           
+ OCSP_CRLID_it                           3127  EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:
+ i2d_KRB5_AUTHENTBODY                    3128  EXIST::FUNCTION:
+ OCSP_REQUEST_get_ext_count              3129  EXIST::FUNCTION:
+-ENGINE_load_atalla                      3130  EXIST::FUNCTION:ENGINE,STATIC_ENGINE
+ X509_NAME_it                            3131  EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
+ X509_NAME_it                            3131  EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:
+ USERNOTICE_it                           3132  EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
+@@ -2762,8 +2757,6 @@ DES_read_2passwords                     
+ DES_read_password                       3207  EXIST::FUNCTION:DES
+ UI_UTIL_read_pw                         3208  EXIST::FUNCTION:
+ UI_UTIL_read_pw_string                  3209  EXIST::FUNCTION:
+-ENGINE_load_aep                         3210  EXIST::FUNCTION:ENGINE,STATIC_ENGINE
+-ENGINE_load_sureware                    3211  EXIST::FUNCTION:ENGINE,STATIC_ENGINE
+ OPENSSL_add_all_algorithms_noconf       3212  EXIST:!VMS:FUNCTION:
+ OPENSSL_add_all_algo_noconf             3212  EXIST:VMS:FUNCTION:
+ OPENSSL_add_all_algorithms_conf         3213  EXIST:!VMS:FUNCTION:
+@@ -2772,7 +2765,6 @@ OPENSSL_load_builtin_modules            
+ AES_ofb128_encrypt                      3215  EXIST::FUNCTION:AES
+ AES_ctr128_encrypt                      3216  EXIST::FUNCTION:AES
+ AES_cfb128_encrypt                      3217  EXIST::FUNCTION:AES
+-ENGINE_load_4758cca                     3218  EXIST::FUNCTION:ENGINE,STATIC_ENGINE
+ _ossl_096_des_random_seed               3219  EXIST::FUNCTION:DES
+ EVP_aes_256_ofb                         3220  EXIST::FUNCTION:AES
+ EVP_aes_192_ofb                         3221  EXIST::FUNCTION:AES
+@@ -3107,7 +3099,6 @@ EC_GFp_nist_method                      
+ STORE_meth_set_modify_fn                3530  NOEXIST::FUNCTION:
+ STORE_method_set_modify_function        3530  NOEXIST::FUNCTION:
+ STORE_parse_attrs_next                  3531  NOEXIST::FUNCTION:
+-ENGINE_load_padlock                     3532  EXIST::FUNCTION:ENGINE,STATIC_ENGINE
+ EC_GROUP_set_curve_name                 3533  EXIST::FUNCTION:EC
+ X509_CERT_PAIR_it                       3534  EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
+ X509_CERT_PAIR_it                       3534  EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:
diff --git a/package/libs/openssl/patches/160-disable_doc_tests.patch b/package/libs/openssl/patches/160-disable_doc_tests.patch
new file mode 100644 (file)
index 0000000..b6dacc1
--- /dev/null
@@ -0,0 +1,58 @@
+--- a/Makefile
++++ b/Makefile
+@@ -137,7 +137,7 @@ FIPSCANLIB=
+ BASEADDR=0xFB00000
+-DIRS=   crypto ssl engines apps test tools
++DIRS=   crypto ssl engines apps tools
+ ENGDIRS= ccgost
+ SHLIBDIRS= crypto ssl
+@@ -155,7 +155,7 @@ SDIRS=  \
+ # tests to perform.  "alltests" is a special word indicating that all tests
+ # should be performed.
+-TESTS = alltests
++TESTS =
+ MAKEFILE= Makefile
+@@ -169,7 +169,7 @@ SHELL=/bin/sh
+ TOP=    .
+ ONEDIRS=out tmp
+-EDIRS=  times doc bugs util include certs ms shlib mt demos perl sf dep VMS
++EDIRS=  times bugs util include certs ms shlib mt demos perl sf dep VMS
+ WDIRS=  windows
+ LIBS=   libcrypto.a libssl.a
+ SHARED_CRYPTO=libcrypto$(SHLIB_EXT)
+@@ -270,7 +270,7 @@ reflect:
+       @[ -n "$(THIS)" ] && $(CLEARENV) && $(MAKE) $(THIS) -e $(BUILDENV)
+ sub_all: build_all
+-build_all: build_libs build_apps build_tests build_tools
++build_all: build_libs build_apps build_tools
+ build_libs: build_crypto build_ssl build_engines
+@@ -539,7 +539,7 @@ dist:   
+ dist_pem_h:
+       (cd crypto/pem; $(MAKE) -e $(BUILDENV) pem.h; $(MAKE) clean)
+-install: all install_docs install_sw
++install: all install_sw
+ install_sw:
+       @$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
+--- a/Makefile.org
++++ b/Makefile.org
+@@ -537,7 +537,7 @@ dist:   
+ dist_pem_h:
+       (cd crypto/pem; $(MAKE) -e $(BUILDENV) pem.h; $(MAKE) clean)
+-install: all install_docs install_sw
++install: all install_sw
+ install_sw:
+       @$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
diff --git a/package/libs/openssl/patches/170-bash_path.patch b/package/libs/openssl/patches/170-bash_path.patch
new file mode 100644 (file)
index 0000000..c29b59a
--- /dev/null
@@ -0,0 +1,8 @@
+--- a/util/domd
++++ b/util/domd
+@@ -1,4 +1,4 @@
+-#!/bin/sh
++#!/usr/bin/env bash
+ # Do a makedepend, only leave out the standard headers
+ # Written by Ben Laurie <ben@algroup.co.uk> 19 Jan 1999
diff --git a/package/libs/openssl/patches/180-fix_link_segfault.patch b/package/libs/openssl/patches/180-fix_link_segfault.patch
new file mode 100644 (file)
index 0000000..3e36beb
--- /dev/null
@@ -0,0 +1,18 @@
+--- a/Makefile.shared
++++ b/Makefile.shared
+@@ -95,7 +95,6 @@ LINK_APP=    \
+     LDCMD="$${LDCMD:-$(CC)}"; LDFLAGS="$${LDFLAGS:-$(CFLAGS)}"; \
+     LIBPATH=`for x in $$LIBDEPS; do echo $$x; done | sed -e 's/^ *-L//;t' -e d | uniq`; \
+     LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`; \
+-    LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \
+     $${LDCMD} $${LDFLAGS} -o $${APPNAME:=$(APPNAME)} $(OBJECTS) $${LIBDEPS} )
+ LINK_SO=      \
+@@ -105,7 +104,6 @@ LINK_SO=   \
+     SHAREDFLAGS="$${SHAREDFLAGS:-$(CFLAGS) $(SHARED_LDFLAGS)}"; \
+     LIBPATH=`for x in $$LIBDEPS; do echo $$x; done | sed -e 's/^ *-L//;t' -e d | uniq`; \
+     LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`; \
+-    LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \
+     $${SHAREDCMD} $${SHAREDFLAGS} \
+       -o $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX \
+       $$ALLSYMSFLAGS $$SHOBJECTS $$NOALLSYMSFLAGS $$LIBDEPS \
diff --git a/package/libs/openssl/patches/190-remove_timestamp_check.patch b/package/libs/openssl/patches/190-remove_timestamp_check.patch
new file mode 100644 (file)
index 0000000..2677b2d
--- /dev/null
@@ -0,0 +1,23 @@
+--- a/Makefile.org
++++ b/Makefile.org
+@@ -184,7 +184,7 @@ WTARFILE=       $(NAME)-win.tar
+ EXHEADER=       e_os2.h
+ HEADER=         e_os.h
+-all: Makefile build_all openssl.pc libssl.pc libcrypto.pc
++all: build_all openssl.pc libssl.pc libcrypto.pc
+ # as we stick to -e, CLEARENV ensures that local variables in lower
+ # Makefiles remain local and variable. $${VAR+VAR} is tribute to Korn
+@@ -396,11 +396,6 @@ openssl.pc: Makefile
+           echo 'Libs.private: $(EX_LIBS)'; \
+           echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > openssl.pc
+-Makefile: Makefile.org Configure config
+-      @echo "Makefile is older than Makefile.org, Configure or config."
+-      @echo "Reconfigure the source tree (via './config' or 'perl Configure'), please."
+-      @false
+-
+ libclean:
+       rm -f *.map *.so *.so.* *.dylib *.dll engines/*.so engines/*.dll engines/*.dylib *.a engines/*.a */lib */*/lib
diff --git a/package/libs/openssl/patches/200-etrax_support.patch b/package/libs/openssl/patches/200-etrax_support.patch
new file mode 100644 (file)
index 0000000..9bd155e
--- /dev/null
@@ -0,0 +1,13 @@
+--- a/Configure
++++ b/Configure
+@@ -440,6 +440,10 @@ my %table=(
+ "beos-x86-r5",   "gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -mcpu=pentium -Wall::-D_REENTRANT:BEOS:-lbe -lnet:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:beos:beos-shared:-fPIC -DPIC:-shared:.so",
+ "beos-x86-bone", "gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -mcpu=pentium -Wall::-D_REENTRANT:BEOS:-lbe -lbind -lsocket:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:beos:beos-shared:-fPIC:-shared:.so",
++# cris
++"linux-cris", "\$(TARGET_CC):-DL_ENDIAN -DTERMIO -fomit-frame-pointer::-D_REENTRANT::-ldl:BN_LLONG THIRTY_TWO_BIT RC4_CHAR::::::::::::dlfcn:linux-shared:-fpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::",
++
++
+ #### SCO/Caldera targets.
+ #
+ # Originally we had like unixware-*, unixware-*-pentium, unixware-*-p6, etc.
diff --git a/package/libs/openssl/patches/210-fix_aes_mips.patch b/package/libs/openssl/patches/210-fix_aes_mips.patch
new file mode 100644 (file)
index 0000000..bbfc63a
--- /dev/null
@@ -0,0 +1,64 @@
+--- a/crypto/aes/asm/aes-mips.pl
++++ b/crypto/aes/asm/aes-mips.pl
+@@ -1036,9 +1036,9 @@ _mips_AES_set_encrypt_key:
+       nop
+ .end  _mips_AES_set_encrypt_key
+-.globl        AES_set_encrypt_key
+-.ent  AES_set_encrypt_key
+-AES_set_encrypt_key:
++.globl        private_AES_set_encrypt_key
++.ent  private_AES_set_encrypt_key
++private_AES_set_encrypt_key:
+       .frame  $sp,$FRAMESIZE,$ra
+       .mask   $SAVED_REGS_MASK,-$SZREG
+       .set    noreorder
+@@ -1060,7 +1060,7 @@ $code.=<<___ if ($flavour =~ /nubi/i);   #
+ ___
+ $code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification
+       .cplocal        $Tbl
+-      .cpsetup        $pf,$zero,AES_set_encrypt_key
++      .cpsetup        $pf,$zero,private_AES_set_encrypt_key
+ ___
+ $code.=<<___;
+       .set    reorder
+@@ -1083,7 +1083,7 @@ ___
+ $code.=<<___;
+       jr      $ra
+       $PTR_ADD $sp,$FRAMESIZE
+-.end  AES_set_encrypt_key
++.end  private_AES_set_encrypt_key
+ ___
\f
+ my ($head,$tail)=($inp,$bits);
+@@ -1091,9 +1091,9 @@ my ($tp1,$tp2,$tp4,$tp8,$tp9,$tpb,$tpd,$
+ my ($m,$x80808080,$x7f7f7f7f,$x1b1b1b1b)=($at,$t0,$t1,$t2);
+ $code.=<<___;
+ .align        5
+-.globl        AES_set_decrypt_key
+-.ent  AES_set_decrypt_key
+-AES_set_decrypt_key:
++.globl        private_AES_set_decrypt_key
++.ent  private_AES_set_decrypt_key
++private_AES_set_decrypt_key:
+       .frame  $sp,$FRAMESIZE,$ra
+       .mask   $SAVED_REGS_MASK,-$SZREG
+       .set    noreorder
+@@ -1115,7 +1115,7 @@ $code.=<<___ if ($flavour =~ /nubi/i);   #
+ ___
+ $code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification
+       .cplocal        $Tbl
+-      .cpsetup        $pf,$zero,AES_set_decrypt_key
++      .cpsetup        $pf,$zero,private_AES_set_decrypt_key
+ ___
+ $code.=<<___;
+       .set    reorder
+@@ -1226,7 +1226,7 @@ ___
+ $code.=<<___;
+       jr      $ra
+       $PTR_ADD $sp,$FRAMESIZE
+-.end  AES_set_decrypt_key
++.end  private_AES_set_decrypt_key
+ ___
+ }}}
diff --git a/package/libs/uclibc++/Makefile b/package/libs/uclibc++/Makefile
new file mode 100644 (file)
index 0000000..15c2bce
--- /dev/null
@@ -0,0 +1,91 @@
+#
+# Copyright (C) 2006-2012 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=uclibc++
+PKG_VERSION:=0.2.4
+PKG_RELEASE:=1
+
+PKG_SOURCE:=uClibc++-$(PKG_VERSION).tar.bz2
+PKG_SOURCE_URL:=http://cxx.uclibc.org/src/
+PKG_MD5SUM:=394c119363dd8b469fb898442a6764b8
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/uClibc++-$(PKG_VERSION)
+PKG_BUILD_PARALLEL:=1
+
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/uclibcxx
+  NAME:=uclibc++
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=C++ library for embedded systems
+  URL:=http://cxx.uclibc.org/src/
+endef
+
+UCLIBC_TARGET_ARCH:=$(shell echo $(ARCH) | sed -e s'/-.*//' \
+       -e 's/i.86/i386/' \
+       -e 's/sparc.*/sparc/' \
+       -e 's/m68k.*/m68k/' \
+       -e 's/ppc/powerpc/g' \
+       -e 's/v850.*/v850/g' \
+       -e 's/sh64/sh/' \
+       -e 's/sh[234].*/sh/' \
+       -e 's/mips.*/mips/' \
+       -e 's/mipsel.*/mips/' \
+       -e 's/cris.*/cris/' \
+)
+
+TARGET_CFLAGS += $(FPIC)
+
+ifneq ($(CONFIG_CCACHE),)
+TARGET_CXX=$(TARGET_CXX_NOCACHE)
+endif
+
+MAKE_FLAGS:= \
+       TOPDIR="$(PKG_BUILD_DIR)/" \
+       $(TARGET_CONFIGURE_OPTS) \
+       CPU_CFLAGS="$(TARGET_CFLAGS)" \
+       CROSS="$(TARGET_CROSS)" \
+       CP="$(CP)" \
+       GEN_LIBS="-lc $(LIBGCC_S)" \
+       check_as_needed=
+
+# check_as_needed overrides dependency on libgcc_s
+
+define Build/Configure
+       if [ -f ./files/config.$(UCLIBC_TARGET_ARCH) ]; then \
+               cp ./files/config.$(UCLIBC_TARGET_ARCH) $(PKG_BUILD_DIR)/.config; \
+       else \
+               cp ./files/config.default $(PKG_BUILD_DIR)/.config; \
+       fi
+endef
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(2)/bin $(1)/usr/include/uClibc++ $(1)/usr/lib
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/bin/g++-uc $(TOOLCHAIN_DIR)/bin/
+       $(CP) $(PKG_INSTALL_DIR)/include/* $(1)/usr/include/uClibc++/
+       $(CP) $(PKG_INSTALL_DIR)/lib/libuClibc++*.{a,so}* $(1)/usr/lib/
+       $(SED) 's|-I/include/|-I$(STAGING_DIR)/usr/include/uClibc++/|g' $(TOOLCHAIN_DIR)/bin/g++-uc
+       $(SED) 's|-L/lib/|-L$(STAGING_DIR)/usr/lib/|g' $(TOOLCHAIN_DIR)/bin/g++-uc
+# add another wrapper which links against both uClibc++ and libstdc++ 
+       $(INSTALL_BIN) $(TOOLCHAIN_DIR)/bin/g++-uc $(TOOLCHAIN_DIR)/bin/g++-uc+std
+       $(SED) 's|^WRAPPER_INCLUDEDIR=.*||g' $(TOOLCHAIN_DIR)/bin/g++-uc+std
+       $(SED) 's|-luClibc++|-Wl,-Bdynamic,-luClibc++,-Bstatic,-lstdc++,-Bdynamic|g' $(TOOLCHAIN_DIR)/bin/g++-uc+std
+       $(SED) 's|-nostdinc++||g' $(TOOLCHAIN_DIR)/bin/g++-uc+std
+endef
+
+define Package/uclibcxx/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/lib/libuClibc++.so.* $(1)/usr/lib/
+       $(CP) $(PKG_INSTALL_DIR)/lib/libuClibc++-*.so $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,uclibcxx))
diff --git a/package/libs/uclibc++/files/config.default b/package/libs/uclibc++/files/config.default
new file mode 100644 (file)
index 0000000..944e1a6
--- /dev/null
@@ -0,0 +1,58 @@
+#
+# Automatically generated make config: don't edit
+#
+
+#
+# Target Features and Options
+#
+UCLIBCXX_HAS_FLOATS=y
+# UCLIBCXX_HAS_LONG_DOUBLE is not set
+# UCLIBCXX_HAS_TLS is not set
+WARNINGS="-Wall"
+BUILD_EXTRA_LIBRARIES=""
+HAVE_DOT_CONFIG=y
+
+#
+# String and I/O Stream Support
+#
+UCLIBCXX_HAS_WCHAR=y
+UCLIBCXX_IOSTREAM_BUFSIZE=32
+UCLIBCXX_HAS_LFS=y
+UCLIBCXX_SUPPORT_CDIR=y
+UCLIBCXX_SUPPORT_CIN=y
+UCLIBCXX_SUPPORT_COUT=y
+UCLIBCXX_SUPPORT_CERR=y
+UCLIBCXX_SUPPORT_CLOG=y
+UCLIBCXX_SUPPORT_WCIN=y
+UCLIBCXX_SUPPORT_WCOUT=y
+UCLIBCXX_SUPPORT_WCERR=y
+UCLIBCXX_SUPPORT_WCLOG=y
+
+#
+# STL and Code Expansion
+#
+UCLIBCXX_STL_BUFFER_SIZE=32
+UCLIBCXX_CODE_EXPANSION=y
+UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS=y
+UCLIBCXX_EXPAND_STRING_CHAR=y
+UCLIBCXX_EXPAND_VECTOR_BASIC=y
+UCLIBCXX_EXPAND_IOS_CHAR=y
+UCLIBCXX_EXPAND_STREAMBUF_CHAR=y
+UCLIBCXX_EXPAND_ISTREAM_CHAR=y
+UCLIBCXX_EXPAND_OSTREAM_CHAR=y
+UCLIBCXX_EXPAND_FSTREAM_CHAR=y
+UCLIBCXX_EXPAND_SSTREAM_CHAR=y
+
+#
+# Library Installation Options
+#
+UCLIBCXX_RUNTIME_PREFIX=""
+UCLIBCXX_RUNTIME_INCLUDE_SUBDIR="/include"
+UCLIBCXX_RUNTIME_LIB_SUBDIR="/lib"
+UCLIBCXX_RUNTIME_BIN_SUBDIR="/bin"
+UCLIBCXX_EXCEPTION_SUPPORT=y
+IMPORT_LIBSUP=y
+# IMPORT_LIBGCC_EH is not set
+BUILD_STATIC_LIB=y
+# BUILD_ONLY_STATIC_LIB is not set
+# DODEBUG is not set
diff --git a/package/libs/uclibc++/patches/002-path_to_bash.patch b/package/libs/uclibc++/patches/002-path_to_bash.patch
new file mode 100644 (file)
index 0000000..26d88ee
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/bin/Makefile
++++ b/bin/Makefile
+@@ -13,7 +13,7 @@ install:
+       $(INSTALL) -m 755 $(WRAPPER) $(PREFIX)$(UCLIBCXX_RUNTIME_BINDIR)
+ $(WRAPPER): Makefile
+-      echo '#!/bin/sh' > $@
++      echo '#!/usr/bin/env bash' > $@
+       echo '' >> $@
+       echo 'WRAPPER_INCLUDEDIR="$${WRAPPER_INCLUDEDIR:=-I$(UCLIBCXX_RUNTIME_INCLUDEDIR)}"' >> $@
+       echo 'WRAPPER_LIBDIR="$${WRAPPER_LIBDIR:=-L$(UCLIBCXX_RUNTIME_LIBDIR)}"' >> $@
diff --git a/package/libs/uclibc++/patches/006-eabi_fix.patch b/package/libs/uclibc++/patches/006-eabi_fix.patch
new file mode 100644 (file)
index 0000000..65b436c
--- /dev/null
@@ -0,0 +1,38 @@
+--- a/include/typeinfo
++++ b/include/typeinfo
+@@ -44,6 +44,7 @@ namespace __cxxabiv1
+   class __class_type_info;
+ } // namespace __cxxabiv1
++#ifndef __GXX_MERGED_TYPEINFO_NAMES
+ #if !__GXX_WEAK__
+   // If weak symbols are not supported, typeinfo names are not merged.
+   #define __GXX_MERGED_TYPEINFO_NAMES 0
+@@ -51,6 +52,7 @@ namespace __cxxabiv1
+   // On platforms that support weak symbols, typeinfo names are merged.
+   #define __GXX_MERGED_TYPEINFO_NAMES 1
+ #endif
++#endif
+ namespace std 
+ {
+--- a/include/unwind-cxx.h
++++ b/include/unwind-cxx.h
+@@ -173,6 +173,7 @@ extern std::unexpected_handler __unexpec
\r
+ // This is the exception class we report -- "GNUCC++\0".\r
+ const _Unwind_Exception_Class __gxx_exception_class\r
++#ifndef __ARM_EABI_UNWINDER__\r
+ = ((((((((_Unwind_Exception_Class) 'G' \r
+        << 8 | (_Unwind_Exception_Class) 'N')\r
+       << 8 | (_Unwind_Exception_Class) 'U')\r
+@@ -181,6 +182,9 @@ const _Unwind_Exception_Class __gxx_exce
+      << 8 | (_Unwind_Exception_Class) '+')\r
+     << 8 | (_Unwind_Exception_Class) '+')\r
+    << 8 | (_Unwind_Exception_Class) '\0');\r
++#else\r
++= "GNUC++";\r
++#endif\r
\r
+ // GNU C++ personality routine, Version 0.\r
+ extern "C" _Unwind_Reason_Code __gxx_personality_v0\r
diff --git a/package/libs/zlib/Makefile b/package/libs/zlib/Makefile
new file mode 100644 (file)
index 0000000..18b8884
--- /dev/null
@@ -0,0 +1,69 @@
+# 
+# Copyright (C) 2006-2012 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=zlib
+PKG_VERSION:=1.2.7
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_SOURCE_URL:=http://www.zlib.net @SF/libpng
+PKG_MD5SUM:=2ab442d169156f34c379c968f3f482dd
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/zlib
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=Library implementing the deflate compression method
+  URL:=http://www.zlib.net/
+endef
+
+define Build/Configure
+       (cd $(PKG_BUILD_DIR); \
+               $(TARGET_CONFIGURE_OPTS) \
+               LDSHARED="$(TARGET_CC) -shared -Wl,-soname,libz.so.1" \
+               CFLAGS="$(TARGET_CFLAGS) $(FPIC)" \
+               ./configure \
+                       --prefix=/usr \
+                       --shared \
+                       --uname=Linux \
+       );
+endef
+
+define Build/Compile
+       +$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
+               $(TARGET_CONFIGURE_OPTS) \
+               CFLAGS="$(TARGET_CFLAGS)" \
+               libz.a libz.so.$(PKG_VERSION)
+       mkdir -p $(PKG_INSTALL_DIR)
+       $(MAKE) -C $(PKG_BUILD_DIR) \
+               DESTDIR="$(PKG_INSTALL_DIR)" \
+               install
+endef
+
+define Build/InstallDev
+       mkdir -p $(1)/usr/include
+       $(CP)   $(PKG_INSTALL_DIR)/usr/include/z{conf,lib}.h \
+               $(1)/usr/include/
+       mkdir -p $(1)/usr/lib
+       $(CP)   $(PKG_INSTALL_DIR)/usr/lib/libz.{a,so*} \
+               $(1)/usr/lib/
+       mkdir -p $(1)/usr/lib/pkgconfig
+       $(CP)   $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/zlib.pc \
+               $(1)/usr/lib/pkgconfig/
+endef
+
+# libz.so is needed for openssl (zlib-dynamic)
+define Package/zlib/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libz.so $(1)/usr/lib/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libz.so.* $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,zlib))
diff --git a/package/libtool/Makefile b/package/libtool/Makefile
deleted file mode 100644 (file)
index b33eda1..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-# 
-# Copyright (C) 2006 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=libtool
-PKG_VERSION:=2.4
-PKG_RELEASE:=1
-
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=@GNU/libtool
-PKG_MD5SUM:=b32b04148ecdd7344abc6fe8bd1bb021
-
-PKG_BUILD_PARALLEL:=0
-
-include $(INCLUDE_DIR)/package.mk
-
-CONFIGURE_PREFIX=$(STAGING_DIR)/host
-export GLOBAL_LIBDIR=$(STAGING_DIR)/usr/lib
-
-define Package/libltdl
-  SECTION:=libs
-  CATEGORY:=Libraries
-  TITLE:=A generic dynamic object loading library
-  URL:=http://www.gnu.org/software/libtool/
-endef
-
-define Build/InstallDev
-       $(MAKE) -C $(PKG_BUILD_DIR) \
-               bindir="$(2)/bin" \
-               datadir="$(2)/share" \
-               prefix="$(2)" \
-               exec_prefix="$(2)" \
-               install
-       $(INSTALL_DIR) $(1)/usr/lib $(1)/usr/include
-       mv $(2)/lib/* $(1)/usr/lib/
-       mv $(2)/include/* $(1)/usr/include/
-endef
-
-define Package/libltdl/install
-       $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_BUILD_DIR)/libltdl/.libs/libltdl.so.* $(1)/usr/lib/
-endef
-
-$(eval $(call BuildPackage,libltdl))
diff --git a/package/libubox/Makefile b/package/libubox/Makefile
deleted file mode 100644 (file)
index 845f380..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=libubox
-PKG_VERSION:=2012-07-08
-PKG_RELEASE=$(PKG_SOURCE_VERSION)
-
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_URL:=git://nbd.name/luci2/libubox.git
-PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE_VERSION:=cca2ed6c8cdb3555fea43ff63ba1c9905dd7a164
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
-PKG_MIRROR_MD5SUM:=dfd44c10b4aeccbdab9ae22774fb02e3
-CMAKE_INSTALL:=1
-
-include $(INCLUDE_DIR)/package.mk
-include $(INCLUDE_DIR)/cmake.mk
-
-define Package/libubox
-  SECTION:=libs
-  CATEGORY:=Libraries
-  TITLE:=Basic utility library
-  DEPENDS:=
-endef
-
-define Package/libblobmsg-json
-  SECTION:=libs
-  CATEGORY:=Libraries
-  TITLE:=blobmsg <-> json conversion library
-  DEPENDS:=+libjson +libubox
-endef
-
-define Package/jshn
-  SECTION:=utils
-  CATEGORY:=Utilities
-  DEPENDS:=+libjson
-  TITLE:=JSON SHell Notation
-endef
-
-define Package/jshn/description
-  Library for parsing and generating JSON from shell scripts
-endef
-
-TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include
-
-define Package/libubox/install
-       $(INSTALL_DIR) $(1)/lib/
-       $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libubox.so $(1)/lib/
-endef
-
-define Package/libblobmsg-json/install
-       $(INSTALL_DIR) $(1)/lib/
-       $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libblobmsg_json.so $(1)/lib/
-endef
-
-define Package/jshn/install
-       $(INSTALL_DIR) $(1)/usr/bin $(1)/usr/share/libubox
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/jshn $(1)/usr/bin
-       $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/libubox/jshn.sh $(1)/usr/share/libubox
-endef
-
-$(eval $(call BuildPackage,libubox))
-$(eval $(call BuildPackage,libblobmsg-json))
-$(eval $(call BuildPackage,jshn))
-
diff --git a/package/ncurses/Makefile b/package/ncurses/Makefile
deleted file mode 100644 (file)
index 9c682ac..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-#
-# Copyright (C) 2006-2011 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=ncurses
-PKG_VERSION:=5.7
-PKG_RELEASE:=5
-
-PKG_BUILD_DIR:=$(BUILD_DIR)/$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=@GNU/ncurses
-PKG_MD5SUM:=cce05daf61a64501ef6cd8da1f727ec6
-
-PKG_INSTALL:=1
-PKG_BUILD_PARALLEL:=1
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/libncurses
-  SECTION:=libs
-  CATEGORY:=Libraries
-  TITLE:=Terminal handling library
-  URL:=http://www.gnu.org/software/ncurses/
-  DEPENDS:= +terminfo
-  VARIANT:=libncurses
-endef
-
-define Package/terminfo
-  SECTION:=libs
-  CATEGORY:=Libraries
-  TITLE:=Terminal Info Database (ncurses)
-  URL:=http://www.gnu.org/software/ncurses/
-  VARIANT:=libncurses
-endef
-
-define Package/libncursesw
-  SECTION:=libs
-  CATEGORY:=Libraries
-  TITLE:=Terminal handling library (Unicode)
-  URL:=http://www.gnu.org/software/ncurses/
-  VARIANT:=libncursesw
-endef
-
-TARGET_CFLAGS += $(FPIC)
-
-CONFIGURE_ARGS += \
-       --enable-echo \
-       --enable-const \
-       --enable-overwrite \
-       --disable-rpath \
-       --without-ada \
-       --without-debug \
-       --without-profile \
-       --without-progs \
-       --disable-big-core \
-       --disable-home-terminfo \
-       --with-normal \
-       --with-shared \
-       --with-terminfo-dirs=/usr/share/terminfo \
-       --with-default-terminfo-dir=/usr/share/terminfo
-
-ifeq ($(HOST_OS),FreeBSD)
-       CONFIGURE_ARGS +=
-               --with-terminfo=/usr/share/terminfo.db 
-endif
-
-ifeq ($(BUILD_VARIANT),libncursesw)
-       CONFIGURE_ARGS += \
-               --enable-widec \
-               --with-build-cppflags=-D_GNU_SOURCE
-endif
-
-MAKE_FLAGS += \
-       BUILD_CC="$(HOSTCC)" \
-       HOSTCC="$(HOSTCC)" \
-       HOSTCCFLAGS="" \
-       libs
-
-define Build/Install/Default
-       $(MAKE_VARS) \
-       $(MAKE) -C $(PKG_BUILD_DIR)/$(MAKE_PATH) \
-               $(MAKE_INSTALL_FLAGS) \
-               $(1) install.libs install.data;
-endef
-
-define Package/terminfo/install
-       echo ""
-ifneq ($(HOST_OS),FreeBSD)
-       $(INSTALL_DIR) $(1)/usr/share/terminfo
-       (cd $(PKG_INSTALL_DIR)/usr/share/terminfo; \
-               for dir in ??; do \
-                       [ -d "$$$$dir" ] || continue; \
-                       mv $$$$dir $$$$(echo -ne "\x$$$$dir"); \
-               done \
-       )
-       for file in a/ansi d/dumb l/linux r/rxvt r/rxvt-unicode s/screen v/vt100 v/vt102 x/xterm x/xterm-color; do \
-               $(INSTALL_DIR) $(1)/usr/share/terminfo/`dirname $$$$file`; \
-               $(CP) $(PKG_INSTALL_DIR)/usr/share/terminfo/$$$$file \
-                       $(1)/usr/share/terminfo/$$$$file; \
-       done
-endif
-endef
-
-define Package/libncurses/install
-       $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{curses,ncurses,panel,menu,form}.so* $(1)/usr/lib/
-endef
-
-define Package/libncursesw/install
-       $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{ncurses,panel,menu,form}w.so* $(1)/usr/lib/
-endef
-
-ifeq ($(BUILD_VARIANT),libncursesw)
-define Build/InstallDev
-       $(INSTALL_DIR) $(1)/usr/include/ncursesw/
-       $(CP) $(PKG_INSTALL_DIR)/usr/include/*.h $(1)/usr/include/ncursesw/
-
-       $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{ncurses,panel,menu,form}w.{a,so*} $(1)/usr/lib/
-
-       $(INSTALL_DIR) $(1)/usr/bin $(2)/bin
-       $(CP) $(PKG_INSTALL_DIR)/usr/bin/ncursesw5-config $(2)/bin/
-       $(SED) 's,^\(prefix\|exec_prefix\)=.*,\1=$(STAGING_DIR)/usr,g' -e 's/$$$$INCS //g' \
-               $(2)/bin/ncursesw5-config
-       ln -sf $(STAGING_DIR)/host/bin/ncursesw5-config $(1)/usr/bin/ncursesw5-config
-endef
-else
-define Build/InstallDev
-       $(INSTALL_DIR) $(1)/usr/include
-       $(CP) $(PKG_INSTALL_DIR)/usr/include/*.h $(1)/usr/include/
-
-       $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{curses,ncurses,panel,menu,form}.{a,so*} $(1)/usr/lib/
-
-       $(INSTALL_DIR) $(1)/usr/bin $(2)/bin
-       $(CP) $(PKG_INSTALL_DIR)/usr/bin/ncurses5-config $(2)/bin/
-       $(SED) 's,^\(prefix\|exec_prefix\)=.*,\1=$(STAGING_DIR)/usr,g' \
-               $(2)/bin/ncurses5-config
-       ln -sf $(STAGING_DIR)/host/bin/ncurses5-config $(1)/usr/bin/ncurses5-config
-endef
-endif
-
-$(eval $(call BuildPackage,terminfo))
-$(eval $(call BuildPackage,libncurses))
-$(eval $(call BuildPackage,libncursesw))
diff --git a/package/ncurses/patches/100-ncurses-5.6-20080112-urxvt.patch b/package/ncurses/patches/100-ncurses-5.6-20080112-urxvt.patch
deleted file mode 100644 (file)
index 39e60ba..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
---- a/misc/terminfo.src
-+++ b/misc/terminfo.src
-@@ -3965,6 +3965,172 @@ rxvt-cygwin-native|rxvt terminal emulato
- rxvt-16color|xterm with 16 colors like aixterm,
-       ncv#32, use=ibm+16color, use=rxvt,
-+# rxvt-unicode
-+# http://cvs.schmorp.de/rxvt-unicode/doc/etc/rxvt-unicode.terminfo?revision=1.20
-+# From: Thomas Dickey <dickey@clark.net> 04 Oct 1997
-+# Updated: Ã–zgür Kesim <kesim@math.fu-berlin.de> 02 Nov 1997
-+# Updated: Marc Lehmann <pcg@goof.com>, 17 Feb 2005
-+rxvt-unicode|rxvt-unicode terminal (X Window System),
-+      am,
-+      bce,
-+      eo,
-+      km,
-+      msgr,
-+      xenl,
-+      hs,
-+      cols#80,
-+      it#8,
-+      lines#24,
-+      acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~-A.B+C\,D0EhFiG,
-+      bel=^G,
-+      blink=\E[5m,
-+      bold=\E[1m,
-+      civis=\E[?25l,
-+      clear=\E[H\E[2J,
-+      cnorm=\E[?25h,
-+      cr=^M,
-+      csr=\E[%i%p1%d;%p2%dr,
-+      cub=\E[%p1%dD,
-+      cub1=^H,
-+      cud=\E[%p1%dB,
-+      cud1=^J,
-+      cuf=\E[%p1%dC,
-+      cuf1=\E[C,
-+      cup=\E[%i%p1%d;%p2%dH,
-+      cuu=\E[%p1%dA,
-+      cuu1=\E[A,
-+      cvvis=\E[?25h,
-+      dch=\E[%p1%dP,
-+      dch1=\E[P,
-+      dl=\E[%p1%dM,
-+      dl1=\E[M,
-+      ed=\E[J,
-+      el=\E[K,
-+      el1=\E[1K,
-+      flash=\E[?5h$<20/>\E[?5l,
-+      home=\E[H,
-+      hpa=\E[%i%p1%dG,
-+      ht=^I,
-+      hts=\EH,
-+      ich=\E[%p1%d@,
-+      ich1=\E[@,
-+      il=\E[%p1%dL,
-+      il1=\E[L,
-+      ind=^J,
-+      is1=\E[?47l\E=\E[?1l,
-+      is2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l,
-+      kDC=\E[3$,
-+      kIC=\E2$,
-+      kEND=\E[8$,
-+      kHOM=\E[7$,
-+      kLFT=\E[d,
-+      kNXT=\E[6$,
-+      kPRV=\E[5$,
-+      kRIT=\E[c,
-+      kbs=\177,
-+      ka1=\EOw,
-+      ka3=\EOy,
-+      kb2=\EOu,
-+      kc1=\EOq,
-+      kc3=\EOs,
-+      kcbt=\E[Z,
-+      kcub1=\E[D,
-+      kcud1=\E[B,
-+      kcuf1=\E[C,
-+      kcuu1=\E[A,
-+      kdch1=\E[3~,
-+      kel=\E[8\^,
-+      kend=\E[8~,
-+      kent=\EOM,
-+      kf1=\E[11~,
-+      kf10=\E[21~,
-+      kf11=\E[23~,
-+      kf12=\E[24~,
-+      kf13=\E[25~,
-+      kf14=\E[26~,
-+      kf15=\E[28~,
-+      kf16=\E[29~,
-+      kf17=\E[31~,
-+      kf18=\E[32~,
-+      kf19=\E[33~,
-+      kf2=\E[12~,
-+      kf20=\E[34~,
-+      kf3=\E[13~,
-+      kf4=\E[14~,
-+      kf5=\E[15~,
-+      kf6=\E[17~,
-+      kf7=\E[18~,
-+      kf8=\E[19~,
-+      kf9=\E[20~,
-+      kfnd=\E[1~,
-+      khome=\E[7~,
-+      kich1=\E[2~,
-+      kmous=\E[M,
-+      knp=\E[6~,
-+      kpp=\E[5~,
-+      kslt=\E[4~,
-+      rc=\E8,
-+      rev=\E[7m,
-+      ri=\EM,
-+      rmso=\E[27m,
-+      rmul=\E[24m,
-+      rs1=\Ec,
-+      rs2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l\E>,
-+      sgr0=\E[m\017,
-+      enacs=,
-+      smacs=\E(0,
-+      rmacs=\E(B,
-+      smso=\E[7m,
-+      smul=\E[4m,
-+      tbc=\E[3g,
-+      vpa=\E[%i%p1%dd,
-+      colors#88,
-+      pairs#256,
-+      btns#5,
-+      lm#0,
-+      ccc,
-+      npc,
-+      mc5i,
-+      ncv#0,
-+      mir,
-+      xon,
-+      bw,
-+      ech=\E[%p1%dX,
-+      mc0=\E[i,
-+      mc4=\E[4i,
-+      mc5=\E[5i,
-+      sitm=\E[3m,
-+      ritm=\E[23m,
-+      smam=\E[?7h,
-+      rmam=\E[?7l,
-+      smir=\E[4h,
-+      rmir=\E[4l,
-+      smcup=\E[?1049h,
-+      rmcup=\E[r\E[?1049l,
-+      smkx=\E=,
-+      rmkx=\E>,
-+      indn=\E[%p1%dS,
-+      rin=\E[%p1%dT,
-+      sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m%?%p9%t\E(0%e\E(B%;,
-+      op=\E[39;49m,
-+      setaf=\E[38;5;%p1%dm,
-+      setab=\E[48;5;%p1%dm,
-+      setf=%?%p1%{7}%>%t\E[38;5;%p1%dm%e\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m%;,
-+      setb=%?%p1%{7}%>%t\E[48;5;%p1%dm%e\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m%;,
-+      initc=\E]4;%p1%d;rgb\:%p2%{65535}%*%{1000}%/%4.4X/%p3%{65535}%*%{1000}%/%4.4X/%p4%{65535}%*%{1000}%/%4.4X\E\\,
-+      sc=\E7,
-+      s0ds=\E(B,
-+      s1ds=\E(0,
-+      s2ds=\E*B,
-+      s3ds=\E+B,
-+      u6=\E[%i%d;%dR,
-+      u7=\E[6n,
-+      u8=\E[?1;2c,
-+      u9=\E[c,
-+      tsl=\E]2;,
-+      fsl=\007,
-+      dsl=\E]2;\007,
-+
- # mrxvt 0.5.3
- #
- # mrxvt is based on rxvt 2.7.11, but has by default XTERM_FKEYS defined, which
diff --git a/package/ncurses/patches/101-ncurses-5.6-20080628-kbs.patch b/package/ncurses/patches/101-ncurses-5.6-20080628-kbs.patch
deleted file mode 100644 (file)
index 3b3abd7..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
---- a/misc/terminfo.src
-+++ b/misc/terminfo.src
-@@ -3054,6 +3054,7 @@ xterm-xfree86|xterm terminal emulator (X
- # This version reflects the current xterm features.
- xterm-new|modern xterm terminal emulator,
-       npc,
-+      kbs=\177,
-       indn=\E[%p1%dS, kDC=\E[3;2~, kEND=\E[1;2F, kHOM=\E[1;2H,
-       kIC=\E[2;2~, kNXT=\E[6;2~, kPRV=\E[5;2~, kb2=\EOE,
-       kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
-@@ -3818,6 +3819,7 @@ mlterm+pcfkeys|fragment for PC-style fke
- rxvt-basic|rxvt terminal base (X Window System),
-       OTbs, am, bce, eo, mir, msgr, xenl, xon,
-       cols#80, it#8, lines#24,
-+      kbs=\177,
-       acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
-       bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l,
-       clear=\E[H\E[2J, cnorm=\E[?25h, cr=^M,
-@@ -3828,7 +3830,7 @@ rxvt-basic|rxvt terminal base (X Window 
-       enacs=\E(B\E)0, flash=\E[?5h\E[?5l, home=\E[H, ht=^I,
-       hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L,
-       ind=^J, is1=\E[?47l\E=\E[?1l,
--      is2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l, kbs=^H,
-+      is2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l,
-       kcbt=\E[Z, kmous=\E[M, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O,
-       rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmkx=\E>, rmso=\E[27m,
-       rmul=\E[24m,
-@@ -4541,6 +4543,7 @@ eterm|gnu emacs term.el terminal emulati
- screen|VT 100/ANSI X3.64 virtual terminal,
-       OTbs, OTpt, am, km, mir, msgr, xenl, G0,
-       colors#8, cols#80, it#8, lines#24, pairs#64,
-+      kbs=\177,
-       acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
-       bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
-       clear=\E[H\E[J, cnorm=\E[34h\E[?25h, cr=^M,
-@@ -4550,7 +4553,7 @@ screen|VT 100/ANSI X3.64 virtual termina
-       cvvis=\E[34l, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM,
-       dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E(B\E)0,
-       flash=\Eg, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@,
--      il=\E[%p1%dL, il1=\E[L, ind=^J, is2=\E)0, kbs=^H, kcbt=\E[Z,
-+      il=\E[%p1%dL, il1=\E[L, ind=^J, is2=\E)0, kcbt=\E[Z,
-       kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
-       kdch1=\E[3~, kend=\E[4~, kf1=\EOP, kf10=\E[21~,
-       kf11=\E[23~, kf12=\E[24~, kf2=\EOQ, kf3=\EOR, kf4=\EOS,
-@@ -4655,6 +4658,7 @@ screen.xterm-r6|screen customized for X1
- # on Solaris because Sun's curses implementation gets confused.
- screen.teraterm|disable ncv in teraterm,
-       ncv#127,
-+      kbs=^H,
-       acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260i\316j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376,
-       use=screen+fkeys, use=screen,
- # Other terminals
diff --git a/package/ncurses/patches/500-cross.patch b/package/ncurses/patches/500-cross.patch
deleted file mode 100644 (file)
index ace6252..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/aclocal.m4
-+++ b/aclocal.m4
-@@ -4298,7 +4298,7 @@ CF_EOF
-                       EXTRA_LDFLAGS="-Wl,-rpath,\${libdir} $EXTRA_LDFLAGS"
-               fi
-               CF_SHARED_SONAME
--              MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $[@]'
-+              MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-soname,'$cf_shared_soname',-stats,$(LDFLAGS) -lc -o $[@]'
-               ;;
-       openbsd[[2-9]].*)
-               if test "$DFT_LWR_MODEL" = "shared" ; then
diff --git a/package/ncurses/patches/900-terminfo.patch b/package/ncurses/patches/900-terminfo.patch
deleted file mode 100644 (file)
index 7aab3db..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
---- a/misc/terminfo.src
-+++ b/misc/terminfo.src
-@@ -3707,12 +3707,11 @@ konsole-xf3x|KDE console window with key
- # The value for kbs reflects local customization rather than the settings used
- # for XFree86 xterm.
- konsole-xf4x|KDE console window with keyboard for XFree86 4.x xterm,
--      kend=\EOF, khome=\EOH, use=konsole+pcfkeys,
--      use=konsole-vt100,
--# Konsole does not implement shifted cursor-keys.
--konsole+pcfkeys|konsole subset of xterm+pcfkeys,
--      kLFT@, kRIT@, kcbt=\E[Z, kind@, kri@, kDN@, kUP@, use=xterm+pcc2,
--      use=xterm+pcf0,
-+      kend=\EOF, kf1=\EOP, kf13=\EO2P, kf14=\EO2Q, kf15=\EO2R,
-+      kf16=\EO2S, kf17=\E[15;2~, kf18=\E[17;2~, kf19=\E[18;2~,
-+      kf2=\EOQ, kf20=\E[19;2~, kf21=\E[20;2~, kf22=\E[21;2~,
-+      kf23=\E[23;2~, kf24=\E[24;2~, kf3=\EOR, kf4=\EOS,
-+      khome=\EOH, use=konsole-vt100,
- # KDE's "vt100" keyboard has no relationship to any terminal that DEC made, but
- # it is still useful for deriving the other entries.
- konsole-vt100|KDE console window with vt100 (sic) keyboard,
diff --git a/package/ocf-crypto-headers/Makefile b/package/ocf-crypto-headers/Makefile
deleted file mode 100644 (file)
index fee2a37..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-#
-# Copyright (C) 2008-2010 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=ocf-crypto-headers
-PKG_VERSION:=20110720
-PKG_RELEASE:=1
-
-PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/ocf-crypto-headers
-  SECTION:=utils
-  CATEGORY:=Utilities
-  TITLE:=OCF-Linux cryptodev header
-  PKGARCH:=all
-  URL:=http://ocf-linux.sourceforge.net/
-endef
-
-define Build/Configure
-endef
-
-define Build/Compile
-endef
-
-define Build/InstallDev
-       mkdir -p $(1)/usr/include/crypto
-       $(CP) ./src/cryptodev.h $(1)/usr/include/crypto
-endef
-
-$(eval $(call BuildPackage,ocf-crypto-headers))
diff --git a/package/ocf-crypto-headers/src/cryptodev.h b/package/ocf-crypto-headers/src/cryptodev.h
deleted file mode 100644 (file)
index cca0ec8..0000000
+++ /dev/null
@@ -1,480 +0,0 @@
-/*     $FreeBSD: src/sys/opencrypto/cryptodev.h,v 1.25 2007/05/09 19:37:02 gnn Exp $   */
-/*     $OpenBSD: cryptodev.h,v 1.31 2002/06/11 11:14:29 beck Exp $     */
-
-/*-
- * Linux port done by David McCullough <david_mccullough@mcafee.com>
- * Copyright (C) 2006-2010 David McCullough
- * Copyright (C) 2004-2005 Intel Corporation.
- * The license and original author are listed below.
- *
- * The author of this code is Angelos D. Keromytis (angelos@cis.upenn.edu)
- * Copyright (c) 2002-2006 Sam Leffler, Errno Consulting
- *
- * This code was written by Angelos D. Keromytis in Athens, Greece, in
- * February 2000. Network Security Technologies Inc. (NSTI) kindly
- * supported the development of this code.
- *
- * Copyright (c) 2000 Angelos D. Keromytis
- *
- * Permission to use, copy, and modify this software with or without fee
- * is hereby granted, provided that this entire notice is included in
- * all source code copies of any software which is or includes a copy or
- * modification of this software.
- *
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTY. IN PARTICULAR, NONE OF THE AUTHORS MAKES ANY
- * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE
- * MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR
- * PURPOSE.
- *
- * Copyright (c) 2001 Theo de Raadt
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * Effort sponsored in part by the Defense Advanced Research Projects
- * Agency (DARPA) and Air Force Research Laboratory, Air Force
- * Materiel Command, USAF, under agreement number F30602-01-2-0537.
- *
- */
-
-#ifndef _CRYPTO_CRYPTO_H_
-#define _CRYPTO_CRYPTO_H_
-
-/* Some initial values */
-#define CRYPTO_DRIVERS_INITIAL 4
-#define CRYPTO_SW_SESSIONS     32
-
-/* Hash values */
-#define NULL_HASH_LEN          0
-#define MD5_HASH_LEN           16
-#define SHA1_HASH_LEN          20
-#define RIPEMD160_HASH_LEN     20
-#define SHA2_256_HASH_LEN      32
-#define SHA2_384_HASH_LEN      48
-#define SHA2_512_HASH_LEN      64
-#define MD5_KPDK_HASH_LEN      16
-#define SHA1_KPDK_HASH_LEN     20
-/* Maximum hash algorithm result length */
-#define HASH_MAX_LEN           SHA2_512_HASH_LEN /* Keep this updated */
-
-/* HMAC values */
-#define NULL_HMAC_BLOCK_LEN                    1
-#define MD5_HMAC_BLOCK_LEN                     64
-#define SHA1_HMAC_BLOCK_LEN                    64
-#define RIPEMD160_HMAC_BLOCK_LEN       64
-#define SHA2_256_HMAC_BLOCK_LEN                64
-#define SHA2_384_HMAC_BLOCK_LEN                128
-#define SHA2_512_HMAC_BLOCK_LEN                128
-/* Maximum HMAC block length */
-#define HMAC_MAX_BLOCK_LEN             SHA2_512_HMAC_BLOCK_LEN /* Keep this updated */
-#define HMAC_IPAD_VAL                  0x36
-#define HMAC_OPAD_VAL                  0x5C
-
-/* Encryption algorithm block sizes */
-#define NULL_BLOCK_LEN                 1
-#define DES_BLOCK_LEN                  8
-#define DES3_BLOCK_LEN                 8
-#define BLOWFISH_BLOCK_LEN             8
-#define SKIPJACK_BLOCK_LEN             8
-#define CAST128_BLOCK_LEN              8
-#define RIJNDAEL128_BLOCK_LEN  16
-#define AES_BLOCK_LEN                  RIJNDAEL128_BLOCK_LEN
-#define CAMELLIA_BLOCK_LEN             16
-#define ARC4_BLOCK_LEN                 1
-#define EALG_MAX_BLOCK_LEN             AES_BLOCK_LEN /* Keep this updated */
-
-/* Encryption algorithm min and max key sizes */
-#define NULL_MIN_KEY_LEN               0
-#define NULL_MAX_KEY_LEN               0
-#define DES_MIN_KEY_LEN                        8
-#define DES_MAX_KEY_LEN                        8
-#define DES3_MIN_KEY_LEN               24
-#define DES3_MAX_KEY_LEN               24
-#define BLOWFISH_MIN_KEY_LEN   4
-#define BLOWFISH_MAX_KEY_LEN   56
-#define SKIPJACK_MIN_KEY_LEN   10
-#define SKIPJACK_MAX_KEY_LEN   10
-#define CAST128_MIN_KEY_LEN            5
-#define CAST128_MAX_KEY_LEN            16
-#define RIJNDAEL128_MIN_KEY_LEN        16
-#define RIJNDAEL128_MAX_KEY_LEN        32
-#define AES_MIN_KEY_LEN                        RIJNDAEL128_MIN_KEY_LEN
-#define AES_MAX_KEY_LEN                        RIJNDAEL128_MAX_KEY_LEN
-#define CAMELLIA_MIN_KEY_LEN   16
-#define CAMELLIA_MAX_KEY_LEN   32
-#define ARC4_MIN_KEY_LEN               1
-#define ARC4_MAX_KEY_LEN               256
-
-/* Max size of data that can be processed */
-#define CRYPTO_MAX_DATA_LEN            64*1024 - 1
-
-#define CRYPTO_ALGORITHM_MIN   1
-#define CRYPTO_DES_CBC                 1
-#define CRYPTO_3DES_CBC                        2
-#define CRYPTO_BLF_CBC                 3
-#define CRYPTO_CAST_CBC                        4
-#define CRYPTO_SKIPJACK_CBC            5
-#define CRYPTO_MD5_HMAC                        6
-#define CRYPTO_SHA1_HMAC               7
-#define CRYPTO_RIPEMD160_HMAC  8
-#define CRYPTO_MD5_KPDK                        9
-#define CRYPTO_SHA1_KPDK               10
-#define CRYPTO_RIJNDAEL128_CBC 11 /* 128 bit blocksize */
-#define CRYPTO_AES_CBC                 11 /* 128 bit blocksize -- the same as above */
-#define CRYPTO_ARC4                            12
-#define CRYPTO_MD5                             13
-#define CRYPTO_SHA1                            14
-#define CRYPTO_NULL_HMAC               15
-#define CRYPTO_NULL_CBC                        16
-#define CRYPTO_DEFLATE_COMP            17 /* Deflate compression algorithm */
-#define CRYPTO_SHA2_256_HMAC   18
-#define CRYPTO_SHA2_384_HMAC   19
-#define CRYPTO_SHA2_512_HMAC   20
-#define CRYPTO_CAMELLIA_CBC            21
-#define CRYPTO_SHA2_256                        22
-#define CRYPTO_SHA2_384                        23
-#define CRYPTO_SHA2_512                        24
-#define CRYPTO_RIPEMD160               25
-#define        CRYPTO_LZS_COMP                 26
-#define CRYPTO_ALGORITHM_MAX   26 /* Keep updated - see above */
-
-/* Algorithm flags */
-#define CRYPTO_ALG_FLAG_SUPPORTED      0x01 /* Algorithm is supported */
-#define CRYPTO_ALG_FLAG_RNG_ENABLE     0x02 /* Has HW RNG for DH/DSA */
-#define CRYPTO_ALG_FLAG_DSA_SHA                0x04 /* Can do SHA on msg */
-
-/*
- * Crypto driver/device flags.  They can set in the crid
- * parameter when creating a session or submitting a key
- * op to affect the device/driver assigned.  If neither
- * of these are specified then the crid is assumed to hold
- * the driver id of an existing (and suitable) device that
- * must be used to satisfy the request.
- */
-#define CRYPTO_FLAG_HARDWARE   0x01000000      /* hardware accelerated */
-#define CRYPTO_FLAG_SOFTWARE   0x02000000      /* software implementation */
-
-/* NB: deprecated */
-struct session_op {
-       u_int32_t       cipher;         /* ie. CRYPTO_DES_CBC */
-       u_int32_t       mac;            /* ie. CRYPTO_MD5_HMAC */
-
-       u_int32_t       keylen;         /* cipher key */
-       caddr_t         key;
-       int             mackeylen;      /* mac key */
-       caddr_t         mackey;
-
-       u_int32_t       ses;            /* returns: session # */ 
-};
-
-struct session2_op {
-       u_int32_t       cipher;         /* ie. CRYPTO_DES_CBC */
-       u_int32_t       mac;            /* ie. CRYPTO_MD5_HMAC */
-
-       u_int32_t       keylen;         /* cipher key */
-       caddr_t         key;
-       int             mackeylen;      /* mac key */
-       caddr_t         mackey;
-
-       u_int32_t       ses;            /* returns: session # */ 
-       int             crid;           /* driver id + flags (rw) */
-       int             pad[4];         /* for future expansion */
-};
-
-struct crypt_op {
-       u_int32_t       ses;
-       u_int16_t       op;             /* i.e. COP_ENCRYPT */
-#define COP_NONE       0
-#define COP_ENCRYPT    1
-#define COP_DECRYPT    2
-       u_int16_t       flags;
-#define        COP_F_BATCH     0x0008          /* Batch op if possible */
-       u_int           len;
-       caddr_t         src, dst;       /* become iov[] inside kernel */
-       caddr_t         mac;            /* must be big enough for chosen MAC */
-       caddr_t         iv;
-};
-
-/*
- * Parameters for looking up a crypto driver/device by
- * device name or by id.  The latter are returned for
- * created sessions (crid) and completed key operations.
- */
-struct crypt_find_op {
-       int             crid;           /* driver id + flags */
-       char            name[32];       /* device/driver name */
-};
-
-/* bignum parameter, in packed bytes, ... */
-struct crparam {
-       caddr_t         crp_p;
-       u_int           crp_nbits;
-};
-
-#define CRK_MAXPARAM   8
-
-struct crypt_kop {
-       u_int           crk_op;         /* ie. CRK_MOD_EXP or other */
-       u_int           crk_status;     /* return status */
-       u_short         crk_iparams;    /* # of input parameters */
-       u_short         crk_oparams;    /* # of output parameters */
-       u_int           crk_crid;       /* NB: only used by CIOCKEY2 (rw) */
-       struct crparam  crk_param[CRK_MAXPARAM];
-};
-#define CRK_ALGORITM_MIN       0
-#define CRK_MOD_EXP            0
-#define CRK_MOD_EXP_CRT                1
-#define CRK_DSA_SIGN           2
-#define CRK_DSA_VERIFY         3
-#define CRK_DH_COMPUTE_KEY     4
-#define CRK_ALGORITHM_MAX      4 /* Keep updated - see below */
-
-#define CRF_MOD_EXP            (1 << CRK_MOD_EXP)
-#define CRF_MOD_EXP_CRT                (1 << CRK_MOD_EXP_CRT)
-#define CRF_DSA_SIGN           (1 << CRK_DSA_SIGN)
-#define CRF_DSA_VERIFY         (1 << CRK_DSA_VERIFY)
-#define CRF_DH_COMPUTE_KEY     (1 << CRK_DH_COMPUTE_KEY)
-
-/*
- * done against open of /dev/crypto, to get a cloned descriptor.
- * Please use F_SETFD against the cloned descriptor.
- */
-#define CRIOGET                _IOWR('c', 100, u_int32_t)
-#define CRIOASYMFEAT   CIOCASYMFEAT
-#define CRIOFINDDEV    CIOCFINDDEV
-
-/* the following are done against the cloned descriptor */
-#define CIOCGSESSION   _IOWR('c', 101, struct session_op)
-#define CIOCFSESSION   _IOW('c', 102, u_int32_t)
-#define CIOCCRYPT      _IOWR('c', 103, struct crypt_op)
-#define CIOCKEY                _IOWR('c', 104, struct crypt_kop)
-#define CIOCASYMFEAT   _IOR('c', 105, u_int32_t)
-#define CIOCGSESSION2  _IOWR('c', 106, struct session2_op)
-#define CIOCKEY2       _IOWR('c', 107, struct crypt_kop)
-#define CIOCFINDDEV    _IOWR('c', 108, struct crypt_find_op)
-
-struct cryptotstat {
-       struct timespec acc;            /* total accumulated time */
-       struct timespec min;            /* min time */
-       struct timespec max;            /* max time */
-       u_int32_t       count;          /* number of observations */
-};
-
-struct cryptostats {
-       u_int32_t       cs_ops;         /* symmetric crypto ops submitted */
-       u_int32_t       cs_errs;        /* symmetric crypto ops that failed */
-       u_int32_t       cs_kops;        /* asymetric/key ops submitted */
-       u_int32_t       cs_kerrs;       /* asymetric/key ops that failed */
-       u_int32_t       cs_intrs;       /* crypto swi thread activations */
-       u_int32_t       cs_rets;        /* crypto return thread activations */
-       u_int32_t       cs_blocks;      /* symmetric op driver block */
-       u_int32_t       cs_kblocks;     /* symmetric op driver block */
-       /*
-        * When CRYPTO_TIMING is defined at compile time and the
-        * sysctl debug.crypto is set to 1, the crypto system will
-        * accumulate statistics about how long it takes to process
-        * crypto requests at various points during processing.
-        */
-       struct cryptotstat cs_invoke;   /* crypto_dipsatch -> crypto_invoke */
-       struct cryptotstat cs_done;     /* crypto_invoke -> crypto_done */
-       struct cryptotstat cs_cb;       /* crypto_done -> callback */
-       struct cryptotstat cs_finis;    /* callback -> callback return */
-
-       u_int32_t       cs_drops;               /* crypto ops dropped due to congestion */
-};
-
-#ifdef __KERNEL__
-
-/* Standard initialization structure beginning */
-struct cryptoini {
-       int             cri_alg;        /* Algorithm to use */
-       int             cri_klen;       /* Key length, in bits */
-       int             cri_mlen;       /* Number of bytes we want from the
-                                          entire hash. 0 means all. */
-       caddr_t         cri_key;        /* key to use */
-       u_int8_t        cri_iv[EALG_MAX_BLOCK_LEN];     /* IV to use */
-       struct cryptoini *cri_next;
-};
-
-/* Describe boundaries of a single crypto operation */
-struct cryptodesc {
-       int             crd_skip;       /* How many bytes to ignore from start */
-       int             crd_len;        /* How many bytes to process */
-       int             crd_inject;     /* Where to inject results, if applicable */
-       int             crd_flags;
-
-#define CRD_F_ENCRYPT          0x01    /* Set when doing encryption */
-#define CRD_F_IV_PRESENT       0x02    /* When encrypting, IV is already in
-                                          place, so don't copy. */
-#define CRD_F_IV_EXPLICIT      0x04    /* IV explicitly provided */
-#define CRD_F_DSA_SHA_NEEDED   0x08    /* Compute SHA-1 of buffer for DSA */
-#define CRD_F_KEY_EXPLICIT     0x10    /* Key explicitly provided */
-#define CRD_F_COMP             0x0f    /* Set when doing compression */
-
-       struct cryptoini        CRD_INI; /* Initialization/context data */
-#define crd_iv         CRD_INI.cri_iv
-#define crd_key                CRD_INI.cri_key
-#define crd_alg                CRD_INI.cri_alg
-#define crd_klen       CRD_INI.cri_klen
-#define crd_mlen       CRD_INI.cri_mlen
-
-       struct cryptodesc *crd_next;
-};
-
-/* Structure describing complete operation */
-struct cryptop {
-       struct list_head crp_next;
-       wait_queue_head_t crp_waitq;
-
-       u_int64_t       crp_sid;        /* Session ID */
-       int             crp_ilen;       /* Input data total length */
-       int             crp_olen;       /* Result total length */
-
-       int             crp_etype;      /*
-                                        * Error type (zero means no error).
-                                        * All error codes except EAGAIN
-                                        * indicate possible data corruption (as in,
-                                        * the data have been touched). On all
-                                        * errors, the crp_sid may have changed
-                                        * (reset to a new one), so the caller
-                                        * should always check and use the new
-                                        * value on future requests.
-                                        */
-       int             crp_flags;
-
-#define CRYPTO_F_SKBUF         0x0001  /* Input/output are skbuf chains */
-#define CRYPTO_F_IOV           0x0002  /* Input/output are uio */
-#define CRYPTO_F_REL           0x0004  /* Must return data in same place */
-#define CRYPTO_F_BATCH         0x0008  /* Batch op if possible */
-#define CRYPTO_F_CBIMM         0x0010  /* Do callback immediately */
-#define CRYPTO_F_DONE          0x0020  /* Operation completed */
-#define CRYPTO_F_CBIFSYNC      0x0040  /* Do CBIMM if op is synchronous */
-
-       caddr_t         crp_buf;        /* Data to be processed */
-       caddr_t         crp_opaque;     /* Opaque pointer, passed along */
-       struct cryptodesc *crp_desc;    /* Linked list of processing descriptors */
-
-       int (*crp_callback)(struct cryptop *); /* Callback function */
-};
-
-#define CRYPTO_BUF_CONTIG      0x0
-#define CRYPTO_BUF_IOV         0x1
-#define CRYPTO_BUF_SKBUF               0x2
-
-#define CRYPTO_OP_DECRYPT      0x0
-#define CRYPTO_OP_ENCRYPT      0x1
-
-/*
- * Hints passed to process methods.
- */
-#define CRYPTO_HINT_MORE       0x1     /* more ops coming shortly */
-
-struct cryptkop {
-       struct list_head krp_next;
-       wait_queue_head_t krp_waitq;
-
-       int             krp_flags;
-#define CRYPTO_KF_DONE         0x0001  /* Operation completed */
-#define CRYPTO_KF_CBIMM                0x0002  /* Do callback immediately */
-
-       u_int           krp_op;         /* ie. CRK_MOD_EXP or other */
-       u_int           krp_status;     /* return status */
-       u_short         krp_iparams;    /* # of input parameters */
-       u_short         krp_oparams;    /* # of output parameters */
-       u_int           krp_crid;       /* desired device, etc. */
-       u_int32_t       krp_hid;
-       struct crparam  krp_param[CRK_MAXPARAM];        /* kvm */
-       int             (*krp_callback)(struct cryptkop *);
-};
-
-#include <ocf-compat.h>
-
-/*
- * Session ids are 64 bits.  The lower 32 bits contain a "local id" which
- * is a driver-private session identifier.  The upper 32 bits contain a
- * "hardware id" used by the core crypto code to identify the driver and
- * a copy of the driver's capabilities that can be used by client code to
- * optimize operation.
- */
-#define CRYPTO_SESID2HID(_sid) (((_sid) >> 32) & 0x00ffffff)
-#define CRYPTO_SESID2CAPS(_sid)        (((_sid) >> 32) & 0xff000000)
-#define CRYPTO_SESID2LID(_sid) (((u_int32_t) (_sid)) & 0xffffffff)
-
-extern int crypto_newsession(u_int64_t *sid, struct cryptoini *cri, int hard);
-extern int crypto_freesession(u_int64_t sid);
-#define CRYPTOCAP_F_HARDWARE   CRYPTO_FLAG_HARDWARE
-#define CRYPTOCAP_F_SOFTWARE   CRYPTO_FLAG_SOFTWARE
-#define CRYPTOCAP_F_SYNC       0x04000000      /* operates synchronously */
-extern int32_t crypto_get_driverid(device_t dev, int flags);
-extern int crypto_find_driver(const char *);
-extern device_t crypto_find_device_byhid(int hid);
-extern int crypto_getcaps(int hid);
-extern int crypto_register(u_int32_t driverid, int alg, u_int16_t maxoplen,
-           u_int32_t flags);
-extern int crypto_kregister(u_int32_t, int, u_int32_t);
-extern int crypto_unregister(u_int32_t driverid, int alg);
-extern int crypto_unregister_all(u_int32_t driverid);
-extern int crypto_dispatch(struct cryptop *crp);
-extern int crypto_kdispatch(struct cryptkop *);
-#define CRYPTO_SYMQ    0x1
-#define CRYPTO_ASYMQ   0x2
-extern int crypto_unblock(u_int32_t, int);
-extern void crypto_done(struct cryptop *crp);
-extern void crypto_kdone(struct cryptkop *);
-extern int crypto_getfeat(int *);
-
-extern void crypto_freereq(struct cryptop *crp);
-extern struct cryptop *crypto_getreq(int num);
-
-extern  int crypto_usercrypto;      /* userland may do crypto requests */
-extern  int crypto_userasymcrypto;  /* userland may do asym crypto reqs */
-extern  int crypto_devallowsoft;    /* only use hardware crypto */
-
-/*
- * random number support,  crypto_unregister_all will unregister
- */
-extern int crypto_rregister(u_int32_t driverid,
-               int (*read_random)(void *arg, u_int32_t *buf, int len), void *arg);
-extern int crypto_runregister_all(u_int32_t driverid);
-
-/*
- * Crypto-related utility routines used mainly by drivers.
- *
- * XXX these don't really belong here; but for now they're
- *     kept apart from the rest of the system.
- */
-struct uio;
-extern void cuio_copydata(struct uio* uio, int off, int len, caddr_t cp);
-extern void cuio_copyback(struct uio* uio, int off, int len, caddr_t cp);
-extern struct iovec *cuio_getptr(struct uio *uio, int loc, int *off);
-
-extern void crypto_copyback(int flags, caddr_t buf, int off, int size,
-           caddr_t in);
-extern void crypto_copydata(int flags, caddr_t buf, int off, int size,
-           caddr_t out);
-extern int crypto_apply(int flags, caddr_t buf, int off, int len,
-           int (*f)(void *, void *, u_int), void *arg);
-
-#endif /* __KERNEL__ */
-#endif /* _CRYPTO_CRYPTO_H_ */
diff --git a/package/openssl/Config.in b/package/openssl/Config.in
deleted file mode 100644 (file)
index 11591de..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-menu "Configuration"
-       depends on PACKAGE_libopenssl
-
-config OPENSSL_ENGINE_CRYPTO
-       bool
-       prompt "Crypto acceleration support"
-
-config OPENSSL_ENGINE_DIGEST
-       bool
-       depends OPENSSL_ENGINE_CRYPTO
-       prompt "Digests acceleration support"
-
-endmenu
diff --git a/package/openssl/Makefile b/package/openssl/Makefile
deleted file mode 100644 (file)
index cfc3b3d..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-#
-# Copyright (C) 2006-2012 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=openssl
-PKG_VERSION:=1.0.1c
-PKG_RELEASE:=1
-
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=http://www.openssl.org/source/ \
-       ftp://ftp.funet.fi/pub/crypt/cryptography/libs/openssl/source/ \
-       ftp://ftp.webmonster.de/pub/openssl/source/ \
-       ftp://ftp.sunet.se/pub/security/tools/net/openssl/source/
-PKG_MD5SUM:=ae412727c8c15b67880aef7bd2999b2e
-
-PKG_BUILD_DEPENDS:=ocf-crypto-headers
-PKG_CONFIG_DEPENDS:=CONFIG_OPENSSL_ENGINE_CRYPTO CONFIG_OPENSSL_ENGINE_DIGEST
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/openssl/Default
-  TITLE:=Open source SSL toolkit
-  URL:=http://www.openssl.org/
-endef
-
-define Package/libopenssl/config
-source "$(SOURCE)/Config.in"
-endef
-
-define Package/openssl/Default/description
-The OpenSSL Project is a collaborative effort to develop a robust,
-commercial-grade, full-featured, and Open Source toolkit implementing the Secure
-Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) protocols as well
-as a full-strength general purpose cryptography library.
-endef
-
-define Package/libopenssl
-$(call Package/openssl/Default)
-  SECTION:=libs
-  SUBMENU:=SSL
-  CATEGORY:=Libraries
-  DEPENDS:=+zlib
-  TITLE+= (libraries)
-  MENU:=1
-endef
-
-define Package/libopenssl/description
-$(call Package/openssl/Default/description)
-This package contains the OpenSSL shared libraries, needed by other programs.
-endef
-
-define Package/openssl-util
-  $(call Package/openssl/Default)
-  SECTION:=utils
-  CATEGORY:=Utilities
-  DEPENDS:=+libopenssl
-  TITLE+= (utility)
-endef
-
-define Package/openssl-util/conffiles
-/etc/ssl/openssl.cnf
-endef
-
-define Package/openssl-util/description
-$(call Package/openssl/Default/description)
-This package contains the OpenSSL command-line utility.
-endef
-
-
-OPENSSL_NO_CIPHERS:= no-idea no-md2 no-mdc2 no-rc5 no-sha0 no-smime \
-       no-rmd160 no-aes192 no-ripemd no-camellia no-ans1 no-krb5
-OPENSSL_OPTIONS:= shared no-ec no-err no-hw no-threads zlib-dynamic no-sse2
-
-ifdef CONFIG_OPENSSL_ENGINE_CRYPTO
-  OPENSSL_OPTIONS += -DHAVE_CRYPTODEV
-  ifdef CONFIG_OPENSSL_ENGINE_DIGEST
-    OPENSSL_OPTIONS += -DUSE_CRYPTODEV_DIGESTS
-  endif
-else
-  OPENSSL_OPTIONS += no-engines
-endif
-
-ifeq ($(CONFIG_x86_64),y)
-  OPENSSL_TARGET:=linux-x86_64
-else
-  OPENSSL_OPTIONS+=no-sse2
-  ifeq ($(CONFIG_mips)$(CONFIG_mipsel),y)
-    OPENSSL_TARGET:=linux-mips-openwrt
-  else
-    OPENSSL_TARGET:=linux-generic-openwrt
-    OPENSSL_OPTIONS+=no-perlasm
-  endif
-endif
-
-define Build/Configure
-       (cd $(PKG_BUILD_DIR); \
-               ./Configure $(OPENSSL_TARGET) \
-                       --prefix=/usr \
-                       --openssldir=/etc/ssl \
-                       $(TARGET_CPPFLAGS) \
-                       $(TARGET_LDFLAGS) -ldl \
-                       -DOPENSSL_SMALL_FOOTPRINT \
-                       $(OPENSSL_NO_CIPHERS) \
-                       $(OPENSSL_OPTIONS) \
-       )
-endef
-
-TARGET_CFLAGS += $(FPIC)
-
-define Build/Compile
-       # XXX: OpenSSL "make depend" will look for installed headers before its own,
-       # so remove installed stuff first
-       -$(SUBMAKE) -j1 clean-staging
-       $(MAKE) -C $(PKG_BUILD_DIR) \
-               MAKEDEPPROG="$(TARGET_CROSS)gcc" \
-               OPENWRT_OPTIMIZATION_FLAGS="$(TARGET_CFLAGS)" \
-               $(OPENSSL_MAKEFLAGS) \
-               depend
-       $(_SINGLE)$(MAKE) -C $(PKG_BUILD_DIR) \
-               CC="$(TARGET_CC)" \
-               AR="$(TARGET_CROSS)ar r" \
-               RANLIB="$(TARGET_CROSS)ranlib" \
-               OPENWRT_OPTIMIZATION_FLAGS="$(TARGET_CFLAGS)" \
-               $(OPENSSL_MAKEFLAGS) \
-               all
-       $(MAKE) -C $(PKG_BUILD_DIR) \
-               CC="$(TARGET_CC)" \
-               AR="$(TARGET_CROSS)ar r" \
-               RANLIB="$(TARGET_CROSS)ranlib" \
-               OPENWRT_OPTIMIZATION_FLAGS="$(TARGET_CFLAGS)" \
-               $(OPENSSL_MAKEFLAGS) \
-               build-shared
-       # Work around openssl build bug to link libssl.so with libcrypto.so.
-       -rm $(PKG_BUILD_DIR)/libssl.so.*.*.*
-       $(MAKE) -C $(PKG_BUILD_DIR) \
-               CC="$(TARGET_CC)" \
-               OPENWRT_OPTIMIZATION_FLAGS="$(TARGET_CFLAGS)" \
-               $(OPENSSL_MAKEFLAGS) \
-               do_linux-shared
-       $(MAKE) -C $(PKG_BUILD_DIR) \
-               CC="$(TARGET_CC)" \
-               INSTALL_PREFIX="$(PKG_INSTALL_DIR)" \
-               $(OPENSSL_MAKEFLAGS) \
-               install
-endef
-
-define Build/InstallDev
-       $(INSTALL_DIR) $(1)/usr/include
-       $(CP) $(PKG_INSTALL_DIR)/usr/include/openssl $(1)/usr/include/
-       $(INSTALL_DIR) $(1)/usr/lib/
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{crypto,ssl}.{a,so*} $(1)/usr/lib/
-       $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/{openssl,libcrypto,libssl}.pc $(1)/usr/lib/pkgconfig/
-       [ -n "$(TARGET_LDFLAGS)" ] && $(SED) 's#$(TARGET_LDFLAGS)##g' $(1)/usr/lib/pkgconfig/{openssl,libcrypto,libssl}.pc || true
-endef
-
-define Package/libopenssl/install
-       $(INSTALL_DIR) $(1)/usr/lib
-       $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libcrypto.so.* $(1)/usr/lib/
-       $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libssl.so.* $(1)/usr/lib/
-endef
-
-define Package/openssl-util/install
-       $(INSTALL_DIR) $(1)/etc/ssl
-       $(CP) $(PKG_INSTALL_DIR)/etc/ssl/openssl.cnf $(1)/etc/ssl/
-       $(INSTALL_DIR) $(1)/etc/ssl/certs
-       $(INSTALL_DIR) $(1)/etc/ssl/private
-       chmod 0700 $(1)/etc/ssl/private
-       $(INSTALL_DIR) $(1)/usr/bin
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/openssl $(1)/usr/bin/
-endef
-
-$(eval $(call BuildPackage,libopenssl))
-$(eval $(call BuildPackage,openssl-util))
diff --git a/package/openssl/patches/110-optimize-for-size.patch b/package/openssl/patches/110-optimize-for-size.patch
deleted file mode 100644 (file)
index f301017..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/Configure
-+++ b/Configure
-@@ -401,6 +401,10 @@ my %table=(
- "linux-alpha-ccc","ccc:-fast -readonly_strings -DL_ENDIAN -DTERMIO::-D_REENTRANT:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL:${alpha_asm}",
- "linux-alpha+bwx-ccc","ccc:-fast -readonly_strings -DL_ENDIAN -DTERMIO::-D_REENTRANT:::SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL:${alpha_asm}",
-+# OpenWrt targets
-+"linux-mips-openwrt","gcc:-DTERMIO \$(OPENWRT_OPTIMIZATION_FLAGS) -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${mips32_asm}:o32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"linux-generic-openwrt","gcc:-DTERMIO \$(OPENWRT_OPTIMIZATION_FLAGS) -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+
- # Android: linux-* but without -DTERMIO and pointers to headers and libs.
- "android","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
- "android-x86","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:".eval{my $asm=${x86_elf_asm};$asm=~s/:elf/:android/;$asm}.":dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
diff --git a/package/openssl/patches/130-perl-path.patch b/package/openssl/patches/130-perl-path.patch
deleted file mode 100644 (file)
index dd4fa54..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
---- a/Configure
-+++ b/Configure
-@@ -1,4 +1,4 @@
--:
-+#!/usr/bin/perl
- eval 'exec perl -S $0 ${1+"$@"}'
-     if $running_under_some_shell;
- ##
---- a/tools/c_rehash.in
-+++ b/tools/c_rehash.in
-@@ -1,4 +1,4 @@
--#!/usr/local/bin/perl
-+#!/usr/bin/perl
- # Perl c_rehash script, scan all files in a directory
---- a/util/clean-depend.pl
-+++ b/util/clean-depend.pl
-@@ -1,4 +1,4 @@
--#!/usr/local/bin/perl -w
-+#!/usr/bin/perl
- # Clean the dependency list in a makefile of standard includes...
- # Written by Ben Laurie <ben@algroup.co.uk> 19 Jan 1999
---- a/util/mkdef.pl
-+++ b/util/mkdef.pl
-@@ -1,4 +1,4 @@
--#!/usr/local/bin/perl -w
-+#!/usr/bin/perl
- #
- # generate a .def file
- #
---- a/util/mkerr.pl
-+++ b/util/mkerr.pl
-@@ -1,4 +1,4 @@
--#!/usr/local/bin/perl -w
-+#!/usr/bin/perl
- my $config = "crypto/err/openssl.ec";
- my $hprefix = "openssl/";
---- a/util/mkstack.pl
-+++ b/util/mkstack.pl
-@@ -1,4 +1,4 @@
--#!/usr/local/bin/perl -w
-+#!/usr/bin/perl
- # This is a utility that searches out "DECLARE_STACK_OF()"
- # declarations in .h and .c files, and updates/creates/replaces
---- a/util/pod2man.pl
-+++ b/util/pod2man.pl
-@@ -1,4 +1,4 @@
--: #!/usr/bin/perl-5.005
-+#!/usr/bin/perl
-     eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
-       if $running_under_some_shell;
---- a/util/selftest.pl
-+++ b/util/selftest.pl
-@@ -1,4 +1,4 @@
--#!/usr/local/bin/perl -w
-+#!/usr/bin/perl
- #
- # Run the test suite and generate a report
- #
diff --git a/package/openssl/patches/140-makefile-dirs.patch b/package/openssl/patches/140-makefile-dirs.patch
deleted file mode 100644 (file)
index b51ca28..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/Makefile.org
-+++ b/Makefile.org
-@@ -135,7 +135,7 @@ FIPSCANLIB=
- BASEADDR=
--DIRS=   crypto ssl engines apps test tools
-+DIRS=   crypto ssl apps
- ENGDIRS= ccgost
- SHLIBDIRS= crypto ssl
diff --git a/package/openssl/patches/150-no_engines.patch b/package/openssl/patches/150-no_engines.patch
deleted file mode 100644 (file)
index 62aacc1..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
---- a/Configure
-+++ b/Configure
-@@ -2000,6 +2000,11 @@ EOF
-       close(OUT);
-   }
-   
-+# ugly hack to disable engines
-+if($target eq "mingwx") {
-+      system("sed -e s/^LIB/XLIB/g -i engines/Makefile");
-+}
-+
- print <<EOF;
- Configured for $target.
---- a/util/libeay.num
-+++ b/util/libeay.num
-@@ -2071,7 +2071,6 @@ PKCS7_ATTR_SIGN_it                      
- UI_add_error_string                     2633  EXIST::FUNCTION:
- KRB5_CHECKSUM_free                      2634  EXIST::FUNCTION:
- OCSP_REQUEST_get_ext                    2635  EXIST::FUNCTION:
--ENGINE_load_ubsec                       2636  EXIST::FUNCTION:ENGINE,STATIC_ENGINE
- ENGINE_register_all_digests             2637  EXIST::FUNCTION:ENGINE
- PKEY_USAGE_PERIOD_it                    2638  EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
- PKEY_USAGE_PERIOD_it                    2638  EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:
-@@ -2545,7 +2544,6 @@ OCSP_RESPONSE_new                       
- AES_set_encrypt_key                     3024  EXIST::FUNCTION:AES
- OCSP_resp_count                         3025  EXIST::FUNCTION:
- KRB5_CHECKSUM_new                       3026  EXIST::FUNCTION:
--ENGINE_load_cswift                      3027  EXIST::FUNCTION:ENGINE,STATIC_ENGINE
- OCSP_onereq_get0_id                     3028  EXIST::FUNCTION:
- ENGINE_set_default_ciphers              3029  EXIST::FUNCTION:ENGINE
- NOTICEREF_it                            3030  EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
-@@ -2576,7 +2574,6 @@ ASN1_primitive_free                     
- i2d_EXTENDED_KEY_USAGE                  3052  EXIST::FUNCTION:
- i2d_OCSP_SIGNATURE                      3053  EXIST::FUNCTION:
- asn1_enc_save                           3054  EXIST::FUNCTION:
--ENGINE_load_nuron                       3055  EXIST::FUNCTION:ENGINE,STATIC_ENGINE
- _ossl_old_des_pcbc_encrypt              3056  EXIST::FUNCTION:DES
- PKCS12_MAC_DATA_it                      3057  EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
- PKCS12_MAC_DATA_it                      3057  EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:
-@@ -2600,7 +2597,6 @@ asn1_get_choice_selector                
- i2d_KRB5_CHECKSUM                       3072  EXIST::FUNCTION:
- ENGINE_set_table_flags                  3073  EXIST::FUNCTION:ENGINE
- AES_options                             3074  EXIST::FUNCTION:AES
--ENGINE_load_chil                        3075  EXIST::FUNCTION:ENGINE,STATIC_ENGINE
- OCSP_id_cmp                             3076  EXIST::FUNCTION:
- OCSP_BASICRESP_new                      3077  EXIST::FUNCTION:
- OCSP_REQUEST_get_ext_by_NID             3078  EXIST::FUNCTION:
-@@ -2667,7 +2663,6 @@ OCSP_CRLID_it                           
- OCSP_CRLID_it                           3127  EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:
- i2d_KRB5_AUTHENTBODY                    3128  EXIST::FUNCTION:
- OCSP_REQUEST_get_ext_count              3129  EXIST::FUNCTION:
--ENGINE_load_atalla                      3130  EXIST::FUNCTION:ENGINE,STATIC_ENGINE
- X509_NAME_it                            3131  EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
- X509_NAME_it                            3131  EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:
- USERNOTICE_it                           3132  EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
-@@ -2762,8 +2757,6 @@ DES_read_2passwords                     
- DES_read_password                       3207  EXIST::FUNCTION:DES
- UI_UTIL_read_pw                         3208  EXIST::FUNCTION:
- UI_UTIL_read_pw_string                  3209  EXIST::FUNCTION:
--ENGINE_load_aep                         3210  EXIST::FUNCTION:ENGINE,STATIC_ENGINE
--ENGINE_load_sureware                    3211  EXIST::FUNCTION:ENGINE,STATIC_ENGINE
- OPENSSL_add_all_algorithms_noconf       3212  EXIST:!VMS:FUNCTION:
- OPENSSL_add_all_algo_noconf             3212  EXIST:VMS:FUNCTION:
- OPENSSL_add_all_algorithms_conf         3213  EXIST:!VMS:FUNCTION:
-@@ -2772,7 +2765,6 @@ OPENSSL_load_builtin_modules            
- AES_ofb128_encrypt                      3215  EXIST::FUNCTION:AES
- AES_ctr128_encrypt                      3216  EXIST::FUNCTION:AES
- AES_cfb128_encrypt                      3217  EXIST::FUNCTION:AES
--ENGINE_load_4758cca                     3218  EXIST::FUNCTION:ENGINE,STATIC_ENGINE
- _ossl_096_des_random_seed               3219  EXIST::FUNCTION:DES
- EVP_aes_256_ofb                         3220  EXIST::FUNCTION:AES
- EVP_aes_192_ofb                         3221  EXIST::FUNCTION:AES
-@@ -3107,7 +3099,6 @@ EC_GFp_nist_method                      
- STORE_meth_set_modify_fn                3530  NOEXIST::FUNCTION:
- STORE_method_set_modify_function        3530  NOEXIST::FUNCTION:
- STORE_parse_attrs_next                  3531  NOEXIST::FUNCTION:
--ENGINE_load_padlock                     3532  EXIST::FUNCTION:ENGINE,STATIC_ENGINE
- EC_GROUP_set_curve_name                 3533  EXIST::FUNCTION:EC
- X509_CERT_PAIR_it                       3534  EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:
- X509_CERT_PAIR_it                       3534  EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:
diff --git a/package/openssl/patches/160-disable_doc_tests.patch b/package/openssl/patches/160-disable_doc_tests.patch
deleted file mode 100644 (file)
index b6dacc1..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
---- a/Makefile
-+++ b/Makefile
-@@ -137,7 +137,7 @@ FIPSCANLIB=
- BASEADDR=0xFB00000
--DIRS=   crypto ssl engines apps test tools
-+DIRS=   crypto ssl engines apps tools
- ENGDIRS= ccgost
- SHLIBDIRS= crypto ssl
-@@ -155,7 +155,7 @@ SDIRS=  \
- # tests to perform.  "alltests" is a special word indicating that all tests
- # should be performed.
--TESTS = alltests
-+TESTS =
- MAKEFILE= Makefile
-@@ -169,7 +169,7 @@ SHELL=/bin/sh
- TOP=    .
- ONEDIRS=out tmp
--EDIRS=  times doc bugs util include certs ms shlib mt demos perl sf dep VMS
-+EDIRS=  times bugs util include certs ms shlib mt demos perl sf dep VMS
- WDIRS=  windows
- LIBS=   libcrypto.a libssl.a
- SHARED_CRYPTO=libcrypto$(SHLIB_EXT)
-@@ -270,7 +270,7 @@ reflect:
-       @[ -n "$(THIS)" ] && $(CLEARENV) && $(MAKE) $(THIS) -e $(BUILDENV)
- sub_all: build_all
--build_all: build_libs build_apps build_tests build_tools
-+build_all: build_libs build_apps build_tools
- build_libs: build_crypto build_ssl build_engines
-@@ -539,7 +539,7 @@ dist:   
- dist_pem_h:
-       (cd crypto/pem; $(MAKE) -e $(BUILDENV) pem.h; $(MAKE) clean)
--install: all install_docs install_sw
-+install: all install_sw
- install_sw:
-       @$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
---- a/Makefile.org
-+++ b/Makefile.org
-@@ -537,7 +537,7 @@ dist:   
- dist_pem_h:
-       (cd crypto/pem; $(MAKE) -e $(BUILDENV) pem.h; $(MAKE) clean)
--install: all install_docs install_sw
-+install: all install_sw
- install_sw:
-       @$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
diff --git a/package/openssl/patches/170-bash_path.patch b/package/openssl/patches/170-bash_path.patch
deleted file mode 100644 (file)
index c29b59a..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
---- a/util/domd
-+++ b/util/domd
-@@ -1,4 +1,4 @@
--#!/bin/sh
-+#!/usr/bin/env bash
- # Do a makedepend, only leave out the standard headers
- # Written by Ben Laurie <ben@algroup.co.uk> 19 Jan 1999
diff --git a/package/openssl/patches/180-fix_link_segfault.patch b/package/openssl/patches/180-fix_link_segfault.patch
deleted file mode 100644 (file)
index 3e36beb..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
---- a/Makefile.shared
-+++ b/Makefile.shared
-@@ -95,7 +95,6 @@ LINK_APP=    \
-     LDCMD="$${LDCMD:-$(CC)}"; LDFLAGS="$${LDFLAGS:-$(CFLAGS)}"; \
-     LIBPATH=`for x in $$LIBDEPS; do echo $$x; done | sed -e 's/^ *-L//;t' -e d | uniq`; \
-     LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`; \
--    LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \
-     $${LDCMD} $${LDFLAGS} -o $${APPNAME:=$(APPNAME)} $(OBJECTS) $${LIBDEPS} )
- LINK_SO=      \
-@@ -105,7 +104,6 @@ LINK_SO=   \
-     SHAREDFLAGS="$${SHAREDFLAGS:-$(CFLAGS) $(SHARED_LDFLAGS)}"; \
-     LIBPATH=`for x in $$LIBDEPS; do echo $$x; done | sed -e 's/^ *-L//;t' -e d | uniq`; \
-     LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`; \
--    LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \
-     $${SHAREDCMD} $${SHAREDFLAGS} \
-       -o $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX \
-       $$ALLSYMSFLAGS $$SHOBJECTS $$NOALLSYMSFLAGS $$LIBDEPS \
diff --git a/package/openssl/patches/190-remove_timestamp_check.patch b/package/openssl/patches/190-remove_timestamp_check.patch
deleted file mode 100644 (file)
index 2677b2d..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
---- a/Makefile.org
-+++ b/Makefile.org
-@@ -184,7 +184,7 @@ WTARFILE=       $(NAME)-win.tar
- EXHEADER=       e_os2.h
- HEADER=         e_os.h
--all: Makefile build_all openssl.pc libssl.pc libcrypto.pc
-+all: build_all openssl.pc libssl.pc libcrypto.pc
- # as we stick to -e, CLEARENV ensures that local variables in lower
- # Makefiles remain local and variable. $${VAR+VAR} is tribute to Korn
-@@ -396,11 +396,6 @@ openssl.pc: Makefile
-           echo 'Libs.private: $(EX_LIBS)'; \
-           echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > openssl.pc
--Makefile: Makefile.org Configure config
--      @echo "Makefile is older than Makefile.org, Configure or config."
--      @echo "Reconfigure the source tree (via './config' or 'perl Configure'), please."
--      @false
--
- libclean:
-       rm -f *.map *.so *.so.* *.dylib *.dll engines/*.so engines/*.dll engines/*.dylib *.a engines/*.a */lib */*/lib
diff --git a/package/openssl/patches/200-etrax_support.patch b/package/openssl/patches/200-etrax_support.patch
deleted file mode 100644 (file)
index 9bd155e..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/Configure
-+++ b/Configure
-@@ -440,6 +440,10 @@ my %table=(
- "beos-x86-r5",   "gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -mcpu=pentium -Wall::-D_REENTRANT:BEOS:-lbe -lnet:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:beos:beos-shared:-fPIC -DPIC:-shared:.so",
- "beos-x86-bone", "gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -mcpu=pentium -Wall::-D_REENTRANT:BEOS:-lbe -lbind -lsocket:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:beos:beos-shared:-fPIC:-shared:.so",
-+# cris
-+"linux-cris", "\$(TARGET_CC):-DL_ENDIAN -DTERMIO -fomit-frame-pointer::-D_REENTRANT::-ldl:BN_LLONG THIRTY_TWO_BIT RC4_CHAR::::::::::::dlfcn:linux-shared:-fpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::",
-+
-+
- #### SCO/Caldera targets.
- #
- # Originally we had like unixware-*, unixware-*-pentium, unixware-*-p6, etc.
diff --git a/package/openssl/patches/210-fix_aes_mips.patch b/package/openssl/patches/210-fix_aes_mips.patch
deleted file mode 100644 (file)
index bbfc63a..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
---- a/crypto/aes/asm/aes-mips.pl
-+++ b/crypto/aes/asm/aes-mips.pl
-@@ -1036,9 +1036,9 @@ _mips_AES_set_encrypt_key:
-       nop
- .end  _mips_AES_set_encrypt_key
--.globl        AES_set_encrypt_key
--.ent  AES_set_encrypt_key
--AES_set_encrypt_key:
-+.globl        private_AES_set_encrypt_key
-+.ent  private_AES_set_encrypt_key
-+private_AES_set_encrypt_key:
-       .frame  $sp,$FRAMESIZE,$ra
-       .mask   $SAVED_REGS_MASK,-$SZREG
-       .set    noreorder
-@@ -1060,7 +1060,7 @@ $code.=<<___ if ($flavour =~ /nubi/i);   #
- ___
- $code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification
-       .cplocal        $Tbl
--      .cpsetup        $pf,$zero,AES_set_encrypt_key
-+      .cpsetup        $pf,$zero,private_AES_set_encrypt_key
- ___
- $code.=<<___;
-       .set    reorder
-@@ -1083,7 +1083,7 @@ ___
- $code.=<<___;
-       jr      $ra
-       $PTR_ADD $sp,$FRAMESIZE
--.end  AES_set_encrypt_key
-+.end  private_AES_set_encrypt_key
- ___
\f
- my ($head,$tail)=($inp,$bits);
-@@ -1091,9 +1091,9 @@ my ($tp1,$tp2,$tp4,$tp8,$tp9,$tpb,$tpd,$
- my ($m,$x80808080,$x7f7f7f7f,$x1b1b1b1b)=($at,$t0,$t1,$t2);
- $code.=<<___;
- .align        5
--.globl        AES_set_decrypt_key
--.ent  AES_set_decrypt_key
--AES_set_decrypt_key:
-+.globl        private_AES_set_decrypt_key
-+.ent  private_AES_set_decrypt_key
-+private_AES_set_decrypt_key:
-       .frame  $sp,$FRAMESIZE,$ra
-       .mask   $SAVED_REGS_MASK,-$SZREG
-       .set    noreorder
-@@ -1115,7 +1115,7 @@ $code.=<<___ if ($flavour =~ /nubi/i);   #
- ___
- $code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification
-       .cplocal        $Tbl
--      .cpsetup        $pf,$zero,AES_set_decrypt_key
-+      .cpsetup        $pf,$zero,private_AES_set_decrypt_key
- ___
- $code.=<<___;
-       .set    reorder
-@@ -1226,7 +1226,7 @@ ___
- $code.=<<___;
-       jr      $ra
-       $PTR_ADD $sp,$FRAMESIZE
--.end  AES_set_decrypt_key
-+.end  private_AES_set_decrypt_key
- ___
- }}}
diff --git a/package/uclibc++/Makefile b/package/uclibc++/Makefile
deleted file mode 100644 (file)
index 15c2bce..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-#
-# Copyright (C) 2006-2012 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=uclibc++
-PKG_VERSION:=0.2.4
-PKG_RELEASE:=1
-
-PKG_SOURCE:=uClibc++-$(PKG_VERSION).tar.bz2
-PKG_SOURCE_URL:=http://cxx.uclibc.org/src/
-PKG_MD5SUM:=394c119363dd8b469fb898442a6764b8
-
-PKG_BUILD_DIR:=$(BUILD_DIR)/uClibc++-$(PKG_VERSION)
-PKG_BUILD_PARALLEL:=1
-
-PKG_INSTALL:=1
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/uclibcxx
-  NAME:=uclibc++
-  SECTION:=libs
-  CATEGORY:=Libraries
-  TITLE:=C++ library for embedded systems
-  URL:=http://cxx.uclibc.org/src/
-endef
-
-UCLIBC_TARGET_ARCH:=$(shell echo $(ARCH) | sed -e s'/-.*//' \
-       -e 's/i.86/i386/' \
-       -e 's/sparc.*/sparc/' \
-       -e 's/m68k.*/m68k/' \
-       -e 's/ppc/powerpc/g' \
-       -e 's/v850.*/v850/g' \
-       -e 's/sh64/sh/' \
-       -e 's/sh[234].*/sh/' \
-       -e 's/mips.*/mips/' \
-       -e 's/mipsel.*/mips/' \
-       -e 's/cris.*/cris/' \
-)
-
-TARGET_CFLAGS += $(FPIC)
-
-ifneq ($(CONFIG_CCACHE),)
-TARGET_CXX=$(TARGET_CXX_NOCACHE)
-endif
-
-MAKE_FLAGS:= \
-       TOPDIR="$(PKG_BUILD_DIR)/" \
-       $(TARGET_CONFIGURE_OPTS) \
-       CPU_CFLAGS="$(TARGET_CFLAGS)" \
-       CROSS="$(TARGET_CROSS)" \
-       CP="$(CP)" \
-       GEN_LIBS="-lc $(LIBGCC_S)" \
-       check_as_needed=
-
-# check_as_needed overrides dependency on libgcc_s
-
-define Build/Configure
-       if [ -f ./files/config.$(UCLIBC_TARGET_ARCH) ]; then \
-               cp ./files/config.$(UCLIBC_TARGET_ARCH) $(PKG_BUILD_DIR)/.config; \
-       else \
-               cp ./files/config.default $(PKG_BUILD_DIR)/.config; \
-       fi
-endef
-
-define Build/InstallDev
-       $(INSTALL_DIR) $(2)/bin $(1)/usr/include/uClibc++ $(1)/usr/lib
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/bin/g++-uc $(TOOLCHAIN_DIR)/bin/
-       $(CP) $(PKG_INSTALL_DIR)/include/* $(1)/usr/include/uClibc++/
-       $(CP) $(PKG_INSTALL_DIR)/lib/libuClibc++*.{a,so}* $(1)/usr/lib/
-       $(SED) 's|-I/include/|-I$(STAGING_DIR)/usr/include/uClibc++/|g' $(TOOLCHAIN_DIR)/bin/g++-uc
-       $(SED) 's|-L/lib/|-L$(STAGING_DIR)/usr/lib/|g' $(TOOLCHAIN_DIR)/bin/g++-uc
-# add another wrapper which links against both uClibc++ and libstdc++ 
-       $(INSTALL_BIN) $(TOOLCHAIN_DIR)/bin/g++-uc $(TOOLCHAIN_DIR)/bin/g++-uc+std
-       $(SED) 's|^WRAPPER_INCLUDEDIR=.*||g' $(TOOLCHAIN_DIR)/bin/g++-uc+std
-       $(SED) 's|-luClibc++|-Wl,-Bdynamic,-luClibc++,-Bstatic,-lstdc++,-Bdynamic|g' $(TOOLCHAIN_DIR)/bin/g++-uc+std
-       $(SED) 's|-nostdinc++||g' $(TOOLCHAIN_DIR)/bin/g++-uc+std
-endef
-
-define Package/uclibcxx/install
-       $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_INSTALL_DIR)/lib/libuClibc++.so.* $(1)/usr/lib/
-       $(CP) $(PKG_INSTALL_DIR)/lib/libuClibc++-*.so $(1)/usr/lib/
-endef
-
-$(eval $(call BuildPackage,uclibcxx))
diff --git a/package/uclibc++/files/config.default b/package/uclibc++/files/config.default
deleted file mode 100644 (file)
index 944e1a6..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-#
-# Automatically generated make config: don't edit
-#
-
-#
-# Target Features and Options
-#
-UCLIBCXX_HAS_FLOATS=y
-# UCLIBCXX_HAS_LONG_DOUBLE is not set
-# UCLIBCXX_HAS_TLS is not set
-WARNINGS="-Wall"
-BUILD_EXTRA_LIBRARIES=""
-HAVE_DOT_CONFIG=y
-
-#
-# String and I/O Stream Support
-#
-UCLIBCXX_HAS_WCHAR=y
-UCLIBCXX_IOSTREAM_BUFSIZE=32
-UCLIBCXX_HAS_LFS=y
-UCLIBCXX_SUPPORT_CDIR=y
-UCLIBCXX_SUPPORT_CIN=y
-UCLIBCXX_SUPPORT_COUT=y
-UCLIBCXX_SUPPORT_CERR=y
-UCLIBCXX_SUPPORT_CLOG=y
-UCLIBCXX_SUPPORT_WCIN=y
-UCLIBCXX_SUPPORT_WCOUT=y
-UCLIBCXX_SUPPORT_WCERR=y
-UCLIBCXX_SUPPORT_WCLOG=y
-
-#
-# STL and Code Expansion
-#
-UCLIBCXX_STL_BUFFER_SIZE=32
-UCLIBCXX_CODE_EXPANSION=y
-UCLIBCXX_EXPAND_CONSTRUCTORS_DESTRUCTORS=y
-UCLIBCXX_EXPAND_STRING_CHAR=y
-UCLIBCXX_EXPAND_VECTOR_BASIC=y
-UCLIBCXX_EXPAND_IOS_CHAR=y
-UCLIBCXX_EXPAND_STREAMBUF_CHAR=y
-UCLIBCXX_EXPAND_ISTREAM_CHAR=y
-UCLIBCXX_EXPAND_OSTREAM_CHAR=y
-UCLIBCXX_EXPAND_FSTREAM_CHAR=y
-UCLIBCXX_EXPAND_SSTREAM_CHAR=y
-
-#
-# Library Installation Options
-#
-UCLIBCXX_RUNTIME_PREFIX=""
-UCLIBCXX_RUNTIME_INCLUDE_SUBDIR="/include"
-UCLIBCXX_RUNTIME_LIB_SUBDIR="/lib"
-UCLIBCXX_RUNTIME_BIN_SUBDIR="/bin"
-UCLIBCXX_EXCEPTION_SUPPORT=y
-IMPORT_LIBSUP=y
-# IMPORT_LIBGCC_EH is not set
-BUILD_STATIC_LIB=y
-# BUILD_ONLY_STATIC_LIB is not set
-# DODEBUG is not set
diff --git a/package/uclibc++/patches/002-path_to_bash.patch b/package/uclibc++/patches/002-path_to_bash.patch
deleted file mode 100644 (file)
index 26d88ee..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/bin/Makefile
-+++ b/bin/Makefile
-@@ -13,7 +13,7 @@ install:
-       $(INSTALL) -m 755 $(WRAPPER) $(PREFIX)$(UCLIBCXX_RUNTIME_BINDIR)
- $(WRAPPER): Makefile
--      echo '#!/bin/sh' > $@
-+      echo '#!/usr/bin/env bash' > $@
-       echo '' >> $@
-       echo 'WRAPPER_INCLUDEDIR="$${WRAPPER_INCLUDEDIR:=-I$(UCLIBCXX_RUNTIME_INCLUDEDIR)}"' >> $@
-       echo 'WRAPPER_LIBDIR="$${WRAPPER_LIBDIR:=-L$(UCLIBCXX_RUNTIME_LIBDIR)}"' >> $@
diff --git a/package/uclibc++/patches/006-eabi_fix.patch b/package/uclibc++/patches/006-eabi_fix.patch
deleted file mode 100644 (file)
index 65b436c..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
---- a/include/typeinfo
-+++ b/include/typeinfo
-@@ -44,6 +44,7 @@ namespace __cxxabiv1
-   class __class_type_info;
- } // namespace __cxxabiv1
-+#ifndef __GXX_MERGED_TYPEINFO_NAMES
- #if !__GXX_WEAK__
-   // If weak symbols are not supported, typeinfo names are not merged.
-   #define __GXX_MERGED_TYPEINFO_NAMES 0
-@@ -51,6 +52,7 @@ namespace __cxxabiv1
-   // On platforms that support weak symbols, typeinfo names are merged.
-   #define __GXX_MERGED_TYPEINFO_NAMES 1
- #endif
-+#endif
- namespace std 
- {
---- a/include/unwind-cxx.h
-+++ b/include/unwind-cxx.h
-@@ -173,6 +173,7 @@ extern std::unexpected_handler __unexpec
\r
- // This is the exception class we report -- "GNUCC++\0".\r
- const _Unwind_Exception_Class __gxx_exception_class\r
-+#ifndef __ARM_EABI_UNWINDER__\r
- = ((((((((_Unwind_Exception_Class) 'G' \r
-        << 8 | (_Unwind_Exception_Class) 'N')\r
-       << 8 | (_Unwind_Exception_Class) 'U')\r
-@@ -181,6 +182,9 @@ const _Unwind_Exception_Class __gxx_exce
-      << 8 | (_Unwind_Exception_Class) '+')\r
-     << 8 | (_Unwind_Exception_Class) '+')\r
-    << 8 | (_Unwind_Exception_Class) '\0');\r
-+#else\r
-+= "GNUC++";\r
-+#endif\r
\r
- // GNU C++ personality routine, Version 0.\r
- extern "C" _Unwind_Reason_Code __gxx_personality_v0\r
diff --git a/package/zlib/Makefile b/package/zlib/Makefile
deleted file mode 100644 (file)
index 18b8884..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-# 
-# Copyright (C) 2006-2012 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=zlib
-PKG_VERSION:=1.2.7
-PKG_RELEASE:=1
-
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
-PKG_SOURCE_URL:=http://www.zlib.net @SF/libpng
-PKG_MD5SUM:=2ab442d169156f34c379c968f3f482dd
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/zlib
-  SECTION:=libs
-  CATEGORY:=Libraries
-  TITLE:=Library implementing the deflate compression method
-  URL:=http://www.zlib.net/
-endef
-
-define Build/Configure
-       (cd $(PKG_BUILD_DIR); \
-               $(TARGET_CONFIGURE_OPTS) \
-               LDSHARED="$(TARGET_CC) -shared -Wl,-soname,libz.so.1" \
-               CFLAGS="$(TARGET_CFLAGS) $(FPIC)" \
-               ./configure \
-                       --prefix=/usr \
-                       --shared \
-                       --uname=Linux \
-       );
-endef
-
-define Build/Compile
-       +$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
-               $(TARGET_CONFIGURE_OPTS) \
-               CFLAGS="$(TARGET_CFLAGS)" \
-               libz.a libz.so.$(PKG_VERSION)
-       mkdir -p $(PKG_INSTALL_DIR)
-       $(MAKE) -C $(PKG_BUILD_DIR) \
-               DESTDIR="$(PKG_INSTALL_DIR)" \
-               install
-endef
-
-define Build/InstallDev
-       mkdir -p $(1)/usr/include
-       $(CP)   $(PKG_INSTALL_DIR)/usr/include/z{conf,lib}.h \
-               $(1)/usr/include/
-       mkdir -p $(1)/usr/lib
-       $(CP)   $(PKG_INSTALL_DIR)/usr/lib/libz.{a,so*} \
-               $(1)/usr/lib/
-       mkdir -p $(1)/usr/lib/pkgconfig
-       $(CP)   $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/zlib.pc \
-               $(1)/usr/lib/pkgconfig/
-endef
-
-# libz.so is needed for openssl (zlib-dynamic)
-define Package/zlib/install
-       $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libz.so $(1)/usr/lib/
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libz.so.* $(1)/usr/lib/
-endef
-
-$(eval $(call BuildPackage,zlib))