blob: ec0a3e74d5d2f97797eb839f37812596bd500ad5 [file] [log] [blame]
Brenden Blancoc43e9902015-10-30 08:58:23 +09001#!/usr/bin/python
Brenden Blanco09e77f72015-06-16 00:21:57 -07002# Copyright (c) PLUMgrid, Inc.
3# Licensed under the Apache License, Version 2.0 (the "License")
4
Brenden Blancoc35989d2015-09-02 18:04:07 -07005from bcc import BPF
Brenden Blanco09e77f72015-06-16 00:21:57 -07006from pyroute2 import IPRoute
7
Brenden Blanco09e77f72015-06-16 00:21:57 -07008ipr = 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)
Yonghong Song8bbf0622015-08-10 11:19:53 -070030print("BPF tc functionality - SCHED_CLS: OK")