@ -2156,6 +2156,100 @@ end:
return ret ;
}
/**
* Test that fragments in different VLANs that would otherwise be
* re - assembled , are not re - assembled . Just use simple in - order
* fragments .
*/
static int
DefragVlanTest ( void ) {
Packet * p1 = NULL , * p2 = NULL , * r = NULL ;
int ret = 0 ;
DefragInit ( ) ;
p1 = BuildTestPacket ( 1 , 0 , 1 , ' A ' , 8 ) ;
if ( p1 = = NULL )
goto end ;
p2 = BuildTestPacket ( 1 , 1 , 0 , ' B ' , 8 ) ;
if ( p2 = = NULL )
goto end ;
/* With no VLAN IDs set, packets should re-assemble. */
if ( ( r = Defrag ( NULL , NULL , p1 ) ) ! = NULL )
goto end ;
if ( ( r = Defrag ( NULL , NULL , p2 ) ) = = NULL )
goto end ;
SCFree ( r ) ;
/* With mismatched VLANs, packets should not re-assemble. */
p1 - > vlan_id [ 0 ] = 1 ;
p2 - > vlan_id [ 0 ] = 2 ;
if ( ( r = Defrag ( NULL , NULL , p1 ) ) ! = NULL )
goto end ;
if ( ( r = Defrag ( NULL , NULL , p2 ) ) ! = NULL )
goto end ;
/* Pass. */
ret = 1 ;
end :
if ( p1 ! = NULL )
SCFree ( p1 ) ;
if ( p2 ! = NULL )
SCFree ( p2 ) ;
DefragDestroy ( ) ;
return ret ;
}
/**
* Like DefragVlanTest , but for QinQ , testing the second level VLAN ID .
*/
static int
DefragVlanQinQTest ( void ) {
Packet * p1 = NULL , * p2 = NULL , * r = NULL ;
int ret = 0 ;
DefragInit ( ) ;
p1 = BuildTestPacket ( 1 , 0 , 1 , ' A ' , 8 ) ;
if ( p1 = = NULL )
goto end ;
p2 = BuildTestPacket ( 1 , 1 , 0 , ' B ' , 8 ) ;
if ( p2 = = NULL )
goto end ;
/* With no VLAN IDs set, packets should re-assemble. */
if ( ( r = Defrag ( NULL , NULL , p1 ) ) ! = NULL )
goto end ;
if ( ( r = Defrag ( NULL , NULL , p2 ) ) = = NULL )
goto end ;
SCFree ( r ) ;
/* With mismatched VLANs, packets should not re-assemble. */
p1 - > vlan_id [ 0 ] = 1 ;
p2 - > vlan_id [ 0 ] = 1 ;
p1 - > vlan_id [ 1 ] = 1 ;
p2 - > vlan_id [ 1 ] = 2 ;
if ( ( r = Defrag ( NULL , NULL , p1 ) ) ! = NULL )
goto end ;
if ( ( r = Defrag ( NULL , NULL , p2 ) ) ! = NULL )
goto end ;
/* Pass. */
ret = 1 ;
end :
if ( p1 ! = NULL )
SCFree ( p1 ) ;
if ( p2 ! = NULL )
SCFree ( p2 ) ;
DefragDestroy ( ) ;
return ret ;
}
# endif /* UNITTESTS */
void
@ -2199,6 +2293,9 @@ DefragRegisterTests(void)
UtRegisterTest ( " IPV6DefragSturgesNovakLastTest " ,
IPV6DefragSturgesNovakLastTest , 1 ) ;
UtRegisterTest ( " DefragVlanTest " , DefragVlanTest , 1 ) ;
UtRegisterTest ( " DefragVlanQinQTest " , DefragVlanQinQTest , 1 ) ;
UtRegisterTest ( " DefragTimeoutTest " ,
DefragTimeoutTest , 1 ) ;
# endif /* UNITTESTS */