Hello All,
I tried to load a PROG_TYPE_SCHED_CLS eBPF program and attach it to a linux interface, netlink fails because it is not able to find the interface.
Those are the steps I did:
sudo ifconfig veth1:1 192.168.2.210/32 up
`
#!/usr/bin/python # Copyright (c) PLUMgrid, Inc. # Licensed under the Apache License, Version 2.0 (the "License")
from bcc import BPF from pyroute2 import IPRoute
ipr = IPRoute()
b = BPF(src_file="helloworld.c", debug=0) fn = b.load_func("hello", BPF.SCHED_CLS)
idx = ipr.link_lookup(ifname="veth1:1")[0]
try: ipr.tc("add", "ingress", idx, "ffff:") ipr.tc("add-filter", "bpf", idx, ":1", fd=fn.fd, name=fn.name, parent="ffff:", action="ok", classid=1)
raw_input("promt: ") finally: ipr.tc("del", "ingress", idx)
print("BPF tc functionality - SCHED_CLS: OK") `
`
Traceback (most recent call last): File "./helloworld.py", line 13, in <module> idx = ipr.link_lookup(ifname="veth1:1")[0] IndexError: list index out of range
`
It is possible to attach eBPF programs to virtual interfaces?
Thanks,
Mauricio
|
|
On Tue, Feb 6, 2018 at 8:33 AM, Mauricio Vasquez via iovisor-dev <iovisor-dev@...> wrote: Hello All,
I tried to load a PROG_TYPE_SCHED_CLS eBPF program and attach it to a linux interface, netlink fails because it is not able to find the interface.
Those are the steps I did:
sudo ifconfig veth1:1 192.168.2.210/32 up
How veth1:1 is created? Looks like a vlan interface? I am using a simple veth interface like below ``` $ sudo ip link add veth1 type veth peer name veth2 $ sudo ifconfig veth1 192.168.2.210/32 up ``` And the run the script containing the following lines: ``` ipr = IPRoute() idx = ipr.link_lookup(ifname="veth1")[0] print idx ``` It works fine. `
#!/usr/bin/python # Copyright (c) PLUMgrid, Inc. # Licensed under the Apache License, Version 2.0 (the "License")
from bcc import BPF from pyroute2 import IPRoute
ipr = IPRoute()
b = BPF(src_file="helloworld.c", debug=0) fn = b.load_func("hello", BPF.SCHED_CLS)
idx = ipr.link_lookup(ifname="veth1:1")[0]
try: ipr.tc("add", "ingress", idx, "ffff:") ipr.tc("add-filter", "bpf", idx, ":1", fd=fn.fd, name=fn.name, parent="ffff:", action="ok", classid=1)
raw_input("promt: ") finally: ipr.tc("del", "ingress", idx)
print("BPF tc functionality - SCHED_CLS: OK") `
`
Traceback (most recent call last): File "./helloworld.py", line 13, in <module> idx = ipr.link_lookup(ifname="veth1:1")[0] IndexError: list index out of range
`
It is possible to attach eBPF programs to virtual interfaces?
Thanks,
Mauricio
_______________________________________________ iovisor-dev mailing list iovisor-dev@... https://lists.iovisor.org/mailman/listinfo/iovisor-dev
|
|
Hello Y Song,
I'm sorry, I was not clear enough. By virtual interface I meant "sub-interface", (vlan interface).
```
sudo ip link add veth1 type veth peer name veth2
sudo ifconfig veth1:1 192.168.2.210/32 up
# launch python script for load and attach eBPF program to veth1:1
```
Please notice that I want to attach to veth1:1. Is that possible?
Thanks,
Mauricio
toggle quoted message
Show quoted text
On 02/06/2018 02:54 PM, Y Song wrote: On Tue, Feb 6, 2018 at 8:33 AM, Mauricio Vasquez via iovisor-dev <iovisor-dev@...> wrote:
Hello All,
I tried to load a PROG_TYPE_SCHED_CLS eBPF program and attach it to a linux interface, netlink fails because it is not able to find the interface.
Those are the steps I did:
sudo ifconfig veth1:1 192.168.2.210/32 up
How veth1:1 is created? Looks like a vlan interface? I am using a simple veth interface like below ``` $ sudo ip link add veth1 type veth peer name veth2 $ sudo ifconfig veth1 192.168.2.210/32 up ``` And the run the script containing the following lines: ``` ipr = IPRoute() idx = ipr.link_lookup(ifname="veth1")[0] print idx ```
It works fine.
`
#!/usr/bin/python # Copyright (c) PLUMgrid, Inc. # Licensed under the Apache License, Version 2.0 (the "License")
from bcc import BPF from pyroute2 import IPRoute
ipr = IPRoute()
b = BPF(src_file="helloworld.c", debug=0) fn = b.load_func("hello", BPF.SCHED_CLS)
idx = ipr.link_lookup(ifname="veth1:1")[0]
try: ipr.tc("add", "ingress", idx, "ffff:") ipr.tc("add-filter", "bpf", idx, ":1", fd=fn.fd, name=fn.name, parent="ffff:", action="ok", classid=1)
raw_input("promt: ") finally: ipr.tc("del", "ingress", idx)
print("BPF tc functionality - SCHED_CLS: OK") `
`
Traceback (most recent call last): File "./helloworld.py", line 13, in <module> idx = ipr.link_lookup(ifname="veth1:1")[0] IndexError: list index out of range
`
It is possible to attach eBPF programs to virtual interfaces?
Thanks,
Mauricio
_______________________________________________ iovisor-dev mailing list iovisor-dev@... https://lists.iovisor.org/mailman/listinfo/iovisor-dev
|
|
On Tue, Feb 6, 2018 at 12:11 PM, Mauricio Vasquez <mauricio.vasquez@...> wrote: Hello Y Song,
I'm sorry, I was not clear enough. By virtual interface I meant "sub-interface", (vlan interface).
```
sudo ip link add veth1 type veth peer name veth2
sudo ifconfig veth1:1 192.168.2.210/32 up
# launch python script for load and attach eBPF program to veth1:1
```
Please notice that I want to attach to veth1:1. Is that possible? In this case, veth1 and veth1:1, both belongs to the same link. So you can still attach to veth1:1, using `ip addr show` to find the ifindex, and use that index in the command, or using `ipr.link_lookup(ifname="veth1")[0]` instead of ifname veth1.1. In the bpf program, you should see traffic for both veth1 and veth1:1, you can check vlan tag to differentiate which packets belong to who. Thanks,
Mauricio
On 02/06/2018 02:54 PM, Y Song wrote:
On Tue, Feb 6, 2018 at 8:33 AM, Mauricio Vasquez via iovisor-dev <iovisor-dev@...> wrote:
Hello All,
I tried to load a PROG_TYPE_SCHED_CLS eBPF program and attach it to a linux interface, netlink fails because it is not able to find the interface.
Those are the steps I did:
sudo ifconfig veth1:1 192.168.2.210/32 up
How veth1:1 is created? Looks like a vlan interface? I am using a simple veth interface like below ``` $ sudo ip link add veth1 type veth peer name veth2 $ sudo ifconfig veth1 192.168.2.210/32 up ``` And the run the script containing the following lines: ``` ipr = IPRoute() idx = ipr.link_lookup(ifname="veth1")[0] print idx ```
It works fine.
`
#!/usr/bin/python # Copyright (c) PLUMgrid, Inc. # Licensed under the Apache License, Version 2.0 (the "License")
from bcc import BPF from pyroute2 import IPRoute
ipr = IPRoute()
b = BPF(src_file="helloworld.c", debug=0) fn = b.load_func("hello", BPF.SCHED_CLS)
idx = ipr.link_lookup(ifname="veth1:1")[0]
try: ipr.tc("add", "ingress", idx, "ffff:") ipr.tc("add-filter", "bpf", idx, ":1", fd=fn.fd, name=fn.name, parent="ffff:", action="ok", classid=1)
raw_input("promt: ") finally: ipr.tc("del", "ingress", idx)
print("BPF tc functionality - SCHED_CLS: OK") `
`
Traceback (most recent call last): File "./helloworld.py", line 13, in <module> idx = ipr.link_lookup(ifname="veth1:1")[0] IndexError: list index out of range
`
It is possible to attach eBPF programs to virtual interfaces?
Thanks,
Mauricio
_______________________________________________ iovisor-dev mailing list iovisor-dev@... https://lists.iovisor.org/mailman/listinfo/iovisor-dev
|
|