Update Changelog for 2.1beta2 release
App-layer: Add Modbus protocol parser

Decode Modbus request and response messages, and extracts
MODBUS Application Protocol header and the code function.

In case of read/write function, extracts message contents
(read/write address, quantity, count, data to write).

Links request and response messages in a transaction according to
Transaction Identifier (transaction management based on DNS source code).

MODBUS Messaging on TCP/IP Implementation Guide V1.0b
(http://www.modbus.org/docs/Modbus_Messaging_Implementation_Guide_V1_0b.pdf)
MODBUS Application Protocol Specification V1.1b3
(http://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b3.pdf)

Based on DNS source code.

Signed-off-by: David DIALLO <diallo@et.esia.fr>
Detect: Add Modbus keyword management

Add the modbus.function and subfunction) keywords for public function match in rules (Modbus layer).
Matching based on code function, and if necessary, sub-function code
or based on category (assigned, unassigned, public, user or reserved)
and negation is permitted.

Add the modbus.access keyword for read/write Modbus function match in rules (Modbus layer).
Matching based on access type (read or write),
and/or function type (discretes, coils, input or holding)
and, if necessary, read or write address access,
and, if necessary, value to write.
For address and value matching, "<", ">" and "<>" is permitted.

Based on TLS source code and file size source code (address and value matching).

Signed-off-by: David DIALLO <diallo@et.esia.fr>
Detect-engine: Add Modbus detection engine

Management of Modbus Tx

Based on DNS source code.

Signed-off-by: David DIALLO <diallo@et.esia.fr>
pfring: IPS/TAP feature

This patch adds new variables to pfring configuration:

  copy-mode
  copy-iface
  flush-packet

If copy-mode is set to ips, the packet with action DROP
are not copied to the destination interface.

If copy-mode is set to tap, all packets are copied to the
destination interface.

If flush-packet is set to no, you will decrease your CPU usage but
at the cost of sending packets in trains and thus at larger latency.
pfring: peering interfaces

This patch adds a peering of pfring interfaces.
This is make using the PfringPeer structure,
like AF_PACKET.
pfring: send packets to peered interface

This patch send the packets to the peered interface.
It also test if the packet action is drop
pfring: define HAVE_RWLOCK to avoid conflict

If HAVE_RWLOCK is not defined, in pfring library
pthread_rw_lock_t is defined as the following:

This causes some warnings:

threads.c: In function ‘ThreadMacrosTest03RWLocks’:
threads.c:92:5: warning: passing argument 1 of ‘pthread_rwlock_trywrlock’ from incompatible pointer type [enabled by default]
     r |= (SCRWLockTryWRLock(&rwl_write) == EBUSY)? 0 : 1;
     ^
In file included from threads.h:93:0,
                 from suricata-common.h:316,
                 from threads.c:27:
/usr/include/pthread.h:927:12: note: expected ‘union pthread_rwlock_t *’ but argument is of type ‘union pthread_mutex_t *’
 extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock)
            ^
threads.c: In function ‘ThreadMacrosTest04RWLocks’:
threads.c:108:5: warning: passing argument 1 of ‘pthread_rwlock_trywrlock’ from incompatible pointer type [enabled by default]
     r |= (SCRWLockTryWRLock(&rwl_read) == EBUSY)? 0 : 1;
     ^
In file included from threads.h:93:0,
                 from suricata-common.h:316,
                 from threads.c:27:
/usr/include/pthread.h:927:12: note: expected ‘union pthread_rwlock_t *’ but argument is of type ‘union pthread_mutex_t *’
 extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock)
            ^
threads.c: In function ‘ThreadMacrosTest05RWLocks’:
threads.c:124:5: warning: passing argument 1 of ‘pthread_rwlock_tryrdlock’ from incompatible pointer type [enabled by default]
     r |= (SCRWLockTryRDLock(&rwl_read) == EBUSY)? 0 : 1;
     ^
In file included from threads.h:93:0,
                 from suricata-common.h:316,
                 from threads.c:27:
/usr/include/pthread.h:912:12: note: expected ‘union pthread_rwlock_t *’ but argument is of type ‘union pthread_mutex_t *’
 extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock)
            ^

This patch fixes temporarily this issue