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
|
entitiesBySeq[smsg[i].Header.Sequence] = e
|
||||||
}
|
}
|
||||||
|
|
||||||
// Search handle in netlink messages based on requests seq
|
// Trigger entities callback
|
||||||
echoedEntities := 0
|
for checkReceive(conn) {
|
||||||
for len(cc.entities) > echoedEntities {
|
|
||||||
rmsg, err := conn.Receive()
|
rmsg, err := conn.Receive()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -89,15 +88,33 @@ func (cc *Conn) Flush() error {
|
||||||
for _, msg := range rmsg {
|
for _, msg := range rmsg {
|
||||||
if e, ok := entitiesBySeq[msg.Header.Sequence]; ok {
|
if e, ok := entitiesBySeq[msg.Header.Sequence]; ok {
|
||||||
e.HandleResponse(msg)
|
e.HandleResponse(msg)
|
||||||
echoedEntities++
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
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
|
// FlushRuleset flushes the entire ruleset. See also
|
||||||
// https://wiki.nftables.org/wiki-nftables/index.php/Operations_at_ruleset_level
|
// https://wiki.nftables.org/wiki-nftables/index.php/Operations_at_ruleset_level
|
||||||
func (cc *Conn) FlushRuleset() {
|
func (cc *Conn) FlushRuleset() {
|
||||||
|
|
4
go.mod
4
go.mod
|
@ -4,8 +4,8 @@ go 1.12
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/koneu/natend v0.0.0-20150829182554-ec0926ea948d
|
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
|
github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc
|
||||||
golang.org/x/net v0.0.0-20191028085509-fe3aa8a45271 // indirect
|
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-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 h1:W3er9pI7mt2gOqOWzwvx20iJ8Akiqz1mUMTxU6wdvl8=
|
||||||
github.com/mdlayher/netlink v0.0.0-20191009155606-de872b0d824b/go.mod h1:KxeJAFOFLG6AjpyDkQ/iIhxygIUKD+vcwqcnu43w/+M=
|
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 h1:R83G5ikgLMxrBvLh22JhdfI8K6YXEPHx5P03Uu3DRs4=
|
||||||
github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI=
|
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=
|
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-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-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-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=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
|
|
Loading…
Reference in New Issue