return 0;
 }
 
+static void
+nsim_get_channels(struct net_device *dev, struct ethtool_channels *ch)
+{
+       struct netdevsim *ns = netdev_priv(dev);
+
+       ch->max_combined = ns->nsim_bus_dev->num_queues;
+       ch->combined_count = ns->ethtool.channels;
+}
+
+static int
+nsim_set_channels(struct net_device *dev, struct ethtool_channels *ch)
+{
+       struct netdevsim *ns = netdev_priv(dev);
+       int err;
+
+       err = netif_set_real_num_queues(dev, ch->combined_count,
+                                       ch->combined_count);
+       if (err)
+               return err;
+
+       ns->ethtool.channels = ch->combined_count;
+       return 0;
+}
+
 static int
 nsim_get_fecparam(struct net_device *dev, struct ethtool_fecparam *fecparam)
 {
        .get_coalesce                   = nsim_get_coalesce,
        .get_ringparam                  = nsim_get_ringparam,
        .set_ringparam                  = nsim_set_ringparam,
+       .get_channels                   = nsim_get_channels,
+       .set_channels                   = nsim_set_channels,
        .get_fecparam                   = nsim_get_fecparam,
        .set_fecparam                   = nsim_set_fecparam,
 };
        ns->ethtool.fec.fec = ETHTOOL_FEC_NONE;
        ns->ethtool.fec.active_fec = ETHTOOL_FEC_NONE;
 
+       ns->ethtool.channels = ns->nsim_bus_dev->num_queues;
+
        ethtool = debugfs_create_dir("ethtool", ns->nsim_dev_port->ddir);
 
        debugfs_create_u32("get_err", 0600, ethtool, &ns->ethtool.get_err);