xref: /aosp_15_r20/external/bcc/examples/networking/simple_tc.py (revision 387f9dfdfa2baef462e92476d413c7bc2470293e)
1*387f9dfdSAndroid Build Coastguard Worker#!/usr/bin/python
2*387f9dfdSAndroid Build Coastguard Worker# Copyright (c) PLUMgrid, Inc.
3*387f9dfdSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License")
4*387f9dfdSAndroid Build Coastguard Worker
5*387f9dfdSAndroid Build Coastguard Workerfrom bcc import BPF
6*387f9dfdSAndroid Build Coastguard Workerfrom pyroute2 import IPRoute
7*387f9dfdSAndroid Build Coastguard Worker
8*387f9dfdSAndroid Build Coastguard Workeripr = IPRoute()
9*387f9dfdSAndroid Build Coastguard Worker
10*387f9dfdSAndroid Build Coastguard Workertext = """
11*387f9dfdSAndroid Build Coastguard Workerint hello(struct __sk_buff *skb) {
12*387f9dfdSAndroid Build Coastguard Worker  return 1;
13*387f9dfdSAndroid Build Coastguard Worker}
14*387f9dfdSAndroid Build Coastguard Worker"""
15*387f9dfdSAndroid Build Coastguard Worker
16*387f9dfdSAndroid Build Coastguard Workertry:
17*387f9dfdSAndroid Build Coastguard Worker    b = BPF(text=text, debug=0)
18*387f9dfdSAndroid Build Coastguard Worker    fn = b.load_func("hello", BPF.SCHED_CLS)
19*387f9dfdSAndroid Build Coastguard Worker    ipr.link("add", ifname="t1a", kind="veth", peer="t1b")
20*387f9dfdSAndroid Build Coastguard Worker    idx = ipr.link_lookup(ifname="t1a")[0]
21*387f9dfdSAndroid Build Coastguard Worker
22*387f9dfdSAndroid Build Coastguard Worker    ipr.tc("add", "ingress", idx, "ffff:")
23*387f9dfdSAndroid Build Coastguard Worker    ipr.tc("add-filter", "bpf", idx, ":1", fd=fn.fd,
24*387f9dfdSAndroid Build Coastguard Worker           name=fn.name, parent="ffff:", action="ok", classid=1)
25*387f9dfdSAndroid Build Coastguard Worker    ipr.tc("add", "sfq", idx, "1:")
26*387f9dfdSAndroid Build Coastguard Worker    ipr.tc("add-filter", "bpf", idx, ":1", fd=fn.fd,
27*387f9dfdSAndroid Build Coastguard Worker           name=fn.name, parent="1:", action="ok", classid=1)
28*387f9dfdSAndroid Build Coastguard Workerfinally:
29*387f9dfdSAndroid Build Coastguard Worker    if "idx" in locals(): ipr.link("del", index=idx)
30*387f9dfdSAndroid Build Coastguard Workerprint("BPF tc functionality - SCHED_CLS: OK")
31