net: dsa: Refactor transmit path to eliminate duplication
[firefly-linux-kernel-4.4.55.git] / net / openvswitch / actions.c
index 8a8c0b8b4f63a4bd8e5ff776250189558e6fcb1e..cf04c2f8b32a57bfec8e024d2db95dd8c0468b3f 100644 (file)
@@ -611,7 +611,7 @@ static int output_userspace(struct datapath *dp, struct sk_buff *skb,
                            struct sw_flow_key *key, const struct nlattr *attr,
                            const struct nlattr *actions, int actions_len)
 {
-       struct ovs_tunnel_info info;
+       struct ip_tunnel_info info;
        struct dp_upcall_info upcall;
        const struct nlattr *a;
        int rem;
@@ -733,7 +733,15 @@ static int execute_set_action(struct sk_buff *skb,
 {
        /* Only tunnel set execution is supported without a mask. */
        if (nla_type(a) == OVS_KEY_ATTR_TUNNEL_INFO) {
-               OVS_CB(skb)->egress_tun_info = nla_data(a);
+               struct ovs_tunnel_info *tun = nla_data(a);
+
+               skb_dst_drop(skb);
+               dst_hold((struct dst_entry *)tun->tun_dst);
+               skb_dst_set(skb, (struct dst_entry *)tun->tun_dst);
+
+               /* FIXME: Remove when all vports have been converted */
+               OVS_CB(skb)->egress_tun_info = &tun->tun_dst->u.tun_info;
+
                return 0;
        }