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