in pkg/ebpf/bpf_client.go [809:855]
func (l *bpfClient) UpdateEbpfMaps(podIdentifier string, ingressFirewallRules []EbpfFirewallRules,
egressFirewallRules []EbpfFirewallRules) error {
var ingressProgFD, egressProgFD int
var mapToUpdate goebpfmaps.BpfMap
start := time.Now()
value, ok := l.policyEndpointeBPFContext.Load(podIdentifier)
if ok {
peBPFContext := value.(BPFContext)
ingressProgInfo := peBPFContext.ingressPgmInfo
egressProgInfo := peBPFContext.egressPgmInfo
if ingressProgInfo.Program.ProgFD != 0 {
ingressProgFD = ingressProgInfo.Program.ProgFD
mapToUpdate = ingressProgInfo.Maps[TC_INGRESS_MAP]
l.logger.Info("Pod has an Ingress hook attached. Update the corresponding map", "progFD: ", ingressProgFD,
"mapName: ", TC_INGRESS_MAP)
err := l.updateEbpfMap(mapToUpdate, ingressFirewallRules)
duration := msSince(start)
sdkAPILatency.WithLabelValues("updateEbpfMap-ingress", fmt.Sprint(err != nil)).Observe(duration)
if err != nil {
l.logger.Info("Ingress Map update failed: ", "error: ", err)
sdkAPIErr.WithLabelValues("updateEbpfMap-ingress").Inc()
}
}
if egressProgInfo.Program.ProgFD != 0 {
egressProgFD = egressProgInfo.Program.ProgFD
mapToUpdate = egressProgInfo.Maps[TC_EGRESS_MAP]
l.logger.Info("Pod has an Egress hook attached. Update the corresponding map", "progFD: ", egressProgFD,
"mapName: ", TC_EGRESS_MAP)
err := l.updateEbpfMap(mapToUpdate, egressFirewallRules)
duration := msSince(start)
sdkAPILatency.WithLabelValues("updateEbpfMap-egress", fmt.Sprint(err != nil)).Observe(duration)
if err != nil {
l.logger.Info("Egress Map update failed: ", "error: ", err)
sdkAPIErr.WithLabelValues("updateEbpfMap-egress").Inc()
}
}
err := l.UpdatePodStateEbpfMaps(podIdentifier, POLICIES_APPLIED, true, true)
if err != nil {
l.logger.Info("Pod State Map update failed: ", "error: ", err)
}
}
return nil
}