@ -481,51 +481,41 @@ void FlowShutdown(void)
void FlowInitFlowProto ( void )
{
/*Default*/
flow_proto [ FLOW_PROTO_DEFAULT ] . new_timeout = FLOW_DEFAULT_NEW_TIMEOUT ;
flow_proto [ FLOW_PROTO_DEFAULT ] . est_timeout = FLOW_DEFAULT_EST_TIMEOUT ;
flow_proto [ FLOW_PROTO_DEFAULT ] . closed_timeout =
FLOW_DEFAULT_CLOSED_TIMEOUT ;
flow_proto [ FLOW_PROTO_DEFAULT ] . emerg_new_timeout =
FLOW_DEFAULT_EMERG_NEW_TIMEOUT ;
flow_proto [ FLOW_PROTO_DEFAULT ] . emerg_est_timeout =
FLOW_DEFAULT_EMERG_EST_TIMEOUT ;
flow_proto [ FLOW_PROTO_DEFAULT ] . emerg_closed_timeout =
FLOW_DEFAULT_EMERG_CLOSED_TIMEOUT ;
flow_proto [ FLOW_PROTO_DEFAULT ] . Freefunc = NULL ;
/*TCP*/
flow_proto [ FLOW_PROTO_TCP ] . new_timeout = FLOW_IPPROTO_TCP_NEW_TIMEOUT ;
flow_proto [ FLOW_PROTO_TCP ] . est_timeout = FLOW_IPPROTO_TCP_EST_TIMEOUT ;
flow_proto [ FLOW_PROTO_TCP ] . closed_timeout = FLOW_DEFAULT_CLOSED_TIMEOUT ;
flow_proto [ FLOW_PROTO_TCP ] . emerg_new_timeout =
FLOW_IPPROTO_TCP_EMERG_NEW_TIMEOUT ;
flow_proto [ FLOW_PROTO_TCP ] . emerg_est_timeout =
FLOW_IPPROTO_TCP_EMERG_EST_TIMEOUT ;
flow_proto [ FLOW_PROTO_TCP ] . emerg_closed_timeout =
FLOW_DEFAULT_EMERG_CLOSED_TIMEOUT ;
flow_proto [ FLOW_PROTO_TCP ] . Freefunc = NULL ;
/*UDP*/
flow_proto [ FLOW_PROTO_UDP ] . new_timeout = FLOW_IPPROTO_UDP_NEW_TIMEOUT ;
flow_proto [ FLOW_PROTO_UDP ] . est_timeout = FLOW_IPPROTO_UDP_EST_TIMEOUT ;
flow_proto [ FLOW_PROTO_UDP ] . closed_timeout = FLOW_DEFAULT_CLOSED_TIMEOUT ;
flow_proto [ FLOW_PROTO_UDP ] . emerg_new_timeout =
FLOW_IPPROTO_UDP_EMERG_NEW_TIMEOUT ;
flow_proto [ FLOW_PROTO_UDP ] . emerg_est_timeout =
FLOW_IPPROTO_UDP_EMERG_EST_TIMEOUT ;
flow_proto [ FLOW_PROTO_UDP ] . emerg_closed_timeout =
FLOW_DEFAULT_EMERG_CLOSED_TIMEOUT ;
flow_proto [ FLOW_PROTO_UDP ] . Freefunc = NULL ;
/*ICMP*/
flow_proto [ FLOW_PROTO_ICMP ] . new_timeout = FLOW_IPPROTO_ICMP_NEW_TIMEOUT ;
flow_proto [ FLOW_PROTO_ICMP ] . est_timeout = FLOW_IPPROTO_ICMP_EST_TIMEOUT ;
flow_proto [ FLOW_PROTO_ICMP ] . closed_timeout = FLOW_DEFAULT_CLOSED_TIMEOUT ;
flow_proto [ FLOW_PROTO_ICMP ] . emerg_new_timeout =
FLOW_IPPROTO_ICMP_EMERG_NEW_TIMEOUT ;
flow_proto [ FLOW_PROTO_ICMP ] . emerg_est_timeout =
FLOW_IPPROTO_ICMP_EMERG_EST_TIMEOUT ;
flow_proto [ FLOW_PROTO_ICMP ] . emerg_closed_timeout =
FLOW_DEFAULT_EMERG_CLOSED_TIMEOUT ;
flow_proto [ FLOW_PROTO_ICMP ] . Freefunc = NULL ;
FlowTimeoutsInit ( ) ;
# define SET_DEFAULTS(p, n, e, c, ne, ee, ce) \
flow_timeouts_normal [ ( p ) ] . new_timeout = ( n ) ; \
flow_timeouts_normal [ ( p ) ] . est_timeout = ( e ) ; \
flow_timeouts_normal [ ( p ) ] . closed_timeout = ( c ) ; \
flow_timeouts_emerg [ ( p ) ] . new_timeout = ( ne ) ; \
flow_timeouts_emerg [ ( p ) ] . est_timeout = ( ee ) ; \
flow_timeouts_emerg [ ( p ) ] . closed_timeout = ( ce ) ;
SET_DEFAULTS ( FLOW_PROTO_DEFAULT ,
FLOW_DEFAULT_NEW_TIMEOUT , FLOW_DEFAULT_EST_TIMEOUT ,
FLOW_DEFAULT_CLOSED_TIMEOUT ,
FLOW_DEFAULT_EMERG_NEW_TIMEOUT , FLOW_DEFAULT_EMERG_EST_TIMEOUT ,
FLOW_DEFAULT_EMERG_CLOSED_TIMEOUT ) ;
SET_DEFAULTS ( FLOW_PROTO_TCP ,
FLOW_IPPROTO_TCP_NEW_TIMEOUT , FLOW_IPPROTO_TCP_EST_TIMEOUT ,
FLOW_DEFAULT_CLOSED_TIMEOUT ,
FLOW_IPPROTO_TCP_EMERG_NEW_TIMEOUT , FLOW_IPPROTO_TCP_EMERG_EST_TIMEOUT ,
FLOW_DEFAULT_EMERG_CLOSED_TIMEOUT ) ;
SET_DEFAULTS ( FLOW_PROTO_UDP ,
FLOW_IPPROTO_UDP_NEW_TIMEOUT , FLOW_IPPROTO_UDP_EST_TIMEOUT ,
FLOW_DEFAULT_CLOSED_TIMEOUT ,
FLOW_IPPROTO_UDP_EMERG_NEW_TIMEOUT , FLOW_IPPROTO_UDP_EMERG_EST_TIMEOUT ,
FLOW_DEFAULT_EMERG_CLOSED_TIMEOUT ) ;
SET_DEFAULTS ( FLOW_PROTO_ICMP ,
FLOW_IPPROTO_ICMP_NEW_TIMEOUT , FLOW_IPPROTO_ICMP_EST_TIMEOUT ,
FLOW_DEFAULT_CLOSED_TIMEOUT ,
FLOW_IPPROTO_ICMP_EMERG_NEW_TIMEOUT , FLOW_IPPROTO_ICMP_EMERG_EST_TIMEOUT ,
FLOW_DEFAULT_EMERG_CLOSED_TIMEOUT ) ;
flow_freefuncs [ FLOW_PROTO_DEFAULT ] . Freefunc = NULL ;
flow_freefuncs [ FLOW_PROTO_TCP ] . Freefunc = NULL ;
flow_freefuncs [ FLOW_PROTO_UDP ] . Freefunc = NULL ;
flow_freefuncs [ FLOW_PROTO_ICMP ] . Freefunc = NULL ;
/* Let's see if we have custom timeouts defined from config */
const char * new = NULL ;
@ -555,39 +545,39 @@ void FlowInitFlowProto(void)
if ( new ! = NULL & &
ByteExtractStringUint32 ( & configval , 10 , strlen ( new ) , new ) > 0 ) {
flow_ proto [ FLOW_PROTO_DEFAULT ] . new_timeout = configval ;
flow_ timeouts_normal [ FLOW_PROTO_DEFAULT ] . new_timeout = configval ;
}
if ( established ! = NULL & &
ByteExtractStringUint32 ( & configval , 10 , strlen ( established ) ,
established ) > 0 ) {
flow_ proto [ FLOW_PROTO_DEFAULT ] . est_timeout = configval ;
flow_ timeouts_normal [ FLOW_PROTO_DEFAULT ] . est_timeout = configval ;
}
if ( closed ! = NULL & &
ByteExtractStringUint32 ( & configval , 10 , strlen ( closed ) ,
closed ) > 0 ) {
flow_ proto [ FLOW_PROTO_DEFAULT ] . closed_timeout = configval ;
flow_ timeouts_normal [ FLOW_PROTO_DEFAULT ] . closed_timeout = configval ;
}
if ( emergency_new ! = NULL & &
ByteExtractStringUint32 ( & configval , 10 , strlen ( emergency_new ) ,
emergency_new ) > 0 ) {
flow_ proto [ FLOW_PROTO_DEFAULT ] . emerg_ new_timeout = configval ;
flow_ timeouts_emerg [ FLOW_PROTO_DEFAULT ] . new_timeout = configval ;
}
if ( emergency_established ! = NULL & &
ByteExtractStringUint32 ( & configval , 10 ,
strlen ( emergency_established ) ,
emergency_established ) > 0 ) {
flow_ proto [ FLOW_PROTO_DEFAULT ] . emerg_ est_timeout= configval ;
flow_ timeouts_emerg [ FLOW_PROTO_DEFAULT ] . est_timeout= configval ;
}
if ( emergency_closed ! = NULL & &
ByteExtractStringUint32 ( & configval , 10 ,
strlen ( emergency_closed ) ,
emergency_closed ) > 0 ) {
flow_ proto [ FLOW_PROTO_DEFAULT ] . emerg_ closed_timeout = configval ;
flow_ timeouts_emerg [ FLOW_PROTO_DEFAULT ] . closed_timeout = configval ;
}
}
@ -606,39 +596,39 @@ void FlowInitFlowProto(void)
if ( new ! = NULL & &
ByteExtractStringUint32 ( & configval , 10 , strlen ( new ) , new ) > 0 ) {
flow_ proto [ FLOW_PROTO_TCP ] . new_timeout = configval ;
flow_ timeouts_normal [ FLOW_PROTO_TCP ] . new_timeout = configval ;
}
if ( established ! = NULL & &
ByteExtractStringUint32 ( & configval , 10 , strlen ( established ) ,
established ) > 0 ) {
flow_ proto [ FLOW_PROTO_TCP ] . est_timeout = configval ;
flow_ timeouts_normal [ FLOW_PROTO_TCP ] . est_timeout = configval ;
}
if ( closed ! = NULL & &
ByteExtractStringUint32 ( & configval , 10 , strlen ( closed ) ,
closed ) > 0 ) {
flow_ proto [ FLOW_PROTO_TCP ] . closed_timeout = configval ;
flow_ timeouts_normal [ FLOW_PROTO_TCP ] . closed_timeout = configval ;
}
if ( emergency_new ! = NULL & &
ByteExtractStringUint32 ( & configval , 10 , strlen ( emergency_new ) ,
emergency_new ) > 0 ) {
flow_ proto [ FLOW_PROTO_TCP ] . emerg_ new_timeout = configval ;
flow_ timeouts_emerg [ FLOW_PROTO_TCP ] . new_timeout = configval ;
}
if ( emergency_established ! = NULL & &
ByteExtractStringUint32 ( & configval , 10 ,
strlen ( emergency_established ) ,
emergency_established ) > 0 ) {
flow_ proto [ FLOW_PROTO_TCP ] . emerg_ est_timeout = configval ;
flow_ timeouts_emerg [ FLOW_PROTO_TCP ] . est_timeout = configval ;
}
if ( emergency_closed ! = NULL & &
ByteExtractStringUint32 ( & configval , 10 ,
strlen ( emergency_closed ) ,
emergency_closed ) > 0 ) {
flow_ proto [ FLOW_PROTO_TCP ] . emerg_ closed_timeout = configval ;
flow_ timeouts_emerg [ FLOW_PROTO_TCP ] . closed_timeout = configval ;
}
}
@ -653,26 +643,26 @@ void FlowInitFlowProto(void)
if ( new ! = NULL & &
ByteExtractStringUint32 ( & configval , 10 , strlen ( new ) , new ) > 0 ) {
flow_ proto [ FLOW_PROTO_UDP ] . new_timeout = configval ;
flow_ timeouts_normal [ FLOW_PROTO_UDP ] . new_timeout = configval ;
}
if ( established ! = NULL & &
ByteExtractStringUint32 ( & configval , 10 , strlen ( established ) ,
established ) > 0 ) {
flow_ proto [ FLOW_PROTO_UDP ] . est_timeout = configval ;
flow_ timeouts_normal [ FLOW_PROTO_UDP ] . est_timeout = configval ;
}
if ( emergency_new ! = NULL & &
ByteExtractStringUint32 ( & configval , 10 , strlen ( emergency_new ) ,
emergency_new ) > 0 ) {
flow_ proto [ FLOW_PROTO_UDP ] . emerg_ new_timeout = configval ;
flow_ timeouts_emerg [ FLOW_PROTO_UDP ] . new_timeout = configval ;
}
if ( emergency_established ! = NULL & &
ByteExtractStringUint32 ( & configval , 10 ,
strlen ( emergency_established ) ,
emergency_established ) > 0 ) {
flow_ proto [ FLOW_PROTO_UDP ] . emerg_ est_timeout = configval ;
flow_ timeouts_emerg [ FLOW_PROTO_UDP ] . est_timeout = configval ;
}
}
@ -688,26 +678,26 @@ void FlowInitFlowProto(void)
if ( new ! = NULL & &
ByteExtractStringUint32 ( & configval , 10 , strlen ( new ) , new ) > 0 ) {
flow_ proto [ FLOW_PROTO_ICMP ] . new_timeout = configval ;
flow_ timeouts_normal [ FLOW_PROTO_ICMP ] . new_timeout = configval ;
}
if ( established ! = NULL & &
ByteExtractStringUint32 ( & configval , 10 , strlen ( established ) ,
established ) > 0 ) {
flow_ proto [ FLOW_PROTO_ICMP ] . est_timeout = configval ;
flow_ timeouts_normal [ FLOW_PROTO_ICMP ] . est_timeout = configval ;
}
if ( emergency_new ! = NULL & &
ByteExtractStringUint32 ( & configval , 10 , strlen ( emergency_new ) ,
emergency_new ) > 0 ) {
flow_ proto [ FLOW_PROTO_ICMP ] . emerg_ new_timeout = configval ;
flow_ timeouts_emerg [ FLOW_PROTO_ICMP ] . new_timeout = configval ;
}
if ( emergency_established ! = NULL & &
ByteExtractStringUint32 ( & configval , 10 ,
strlen ( emergency_established ) ,
emergency_established ) > 0 ) {
flow_ proto [ FLOW_PROTO_ICMP ] . emerg_ est_timeout = configval ;
flow_ timeouts_emerg [ FLOW_PROTO_ICMP ] . est_timeout = configval ;
}
}
}
@ -728,8 +718,8 @@ int FlowClearMemory(Flow* f, uint8_t proto_map)
SCEnter ( ) ;
/* call the protocol specific free function if we have one */
if ( flow_ proto [ proto_map ] . Freefunc ! = NULL ) {
flow_ proto [ proto_map ] . Freefunc ( f - > protoctx ) ;
if ( flow_ freefuncs [ proto_map ] . Freefunc ! = NULL ) {
flow_ freefuncs [ proto_map ] . Freefunc ( f - > protoctx ) ;
}
FlowFreeStorage ( f ) ;
@ -752,7 +742,7 @@ int FlowSetProtoFreeFunc (uint8_t proto, void (*Free)(void *))
uint8_t proto_map ;
proto_map = FlowGetProtoMapping ( proto ) ;
flow_ proto [ proto_map ] . Freefunc = Free ;
flow_ freefuncs [ proto_map ] . Freefunc = Free ;
return 1 ;
}
@ -814,40 +804,35 @@ static int FlowTest01 (void)
FlowInitFlowProto ( ) ;
proto_map = FlowGetProtoMapping ( IPPROTO_TCP ) ;
if ( ( flow_proto [ proto_map ] . new_timeout ! = FLOW_IPPROTO_TCP_NEW_TIMEOUT ) & & ( flow_proto [ proto_map ] . est_timeout ! = FLOW_IPPROTO_TCP_EST_TIMEOUT )
& & ( flow_proto [ proto_map ] . emerg_new_timeout ! = FLOW_IPPROTO_TCP_EMERG_NEW_TIMEOUT ) & & ( flow_proto [ proto_map ] . emerg_est_timeout ! = FLOW_IPPROTO_TCP_EMERG_EST_TIMEOUT ) ) {
printf ( " failed in setting TCP flow timeout " ) ;
return 0 ;
}
FAIL_IF ( flow_timeouts_normal [ proto_map ] . new_timeout ! = FLOW_IPPROTO_TCP_NEW_TIMEOUT ) ;
FAIL_IF ( flow_timeouts_normal [ proto_map ] . est_timeout ! = FLOW_IPPROTO_TCP_EST_TIMEOUT ) ;
FAIL_IF ( flow_timeouts_emerg [ proto_map ] . new_timeout ! = FLOW_IPPROTO_TCP_EMERG_NEW_TIMEOUT ) ;
FAIL_IF ( flow_timeouts_emerg [ proto_map ] . est_timeout ! = FLOW_IPPROTO_TCP_EMERG_EST_TIMEOUT ) ;
proto_map = FlowGetProtoMapping ( IPPROTO_UDP ) ;
if ( ( flow_proto [ proto_map ] . new_timeout ! = FLOW_IPPROTO_UDP_NEW_TIMEOUT ) & & ( flow_proto [ proto_map ] . est_timeout ! = FLOW_IPPROTO_UDP_EST_TIMEOUT )
& & ( flow_proto [ proto_map ] . emerg_new_timeout ! = FLOW_IPPROTO_UDP_EMERG_NEW_TIMEOUT ) & & ( flow_proto [ proto_map ] . emerg_est_timeout ! = FLOW_IPPROTO_UDP_EMERG_EST_TIMEOUT ) ) {
printf ( " failed in setting UDP flow timeout " ) ;
return 0 ;
}
FAIL_IF ( flow_timeouts_normal [ proto_map ] . new_timeout ! = FLOW_IPPROTO_UDP_NEW_TIMEOUT ) ;
FAIL_IF ( flow_timeouts_normal [ proto_map ] . est_timeout ! = FLOW_IPPROTO_UDP_EST_TIMEOUT ) ;
FAIL_IF ( flow_timeouts_emerg [ proto_map ] . new_timeout ! = FLOW_IPPROTO_UDP_EMERG_NEW_TIMEOUT ) ;
FAIL_IF ( flow_timeouts_emerg [ proto_map ] . est_timeout ! = FLOW_IPPROTO_UDP_EMERG_EST_TIMEOUT ) ;
proto_map = FlowGetProtoMapping ( IPPROTO_ICMP ) ;
if ( ( flow_proto [ proto_map ] . new_timeout ! = FLOW_IPPROTO_ICMP_NEW_TIMEOUT ) & & ( flow_proto [ proto_map ] . est_timeout ! = FLOW_IPPROTO_ICMP_EST_TIMEOUT )
& & ( flow_proto [ proto_map ] . emerg_new_timeout ! = FLOW_IPPROTO_ICMP_EMERG_NEW_TIMEOUT ) & & ( flow_proto [ proto_map ] . emerg_est_timeout ! = FLOW_IPPROTO_ICMP_EMERG_EST_TIMEOUT ) ) {
printf ( " failed in setting ICMP flow timeout " ) ;
return 0 ;
}
FAIL_IF ( flow_timeouts_normal [ proto_map ] . new_timeout ! = FLOW_IPPROTO_ICMP_NEW_TIMEOUT ) ;
FAIL_IF ( flow_timeouts_normal [ proto_map ] . est_timeout ! = FLOW_IPPROTO_ICMP_EST_TIMEOUT ) ;
FAIL_IF ( flow_timeouts_emerg [ proto_map ] . new_timeout ! = FLOW_IPPROTO_ICMP_EMERG_NEW_TIMEOUT ) ;
FAIL_IF ( flow_timeouts_emerg [ proto_map ] . est_timeout ! = FLOW_IPPROTO_ICMP_EMERG_EST_TIMEOUT ) ;
proto_map = FlowGetProtoMapping ( IPPROTO_DCCP ) ;
if ( ( flow_proto [ proto_map ] . new_timeout ! = FLOW_DEFAULT_NEW_TIMEOUT ) & & ( flow_proto [ proto_map ] . est_timeout ! = FLOW_DEFAULT_EST_TIMEOUT )
& & ( flow_proto [ proto_map ] . emerg_new_timeout ! = FLOW_DEFAULT_EMERG_NEW_TIMEOUT ) & & ( flow_proto [ proto_map ] . emerg_est_timeout ! = FLOW_DEFAULT_EMERG_EST_TIMEOUT ) ) {
printf ( " failed in setting default flow timeout " ) ;
return 0 ;
}
FAIL_IF ( flow_timeouts_normal [ proto_map ] . new_timeout ! = FLOW_DEFAULT_NEW_TIMEOUT ) ;
FAIL_IF ( flow_timeouts_normal [ proto_map ] . est_timeout ! = FLOW_DEFAULT_EST_TIMEOUT ) ;
FAIL_IF ( flow_timeouts_emerg [ proto_map ] . new_timeout ! = FLOW_DEFAULT_EMERG_NEW_TIMEOUT ) ;
FAIL_IF ( flow_timeouts_emerg [ proto_map ] . est_timeout ! = FLOW_DEFAULT_EMERG_EST_TIMEOUT ) ;
return 1 ;
PASS ;
}
/*Test function for the unit test FlowTest02*/
void test ( void * f ) { }
static void test ( void * f ) { }
/**
* \ test Test the setting of the per protocol free function to free the
@ -863,23 +848,12 @@ static int FlowTest02 (void)
FlowSetProtoFreeFunc ( IPPROTO_UDP , test ) ;
FlowSetProtoFreeFunc ( IPPROTO_ICMP , test ) ;
if ( flow_proto [ FLOW_PROTO_DEFAULT ] . Freefunc ! = test ) {
printf ( " Failed in setting default free function \n " ) ;
return 0 ;
}
if ( flow_proto [ FLOW_PROTO_TCP ] . Freefunc ! = test ) {
printf ( " Failed in setting TCP free function \n " ) ;
return 0 ;
}
if ( flow_proto [ FLOW_PROTO_UDP ] . Freefunc ! = test ) {
printf ( " Failed in setting UDP free function \n " ) ;
return 0 ;
}
if ( flow_proto [ FLOW_PROTO_ICMP ] . Freefunc ! = test ) {
printf ( " Failed in setting ICMP free function \n " ) ;
return 0 ;
}
return 1 ;
FAIL_IF ( flow_freefuncs [ FLOW_PROTO_DEFAULT ] . Freefunc ! = test ) ;
FAIL_IF ( flow_freefuncs [ FLOW_PROTO_TCP ] . Freefunc ! = test ) ;
FAIL_IF ( flow_freefuncs [ FLOW_PROTO_UDP ] . Freefunc ! = test ) ;
FAIL_IF ( flow_freefuncs [ FLOW_PROTO_ICMP ] . Freefunc ! = test ) ;
PASS ;
}
/**