Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
p2p
go-cidranger
Commits
fec54c23
Commit
fec54c23
authored
Jan 31, 2018
by
Rob Adams
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix bug in covering logic and add new Covers() method for network.
Signed-off-by:
Rob Adams
<
readams@readams.net
>
parent
8c56974d
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
47 additions
and
2 deletions
+47
-2
brute.go
brute.go
+5
-1
net/ip.go
net/ip.go
+7
-0
net/ip_test.go
net/ip_test.go
+25
-0
trie.go
trie.go
+1
-1
trie_test.go
trie_test.go
+9
-0
No files found.
brute.go
View file @
fec54c23
...
...
@@ -98,7 +98,11 @@ func (b *bruteRanger) CoveredNetworks(network net.IPNet) ([]RangerEntry, error)
var
results
[]
RangerEntry
for
_
,
entry
:=
range
entries
{
entrynetwork
:=
entry
.
Network
()
if
network
.
Contains
(
entrynetwork
.
IP
)
{
searchMaskSize
,
_
:=
network
.
Mask
.
Size
()
entryMaskSize
,
_
:=
entrynetwork
.
Mask
.
Size
()
if
network
.
Contains
(
entrynetwork
.
IP
)
&&
searchMaskSize
<=
entryMaskSize
{
results
=
append
(
results
,
entry
)
}
}
...
...
net/ip.go
View file @
fec54c23
...
...
@@ -208,6 +208,13 @@ func (n Network) Contains(nn NetworkNumber) bool {
return
true
}
// Contains returns true if Network covers o, false otherwise
func
(
n
Network
)
Covers
(
o
Network
)
bool
{
nMaskSize
,
_
:=
n
.
IPNet
.
Mask
.
Size
()
oMaskSize
,
_
:=
o
.
IPNet
.
Mask
.
Size
()
return
n
.
Contains
(
o
.
Number
)
&&
nMaskSize
<=
oMaskSize
}
// LeastCommonBitPosition returns the smallest position of the preceding common
// bits of the 2 networks, and returns an error ErrNoGreatestCommonBit
// if the two network number diverges from the first bit.
...
...
net/ip_test.go
View file @
fec54c23
...
...
@@ -412,6 +412,31 @@ func TestPreviousIP(t *testing.T) {
}
}
func
TestNetworkCovers
(
t
*
testing
.
T
)
{
cases
:=
[]
struct
{
network
string
covers
string
result
bool
name
string
}{
{
"10.0.0.0/24"
,
"10.0.0.1/25"
,
true
,
"contains"
},
{
"10.0.0.0/24"
,
"11.0.0.1/25"
,
false
,
"not contains"
},
{
"10.0.0.0/16"
,
"10.0.0.0/15"
,
false
,
"prefix false"
},
{
"10.0.0.0/15"
,
"10.0.0.0/16"
,
true
,
"prefix true"
},
{
"10.0.0.0/15"
,
"10.0.0.0/15"
,
true
,
"same"
},
}
for
_
,
tc
:=
range
cases
{
t
.
Run
(
tc
.
name
,
func
(
t
*
testing
.
T
)
{
_
,
n
,
_
:=
net
.
ParseCIDR
(
tc
.
network
)
network
:=
NewNetwork
(
*
n
)
_
,
n
,
_
=
net
.
ParseCIDR
(
tc
.
covers
)
covers
:=
NewNetwork
(
*
n
)
assert
.
Equal
(
t
,
tc
.
result
,
network
.
Covers
(
covers
))
})
}
}
/*
*********************************
Benchmarking ip manipulations.
...
...
trie.go
View file @
fec54c23
...
...
@@ -186,7 +186,7 @@ func (p *prefixTrie) containingNetworks(number rnet.NetworkNumber) ([]RangerEntr
func
(
p
*
prefixTrie
)
coveredNetworks
(
network
rnet
.
Network
)
([]
RangerEntry
,
error
)
{
var
results
[]
RangerEntry
if
p
.
hasEntry
()
&&
network
.
Co
ntain
s
(
p
.
network
.
Number
)
{
if
p
.
hasEntry
()
&&
network
.
Co
ver
s
(
p
.
network
)
{
results
=
[]
RangerEntry
{
p
.
entry
}
}
if
p
.
targetBitPosition
()
<
0
{
...
...
trie_test.go
View file @
fec54c23
...
...
@@ -404,6 +404,15 @@ var coveredNetworkTests = []coveredNetworkTest{
[]
string
{
"192.168.0.0/24"
,
"192.168.1.1/32"
},
"path not taken"
,
},
{
rnet
.
IPv4
,
[]
string
{
"192.168.0.0/15"
,
},
"192.168.0.0/16"
,
nil
,
"only masks different"
,
},
}
func
TestPrefixTrieCoveredNetworks
(
t
*
testing
.
T
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment