fl_set_key_val(tb, key->eth.src, TCA_FLOWER_KEY_ETH_SRC,
                       mask->eth.src, TCA_FLOWER_KEY_ETH_SRC_MASK,
                       sizeof(key->eth.src));
+
        fl_set_key_val(tb, &key->basic.n_proto, TCA_FLOWER_KEY_ETH_TYPE,
                       &mask->basic.n_proto, TCA_FLOWER_UNSPEC,
                       sizeof(key->basic.n_proto));
+
        if (key->basic.n_proto == htons(ETH_P_IP) ||
            key->basic.n_proto == htons(ETH_P_IPV6)) {
                fl_set_key_val(tb, &key->basic.ip_proto, TCA_FLOWER_KEY_IP_PROTO,
                               &mask->basic.ip_proto, TCA_FLOWER_UNSPEC,
                               sizeof(key->basic.ip_proto));
        }
-       if (key->control.addr_type == FLOW_DISSECTOR_KEY_IPV4_ADDRS) {
+
+       if (tb[TCA_FLOWER_KEY_IPV4_SRC] || tb[TCA_FLOWER_KEY_IPV4_DST]) {
+               key->control.addr_type = FLOW_DISSECTOR_KEY_IPV4_ADDRS;
                fl_set_key_val(tb, &key->ipv4.src, TCA_FLOWER_KEY_IPV4_SRC,
                               &mask->ipv4.src, TCA_FLOWER_KEY_IPV4_SRC_MASK,
                               sizeof(key->ipv4.src));
                fl_set_key_val(tb, &key->ipv4.dst, TCA_FLOWER_KEY_IPV4_DST,
                               &mask->ipv4.dst, TCA_FLOWER_KEY_IPV4_DST_MASK,
                               sizeof(key->ipv4.dst));
-       } else if (key->control.addr_type == FLOW_DISSECTOR_KEY_IPV6_ADDRS) {
+       } else if (tb[TCA_FLOWER_KEY_IPV6_SRC] || tb[TCA_FLOWER_KEY_IPV6_DST]) {
+               key->control.addr_type = FLOW_DISSECTOR_KEY_IPV6_ADDRS;
                fl_set_key_val(tb, &key->ipv6.src, TCA_FLOWER_KEY_IPV6_SRC,
                               &mask->ipv6.src, TCA_FLOWER_KEY_IPV6_SRC_MASK,
                               sizeof(key->ipv6.src));
                               &mask->ipv6.dst, TCA_FLOWER_KEY_IPV6_DST_MASK,
                               sizeof(key->ipv6.dst));
        }
+
        if (key->basic.ip_proto == IPPROTO_TCP) {
                fl_set_key_val(tb, &key->tp.src, TCA_FLOWER_KEY_TCP_SRC,
                               &mask->tp.src, TCA_FLOWER_UNSPEC,