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