mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 16:44:58 +02:00
Merge branch 'flowi6_tos'
Daniel Borkmann says: ==================== flowi6_tos fixes This set is a follow-up to address Jiri's recent feedback [1] on the flowi6_tos issue, that it is not used for IPv6 route lookups. The three patches fix all current users of flowi6_tos and remove the define to avoid any future confusion on this. Tested the vxlan and geneve ones with IPv6 routing rules. For details, please see individual patches. [ As fixes are currently applied against net-next tree, I've rebased it against that. ] Thanks! [1] http://patchwork.ozlabs.org/patch/592055/ ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
1e32ec3c80
|
|
@ -843,8 +843,8 @@ static struct dst_entry *geneve_get_v6_dst(struct sk_buff *skb,
|
|||
if (info) {
|
||||
fl6->daddr = info->key.u.ipv6.dst;
|
||||
fl6->saddr = info->key.u.ipv6.src;
|
||||
fl6->flowi6_tos = RT_TOS(info->key.tos);
|
||||
fl6->flowlabel = info->key.label;
|
||||
fl6->flowlabel = ip6_make_flowinfo(RT_TOS(info->key.tos),
|
||||
info->key.label);
|
||||
dst_cache = &info->dst_cache;
|
||||
} else {
|
||||
prio = geneve->tos;
|
||||
|
|
@ -855,8 +855,8 @@ static struct dst_entry *geneve_get_v6_dst(struct sk_buff *skb,
|
|||
use_cache = false;
|
||||
}
|
||||
|
||||
fl6->flowi6_tos = RT_TOS(prio);
|
||||
fl6->flowlabel = geneve->label;
|
||||
fl6->flowlabel = ip6_make_flowinfo(RT_TOS(prio),
|
||||
geneve->label);
|
||||
fl6->daddr = geneve->remote.sin6.sin6_addr;
|
||||
dst_cache = &geneve->dst_cache;
|
||||
}
|
||||
|
|
@ -1049,7 +1049,8 @@ static netdev_tx_t geneve6_xmit_skb(struct sk_buff *skb, struct net_device *dev,
|
|||
if (unlikely(err))
|
||||
goto err;
|
||||
|
||||
prio = ip_tunnel_ecn_encap(fl6.flowi6_tos, iip, skb);
|
||||
prio = ip_tunnel_ecn_encap(ip6_tclass(fl6.flowlabel),
|
||||
iip, skb);
|
||||
ttl = geneve->ttl;
|
||||
if (!ttl && ipv6_addr_is_multicast(&fl6.daddr))
|
||||
ttl = 1;
|
||||
|
|
|
|||
|
|
@ -1810,10 +1810,9 @@ static struct dst_entry *vxlan6_get_route(struct vxlan_dev *vxlan,
|
|||
|
||||
memset(&fl6, 0, sizeof(fl6));
|
||||
fl6.flowi6_oif = oif;
|
||||
fl6.flowi6_tos = RT_TOS(tos);
|
||||
fl6.daddr = *daddr;
|
||||
fl6.saddr = vxlan->cfg.saddr.sin6.sin6_addr;
|
||||
fl6.flowlabel = label;
|
||||
fl6.flowlabel = ip6_make_flowinfo(RT_TOS(tos), label);
|
||||
fl6.flowi6_mark = skb->mark;
|
||||
fl6.flowi6_proto = IPPROTO_UDP;
|
||||
|
||||
|
|
|
|||
|
|
@ -127,7 +127,6 @@ struct flowi6 {
|
|||
#define flowi6_oif __fl_common.flowic_oif
|
||||
#define flowi6_iif __fl_common.flowic_iif
|
||||
#define flowi6_mark __fl_common.flowic_mark
|
||||
#define flowi6_tos __fl_common.flowic_tos
|
||||
#define flowi6_scope __fl_common.flowic_scope
|
||||
#define flowi6_proto __fl_common.flowic_proto
|
||||
#define flowi6_flags __fl_common.flowic_flags
|
||||
|
|
@ -135,6 +134,7 @@ struct flowi6 {
|
|||
#define flowi6_tun_key __fl_common.flowic_tun_key
|
||||
struct in6_addr daddr;
|
||||
struct in6_addr saddr;
|
||||
/* Note: flowi6_tos is encoded in flowlabel, too. */
|
||||
__be32 flowlabel;
|
||||
union flowi_uli uli;
|
||||
#define fl6_sport uli.ports.sport
|
||||
|
|
|
|||
|
|
@ -835,6 +835,12 @@ static inline u8 ip6_tclass(__be32 flowinfo)
|
|||
{
|
||||
return ntohl(flowinfo & IPV6_TCLASS_MASK) >> IPV6_TCLASS_SHIFT;
|
||||
}
|
||||
|
||||
static inline __be32 ip6_make_flowinfo(unsigned int tclass, __be32 flowlabel)
|
||||
{
|
||||
return htonl(tclass << IPV6_TCLASS_SHIFT) | flowlabel;
|
||||
}
|
||||
|
||||
/*
|
||||
* Prototypes exported by ipv6
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ TRACE_EVENT(fib6_table_lookup,
|
|||
__entry->tb_id = tb_id;
|
||||
__entry->oif = flp->flowi6_oif;
|
||||
__entry->iif = flp->flowi6_iif;
|
||||
__entry->tos = flp->flowi6_tos;
|
||||
__entry->tos = ip6_tclass(flp->flowlabel);
|
||||
__entry->scope = flp->flowi6_scope;
|
||||
__entry->flags = flp->flowi6_flags;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user