better loop control
This commit is contained in:
parent
87f28cef6e
commit
994c20d585
27
conn.go
27
conn.go
|
@ -77,9 +77,8 @@ func (cc *Conn) Flush() error {
|
|||
entitiesBySeq[smsg[i].Header.Sequence] = e
|
||||
}
|
||||
|
||||
// Search handle in netlink messages based on requests seq
|
||||
echoedEntities := 0
|
||||
for len(cc.entities) > echoedEntities {
|
||||
// Trigger entities callback
|
||||
for checkReceive(conn) {
|
||||
rmsg, err := conn.Receive()
|
||||
|
||||
if err != nil {
|
||||
|
@ -89,15 +88,33 @@ func (cc *Conn) Flush() error {
|
|||
for _, msg := range rmsg {
|
||||
if e, ok := entitiesBySeq[msg.Header.Sequence]; ok {
|
||||
e.HandleResponse(msg)
|
||||
echoedEntities++
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func checkReceive(c *netlink.Conn) bool {
|
||||
sc, err := c.SyscallConn()
|
||||
|
||||
var n int
|
||||
|
||||
sc.Control(func(fd uintptr) {
|
||||
var fdSet unix.FdSet
|
||||
fdSet.Zero()
|
||||
fdSet.Set(int(fd))
|
||||
|
||||
n, err = unix.Select(int(fd)+1, &fdSet, nil, nil, &unix.Timeval{})
|
||||
})
|
||||
|
||||
if err == nil && n > 0 {
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// FlushRuleset flushes the entire ruleset. See also
|
||||
// https://wiki.nftables.org/wiki-nftables/index.php/Operations_at_ruleset_level
|
||||
func (cc *Conn) FlushRuleset() {
|
||||
|
|
4
go.mod
4
go.mod
|
@ -4,8 +4,8 @@ go 1.12
|
|||
|
||||
require (
|
||||
github.com/koneu/natend v0.0.0-20150829182554-ec0926ea948d
|
||||
github.com/mdlayher/netlink v0.0.0-20191009155606-de872b0d824b
|
||||
github.com/mdlayher/netlink v1.0.0
|
||||
github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc
|
||||
golang.org/x/net v0.0.0-20191028085509-fe3aa8a45271 // indirect
|
||||
golang.org/x/sys v0.0.0-20191029155521-f43be2a4598c
|
||||
golang.org/x/sys v0.0.0-20200106114638-5f8ca72cd632
|
||||
)
|
||||
|
|
4
go.sum
4
go.sum
|
@ -8,6 +8,8 @@ github.com/koneu/natend v0.0.0-20150829182554-ec0926ea948d/go.mod h1:QHb4k4cr1fQ
|
|||
github.com/mdlayher/netlink v0.0.0-20190409211403-11939a169225/go.mod h1:eQB3mZE4aiYnlUsyGGCOpPETfdQq4Jhsgf1fk3cwQaA=
|
||||
github.com/mdlayher/netlink v0.0.0-20191009155606-de872b0d824b h1:W3er9pI7mt2gOqOWzwvx20iJ8Akiqz1mUMTxU6wdvl8=
|
||||
github.com/mdlayher/netlink v0.0.0-20191009155606-de872b0d824b/go.mod h1:KxeJAFOFLG6AjpyDkQ/iIhxygIUKD+vcwqcnu43w/+M=
|
||||
github.com/mdlayher/netlink v1.0.0 h1:vySPY5Oxnn/8lxAPn2cK6kAzcZzYJl3KriSLO46OT18=
|
||||
github.com/mdlayher/netlink v1.0.0/go.mod h1:KxeJAFOFLG6AjpyDkQ/iIhxygIUKD+vcwqcnu43w/+M=
|
||||
github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc h1:R83G5ikgLMxrBvLh22JhdfI8K6YXEPHx5P03Uu3DRs4=
|
||||
github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
|
@ -25,4 +27,6 @@ golang.org/x/sys v0.0.0-20191029155521-f43be2a4598c h1:S/FtSvpNLtFBgjTqcKsRpsa6a
|
|||
golang.org/x/sys v0.0.0-20191029155521-f43be2a4598c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea h1:Mz1TMnfJDRJLk8S8OPCoJYgrsp/Se/2TBre2+vwX128=
|
||||
golang.org/x/sys v0.0.0-20191113150313-8ad342257130 h1:+sdNBpwFF05NvMnEyGynbOs/Gr2LQwORWEPKXuEXxzU=
|
||||
golang.org/x/sys v0.0.0-20200106114638-5f8ca72cd632 h1:ateQkYCVYo8UwIBvoR3zj1Dh2K6Op/n3GxemXfB44/Y=
|
||||
golang.org/x/sys v0.0.0-20200106114638-5f8ca72cd632/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
|
|
Loading…
Reference in New Issue