in pkg/ebpf/bpf_client.go [857:900]
func (l *bpfClient) UpdatePodStateEbpfMaps(podIdentifier string, state int, updateIngress bool, updateEgress bool) 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
key := uint32(POD_STATE_MAP_KEY) // pod_state_map key
value := pod_state{state: uint8(state)} // pod_state_map value
if updateIngress && ingressProgInfo.Program.ProgFD != 0 {
ingressProgFD = ingressProgInfo.Program.ProgFD
mapToUpdate = ingressProgInfo.Maps[TC_INGRESS_POD_STATE_MAP]
l.logger.Info("Pod has an Ingress hook attached. Update the corresponding map", "progFD: ", ingressProgFD,
"mapName: ", TC_INGRESS_POD_STATE_MAP)
err := mapToUpdate.CreateUpdateMapEntry(uintptr(unsafe.Pointer(&key)), uintptr(unsafe.Pointer(&value)), 0)
duration := msSince(start)
sdkAPILatency.WithLabelValues("updateEbpfMap-ingress-podstate", fmt.Sprint(err != nil)).Observe(duration)
if err != nil {
l.logger.Info("Ingress Pod State Map update failed: ", "error: ", err)
sdkAPIErr.WithLabelValues("updateEbpfMap-ingress-podstate").Inc()
}
}
if updateEgress && egressProgInfo.Program.ProgFD != 0 {
egressProgFD = egressProgInfo.Program.ProgFD
mapToUpdate = egressProgInfo.Maps[TC_EGRESS_POD_STATE_MAP]
l.logger.Info("Pod has an Egress hook attached. Update the corresponding map", "progFD: ", egressProgFD,
"mapName: ", TC_EGRESS_POD_STATE_MAP)
err := mapToUpdate.CreateUpdateMapEntry(uintptr(unsafe.Pointer(&key)), uintptr(unsafe.Pointer(&value)), 0)
duration := msSince(start)
sdkAPILatency.WithLabelValues("updateEbpfMap-egress-podstate", fmt.Sprint(err != nil)).Observe(duration)
if err != nil {
l.logger.Info("Egress Map update failed: ", "error: ", err)
sdkAPIErr.WithLabelValues("updateEbpfMap-egress-podstate").Inc()
}
}
}
return nil
}