return rc;
 }
 
+static netdev_features_t bnxt_features_check(struct sk_buff *skb,
+                                            struct net_device *dev,
+                                            netdev_features_t features)
+{
+       struct bnxt *bp;
+       __be16 udp_port;
+       u8 l4_proto = 0;
+
+       features = vlan_features_check(skb, features);
+       if (!skb->encapsulation)
+               return features;
+
+       switch (vlan_get_protocol(skb)) {
+       case htons(ETH_P_IP):
+               l4_proto = ip_hdr(skb)->protocol;
+               break;
+       case htons(ETH_P_IPV6):
+               l4_proto = ipv6_hdr(skb)->nexthdr;
+               break;
+       default:
+               return features;
+       }
+
+       if (l4_proto != IPPROTO_UDP)
+               return features;
+
+       bp = netdev_priv(dev);
+       /* For UDP, we can only handle 1 Vxlan port and 1 Geneve port. */
+       udp_port = udp_hdr(skb)->dest;
+       if (udp_port == bp->vxlan_port || udp_port == bp->nge_port)
+               return features;
+       return features & ~(NETIF_F_CSUM_MASK | NETIF_F_GSO_MASK);
+}
+
 int bnxt_dbg_hwrm_rd_reg(struct bnxt *bp, u32 reg_off, u16 num_words,
                         u32 *reg_buf)
 {
        unsigned int cmd;
 
        udp_tunnel_nic_get_port(netdev, table, 0, &ti);
-       if (ti.type == UDP_TUNNEL_TYPE_VXLAN)
+       if (ti.type == UDP_TUNNEL_TYPE_VXLAN) {
+               bp->vxlan_port = ti.port;
                cmd = TUNNEL_DST_PORT_FREE_REQ_TUNNEL_TYPE_VXLAN;
-       else
+       } else {
+               bp->nge_port = ti.port;
                cmd = TUNNEL_DST_PORT_FREE_REQ_TUNNEL_TYPE_GENEVE;
+       }
 
        if (ti.port)
                return bnxt_hwrm_tunnel_dst_port_alloc(bp, ti.port, cmd);
        .ndo_change_mtu         = bnxt_change_mtu,
        .ndo_fix_features       = bnxt_fix_features,
        .ndo_set_features       = bnxt_set_features,
+       .ndo_features_check     = bnxt_features_check,
        .ndo_tx_timeout         = bnxt_tx_timeout,
 #ifdef CONFIG_BNXT_SRIOV
        .ndo_get_vf_config      = bnxt_get_vf_config,