github.com/cilium/cilium@v1.16.2/pkg/endpoint/proxy.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright Authors of Cilium
     3  
     4  package endpoint
     5  
     6  import (
     7  	"context"
     8  	"reflect"
     9  
    10  	"github.com/cilium/cilium/pkg/completion"
    11  	"github.com/cilium/cilium/pkg/policy"
    12  	"github.com/cilium/cilium/pkg/proxy/endpoint"
    13  	"github.com/cilium/cilium/pkg/revert"
    14  )
    15  
    16  // EndpointProxy defines any L7 proxy with which an Endpoint must interact.
    17  type EndpointProxy interface {
    18  	CreateOrUpdateRedirect(ctx context.Context, l4 policy.ProxyPolicy, id string, localEndpoint endpoint.EndpointUpdater, wg *completion.WaitGroup) (proxyPort uint16, err error, finalizeFunc revert.FinalizeFunc, revertFunc revert.RevertFunc)
    19  	RemoveRedirect(id string, wg *completion.WaitGroup) (error, revert.FinalizeFunc, revert.RevertFunc)
    20  	UpdateNetworkPolicy(ep endpoint.EndpointUpdater, vis *policy.VisibilityPolicy, policy *policy.L4Policy, ingressPolicyEnforced, egressPolicyEnforced bool, wg *completion.WaitGroup) (error, func() error)
    21  	RemoveNetworkPolicy(ep endpoint.EndpointInfoSource)
    22  }
    23  
    24  // SetProxy sets the proxy for this endpoint.
    25  func (e *Endpoint) SetProxy(p EndpointProxy) {
    26  	e.unconditionalLock()
    27  	defer e.unlock()
    28  	e.proxy = p
    29  }
    30  
    31  func (e *Endpoint) removeNetworkPolicy() {
    32  	if e.IsProxyDisabled() {
    33  		return
    34  	}
    35  	e.proxy.RemoveNetworkPolicy(e)
    36  }
    37  
    38  func (e *Endpoint) IsProxyDisabled() bool {
    39  	return e.proxy == nil || reflect.ValueOf(e.proxy).IsNil()
    40  }
    41  
    42  // FakeEndpointProxy is a stub proxy used for testing.
    43  type FakeEndpointProxy struct{}
    44  
    45  // CreateOrUpdateRedirect does nothing.
    46  func (f *FakeEndpointProxy) CreateOrUpdateRedirect(ctx context.Context, l4 policy.ProxyPolicy, id string, localEndpoint endpoint.EndpointUpdater, wg *completion.WaitGroup) (proxyPort uint16, err error, finalizeFunc revert.FinalizeFunc, revertFunc revert.RevertFunc) {
    47  	return
    48  }
    49  
    50  // RemoveRedirect does nothing.
    51  func (f *FakeEndpointProxy) RemoveRedirect(id string, wg *completion.WaitGroup) (error, revert.FinalizeFunc, revert.RevertFunc) {
    52  	return nil, nil, nil
    53  }
    54  
    55  // UpdateNetworkPolicy does nothing.
    56  func (f *FakeEndpointProxy) UpdateNetworkPolicy(ep endpoint.EndpointUpdater, vis *policy.VisibilityPolicy, policy *policy.L4Policy, ingressPolicyEnforced, egressPolicyEnforced bool, wg *completion.WaitGroup) (error, func() error) {
    57  	return nil, nil
    58  }
    59  
    60  // RemoveNetworkPolicy does nothing.
    61  func (f *FakeEndpointProxy) RemoveNetworkPolicy(ep endpoint.EndpointInfoSource) {}