code: func (f *ConntrackFilter) MatchConntrackFlow(flow *ConntrackFlow) bool {
  	if len(f.ipFilter) == 0 {
  		// empty filter always not match
  		return false
  	}
  
  	match := true
  	// -orig-src ip   Source address from original direction
  	if elem, found := f.ipFilter[ConntrackOrigSrcIP]; found {
  		match = match && elem.Equal(flow.Forward.SrcIP)
  	}
  
  	// -orig-dst ip   Destination address from original direction
  	if elem, found := f.ipFilter[ConntrackOrigDstIP]; match && found {
  		match = match && elem.Equal(flow.Forward.DstIP)
  	}
  
  	// -src-nat ip    Source NAT ip
  	if elem, found := f.ipFilter[ConntrackReplySrcIP]; match && found {
  		match = match && elem.Equal(flow.Reverse.SrcIP)
  	}
  
  	// -dst-nat ip    Destination NAT ip
  	if elem, found := f.ipFilter[ConntrackReplyDstIP]; match && found {
  		match = match && elem.Equal(flow.Reverse.DstIP)
  	}
  
  	// Match source or destination reply IP
  	if elem, found := f.ipFilter[ConntrackReplyAnyIP]; match && found {
  		match = match && (elem.Equal(flow.Reverse.SrcIP) || elem.Equal(flow.Reverse.DstIP))
  	}
  
  	return match
  }
docs: // MatchConntrackFlow applies the filter to the flow and returns true if the flow matches the filter
  // false otherwise