=========
 
 The ``netdevsim`` driver exposes resources to control the number of FIB
-entries and FIB rule entries that the driver will allow.
+entries, FIB rule entries and nexthops that the driver will allow.
 
 .. code:: shell
 
     $ devlink resource set netdevsim/netdevsim0 path /IPv4/fib-rules size 16
     $ devlink resource set netdevsim/netdevsim0 path /IPv6/fib size 64
     $ devlink resource set netdevsim/netdevsim0 path /IPv6/fib-rules size 16
+    $ devlink resource set netdevsim/netdevsim0 path /nexthops size 16
     $ devlink dev reload netdevsim/netdevsim0
 
 Driver-specific Traps
 
        struct notifier_block fib_nb;
        struct nsim_per_fib_data ipv4;
        struct nsim_per_fib_data ipv6;
+       struct nsim_fib_entry nexthops;
        struct rhashtable fib_rt_ht;
        struct list_head fib_rt_list;
        spinlock_t fib_lock;    /* Protects hashtable, list and accounting */
        case NSIM_RESOURCE_IPV6_FIB_RULES:
                entry = &fib_data->ipv6.rules;
                break;
+       case NSIM_RESOURCE_NEXTHOPS:
+               entry = &fib_data->nexthops;
+               break;
        default:
                return 0;
        }
        case NSIM_RESOURCE_IPV6_FIB_RULES:
                entry = &fib_data->ipv6.rules;
                break;
+       case NSIM_RESOURCE_NEXTHOPS:
+               entry = &fib_data->nexthops;
+               break;
        default:
                WARN_ON(1);
                return;
        return nsim_fib_get_val(data, NSIM_RESOURCE_IPV6_FIB_RULES, false);
 }
 
+static u64 nsim_fib_nexthops_res_occ_get(void *priv)
+{
+       struct nsim_fib_data *data = priv;
+
+       return nsim_fib_get_val(data, NSIM_RESOURCE_NEXTHOPS, false);
+}
+
 static void nsim_fib_set_max_all(struct nsim_fib_data *data,
                                 struct devlink *devlink)
 {
        enum nsim_resource_id res_ids[] = {
                NSIM_RESOURCE_IPV4_FIB, NSIM_RESOURCE_IPV4_FIB_RULES,
-               NSIM_RESOURCE_IPV6_FIB, NSIM_RESOURCE_IPV6_FIB_RULES
+               NSIM_RESOURCE_IPV6_FIB, NSIM_RESOURCE_IPV6_FIB_RULES,
+               NSIM_RESOURCE_NEXTHOPS,
        };
        int i;
 
                                          NSIM_RESOURCE_IPV6_FIB_RULES,
                                          nsim_fib_ipv6_rules_res_occ_get,
                                          data);
+       devlink_resource_occ_get_register(devlink,
+                                         NSIM_RESOURCE_NEXTHOPS,
+                                         nsim_fib_nexthops_res_occ_get,
+                                         data);
        return data;
 
 err_rhashtable_destroy:
 
 void nsim_fib_destroy(struct devlink *devlink, struct nsim_fib_data *data)
 {
+       devlink_resource_occ_get_unregister(devlink,
+                                           NSIM_RESOURCE_NEXTHOPS);
        devlink_resource_occ_get_unregister(devlink,
                                            NSIM_RESOURCE_IPV6_FIB_RULES);
        devlink_resource_occ_get_unregister(devlink,