@ -135,9 +135,16 @@ type Wrapper struct {
PreFilterIn FilterFunc
// PostFilterIn is the inbound filter function that runs after the main filter.
PostFilterIn FilterFunc
// PreFilterOut is the outbound filter function that runs before the main filter
// and therefore sees the packets that may be later dropped by it.
PreFilterOut FilterFunc
// PreFilterFromTunToNetstack is a filter function that runs before the main filter
// for packets from the local system. This filter is populated by netstack to hook
// packets that should be handled by netstack. If set, this filter runs before
// PreFilterFromTunToEngine.
PreFilterFromTunToNetstack FilterFunc
// PreFilterFromTunToEngine is a filter function that runs before the main filter
// for packets from the local system. This filter is populated by wgengine to hook
// packets which it handles internally. If both this and PreFilterFromTunToNetstack
// filter functions are non-nil, this filter runs second.
PreFilterFromTunToEngine FilterFunc
// PostFilterOut is the outbound filter function that runs after the main filter.
PostFilterOut FilterFunc
@ -451,9 +458,16 @@ func (t *Wrapper) filterOut(p *packet.Parsed) filter.Response {
return filter . DropSilently
}
if t . PreFilterOut != nil {
if res := t . PreFilterOut ( p , t ) ; res . IsDrop ( ) {
// Handled by userspaceEngine.handleLocalPackets (quad-100 DNS primarily).
if t . PreFilterFromTunToNetstack != nil {
if res := t . PreFilterFromTunToNetstack ( p , t ) ; res . IsDrop ( ) {
// Handled by netstack.Impl.handleLocalPackets (quad-100 DNS primarily)
return res
}
}
if t . PreFilterFromTunToEngine != nil {
if res := t . PreFilterFromTunToEngine ( p , t ) ; res . IsDrop ( ) {
// Handled by userspaceEngine.handleLocalPackets (primarily handles
// quad-100 if netstack is not installed).
return res
}
}