allow setting rps/xps defualt values via uci
[project/netifd.git] / system-linux.c
index f38aaed..0bf071e 100644 (file)
@@ -1362,7 +1362,7 @@ system_if_get_settings(struct device *dev, struct device_settings *s)
        }
 
        if (!system_get_neigh4locktime(dev, buf, sizeof(buf))) {
        }
 
        if (!system_get_neigh4locktime(dev, buf, sizeof(buf))) {
-               s->neigh4locktime = strtoul(buf, NULL, 0);
+               s->neigh4locktime = strtol(buf, NULL, 0);
                s->flags |= DEV_OPT_NEIGHLOCKTIME;
        }
 
                s->flags |= DEV_OPT_NEIGHLOCKTIME;
        }
 
@@ -1388,7 +1388,7 @@ system_if_get_settings(struct device *dev, struct device_settings *s)
 }
 
 static void
 }
 
 static void
-system_if_set_rps_xps_val(const char *path, int val)
+system_if_set_rps_xps_val(const char *path, char *fmt, int val)
 {
        char val_buf[8];
        glob_t gl;
 {
        char val_buf[8];
        glob_t gl;
@@ -1397,7 +1397,7 @@ system_if_set_rps_xps_val(const char *path, int val)
        if (glob(path, 0, NULL, &gl))
                return;
 
        if (glob(path, 0, NULL, &gl))
                return;
 
-       snprintf(val_buf, sizeof(val_buf), "%x", val);
+       snprintf(val_buf, sizeof(val_buf), fmt, val);
        for (i = 0; i < gl.gl_pathc; i++)
                system_set_sysctl(gl.gl_pathv[i], val_buf);
 
        for (i = 0; i < gl.gl_pathc; i++)
                system_set_sysctl(gl.gl_pathv[i], val_buf);
 
@@ -1408,17 +1408,23 @@ static void
 system_if_apply_rps_xps(struct device *dev, struct device_settings *s)
 {
        long n_cpus = sysconf(_SC_NPROCESSORS_ONLN);
 system_if_apply_rps_xps(struct device *dev, struct device_settings *s)
 {
        long n_cpus = sysconf(_SC_NPROCESSORS_ONLN);
-       int val;
+       int val, rps_val, rps_flow_cnt, xps_val;
 
        if (n_cpus < 2)
                return;
 
        val = (1 << n_cpus) - 1;
 
        if (n_cpus < 2)
                return;
 
        val = (1 << n_cpus) - 1;
+       rps_val = s->rps_val ? s->rps_val : val;
        snprintf(dev_buf, sizeof(dev_buf), "/sys/class/net/%s/queues/*/rps_cpus", dev->ifname);
        snprintf(dev_buf, sizeof(dev_buf), "/sys/class/net/%s/queues/*/rps_cpus", dev->ifname);
-       system_if_set_rps_xps_val(dev_buf, s->rps ? val : 0);
+       system_if_set_rps_xps_val(dev_buf, "%x", s->rps ? rps_val : 0);
+
+       rps_flow_cnt = s->rps_flow_cnt ? s->rps_flow_cnt : 0;
+       snprintf(dev_buf, sizeof(dev_buf), "/sys/class/net/%s/queues/*/rps_flow_cnt", dev->ifname);
+       system_if_set_rps_xps_val(dev_buf, "%d", s->rps ? rps_flow_cnt : 0);
 
 
+       xps_val = s->xps_val ? s->xps_val : val;
        snprintf(dev_buf, sizeof(dev_buf), "/sys/class/net/%s/queues/*/xps_cpus", dev->ifname);
        snprintf(dev_buf, sizeof(dev_buf), "/sys/class/net/%s/queues/*/xps_cpus", dev->ifname);
-       system_if_set_rps_xps_val(dev_buf, s->xps ? val : 0);
+       system_if_set_rps_xps_val(dev_buf, "%x", s->xps ? xps_val : 0);
 }
 
 void
 }
 
 void
@@ -1476,7 +1482,7 @@ system_if_apply_settings(struct device *dev, struct device_settings *s, unsigned
                system_set_neigh6reachabletime(dev, buf);
        }
        if (s->flags & DEV_OPT_NEIGHLOCKTIME & apply_mask) {
                system_set_neigh6reachabletime(dev, buf);
        }
        if (s->flags & DEV_OPT_NEIGHLOCKTIME & apply_mask) {
-               snprintf(buf, sizeof(buf), "%u", s->neigh4locktime);
+               snprintf(buf, sizeof(buf), "%d", s->neigh4locktime);
                system_set_neigh4locktime(dev, buf);
        }
        if (s->flags & DEV_OPT_NEIGHGCSTALETIME & apply_mask) {
                system_set_neigh4locktime(dev, buf);
        }
        if (s->flags & DEV_OPT_NEIGHGCSTALETIME & apply_mask) {