mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 02:21:52 +09:00
Revert "ipip,ip_tunnel,sit: Add FOU support for externally controlled ipip devices"
This reverts commit19bbca7bc5which is commitac931d4cdeupstream. It breaks the Android kernel abi and can be brought back in the future in an abi-safe way if it is really needed. Bug: 161946584 Change-Id: I5257d2983050a26af2c599f91eee7af6d6141c9d Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
@@ -57,13 +57,6 @@ struct ip_tunnel_key {
|
||||
__u8 flow_flags;
|
||||
};
|
||||
|
||||
struct ip_tunnel_encap {
|
||||
u16 type;
|
||||
u16 flags;
|
||||
__be16 sport;
|
||||
__be16 dport;
|
||||
};
|
||||
|
||||
/* Flags for ip_tunnel_info mode. */
|
||||
#define IP_TUNNEL_INFO_TX 0x01 /* represents tx tunnel parameters */
|
||||
#define IP_TUNNEL_INFO_IPV6 0x02 /* key contains IPv6 addresses */
|
||||
@@ -73,9 +66,9 @@ struct ip_tunnel_encap {
|
||||
#define IP_TUNNEL_OPTS_MAX \
|
||||
GENMASK((sizeof_field(struct ip_tunnel_info, \
|
||||
options_len) * BITS_PER_BYTE) - 1, 0)
|
||||
|
||||
struct ip_tunnel_info {
|
||||
struct ip_tunnel_key key;
|
||||
struct ip_tunnel_encap encap;
|
||||
#ifdef CONFIG_DST_CACHE
|
||||
struct dst_cache dst_cache;
|
||||
#endif
|
||||
@@ -93,6 +86,13 @@ struct ip_tunnel_6rd_parm {
|
||||
};
|
||||
#endif
|
||||
|
||||
struct ip_tunnel_encap {
|
||||
u16 type;
|
||||
u16 flags;
|
||||
__be16 sport;
|
||||
__be16 dport;
|
||||
};
|
||||
|
||||
struct ip_tunnel_prl_entry {
|
||||
struct ip_tunnel_prl_entry __rcu *next;
|
||||
__be32 addr;
|
||||
@@ -293,7 +293,6 @@ struct ip_tunnel *ip_tunnel_lookup(struct ip_tunnel_net *itn,
|
||||
__be32 remote, __be32 local,
|
||||
__be32 key);
|
||||
|
||||
void ip_tunnel_md_udp_encap(struct sk_buff *skb, struct ip_tunnel_info *info);
|
||||
int ip_tunnel_rcv(struct ip_tunnel *tunnel, struct sk_buff *skb,
|
||||
const struct tnl_ptk_info *tpi, struct metadata_dst *tun_dst,
|
||||
bool log_ecn_error);
|
||||
@@ -406,23 +405,22 @@ static inline int ip_encap_hlen(struct ip_tunnel_encap *e)
|
||||
return hlen;
|
||||
}
|
||||
|
||||
static inline int ip_tunnel_encap(struct sk_buff *skb,
|
||||
struct ip_tunnel_encap *e,
|
||||
static inline int ip_tunnel_encap(struct sk_buff *skb, struct ip_tunnel *t,
|
||||
u8 *protocol, struct flowi4 *fl4)
|
||||
{
|
||||
const struct ip_tunnel_encap_ops *ops;
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (e->type == TUNNEL_ENCAP_NONE)
|
||||
if (t->encap.type == TUNNEL_ENCAP_NONE)
|
||||
return 0;
|
||||
|
||||
if (e->type >= MAX_IPTUN_ENCAP_OPS)
|
||||
if (t->encap.type >= MAX_IPTUN_ENCAP_OPS)
|
||||
return -EINVAL;
|
||||
|
||||
rcu_read_lock();
|
||||
ops = rcu_dereference(iptun_encaps[e->type]);
|
||||
ops = rcu_dereference(iptun_encaps[t->encap.type]);
|
||||
if (likely(ops && ops->build_header))
|
||||
ret = ops->build_header(skb, e, protocol, fl4);
|
||||
ret = ops->build_header(skb, &t->encap, protocol, fl4);
|
||||
rcu_read_unlock();
|
||||
|
||||
return ret;
|
||||
|
||||
@@ -359,20 +359,6 @@ err_dev_set_mtu:
|
||||
return ERR_PTR(err);
|
||||
}
|
||||
|
||||
void ip_tunnel_md_udp_encap(struct sk_buff *skb, struct ip_tunnel_info *info)
|
||||
{
|
||||
const struct iphdr *iph = ip_hdr(skb);
|
||||
const struct udphdr *udph;
|
||||
|
||||
if (iph->protocol != IPPROTO_UDP)
|
||||
return;
|
||||
|
||||
udph = (struct udphdr *)((__u8 *)iph + (iph->ihl << 2));
|
||||
info->encap.sport = udph->source;
|
||||
info->encap.dport = udph->dest;
|
||||
}
|
||||
EXPORT_SYMBOL(ip_tunnel_md_udp_encap);
|
||||
|
||||
int ip_tunnel_rcv(struct ip_tunnel *tunnel, struct sk_buff *skb,
|
||||
const struct tnl_ptk_info *tpi, struct metadata_dst *tun_dst,
|
||||
bool log_ecn_error)
|
||||
@@ -613,11 +599,7 @@ void ip_md_tunnel_xmit(struct sk_buff *skb, struct net_device *dev,
|
||||
tunnel_id_to_key32(key->tun_id), RT_TOS(tos),
|
||||
dev_net(dev), 0, skb->mark, skb_get_hash(skb),
|
||||
key->flow_flags);
|
||||
|
||||
if (!tunnel_hlen)
|
||||
tunnel_hlen = ip_encap_hlen(&tun_info->encap);
|
||||
|
||||
if (ip_tunnel_encap(skb, &tun_info->encap, &proto, &fl4) < 0)
|
||||
if (tunnel->encap.type != TUNNEL_ENCAP_NONE)
|
||||
goto tx_error;
|
||||
|
||||
use_cache = ip_tunnel_dst_cache_usable(skb, tun_info);
|
||||
@@ -777,7 +759,7 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev,
|
||||
dev_net(dev), tunnel->parms.link,
|
||||
tunnel->fwmark, skb_get_hash(skb), 0);
|
||||
|
||||
if (ip_tunnel_encap(skb, &tunnel->encap, &protocol, &fl4) < 0)
|
||||
if (ip_tunnel_encap(skb, tunnel, &protocol, &fl4) < 0)
|
||||
goto tx_error;
|
||||
|
||||
if (connected && md) {
|
||||
|
||||
@@ -241,7 +241,6 @@ static int ipip_tunnel_rcv(struct sk_buff *skb, u8 ipproto)
|
||||
tun_dst = ip_tun_rx_dst(skb, 0, 0, 0);
|
||||
if (!tun_dst)
|
||||
return 0;
|
||||
ip_tunnel_md_udp_encap(skb, &tun_dst->u.tun_info);
|
||||
}
|
||||
skb_reset_mac_header(skb);
|
||||
|
||||
|
||||
@@ -1024,7 +1024,7 @@ static netdev_tx_t ipip6_tunnel_xmit(struct sk_buff *skb,
|
||||
ttl = iph6->hop_limit;
|
||||
tos = INET_ECN_encapsulate(tos, ipv6_get_dsfield(iph6));
|
||||
|
||||
if (ip_tunnel_encap(skb, &tunnel->encap, &protocol, &fl4) < 0) {
|
||||
if (ip_tunnel_encap(skb, tunnel, &protocol, &fl4) < 0) {
|
||||
ip_rt_put(rt);
|
||||
goto tx_error;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user