From: Greg Rose Date: Fri, 1 Nov 2019 16:07:54 +0000 (-0700) Subject: Revert "ip_gre: Remove even more unused code" X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=d5ac9628233c2d3b86c30e26522018f487bf3dc9;p=mirror_ovs.git Revert "ip_gre: Remove even more unused code" 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 Signed-off-by: Simon Horman --- diff --git a/datapath/linux/compat/ip_gre.c b/datapath/linux/compat/ip_gre.c index 853624114..3b7e607d5 100644 --- a/datapath/linux/compat/ip_gre.c +++ b/datapath/linux/compat/ip_gre.c @@ -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);