@@ -10,6 +10,7 @@ import (
1010
1111 "github.com/stretchr/testify/assert"
1212 "github.com/stretchr/testify/require"
13+ "github.com/ti-mo/netfilter"
1314)
1415
1516// Create a given number of flows with a randomized component and check the amount
@@ -490,3 +491,35 @@ func TestStatusFilter(t *testing.T) {
490491 require .NoError (t , err )
491492 assert .Len (t , flows , 0 )
492493}
494+
495+ func TestFamilyFilter (t * testing.T ) {
496+ c , _ , err := makeNSConn ()
497+ require .NoError (t , err )
498+
499+ require .NoError (t , c .Create (NewFlow (unix .IPPROTO_TCP , 0 , netip .MustParseAddr ("1.2.3.4" ), netip .MustParseAddr ("5.6.7.8" ), 1234 , 80 , 120 , 0 )))
500+ require .NoError (t , c .Create (NewFlow (unix .IPPROTO_UDP , 0 , netip .MustParseAddr ("2a00:1450:400e:804::200e" ), netip .MustParseAddr ("2a00:1450:400e:804::200f" ), 1234 , 80 , 120 , 0 )))
501+
502+ flows , err := c .Dump (nil )
503+ require .NoError (t , err )
504+ assert .Len (t , flows , 2 , "expected 2 flows in total" )
505+
506+ flows , err = c .DumpFilter (NewFilter ().Family (netfilter .ProtoIPv4 ), nil )
507+ require .NoError (t , err )
508+ assert .Len (t , flows , 1 )
509+ assert .Equal (t , flows [0 ].TupleOrig .IP .SourceAddress , netip .MustParseAddr ("1.2.3.4" ))
510+
511+ flows , err = c .DumpFilter (NewFilter ().Family (netfilter .ProtoIPv6 ), nil )
512+ require .NoError (t , err )
513+ assert .Len (t , flows , 1 )
514+ assert .Equal (t , flows [0 ].TupleOrig .IP .SourceAddress , netip .MustParseAddr ("2a00:1450:400e:804::200e" ))
515+
516+ assert .NoError (t , c .FlushFilter (NewFilter ().Family (netfilter .ProtoIPv4 )))
517+ flows , err = c .Dump (nil )
518+ require .NoError (t , err )
519+ assert .Len (t , flows , 1 , "expected 1 flow in total" )
520+
521+ flows , err = c .DumpFilter (NewFilter ().Family (netfilter .ProtoIPv6 ), nil )
522+ require .NoError (t , err )
523+ assert .Len (t , flows , 1 )
524+ assert .Equal (t , flows [0 ].TupleOrig .IP .SourceAddress , netip .MustParseAddr ("2a00:1450:400e:804::200e" ))
525+ }
0 commit comments