]> git.proxmox.com Git - mirror_ovs.git/commitdiff
Revert "ip_gre: Remove even more unused code"
authorGreg Rose <gvrose8192@gmail.com>
Fri, 1 Nov 2019 16:07:54 +0000 (09:07 -0700)
committerSimon Horman <simon.horman@netronome.com>
Fri, 1 Nov 2019 18:02:10 +0000 (19:02 +0100)
This reverts commit 42a059e02bf343787951be2824c579e1c9a26e12.

Not all the necessary ipgre prefixed code was removed that
should have been.  Another patch will follow with the correct
removed code.

Signed-off-by: Greg Rose <gvrose8192@gmail.com>
Signed-off-by: Simon Horman <simon.horman@netronome.com>
datapath/linux/compat/ip_gre.c

index 8536241146e6718a97f1cff175ed444ff891163e..3b7e607d597cfd70f7da0c9b3168c326a4effe51 100644 (file)
@@ -922,6 +922,44 @@ static int erspan_tunnel_init(struct net_device *dev)
        return ip_tunnel_init(dev);
 }
 
+static int ipgre_header(struct sk_buff *skb, struct net_device *dev,
+                       unsigned short type,
+                       const void *daddr, const void *saddr, unsigned int len)
+{
+       struct ip_tunnel *t = netdev_priv(dev);
+       struct iphdr *iph;
+       struct gre_base_hdr *greh;
+
+       iph = (struct iphdr *)__skb_push(skb, t->hlen + sizeof(*iph));
+       greh = (struct gre_base_hdr *)(iph+1);
+       greh->flags = gre_tnl_flags_to_gre_flags(t->parms.o_flags);
+       greh->protocol = htons(type);
+
+       memcpy(iph, &t->parms.iph, sizeof(struct iphdr));
+
+       /* Set the source hardware address. */
+       if (saddr)
+               memcpy(&iph->saddr, saddr, 4);
+       if (daddr)
+               memcpy(&iph->daddr, daddr, 4);
+       if (iph->daddr)
+               return t->hlen + sizeof(*iph);
+
+       return -(t->hlen + sizeof(*iph));
+}
+
+static int ipgre_header_parse(const struct sk_buff *skb, unsigned char *haddr)
+{
+       const struct iphdr *iph = (const struct iphdr *) skb_mac_header(skb);
+       memcpy(haddr, &iph->saddr, 4);
+       return 4;
+}
+
+static const struct header_ops ipgre_header_ops = {
+       .create = ipgre_header,
+       .parse  = ipgre_header_parse,
+};
+
 static int ipgre_tunnel_init(struct net_device *dev)
 {
        struct ip_tunnel *tunnel = netdev_priv(dev);