Skip to content
This repository has been archived by the owner on Mar 16, 2024. It is now read-only.

Commit

Permalink
Delete existing Alaz-created tc filters before creating new ones (#7)
Browse files Browse the repository at this point in the history
Signed-off-by: Grant Linville <[email protected]>
  • Loading branch information
g-linville authored Nov 2, 2023
1 parent acff046 commit 9b6cf8c
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 22 deletions.
27 changes: 27 additions & 0 deletions .github/workflows/tag.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Tag
on:
push:
tags: [v*.*.*]

jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
with:
buildkitd-flags: --debug
- name: Log in to GHCR
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push
run: | # build and push it with the tag created on the repo
committed_tag=${GITHUB_REF#refs/*/}
TAG=$(basename "${committed_tag}")
docker buildx build --platform linux/amd64 -t ghcr.io/${{ github.repository_owner }}/alaz:${TAG} --push .
57 changes: 35 additions & 22 deletions ebpf/throughput/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,11 @@ func setFiltersOnCiliumInterfaces(objs bpfObjects) error {
if err := setUpEgressFilter(link, objs); err != nil {
errs = append(errs, fmt.Errorf("failed to set up egress filter for link %s: %w", link.Attrs().Name, err))
}
if err := setUpIngressQdiscAndFilter(link, objs); err != nil {

// We were previously using an ingress filter in addition to the egress filter, but it wasn't actually doing anything.
// For now, we will just delete those until we can figure out how to make them work.
// Egress on its own is enough to track throughput between all pods in the cluster.
if err := deleteIngressFilters(link); err != nil {
errs = append(errs, fmt.Errorf("failed to set up ingress filter for link %s: %w", link.Attrs().Name, err))
}
}
Expand All @@ -159,6 +163,22 @@ func setFiltersOnCiliumInterfaces(objs bpfObjects) error {
}

func setUpEgressFilter(link netlink.Link, objs bpfObjects) error {
existingFilters, err := netlink.FilterList(link, netlink.HANDLE_MIN_EGRESS)
if err != nil {
return err
}

for _, filter := range existingFilters {
if filter.Type() == "bpf" {
bpfFilter := filter.(*netlink.BpfFilter)
if bpfFilter.Name == "throughput_bpf_egress" {
if err := netlink.FilterDel(bpfFilter); err != nil {
return err
}
}
}
}

filter := &netlink.BpfFilter{
FilterAttrs: netlink.FilterAttrs{
LinkIndex: link.Attrs().Index,
Expand All @@ -172,29 +192,22 @@ func setUpEgressFilter(link netlink.Link, objs bpfObjects) error {
return netlink.FilterReplace(filter)
}

func setUpIngressQdiscAndFilter(link netlink.Link, objs bpfObjects) error {
qdiscAttrs := netlink.QdiscAttrs{
LinkIndex: link.Attrs().Index,
Handle: netlink.MakeHandle(0xffff, 0),
Parent: netlink.HANDLE_CLSACT,
}
qdisc := netlink.GenericQdisc{
QdiscAttrs: qdiscAttrs,
QdiscType: "clsact",
}
if err := netlink.QdiscReplace(&qdisc); err != nil {
func deleteIngressFilters(link netlink.Link) error {
existingFilters, err := netlink.FilterList(link, netlink.HANDLE_MIN_INGRESS)
if err != nil {
return err
}

ingressFilter := &netlink.BpfFilter{
FilterAttrs: netlink.FilterAttrs{
LinkIndex: link.Attrs().Index,
Parent: netlink.HANDLE_MIN_INGRESS,
Protocol: unix.ETH_P_ALL,
},
Fd: objs.bpfPrograms.PacketClassifier.FD(),
Name: "throughput_bpf_ingress",
DirectAction: true,
for _, filter := range existingFilters {
if filter.Type() == "bpf" {
bpfFilter := filter.(*netlink.BpfFilter)
if bpfFilter.Name == "throughput_bpf_ingress" {
if err := netlink.FilterDel(bpfFilter); err != nil {
return err
}
}
}
}
return netlink.FilterReplace(ingressFilter)

return nil
}

0 comments on commit 9b6cf8c

Please sign in to comment.