forked from osmocom/wireshark
Create an "epan/crc" directory for CRC code. Add crc-16-plain.[ch],
generated from pycrc. The command line used to generate the file is in epan/crc/Makefile.common. I used "plain" to distinguish it from CCITT, USB, and other 16-bit CRCs. Integrate the new CRC code into our infrastructure. Add crc16_plain_tvb_offset() to epan/crc16.[ch] and use it in plugins/profinet/packet-pn-rt.c. This _should_ work correctly, but hasn't been tested. svn path=/trunk/; revision=27790
This commit is contained in:
parent
cf536e062b
commit
dd903ca9c8
|
@ -1646,6 +1646,7 @@ AC_OUTPUT(
|
|||
asn1/x721/Makefile
|
||||
doc/Makefile
|
||||
epan/Makefile
|
||||
epan/crc/Makefile
|
||||
epan/crypt/Makefile
|
||||
epan/doxygen.cfg
|
||||
epan/dfilter/Makefile
|
||||
|
|
|
@ -35,7 +35,7 @@ wslua_dist_dir = wslua
|
|||
endif # HAVE_LIBLUA
|
||||
|
||||
|
||||
SUBDIRS = crypt ftypes dfilter dissectors $(wslua_dir)
|
||||
SUBDIRS = crc crypt ftypes dfilter dissectors $(wslua_dir)
|
||||
|
||||
DIST_SUBDIRS = $(SUBDIRS) $(wslua_dist_dir)
|
||||
|
||||
|
@ -125,8 +125,8 @@ MAINTAINERCLEANFILES = \
|
|||
#
|
||||
libwireshark_la_LIBADD = \
|
||||
@INET_ATON_LO@ @INET_PTON_LO@ @INET_NTOP_LO@ libwireshark_generated.la \
|
||||
libwireshark_asmopt.la crypt/libairpdcap.la ftypes/libftypes.la \
|
||||
dfilter/libdfilter.la dissectors/libdissectors.la \
|
||||
libwireshark_asmopt.la crc/libcrc.la crypt/libairpdcap.la \
|
||||
ftypes/libftypes.la dfilter/libdfilter.la dissectors/libdissectors.la \
|
||||
dissectors/libdirtydissectors.la $(wslua_lib) @SOCKET_LIBS@ @NSL_LIBS@ \
|
||||
@C_ARES_LIBS@ @ADNS_LIBS@ @LIBGCRYPT_LIBS@ @LIBGNUTLS_LIBS@ \
|
||||
@KRB5_LIBS@ @SSL_LIBS@ @LIBSMI_LDFLAGS@ @GEOIP_LIBS@ \
|
||||
|
@ -134,8 +134,8 @@ libwireshark_la_LIBADD = \
|
|||
|
||||
libwireshark_la_DEPENDENCIES = \
|
||||
@INET_ATON_LO@ @INET_PTON_LO@ @INET_NTOP_LO@ libwireshark_generated.la \
|
||||
libwireshark_asmopt.la crypt/libairpdcap.la ftypes/libftypes.la \
|
||||
dfilter/libdfilter.la dissectors/libdissectors.la \
|
||||
libwireshark_asmopt.la crc/libcrc.la crypt/libairpdcap.la \
|
||||
ftypes/libftypes.la dfilter/libdfilter.la dissectors/libdissectors.la \
|
||||
dissectors/libdirtydissectors.la $(wslua_lib) \
|
||||
${top_builddir}/wsutil/libwsutil.la
|
||||
|
||||
|
|
|
@ -44,6 +44,7 @@ libwireshark_LIBS = \
|
|||
!IFDEF ICONV_DIR
|
||||
$(ICONV_DIR)\lib\iconv.lib \
|
||||
!ENDIF
|
||||
crc\crc.lib \
|
||||
crypt\airpdcap.lib \
|
||||
ftypes\ftypes.lib \
|
||||
dfilter\dfilter.lib \
|
||||
|
@ -75,17 +76,17 @@ DOXYGEN_DEP=doxygen
|
|||
!ENDIF
|
||||
|
||||
!IFDEF ENABLE_LIBWIRESHARK
|
||||
all: crypt ftypes dfilter $(WSLUA_DIR) dissectors libwireshark.dll
|
||||
all: crc crypt ftypes dfilter $(WSLUA_DIR) dissectors libwireshark.dll
|
||||
!ELSE
|
||||
all: crypt ftypes dfilter $(WSLUA_DIR) dissectors libwireshark.lib
|
||||
all: crc crypt ftypes dfilter $(WSLUA_DIR) dissectors libwireshark.lib
|
||||
!ENDIF
|
||||
|
||||
# For use when making libwireshark.dll
|
||||
libwireshark.lib: libwireshark.dll
|
||||
libwireshark.exp: libwireshark.dll
|
||||
|
||||
libwireshark.dll: ..\config.h $(LIBWIRESHARK_OBJECTS) libwireshark.def crypt ftypes dfilter $(WSLUA_DIR) dissectors $(DOXYGEN_DEP) $(EXTRA_OBJECTS) \
|
||||
crypt\airpdcap.lib ftypes\ftypes.lib dfilter\dfilter.lib dissectors\dissectors.lib $(WSLUA_LIB) ..\image\libwireshark.res
|
||||
libwireshark.dll: ..\config.h $(LIBWIRESHARK_OBJECTS) libwireshark.def crc crypt ftypes dfilter $(WSLUA_DIR) dissectors $(DOXYGEN_DEP) $(EXTRA_OBJECTS) \
|
||||
crc\crc.lib crypt\airpdcap.lib ftypes\ftypes.lib dfilter\dfilter.lib dissectors\dissectors.lib $(WSLUA_LIB) ..\image\libwireshark.res
|
||||
@echo Linking libwireshark.dll
|
||||
$(link) $(dlllflags) $(conlibsdll) shell32.lib \
|
||||
$(LOCAL_LDFLAGS) $(DLL_LDFLAGS) \
|
||||
|
@ -95,8 +96,8 @@ libwireshark.dll: ..\config.h $(LIBWIRESHARK_OBJECTS) libwireshark.def crypt fty
|
|||
dissectors\register.obj \
|
||||
$(EXTRA_OBJECTS)
|
||||
|
||||
libwireshark.lib : ..\config.h $(LIBWIRESHARK_OBJECTS) crypt ftypes dfilter $(WSLUA_DIR) dissectors $(DOXYGEN_DEP) $(EXTRA_OBJECTS) \
|
||||
crypt\airpdcap.lib ftypes\ftypes.lib dfilter\dfilter.lib $(WSLUA_LIB) dissectors\dissectors.lib
|
||||
libwireshark.lib : ..\config.h $(LIBWIRESHARK_OBJECTS) crc crypt ftypes dfilter $(WSLUA_DIR) dissectors $(DOXYGEN_DEP) $(EXTRA_OBJECTS) \
|
||||
crc\crc.lib crypt\airpdcap.lib ftypes\ftypes.lib dfilter\dfilter.lib $(WSLUA_LIB) dissectors\dissectors.lib
|
||||
link /lib /out:libwireshark.lib $(LIBWIRESHARK_OBJECTS) \
|
||||
$(EXTRA_OBJECTS)
|
||||
|
||||
|
@ -113,7 +114,9 @@ clean-local:
|
|||
if exist html rmdir html
|
||||
|
||||
clean: clean-local
|
||||
cd crypt
|
||||
cd crc
|
||||
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
|
||||
cd ../crypt
|
||||
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
|
||||
cd ../ftypes
|
||||
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
|
||||
|
@ -144,7 +147,9 @@ distclean-local: clean-local
|
|||
dtd_grammar.out sminmpec.c
|
||||
|
||||
distclean: distclean-local
|
||||
cd crypt
|
||||
cd crc
|
||||
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake distclean
|
||||
cd ../crypt
|
||||
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake distclean
|
||||
cd ../ftypes
|
||||
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake distclean
|
||||
|
@ -159,7 +164,9 @@ distclean: distclean-local
|
|||
maintainer-clean-local: distclean-local
|
||||
|
||||
maintainer-clean: maintainer-clean-local
|
||||
cd crypt
|
||||
cd crc
|
||||
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake maintainer-clean
|
||||
cd ../crypt
|
||||
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake maintainer-clean
|
||||
cd ../ftypes
|
||||
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake maintainer-clean
|
||||
|
@ -171,6 +178,11 @@ maintainer-clean: maintainer-clean-local
|
|||
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake maintainer-clean
|
||||
cd ..
|
||||
|
||||
crc:: ..\config.h
|
||||
cd crc
|
||||
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake
|
||||
cd ..
|
||||
|
||||
crypt:: ..\config.h
|
||||
cd crypt
|
||||
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake
|
||||
|
|
|
@ -0,0 +1,54 @@
|
|||
# Makefile.am
|
||||
# Automake file for crc routines for Wireshark
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# Wireshark - Network traffic analyzer
|
||||
# By Gerald Combs <gerald@wireshark.org>
|
||||
# Copyright 1998 Gerald Combs
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
INCLUDES = -I$(top_srcdir)
|
||||
|
||||
include Makefile.common
|
||||
|
||||
if HAVE_WARNINGS_AS_ERRORS
|
||||
AM_CFLAGS = -Werror
|
||||
endif
|
||||
|
||||
noinst_LTLIBRARIES = libcrc.la
|
||||
|
||||
CLEANFILES = \
|
||||
libcrc.a \
|
||||
libcrc.la \
|
||||
*~
|
||||
|
||||
DISTCLEANFILES =
|
||||
|
||||
MAINTAINERCLEANFILES = \
|
||||
Makefile.in
|
||||
|
||||
libcrc_la_SOURCES = \
|
||||
$(CRC_SRC) \
|
||||
$(CRC_INCLUDES)
|
||||
|
||||
EXTRA_DIST = \
|
||||
Makefile.common \
|
||||
Makefile.nmake
|
||||
|
||||
checkapi:
|
||||
$(PERL) ../../tools/checkAPIs.pl -g termoutput \
|
||||
$(CRC_SRC)
|
|
@ -0,0 +1,33 @@
|
|||
# Makefile.common
|
||||
# Contains the stuff from Makefile.am and Makefile.nmake that is
|
||||
# a) common to both files and
|
||||
# b) portable between both files
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# Wireshark - Network traffic analyzer
|
||||
# By Gerald Combs <gerald@wireshark.org>
|
||||
# Copyright 1998 Gerald Combs
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
# crc-16-plain.c: pycrc.py --model crc-16 --algorithm table-driven --symbol-prefix crc16_plain_ --crc-type guint16 --include-file glib.h --generate c -o crc-16-plain.c
|
||||
# crc-16-plain.h: pycrc.py --model crc-16 --algorithm table-driven --symbol-prefix crc16_plain_ --crc-type guint16 --include-file glib.h --generate h -o crc-16-plain.h
|
||||
|
||||
CRC_SRC = \
|
||||
crc-16-plain.c
|
||||
|
||||
CRC_INCLUDES = \
|
||||
crc-16-plain.h
|
|
@ -0,0 +1,30 @@
|
|||
## Makefile for building crc.lib with Microsoft C and nmake
|
||||
## Use: $(MAKE) /$(MAKEFLAGS) -f makefile.nmake
|
||||
#
|
||||
# $Id$
|
||||
|
||||
include ..\..\config.nmake
|
||||
include Makefile.common
|
||||
|
||||
############### no need to modify below this line #########
|
||||
|
||||
CFLAGS=-WX -DHAVE_CONFIG_H $(GLIB_CFLAGS) -D_U_="" /I../.. $(LOCAL_CFLAGS)
|
||||
|
||||
.c.obj::
|
||||
$(CC) $(CFLAGS) -Fd.\ -c $<
|
||||
|
||||
CRC_OBJECTS = $(CRC_SRC:.c=.obj)
|
||||
|
||||
crc.lib: $(CRC_OBJECTS)
|
||||
link /lib /out:crc.lib $(CRC_OBJECTS)
|
||||
|
||||
clean:
|
||||
rm -f $(CRC_OBJECTS) crc.lib *.pdb
|
||||
|
||||
distclean: clean
|
||||
|
||||
maintainer-clean: distclean
|
||||
|
||||
checkapi:
|
||||
$(PERL) ../../tools/checkAPIs.pl -g termoutput \
|
||||
$(CRC_SRC)
|
|
@ -0,0 +1,103 @@
|
|||
/**
|
||||
* \file crc-16-plain.c
|
||||
* Functions and types for CRC checks.
|
||||
*
|
||||
* Generated on Wed Mar 18 14:12:09 2009,
|
||||
* by pycrc v0.7, http://www.tty1.net/pycrc/
|
||||
* using the configuration:
|
||||
* Width = 16
|
||||
* Poly = 0x8005
|
||||
* XorIn = 0x0000
|
||||
* ReflectIn = True
|
||||
* XorOut = 0x0000
|
||||
* ReflectOut = True
|
||||
* Algorithm = table-driven
|
||||
* Direct = True
|
||||
*****************************************************************************/
|
||||
#include "glib.h"
|
||||
#include "crc-16-plain.h"
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/**
|
||||
* Static table used for the table_driven implementation.
|
||||
*****************************************************************************/
|
||||
static const crc16_plain_t crc_table[256] = {
|
||||
0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241,
|
||||
0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440,
|
||||
0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40,
|
||||
0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841,
|
||||
0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40,
|
||||
0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41,
|
||||
0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641,
|
||||
0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040,
|
||||
0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240,
|
||||
0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441,
|
||||
0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41,
|
||||
0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840,
|
||||
0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41,
|
||||
0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40,
|
||||
0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640,
|
||||
0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041,
|
||||
0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240,
|
||||
0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441,
|
||||
0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41,
|
||||
0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840,
|
||||
0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41,
|
||||
0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40,
|
||||
0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640,
|
||||
0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041,
|
||||
0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241,
|
||||
0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440,
|
||||
0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40,
|
||||
0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841,
|
||||
0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40,
|
||||
0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41,
|
||||
0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641,
|
||||
0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040
|
||||
};
|
||||
|
||||
/**
|
||||
* Reflect all bits of a \a data word of \a data_len bytes.
|
||||
*
|
||||
* \param data The data word to be reflected.
|
||||
* \param data_len The width of \a data expressed in number of bits.
|
||||
* \return The reflected data.
|
||||
*****************************************************************************/
|
||||
long crc16_plain_reflect(long data, size_t data_len)
|
||||
{
|
||||
unsigned int i;
|
||||
long ret;
|
||||
|
||||
ret = data & 0x01;
|
||||
for (i = 1; i < data_len; i++)
|
||||
{
|
||||
data >>= 1;
|
||||
ret = (ret << 1) | (data & 0x01);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Update the crc value with new data.
|
||||
*
|
||||
* \param crc The current crc value.
|
||||
* \param data Pointer to a buffer of \a data_len bytes.
|
||||
* \param data_len Number of bytes in the \a data buffer.
|
||||
* \return The updated crc value.
|
||||
*****************************************************************************/
|
||||
crc16_plain_t crc16_plain_update(crc16_plain_t crc, const unsigned char *data, size_t data_len)
|
||||
{
|
||||
unsigned int tbl_idx;
|
||||
|
||||
while (data_len--) {
|
||||
tbl_idx = (crc ^ *data) & 0xff;
|
||||
crc = (crc_table[tbl_idx] ^ (crc >> 8)) & 0xffff;
|
||||
|
||||
data++;
|
||||
}
|
||||
return crc & 0xffff;
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,85 @@
|
|||
/**
|
||||
* \file crc-16-plain.h
|
||||
* Functions and types for CRC checks.
|
||||
*
|
||||
* Generated on Wed Mar 18 14:12:15 2009,
|
||||
* by pycrc v0.7, http://www.tty1.net/pycrc/
|
||||
* using the configuration:
|
||||
* Width = 16
|
||||
* Poly = 0x8005
|
||||
* XorIn = 0x0000
|
||||
* ReflectIn = True
|
||||
* XorOut = 0x0000
|
||||
* ReflectOut = True
|
||||
* Algorithm = table-driven
|
||||
* Direct = True
|
||||
*****************************************************************************/
|
||||
#ifndef __CRC____PLAIN_H__
|
||||
#define __CRC____PLAIN_H__
|
||||
|
||||
#include "glib.h"
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* The definition of the used algorithm.
|
||||
*****************************************************************************/
|
||||
#define CRC_ALGO_TABLE_DRIVEN 1
|
||||
|
||||
/**
|
||||
* The type of the CRC values.
|
||||
*
|
||||
* This type must be big enough to contain at least 16 bits.
|
||||
*****************************************************************************/
|
||||
typedef guint16 crc16_plain_t;
|
||||
|
||||
/**
|
||||
* Reflect all bits of a \a data word of \a data_len bytes.
|
||||
*
|
||||
* \param data The data word to be reflected.
|
||||
* \param data_len The width of \a data expressed in number of bits.
|
||||
* \return The reflected data.
|
||||
*****************************************************************************/
|
||||
long crc16_plain_reflect(long data, size_t data_len);
|
||||
|
||||
/**
|
||||
* Calculate the initial crc value.
|
||||
*
|
||||
* \return The initial crc value.
|
||||
*****************************************************************************/
|
||||
static inline crc16_plain_t crc16_plain_init(void)
|
||||
{
|
||||
return 0x0000;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the crc value with new data.
|
||||
*
|
||||
* \param crc The current crc value.
|
||||
* \param data Pointer to a buffer of \a data_len bytes.
|
||||
* \param data_len Number of bytes in the \a data buffer.
|
||||
* \return The updated crc value.
|
||||
*****************************************************************************/
|
||||
crc16_plain_t crc16_plain_update(crc16_plain_t crc, const unsigned char *data, size_t data_len);
|
||||
|
||||
/**
|
||||
* Calculate the final crc value.
|
||||
*
|
||||
* \param crc The current crc value.
|
||||
* \return The final crc value.
|
||||
*****************************************************************************/
|
||||
static inline crc16_plain_t crc16_plain_finalize(crc16_plain_t crc)
|
||||
{
|
||||
return crc ^ 0x0000;
|
||||
}
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* closing brace for extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /* __CRC____PLAIN_H__ */
|
12
epan/crc16.c
12
epan/crc16.c
|
@ -36,6 +36,7 @@
|
|||
#include <glib.h>
|
||||
#include <epan/tvbuff.h>
|
||||
#include <epan/crc16.h>
|
||||
#include <epan/crc/crc-16-plain.h>
|
||||
|
||||
|
||||
/*****************************************************************/
|
||||
|
@ -236,3 +237,14 @@ guint16 crc16_ccitt_tvb_offset_seed(tvbuff_t *tvb, guint offset, guint len, guin
|
|||
return crc16_ccitt_seed(buf, len, seed);
|
||||
}
|
||||
|
||||
guint16 crc16_plain_tvb_offset(tvbuff_t *tvb, guint offset, guint len)
|
||||
{
|
||||
guint16 crc = crc16_plain_init();
|
||||
|
||||
const guint8* buf = tvb_get_ptr(tvb, offset, len);
|
||||
|
||||
crc = crc16_plain_update(crc, buf, len);
|
||||
|
||||
return crc16_plain_finalize(crc);
|
||||
}
|
||||
|
||||
|
|
17
epan/crc16.h
17
epan/crc16.h
|
@ -102,6 +102,23 @@ extern guint16 crc16_ccitt_tvb_seed(tvbuff_t *tvb, guint len, guint16 seed);
|
|||
extern guint16 crc16_ccitt_tvb_offset_seed(tvbuff_t *tvb, guint offset,
|
||||
guint len, guint16 seed);
|
||||
|
||||
/** Compute the "plain" CRC16 checksum of a tv buffer using the following
|
||||
* parameters:
|
||||
* Width = 16
|
||||
* Poly = 0x8005
|
||||
* XorIn = 0x0000
|
||||
* ReflectIn = True
|
||||
* XorOut = 0x0000
|
||||
* ReflectOut = True
|
||||
* Algorithm = table-driven
|
||||
* Direct = True
|
||||
@param tvb The tv buffer containing the data.
|
||||
@param offset The offset into the tv buffer.
|
||||
@param len The number of bytes to include in the computation.
|
||||
@return The CRC16 checksum. */
|
||||
extern guint16 crc16_plain_tvb_offset(tvbuff_t *tvb, guint offset, guint len);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
|
|
@ -105,6 +105,7 @@ convert_string_to_hex
|
|||
copy_file_binary_mode
|
||||
copy_prefs
|
||||
crc16_ccitt_tvb
|
||||
crc16_plain_tvb_offset
|
||||
create_dissector_handle
|
||||
create_persconffile_dir
|
||||
create_persconffile_profile
|
||||
|
|
|
@ -49,9 +49,9 @@
|
|||
#include <epan/etypes.h>
|
||||
#include <epan/expert.h>
|
||||
#include <epan/dissectors/packet-dcerpc.h>
|
||||
#include <epan/crc16.h>
|
||||
|
||||
#include "packet-pn.h"
|
||||
#include "crc16.h"
|
||||
|
||||
/* Define the pn-rt proto */
|
||||
static int proto_pn_rt = -1;
|
||||
|
@ -145,7 +145,6 @@ dissect_SubFrame_heur(tvbuff_t *tvb,
|
|||
proto_item *sub_item;
|
||||
proto_tree *sub_tree;
|
||||
proto_item *item;
|
||||
const char *crc_buf;
|
||||
guint16 crc;
|
||||
|
||||
|
||||
|
@ -193,8 +192,11 @@ dissect_SubFrame_heur(tvbuff_t *tvb,
|
|||
item = proto_tree_add_uint(sub_tree, hf_pn_rt_sf_crc16, tvb, offset, 2, u16SFCRC16);
|
||||
|
||||
if(u8SFPosition & 0x80) {
|
||||
/*
|
||||
crc_buf = (const char *) tvb_get_ptr(tvb, u32SubStart, offset-u32SubStart);
|
||||
crc = crc16(0, crc_buf, offset-u32SubStart);
|
||||
*/
|
||||
crc = crc16_plain_tvb_offset(tvb, u32SubStart, offset-u32SubStart);
|
||||
|
||||
if(crc != u16SFCRC16) {
|
||||
proto_item_append_text(item, " [Preliminary check: incorrect, should be: %u]", crc);
|
||||
|
|
Loading…
Reference in New Issue