in pkg/tc/tc.go [328:367]
func (m *bpfTc) GetAllAttachedProgIds() (map[string]int, map[string]int, error) {
if len(m.InterfacePrefix) == 0 {
log.Errorf("invalid empty prefix")
return nil, nil, fmt.Errorf("Invalid empty prefix")
}
linkList, err := netlink.LinkList()
if err != nil {
log.Errorf("unable to get link list")
return nil, nil, err
}
interfaceToIngressProgId := make(map[string]int)
interfaceToEgressProgId := make(map[string]int)
for _, link := range linkList {
linkName := link.Attrs().Name
log.Infof("link name %s", linkName)
ingressProgId := 0
egressProgId := 0
if err := mismatchedInterfacePrefix(linkName, m.InterfacePrefix); err == nil {
// Get ingress ID attached
filterParent := uint32(netlink.HANDLE_MIN_INGRESS)
ingressProgId = m.getAttachedProgId(link, filterParent)
log.Infof("Got ingress progId %d", ingressProgId)
if ingressProgId > 0 {
interfaceToIngressProgId[linkName] = ingressProgId
}
// Get egress ID attached
filterParent = uint32(netlink.HANDLE_MIN_EGRESS)
egressProgId = m.getAttachedProgId(link, filterParent)
log.Infof("Got egress progId %d", egressProgId)
if egressProgId > 0 {
interfaceToEgressProgId[linkName] = egressProgId
}
}
}
return interfaceToIngressProgId, interfaceToEgressProgId, nil
}