in pkg/ebpf/bpf_client.go [739:779]
func (l *bpfClient) deleteBPFProgramAndMaps(podIdentifier string, direction string) error {
var err error
var peBPFContext BPFContext
value, ok := l.policyEndpointeBPFContext.Load(podIdentifier)
if ok {
peBPFContext = value.(BPFContext)
}
pgmPinPath := utils.GetBPFPinPathFromPodIdentifier(podIdentifier, direction)
mapPinpath := utils.GetBPFMapPinPathFromPodIdentifier(podIdentifier, direction)
podStateMapPinPath := utils.GetPodStateBPFMapPinPathFromPodIdentifier(podIdentifier, direction)
l.logger.Info("Deleting: ", "Program: ", pgmPinPath, "Map: ", mapPinpath, "Map: ", podStateMapPinPath)
pgmInfo := peBPFContext.ingressPgmInfo
mapToDelete := pgmInfo.Maps[TC_INGRESS_MAP]
podStateMapToDelete := pgmInfo.Maps[TC_INGRESS_POD_STATE_MAP]
if direction == "egress" {
pgmInfo = peBPFContext.egressPgmInfo
mapToDelete = pgmInfo.Maps[TC_EGRESS_MAP]
podStateMapToDelete = pgmInfo.Maps[TC_EGRESS_POD_STATE_MAP]
}
l.logger.Info("Get storedFD ", "progFD: ", pgmInfo.Program.ProgFD)
if pgmInfo.Program.ProgFD != 0 {
l.logger.Info("Found the Program and Map to delete - ", "Program: ", pgmPinPath, "Map: ", mapPinpath, "Map: ", podStateMapPinPath)
err = pgmInfo.Program.UnPinProg(pgmPinPath)
if err != nil {
l.logger.Info("Failed to delete the Program: ", err)
}
err = mapToDelete.UnPinMap(mapPinpath)
if err != nil {
l.logger.Info("Failed to delete the Map: ", err)
}
err = podStateMapToDelete.UnPinMap(podStateMapPinPath)
if err != nil {
l.logger.Info("Failed to delete PodState Map: ", err)
}
}
return nil
}