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) {}