filter out unconnected pseudo nodes on the outside

The change is necessitated by the removal of procspied/ebpf endpoint
filtering in the renderers, as a result of which the odd
conntracked-only, unconnected pseudo node can sneak through.

This new way of doing things also makes renderers more composable and
robust, and more directly reflects the objective:
- in the process topologies, filter out all unconnected nodes
- in all other topologies, filter out unconnected pseudo nodes
This commit is contained in:
Matthias Radestock
2017-06-27 18:49:24 +01:00
parent e5a04ec5a4
commit 3209d65d52
3 changed files with 30 additions and 15 deletions

View File

@@ -68,13 +68,13 @@ func ConnectionJoin(r Renderer, toIPs func(report.Node) []string) Renderer {
return result
}
return FilterUnconnected(MakeMap(
return MakeMap(
ipToNode,
MakeReduce(
MakeMap(nodeToIP, r),
mapEndpoint2IP,
),
))
)
}
func ipToNode(n report.Node, _ report.Networks) report.Nodes {

View File

@@ -215,7 +215,7 @@ func Complement(f FilterFunc) FilterFunc {
// FilterUnconnected produces a renderer that filters unconnected nodes
// from the given renderer
func FilterUnconnected(r Renderer) Renderer {
return MakeFilter(
return MakeFilterPseudo(
func(node report.Node) bool {
_, ok := node.Latest.Lookup(IsConnected)
return ok
@@ -224,6 +224,21 @@ func FilterUnconnected(r Renderer) Renderer {
)
}
// FilterUnconnectedPseudo produces a renderer that filters
// unconnected pseudo nodes from the given renderer
func FilterUnconnectedPseudo(r Renderer) Renderer {
return MakeFilterPseudo(
func(node report.Node) bool {
if !IsPseudoTopology(node) {
return true
}
_, ok := node.Latest.Lookup(IsConnected)
return ok
},
ColorConnected(r),
)
}
// Noop allows all nodes through
func Noop(_ report.Node) bool { return true }