Thread (11 messages) 11 messages, 2 authors, 2020-02-24

Re: [PATCH net-next v7 1/2] net: UDP tunnel encapsulation module for tunnelling different protocols like MPLS,IP,NSH etc.

From: Martin Varghese <hidden>
Date: 2020-02-17 02:49:49

On Sun, Feb 16, 2020 at 12:26:18PM -0600, Willem de Bruijn wrote:
On Sat, Feb 15, 2020 at 12:20 AM Martin Varghese
[off-list ref] wrote:
quoted
From: Martin Varghese <redacted>

The Bareudp tunnel module provides a generic L3 encapsulation
tunnelling module for tunnelling different protocols like MPLS,
IP,NSH etc inside a UDP tunnel.

Signed-off-by: Martin Varghese <redacted>
quoted
+struct net_device *bareudp_dev_create(struct net *net, const char *name,
+                                     u8 name_assign_type,
+                                     struct bareudp_conf *conf)
+{
+       struct nlattr *tb[IFLA_MAX + 1];
+       struct net_device *dev;
+       LIST_HEAD(list_kill);
+       int err;
+
+       memset(tb, 0, sizeof(tb));
+       dev = rtnl_create_link(net, name, name_assign_type,
+                              &bareudp_link_ops, tb, NULL);
+       if (IS_ERR(dev))
+               return dev;
+
+       err = bareudp_configure(net, dev, conf);
+       if (err) {
+               free_netdev(dev);
+               return ERR_PTR(err);
+       }
+       err = dev_set_mtu(dev, IP_MAX_MTU);
does this not exceed dev->max_mtu?
Noted.Must consider BAREUDP Overhead.
quoted
diff --git a/include/net/ipv6.h b/include/net/ipv6.h
index cec1a54..1bf8065 100644
--- a/include/net/ipv6.h
+++ b/include/net/ipv6.h
@@ -1027,6 +1027,12 @@ struct dst_entry *ip6_dst_lookup_flow(struct net *net, const struct sock *sk, st
 struct dst_entry *ip6_sk_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6,
                                         const struct in6_addr *final_dst,
                                         bool connected);
+struct dst_entry *ip6_dst_lookup_tunnel(struct sk_buff *skb,
+                                       struct net_device *dev,
+                                       struct net *net, struct socket *sock,
+                                       struct in6_addr *saddr,
+                                       const struct ip_tunnel_info *info,
+                                       u8 protocol, bool use_cache);
 struct dst_entry *ip6_blackhole_route(struct net *net,
                                      struct dst_entry *orig_dst);
diff --git a/include/net/route.h b/include/net/route.h
index a9c60fc..81750ae 100644
--- a/include/net/route.h
+++ b/include/net/route.h
@@ -128,6 +128,12 @@ static inline struct rtable *__ip_route_output_key(struct net *net,

 struct rtable *ip_route_output_flow(struct net *, struct flowi4 *flp,
                                    const struct sock *sk);
+struct rtable *ip_route_output_tunnel(struct sk_buff *skb,
+                                     struct net_device *dev,
+                                     struct net *net, __be32 *saddr,
+                                     const struct ip_tunnel_info *info,
+                                     u8 protocol, bool use_cache);
+
 struct dst_entry *ipv4_blackhole_route(struct net *net,
                                       struct dst_entry *dst_orig);
Ah, I now see where the difference between net/ipv4/route.c and
net/ipv6/ip6_output.c come from. It follows from existing locations of
 ip6_sk_dst_lookup_flow and ip_route_output_flow.

Looking for the ipv6 analog of ip_route_output_flow, I see that, e.g.,
ipvlan uses ip6_route_output from net/ipv6/route.c without a NULL sk.
But ping calls ip6_sk_dst_lookup_flow.

It might be a better fit behind ip6_route_output_flags, but it's
probably moot, really.
Actually i considered both the files but i felt this function 
should naturally sit with ip6_sk_dst_lookup_flow.
If you dont have strong objection i would like to keep the
function in ip6_output.c
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help