blob: 4f0fe0f285afe4730a4eda62bd434e2c8bd20991 [file] [log] [blame]
Brenden Blanco09e77f72015-06-16 00:21:57 -07001#!/usr/bin/env python
2# Copyright (c) PLUMgrid, Inc.
3# Licensed under the Apache License, Version 2.0 (the "License")
4
5from bpf import BPF
6from pyroute2 import IPRoute
7
Yonghong Songe2a2c482015-08-10 09:40:11 -07008print("Simple program to test pyroute2 IPRoute tc interface")
Brenden Blanco09e77f72015-06-16 00:21:57 -07009ipr = IPRoute()
10
11text = """
12int hello(struct __sk_buff *skb) {
13 return 1;
14}
15"""
16
17try:
18 b = BPF(text=text, debug=0)
19 fn = b.load_func("hello", BPF.SCHED_CLS)
20 ipr.link_create(ifname="t1a", kind="veth", peer="t1b")
21 idx = ipr.link_lookup(ifname="t1a")[0]
22
23 ipr.tc("add", "ingress", idx, "ffff:")
24 ipr.tc("add-filter", "bpf", idx, ":1", fd=fn.fd,
25 name=fn.name, parent="ffff:", action="ok", classid=1)
26 ipr.tc("add", "sfq", idx, "1:")
27 ipr.tc("add-filter", "bpf", idx, ":1", fd=fn.fd,
28 name=fn.name, parent="1:", action="ok", classid=1)
29finally:
30 if "idx" in locals(): ipr.link_remove(idx)