xref: /aosp_15_r20/external/bcc/tests/python/test_brb2.c (revision 387f9dfdfa2baef462e92476d413c7bc2470293e)
1*387f9dfdSAndroid Build Coastguard Worker // Copyright (c) PLUMgrid, Inc.
2*387f9dfdSAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License")
3*387f9dfdSAndroid Build Coastguard Worker #include <bcc/proto.h>
4*387f9dfdSAndroid Build Coastguard Worker 
5*387f9dfdSAndroid Build Coastguard Worker // physical endpoint manager (pem) tables which connects VMs and bridges
6*387f9dfdSAndroid Build Coastguard Worker // <ifindex_in, ifindex_out>
7*387f9dfdSAndroid Build Coastguard Worker BPF_HASH(pem_dest, u32, u32, 256);
8*387f9dfdSAndroid Build Coastguard Worker // <0, tx_pkts>
9*387f9dfdSAndroid Build Coastguard Worker BPF_ARRAY(pem_stats, u32, 1);
10*387f9dfdSAndroid Build Coastguard Worker 
pem(struct __sk_buff * skb)11*387f9dfdSAndroid Build Coastguard Worker int pem(struct __sk_buff *skb) {
12*387f9dfdSAndroid Build Coastguard Worker     u32 ifindex_in, *ifindex_p;
13*387f9dfdSAndroid Build Coastguard Worker     u8 *cursor = 0;
14*387f9dfdSAndroid Build Coastguard Worker     struct ethernet_t *ethernet = cursor_advance(cursor, sizeof(*ethernet));
15*387f9dfdSAndroid Build Coastguard Worker 
16*387f9dfdSAndroid Build Coastguard Worker     ifindex_in = skb->ingress_ifindex;
17*387f9dfdSAndroid Build Coastguard Worker     ifindex_p = pem_dest.lookup(&ifindex_in);
18*387f9dfdSAndroid Build Coastguard Worker     if (ifindex_p) {
19*387f9dfdSAndroid Build Coastguard Worker #if 1
20*387f9dfdSAndroid Build Coastguard Worker         if (ethernet->type == 0x0800 || ethernet->type == 0x0806) {
21*387f9dfdSAndroid Build Coastguard Worker             /* accumulate stats */
22*387f9dfdSAndroid Build Coastguard Worker             u32 index = 0;
23*387f9dfdSAndroid Build Coastguard Worker             u32 *value = pem_stats.lookup(&index);
24*387f9dfdSAndroid Build Coastguard Worker             if (value)
25*387f9dfdSAndroid Build Coastguard Worker                 lock_xadd(value, 1);
26*387f9dfdSAndroid Build Coastguard Worker         }
27*387f9dfdSAndroid Build Coastguard Worker #endif
28*387f9dfdSAndroid Build Coastguard Worker         bpf_clone_redirect(skb, *ifindex_p, 0);
29*387f9dfdSAndroid Build Coastguard Worker     }
30*387f9dfdSAndroid Build Coastguard Worker 
31*387f9dfdSAndroid Build Coastguard Worker     return 1;
32*387f9dfdSAndroid Build Coastguard Worker }
33