]> git.proxmox.com Git - mirror_ovs.git/blobdiff - datapath/vport-gre.c
cirrus: Use FreeBSD 12.2.
[mirror_ovs.git] / datapath / vport-gre.c
index 50aaba5931405d7f5a7742e8b3d89bb1a3da55e0..07a8c19df96ed0a4480d8f4c20d2ff0fe5057045 100644 (file)
@@ -54,6 +54,7 @@ static struct vport *gre_tnl_create(const struct vport_parms *parms)
        struct net *net = ovs_dp_get_net(parms->dp);
        struct net_device *dev;
        struct vport *vport;
+       int err;
 
        vport = ovs_vport_alloc(0, &ovs_gre_vport_ops, parms);
        if (IS_ERR(vport))
@@ -67,9 +68,15 @@ static struct vport *gre_tnl_create(const struct vport_parms *parms)
                return ERR_CAST(dev);
        }
 
-       dev_change_flags(dev, dev->flags | IFF_UP);
-       rtnl_unlock();
+       err = dev_change_flags(dev, dev->flags | IFF_UP, NULL);
+       if (err < 0) {
+               rtnl_delete_link(dev);
+               rtnl_unlock();
+               ovs_vport_free(vport);
+               return ERR_PTR(err);
+       }
 
+       rtnl_unlock();
        return vport;
 }
 
@@ -84,18 +91,13 @@ static struct vport *gre_create(const struct vport_parms *parms)
        return ovs_netdev_link(vport, parms->name);
 }
 
-static int gre_get_egress_tun_info(struct vport *vport, struct sk_buff *skb,
-                                  struct dp_upcall_info *upcall)
-{
-       return ovs_tunnel_get_egress_info(upcall, ovs_dp_get_net(vport->dp),
-                                         skb, IPPROTO_GRE, 0, 0);
-}
-
 static struct vport_ops ovs_gre_vport_ops = {
        .type           = OVS_VPORT_TYPE_GRE,
        .create         = gre_create,
        .send           = gre_fb_xmit,
-       .get_egress_tun_info    = gre_get_egress_tun_info,
+#ifndef USE_UPSTREAM_TUNNEL
+       .fill_metadata_dst = gre_fill_metadata_dst,
+#endif
        .destroy        = ovs_netdev_tunnel_destroy,
 };