net: Kernel changes for Generic Software Bridge(GSB)

Changes are made to let GSB intercept network packets and consume them
when possible. The goal is to bridge the packets directly to backhaul
without letting packet do a round trip through the network stack.

Acked-by: Gajendra Singh <gajendra@qti.qualcomm.com>
Change-Id: Ib364a82e883de7ea642bdd1d85c44eef1f54a086
Signed-off-by: Aman Gupta <amangupt@codeaurora.org>
This commit is contained in:
Justin Tee 2017-07-24 10:09:29 -07:00 committed by Gerrit - the friendly Code Review server
parent 44c3d4ae63
commit 0a06179ca8
2 changed files with 30 additions and 0 deletions

View File

@ -462,6 +462,17 @@ config ENABLE_SFE
Changes to support Shortcut Forward Engine.
Add bridge API to access the bridge slave port.
#Generic-Software-Bridge
config ENABLE_GSB
bool "Enable generic-software-bridge"
depends on QGKI
help
ENABLE_GSB enables software acceleration on the target via gsb.
The change supports generic software bridge.
Helps to include gsb hook on the kernel.
Fulfills requirement of GSB network stack receive.
Change is supposed to go only on targets supporting gsb.
endif # if NET
# Used by archs to tell that they support BPF JIT compiler plus which flavour.

View File

@ -4718,6 +4718,11 @@ static inline int nf_ingress(struct sk_buff *skb, struct packet_type **pt_prev,
return 0;
}
#ifdef CONFIG_ENABLE_GSB
int (*gsb_nw_stack_recv)(struct sk_buff *skb) __rcu __read_mostly;
EXPORT_SYMBOL(gsb_nw_stack_recv);
#endif
static int (*embms_tm_multicast_recv)(struct sk_buff *skb) __rcu __read_mostly;
EXPORT_SYMBOL(embms_tm_multicast_recv);
@ -4751,6 +4756,10 @@ static int __netif_receive_skb_core(struct sk_buff **pskb, bool pfmemalloc,
int (*fast_recv)(struct sk_buff *skb, struct packet_type *pt_temp);
#endif
#ifdef CONFIG_ENABLE_GSB
int (*gsb_ns_recv)(struct sk_buff *skb);
#endif
net_timestamp_check(!netdev_tstamp_prequeue, skb);
trace_netif_receive_skb(skb);
@ -4823,6 +4832,16 @@ static int __netif_receive_skb_core(struct sk_buff **pskb, bool pfmemalloc,
process_embms_receive_skb(skb);
skip_classify:
#ifdef CONFIG_ENABLE_GSB
gsb_ns_recv = rcu_dereference(gsb_nw_stack_recv);
if (gsb_ns_recv) {
if (gsb_ns_recv(skb)) {
ret = NET_RX_SUCCESS;
goto out;
}
}
#endif
#ifdef CONFIG_ENABLE_SFE
fast_recv = rcu_dereference(athrs_fast_nat_recv);
if (fast_recv) {