aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlego <lego@f5534014-38df-0310-8fa8-9805f1628bb7>2007-08-25 20:27:58 +0000
committerlego <lego@f5534014-38df-0310-8fa8-9805f1628bb7>2007-08-25 20:27:58 +0000
commit3d3151d0b6799c152d3ab73cea5023e7fd8d37fd (patch)
tree7b0a724f5af02559801332f4140cb361baeb796e
parent5feddcca1610cf3c27c9e7d0247ca7d66d799b2d (diff)
get libsmi into the picture
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@22661 f5534014-38df-0310-8fa8-9805f1628bb7
-rw-r--r--aclocal-fallback/libsmi.m438
-rw-r--r--configure.in14
-rw-r--r--epan/oids.c18
3 files changed, 63 insertions, 7 deletions
diff --git a/aclocal-fallback/libsmi.m4 b/aclocal-fallback/libsmi.m4
new file mode 100644
index 0000000000..29ce719352
--- /dev/null
+++ b/aclocal-fallback/libsmi.m4
@@ -0,0 +1,38 @@
+# Configure paths for libsmi.
+
+dnl AM_PATH_LIBSMI()
+dnl Test for libsmi and defines the symbol LIBSMI if the test is
+dnl successful. Also defines HAVE_LIBSMI_H and adds -llibsmi to the
+dnl LIBS variable.
+dnl
+AC_DEFUN([AM_PATH_LIBSMI],
+[
+ AC_CHECK_HEADERS(smi.h)
+ AC_CHECK_LIB(smi, smiInit)
+ AC_MSG_CHECKING([whether to enable libsmi])
+ AC_TRY_RUN([ /* libsmi available check */
+#include <smi.h>
+main()
+{
+ int current, revision, age, n;
+ const int required = 2;
+ if (smiInit(""))
+ exit(1);
+ if (strcmp(SMI_LIBRARY_VERSION, smi_library_version))
+ exit(2);
+ n = sscanf(smi_library_version, "%d:%d:%d", &current, &revision, &age);
+ if (n != 3)
+ exit(3);
+ if (required < current - age || required > current)
+ exit(4);
+ exit(0);
+}
+],
+ [ AC_MSG_RESULT(yes)
+ libsmi=yes],
+ [ AC_MSG_RESULT(no)
+ libsmi=no],
+ [ AC_MSG_RESULT(not when cross-compiling)
+ libsmi=no]
+ )
+])
diff --git a/configure.in b/configure.in
index 9d8aee5a93..160c909068 100644
--- a/configure.in
+++ b/configure.in
@@ -116,13 +116,24 @@ if test "x$with_gcrypt" = "xyes"; then
if test x$libgcrypt_config_prefix != x ; then
AC_MSG_ERROR([[libgcrypt not found; install libgcrypt-devel package for your system]])
else
- echo echo "libgcrypt not found, disabling ipsec decryption"
+ echo "libgcrypt not found, disabling ipsec decryption"
gcrypt_message="no"
fi
]
)
fi
+# libsmi
+libsmi_message="no"
+AC_ARG_WITH([libsmi],
+ AC_HELP_STRING( [--with-libsmi=@<:@yes/no@:>@],
+ [use smi library @<:@default=yes@:>@]),
+ with_libsmi="$withval", with_libsmi="yes")
+if test "x$with_libsmi" = "xyes"; then
+ AM_PATH_LIBSMI
+ AM_CONDITIONAL(HAVE_SMI, "x$with_libsmi" = "xyes")
+fi
+
# Check for xsltproc
AC_PATH_PROG(XSLTPROC, xsltproc)
AC_CHECK_PROG(HAVE_XSLTPROC, xsltproc, "yes", "no")
@@ -1635,6 +1646,7 @@ echo " Use zlib library : $zlib_message"
echo " Use pcre library : $pcre_message"
echo " Use kerberos library : $krb5_message"
echo " Use GNU ADNS library : $adns_message"
+echo " Use SMI SNMP library : $libsmi"
echo " Use GNU crypto library : $gcrypt_message"
echo " Use SSL crypto library : $ssl_message"
echo " Use IPv6 name resolution : $enable_ipv6"
diff --git a/epan/oids.c b/epan/oids.c
index baf32687ca..8ae72b23b8 100644
--- a/epan/oids.c
+++ b/epan/oids.c
@@ -41,7 +41,7 @@
#include "filesystem.h"
#include "dissectors/packet-ber.h"
-#ifdef HAVE_SMI
+#ifdef HAVE_LIBSMI
#include <smi.h>
#endif
@@ -175,7 +175,7 @@ extern void oid_add_from_encoded(const char* name, const guint8 *oid, gint oid_l
}
}
-#ifdef HAVE_SMI
+#ifdef HAVE_LIBSMI
typedef struct smi_module_t {
char* name;
} smi_module_t;
@@ -374,15 +374,15 @@ static inline oid_kind_t smikind(SmiNode* sN, oid_key_t** key_p) {
kl->key_type = typedata->keytype_implicit;
} else switch (kl->key_type) {
case OID_KEY_TYPE_BYTES:
- if (k->num_subids)
+ if (kl->num_subids)
kl->key_type = OID_KEY_TYPE_FIXED_BYTES;
break;
case OID_KEY_TYPE_STRING:
- if (k->num_subids)
+ if (kl->num_subids)
kl->key_type = OID_KEY_TYPE_FIXED_STRING;
break;
default:
-
+ break;
}
}
@@ -404,6 +404,12 @@ static inline oid_kind_t smikind(SmiNode* sN, oid_key_t** key_p) {
|| (ft == FT_INT8) || (ft == FT_INT16) || (ft == FT_INT24) || (ft == FT_INT32) \
|| (ft == FT_UINT64) || (ft == FT_INT64) )
+#ifdef WIN32
+#define PATH_SEPARATOR ";"
+#else
+#define PATH_SEPARATOR ":"
+#endif
+
void register_mibs(void) {
SmiModule *smiModule;
SmiNode *smiNode;
@@ -636,7 +642,7 @@ void register_mibs(void) {
void oids_init(void) {
-#ifdef HAVE_SMI
+#ifdef HAVE_LIBSMI
register_mibs();
#else
D(1,("libsmi disabled oid resolution not enabled"));