1#!/usr/bin/env python
2# Copyright (c) PLUMgrid, Inc.
3# Licensed under the Apache License, Version 2.0 (the "License")
4
5from bcc import BPF
6from pyroute2 import IPRoute
7
8ipr = IPRoute()
9
10text = """
11int hello(struct __sk_buff *skb) {
12  return 1;
13}
14"""
15
16try:
17    b = BPF(text=text, debug=0)
18    fn = b.load_func("hello", BPF.SCHED_CLS)
19    ipr.link_create(ifname="t1a", kind="veth", peer="t1b")
20    idx = ipr.link_lookup(ifname="t1a")[0]
21
22    ipr.tc("add", "ingress", idx, "ffff:")
23    ipr.tc("add-filter", "bpf", idx, ":1", fd=fn.fd,
24           name=fn.name, parent="ffff:", action="ok", classid=1)
25    ipr.tc("add", "sfq", idx, "1:")
26    ipr.tc("add-filter", "bpf", idx, ":1", fd=fn.fd,
27           name=fn.name, parent="1:", action="ok", classid=1)
28finally:
29    if "idx" in locals(): ipr.link_remove(idx)
30print("BPF tc functionality - SCHED_CLS: OK")
31