Skip to content

Commit

Permalink
gre: Drop ip_route_output_gre().
Browse files Browse the repository at this point in the history
We already have enough variants of ip_route_output*() functions. We
don't need a GRE specific one in the generic route.h header file.

Furthermore, ip_route_output_gre() is only used once, in ipgre_open(),
where it can be easily replaced by a simple call to
ip_route_output_key().

While there, and for clarity, explicitly set .flowi4_scope to
RT_SCOPE_UNIVERSE instead of relying on the implicit zero
initialisation.

Signed-off-by: Guillaume Nault <gnault@redhat.com>
Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
Link: https://patch.msgid.link/ab7cba47b8558cd4bfe2dc843c38b622a95ee48e.1734527729.git.gnault@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
  • Loading branch information
Guillaume Nault authored and Jakub Kicinski committed Dec 20, 2024
1 parent 5155cbc commit 29b5407
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 21 deletions.
14 changes: 0 additions & 14 deletions include/net/route.h
Original file line number Diff line number Diff line change
Expand Up @@ -185,20 +185,6 @@ static inline struct rtable *ip_route_output_ports(struct net *net, struct flowi
return ip_route_output_flow(net, fl4, sk);
}

static inline struct rtable *ip_route_output_gre(struct net *net, struct flowi4 *fl4,
__be32 daddr, __be32 saddr,
__be32 gre_key, __u8 tos, int oif)
{
memset(fl4, 0, sizeof(*fl4));
fl4->flowi4_oif = oif;
fl4->daddr = daddr;
fl4->saddr = saddr;
fl4->flowi4_tos = tos;
fl4->flowi4_proto = IPPROTO_GRE;
fl4->fl4_gre_key = gre_key;
return ip_route_output_key(net, fl4);
}

enum skb_drop_reason
ip_mc_validate_source(struct sk_buff *skb, __be32 daddr, __be32 saddr,
dscp_t dscp, struct net_device *dev,
Expand Down
17 changes: 10 additions & 7 deletions net/ipv4/ip_gre.c
Original file line number Diff line number Diff line change
Expand Up @@ -924,15 +924,18 @@ static int ipgre_open(struct net_device *dev)
struct ip_tunnel *t = netdev_priv(dev);

if (ipv4_is_multicast(t->parms.iph.daddr)) {
struct flowi4 fl4;
struct flowi4 fl4 = {
.flowi4_oif = t->parms.link,
.flowi4_tos = t->parms.iph.tos & INET_DSCP_MASK,
.flowi4_scope = RT_SCOPE_UNIVERSE,
.flowi4_proto = IPPROTO_GRE,
.saddr = t->parms.iph.saddr,
.daddr = t->parms.iph.daddr,
.fl4_gre_key = t->parms.o_key,
};
struct rtable *rt;

rt = ip_route_output_gre(t->net, &fl4,
t->parms.iph.daddr,
t->parms.iph.saddr,
t->parms.o_key,
t->parms.iph.tos & INET_DSCP_MASK,
t->parms.link);
rt = ip_route_output_key(t->net, &fl4);
if (IS_ERR(rt))
return -EADDRNOTAVAIL;
dev = rt->dst.dev;
Expand Down

0 comments on commit 29b5407

Please sign in to comment.