diff --git a/component/trie/ipcidr_trie.go b/component/trie/ipcidr_trie.go index a2ccfa16..ee8659be 100644 --- a/component/trie/ipcidr_trie.go +++ b/component/trie/ipcidr_trie.go @@ -185,6 +185,10 @@ func addIpv6Cidr(trie *IpCidrTrie, ip net.IP, groupSize int) { } for i := 2; i < groupSize; i += 2 { + if ip[i] == 0 && ip[i+1] == 0 { + node.Mark = true + } + if node.Mark { return } diff --git a/component/trie/trie_test.go b/component/trie/trie_test.go index e1b20103..a589b7ca 100644 --- a/component/trie/trie_test.go +++ b/component/trie/trie_test.go @@ -74,6 +74,14 @@ func TestIpv6AddFail(t *testing.T) { assert.IsType(t, new(net.ParseError), err) } +func TestIpv6SearchSub(t *testing.T) { + trie := NewIpCidrTrie() + assert.NoError(t, trie.AddIpCidrForString("240e::/18")) + + assert.Equal(t, true, trie.IsContainForString("240e:964:ea02:100:1800::71")) + +} + func TestIpv6Search(t *testing.T) { trie := NewIpCidrTrie()