-
Notifications
You must be signed in to change notification settings - Fork 884
/
ip_advertisement.go
65 lines (57 loc) · 1.19 KB
/
ip_advertisement.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// SPDX-License-Identifier:Apache-2.0
package layer2
import (
"net"
"k8s.io/apimachinery/pkg/util/sets"
)
// IPAdvertisement is the advertisement Info about LB IP.
type IPAdvertisement struct {
ip net.IP
interfaces sets.Set[string]
allInterfaces bool
}
func NewIPAdvertisement(ip net.IP, allInterfaces bool, interfaces sets.Set[string]) IPAdvertisement {
return IPAdvertisement{
ip: ip,
interfaces: interfaces,
allInterfaces: allInterfaces,
}
}
func (i *IPAdvertisement) Equal(other *IPAdvertisement) bool {
if i == nil && other == nil {
return true
}
if i == nil || other == nil {
return false
}
if !i.ip.Equal(other.ip) {
return false
}
if i.allInterfaces != other.allInterfaces {
return false
}
if i.allInterfaces {
return true
}
return i.interfaces.Equal(other.interfaces)
}
func (i *IPAdvertisement) MatchInterfaces(intfs ...string) bool {
if i.allInterfaces {
return true
}
for _, intf := range intfs {
if i.matchInterface(intf) {
return true
}
}
return false
}
func (i *IPAdvertisement) matchInterface(intf string) bool {
if i == nil {
return false
}
if i.allInterfaces {
return true
}
return i.interfaces.Has(intf)
}