mirror of
https://github.com/AetherDroid/android_kernel_samsung_on5xelte.git
synced 2025-09-08 01:08:03 -04:00
Fixed MTP to work with TWRP
This commit is contained in:
commit
f6dfaef42e
50820 changed files with 20846062 additions and 0 deletions
9
net/mpls/Kconfig
Normal file
9
net/mpls/Kconfig
Normal file
|
@ -0,0 +1,9 @@
|
|||
#
|
||||
# MPLS configuration
|
||||
#
|
||||
config NET_MPLS_GSO
|
||||
tristate "MPLS: GSO support"
|
||||
help
|
||||
This is helper module to allow segmentation of non-MPLS GSO packets
|
||||
that have had MPLS stack entries pushed onto them and thus
|
||||
become MPLS GSO packets.
|
4
net/mpls/Makefile
Normal file
4
net/mpls/Makefile
Normal file
|
@ -0,0 +1,4 @@
|
|||
#
|
||||
# Makefile for MPLS.
|
||||
#
|
||||
obj-$(CONFIG_NET_MPLS_GSO) += mpls_gso.o
|
102
net/mpls/mpls_gso.c
Normal file
102
net/mpls/mpls_gso.c
Normal file
|
@ -0,0 +1,102 @@
|
|||
/*
|
||||
* MPLS GSO Support
|
||||
*
|
||||
* Authors: Simon Horman (horms@verge.net.au)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version
|
||||
* 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* Based on: GSO portions of net/ipv4/gre.c
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/err.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/netdev_features.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/skbuff.h>
|
||||
|
||||
static struct sk_buff *mpls_gso_segment(struct sk_buff *skb,
|
||||
netdev_features_t features)
|
||||
{
|
||||
struct sk_buff *segs = ERR_PTR(-EINVAL);
|
||||
netdev_features_t mpls_features;
|
||||
__be16 mpls_protocol;
|
||||
|
||||
if (unlikely(skb_shinfo(skb)->gso_type &
|
||||
~(SKB_GSO_TCPV4 |
|
||||
SKB_GSO_TCPV6 |
|
||||
SKB_GSO_UDP |
|
||||
SKB_GSO_DODGY |
|
||||
SKB_GSO_TCP_ECN |
|
||||
SKB_GSO_GRE |
|
||||
SKB_GSO_GRE_CSUM |
|
||||
SKB_GSO_IPIP |
|
||||
SKB_GSO_MPLS)))
|
||||
goto out;
|
||||
|
||||
/* Setup inner SKB. */
|
||||
mpls_protocol = skb->protocol;
|
||||
skb->protocol = skb->inner_protocol;
|
||||
|
||||
/* Push back the mac header that skb_mac_gso_segment() has pulled.
|
||||
* It will be re-pulled by the call to skb_mac_gso_segment() below
|
||||
*/
|
||||
__skb_push(skb, skb->mac_len);
|
||||
|
||||
/* Segment inner packet. */
|
||||
mpls_features = skb->dev->mpls_features & features;
|
||||
segs = skb_mac_gso_segment(skb, mpls_features);
|
||||
|
||||
|
||||
/* Restore outer protocol. */
|
||||
skb->protocol = mpls_protocol;
|
||||
|
||||
/* Re-pull the mac header that the call to skb_mac_gso_segment()
|
||||
* above pulled. It will be re-pushed after returning
|
||||
* skb_mac_gso_segment(), an indirect caller of this function.
|
||||
*/
|
||||
__skb_pull(skb, skb->data - skb_mac_header(skb));
|
||||
out:
|
||||
return segs;
|
||||
}
|
||||
|
||||
static struct packet_offload mpls_mc_offload = {
|
||||
.type = cpu_to_be16(ETH_P_MPLS_MC),
|
||||
.callbacks = {
|
||||
.gso_segment = mpls_gso_segment,
|
||||
},
|
||||
};
|
||||
|
||||
static struct packet_offload mpls_uc_offload = {
|
||||
.type = cpu_to_be16(ETH_P_MPLS_UC),
|
||||
.callbacks = {
|
||||
.gso_segment = mpls_gso_segment,
|
||||
},
|
||||
};
|
||||
|
||||
static int __init mpls_gso_init(void)
|
||||
{
|
||||
pr_info("MPLS GSO support\n");
|
||||
|
||||
dev_add_offload(&mpls_uc_offload);
|
||||
dev_add_offload(&mpls_mc_offload);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __exit mpls_gso_exit(void)
|
||||
{
|
||||
dev_remove_offload(&mpls_uc_offload);
|
||||
dev_remove_offload(&mpls_mc_offload);
|
||||
}
|
||||
|
||||
module_init(mpls_gso_init);
|
||||
module_exit(mpls_gso_exit);
|
||||
|
||||
MODULE_DESCRIPTION("MPLS GSO support");
|
||||
MODULE_AUTHOR("Simon Horman (horms@verge.net.au)");
|
||||
MODULE_LICENSE("GPL");
|
Loading…
Add table
Add a link
Reference in a new issue