in pkg/ebpf/bpf_client.go [489:539]
func (l *bpfClient) ReAttachEbpfProbes() error {
var networkPolicyMode string
var err error
// If we have any links for which we need to reattach the probes, fetch NP mode from ipamd
if len(l.interfaceNametoIngressPinPath) > 0 || len(l.interfaceNametoEgressPinPath) > 0 {
// get network policy mode from ipamd
networkPolicyMode, err = l.GetNetworkPolicyModeFromIpamd()
if err != nil {
l.logger.Info("Error while fetching networkPolicyMode from ipamd ", err)
return err
}
}
state := DEFAULT_ALLOW
if utils.IsStrictMode(networkPolicyMode) {
state = DEFAULT_DENY
}
for interfaceName, pinPath := range l.interfaceNametoIngressPinPath {
podIdentifier, _ := utils.GetPodIdentifierFromBPFPinPath(pinPath)
l.logger.Info("ReattachEbpfProbes ", "attaching ingress for ", podIdentifier, "interface ", interfaceName)
_, err := l.attachIngressBPFProbe(interfaceName, podIdentifier)
if err != nil {
l.logger.Info("Failed to Attach Ingress TC probe for", "interface: ", interfaceName, " podidentifier", podIdentifier)
sdkAPIErr.WithLabelValues("attachIngressBPFProbe").Inc()
}
l.logger.Info("Updating ingress_pod_state map for ", "podIdentifier: ", podIdentifier, "networkPolicyMode: ", networkPolicyMode)
err = l.UpdatePodStateEbpfMaps(podIdentifier, state, true, false)
if err != nil {
l.logger.Info("Map update(s) failed for, ", "podIdentifier ", podIdentifier, "error: ", err)
}
}
for interfaceName, pinPath := range l.interfaceNametoEgressPinPath {
podIdentifier, _ := utils.GetPodIdentifierFromBPFPinPath(pinPath)
l.logger.Info("ReattachEbpfProbes ", "attaching egress for ", podIdentifier, "interface ", interfaceName)
_, err := l.attachEgressBPFProbe(interfaceName, podIdentifier)
if err != nil {
l.logger.Info("Failed to Attach Egress TC probe for", "interface: ", interfaceName, " podidentifier", podIdentifier)
sdkAPIErr.WithLabelValues("attachEgressBPFProbe").Inc()
}
l.logger.Info("Updating egress_pod_state map for ", "podIdentifier: ", podIdentifier, "networkPolicyMode: ", networkPolicyMode)
err = l.UpdatePodStateEbpfMaps(podIdentifier, state, false, true)
if err != nil {
l.logger.Info("Map update(s) failed for, ", "podIdentifier ", podIdentifier, "error: ", err)
}
}
return nil
}