• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1This example shows a unique way to use a BPF program to demux any ethernet
2traffic into a pool of worker veth+namespaces (or any ifindex-based
3destination) depending on a configurable mapping of src-mac to ifindex. As
4part of the ingress processing, the program will dynamically learn the source
5ifindex of the matched source mac.
6
7Simulate a physical network with a vlan aware switch and clients that may
8connect to any vlan. The program will detect the known clients and pass the
9traffic through to a dedicated namespace for processing. Clients may have
10overlapping IP spaces and the traffic will still work.
11
12               |           bpf program                      |
13cli0 --|       |                            /--|-- worker0  |
14cli1 --| trunk | +->--->-handle_p2v(pkt)-> /---|-- worker1  |
15cli2 --|=======|=+                        /----|-- worker2  |
16...  --|       | +-<---<-handle_v2p(pkt)-<-----|--  ...     |
17cliN --|       |                          \----|-- workerM  |
18       |       |                              ^             |
19     phys      |                            veth            |
20    switch     |                                            |
21
22To run the example, simply:
23
24sudo /path/to/vlan_learning/vlan_learning.py
25
26Serving HTTP on 0.0.0.0 port 80 ...
27Serving HTTP on 0.0.0.0 port 80 ...
28Serving HTTP on 0.0.0.0 port 80 ...
29  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
30                                 Dload  Upload   Total   Spent    Left  Speed
31  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0172.16.1.100 - - [04/Nov/2015 10:54:47] "GET / HTTP/1.1" 200 -
32100   574  100   574    0     0  45580      0 --:--:-- --:--:-- --:--:-- 47833
33
34...
35
36Press enter to exit:
37mac 020000000000 rx pkts = 95, rx bytes = 7022
38                 tx pkts = 0, tx bytes = 0
39mac 020000000001 rx pkts = 95, rx bytes = 7022
40                 tx pkts = 0, tx bytes = 0
41mac 020000000002 rx pkts = 97, rx bytes = 7154
42                 tx pkts = 0, tx bytes = 0
43
44