Re: [OpenWrt-Devel] [PATCH] netifd: Support for configurable default packet steering

2015-05-11 Thread Hans Dedecker
On Mon, May 11, 2015 at 9:17 PM, Steven Barth cy...@openwrt.org wrote:
 Fine with me in principle, howeverI find the name force_ps to be
 misleading since the option does not override or enforce anything. Maybe
 default_ps would be a more suitable name?
OK will change the name into default_ps in the follow-up patch

Hans


 Cheers,

 Steven

 On 11.05.2015 18:30, Hans Dedecker wrote:

 Default packet steering behavior can be configured via the parameter
 force_ps
 in the global section; the default value is true to keep backwards
 compatibility.
 Device packet steering (rps/xps) config can still be used to override the
 default behavior.
 This allows you to disable packet steering for all devices without the
 need
 to define a device config list which disables receive/transmit packet
 steering

 Signed-off-by: Hans Dedecker dedec...@gmail.com
 ---
   config.c |  6 ++
   device.c | 56 +---
   device.h |  3 +++
   3 files changed, 58 insertions(+), 7 deletions(-)

 diff --git a/config.c b/config.c
 index 48c4fbf..77ebb45 100644
 --- a/config.c
 +++ b/config.c
 @@ -306,6 +306,12 @@ config_init_globals(void)
 const char *ula_prefix = uci_lookup_option_string(
 uci_ctx, globals, ula_prefix);
 interface_ip_set_ula_prefix(ula_prefix);
 +
 +   const char *force_ps = uci_lookup_option_string(
 +   uci_ctx, globals, force_ps);
 +
 +   if (force_ps)
 +   device_set_force_ps(strcmp(force_ps, 1) ? false : true);
   }
 static void
 diff --git a/device.c b/device.c
 index 092c2d9..afe917c 100644
 --- a/device.c
 +++ b/device.c
 @@ -29,6 +29,7 @@
   #include config.h
 static struct avl_tree devices;
 +static bool force_ps = true;
 static const struct blobmsg_policy dev_attrs[__DEV_ATTR_MAX] = {
 [DEV_ATTR_TYPE] = { .name = type, .type = BLOBMSG_TYPE_STRING },
 @@ -244,15 +245,19 @@ device_init_settings(struct device *dev, struct
 blob_attr **tb)
 s-flags |= DEV_OPT_NEIGHREACHABLETIME;
 }
   - if ((cur = tb[DEV_ATTR_RPS]))
 +   if ((cur = tb[DEV_ATTR_RPS])) {
 s-rps = blobmsg_get_bool(cur);
 +   s-flags |= DEV_OPT_RPS;
 +   }
 else
 -   s-rps = true;
 +   s-rps = force_ps;
   - if ((cur = tb[DEV_ATTR_XPS]))
 +   if ((cur = tb[DEV_ATTR_XPS])) {
 s-xps = blobmsg_get_bool(cur);
 +   s-flags |= DEV_OPT_XPS;
 +   }
 else
 -   s-xps = true;
 +   s-xps = force_ps;
 device_set_disabled(dev, disabled);
   }
 @@ -370,8 +375,8 @@ int device_init(struct device *dev, const struct
 device_type *type, const char *
 system_if_clear_state(dev);
 device_check_state(dev);
 -   dev-settings.rps = true;
 -   dev-settings.xps = true;
 +   dev-settings.rps = force_ps;
 +   dev-settings.xps = force_ps;
 return 0;
   }
 @@ -723,6 +728,41 @@ device_reset_old(void)
 }
   }
   +void
 +device_set_force_ps(bool state)
 +{
 +   struct device *dev;
 +
 +   if (state == force_ps)
 +   return;
 +
 +   force_ps = state;
 +
 +   avl_for_each_element(devices, dev, avl) {
 +   struct device_settings *s = dev-settings;
 +   unsigned int apply_mask = 0;
 +
 +   if (!(s-flags  DEV_OPT_RPS)) {
 +   s-rps = force_ps;
 +   apply_mask |= DEV_OPT_RPS;
 +   }
 +
 +   if (!(s-flags  DEV_OPT_XPS)) {
 +   s-xps = force_ps;
 +   apply_mask |= DEV_OPT_XPS;
 +   }
 +
 +   if (!apply_mask)
 +   continue;
 +
 +   if (!(dev-external || (dev-present  dev-active)) ||
 +   dev-config_pending)
 +   continue;
 +
 +   system_if_apply_settings(dev, s, apply_mask);
 +   }
 +}
 +
   struct device *
   device_create(const char *name, const struct device_type *type,
   struct blob_attr *config)
 @@ -758,8 +798,10 @@ device_create(const char *name, const struct
 device_type *type,
 if (odev)
 device_replace(dev, odev);
   - if (!config_init  dev-config_pending)
 +   if (!config_init  dev-config_pending) {
 type-config_init(dev);
 +   dev-config_pending = false;
 +   }
 return dev;
   }
 diff --git a/device.h b/device.h
 index 753e1fa..d80142b 100644
 --- a/device.h
 +++ b/device.h
 @@ -78,6 +78,8 @@ enum {
 DEV_OPT_IGMPVERSION = (1  7),
 DEV_OPT_MLDVERSION  = (1  8),
 DEV_OPT_NEIGHREACHABLETIME  = (1  9),
 +   DEV_OPT_RPS = (1  10),
 +   DEV_OPT_XPS = (1  11),
   };
 /* events broadcasted to all users of a device */
 @@ -206,6 +208,7 @@ 

Re: [OpenWrt-Devel] [PATCH] netifd: Support for configurable default packet steering

2015-05-11 Thread Steven Barth
Fine with me in principle, howeverI find the name force_ps to be 
misleading since the option does not override or enforce anything. Maybe 
default_ps would be a more suitable name?



Cheers,

Steven

On 11.05.2015 18:30, Hans Dedecker wrote:

Default packet steering behavior can be configured via the parameter force_ps
in the global section; the default value is true to keep backwards 
compatibility.
Device packet steering (rps/xps) config can still be used to override the
default behavior.
This allows you to disable packet steering for all devices without the need
to define a device config list which disables receive/transmit packet steering

Signed-off-by: Hans Dedecker dedec...@gmail.com
---
  config.c |  6 ++
  device.c | 56 +---
  device.h |  3 +++
  3 files changed, 58 insertions(+), 7 deletions(-)

diff --git a/config.c b/config.c
index 48c4fbf..77ebb45 100644
--- a/config.c
+++ b/config.c
@@ -306,6 +306,12 @@ config_init_globals(void)
const char *ula_prefix = uci_lookup_option_string(
uci_ctx, globals, ula_prefix);
interface_ip_set_ula_prefix(ula_prefix);
+
+   const char *force_ps = uci_lookup_option_string(
+   uci_ctx, globals, force_ps);
+
+   if (force_ps)
+   device_set_force_ps(strcmp(force_ps, 1) ? false : true);
  }
  
  static void

diff --git a/device.c b/device.c
index 092c2d9..afe917c 100644
--- a/device.c
+++ b/device.c
@@ -29,6 +29,7 @@
  #include config.h
  
  static struct avl_tree devices;

+static bool force_ps = true;
  
  static const struct blobmsg_policy dev_attrs[__DEV_ATTR_MAX] = {

[DEV_ATTR_TYPE] = { .name = type, .type = BLOBMSG_TYPE_STRING },
@@ -244,15 +245,19 @@ device_init_settings(struct device *dev, struct blob_attr 
**tb)
s-flags |= DEV_OPT_NEIGHREACHABLETIME;
}
  
-	if ((cur = tb[DEV_ATTR_RPS]))

+   if ((cur = tb[DEV_ATTR_RPS])) {
s-rps = blobmsg_get_bool(cur);
+   s-flags |= DEV_OPT_RPS;
+   }
else
-   s-rps = true;
+   s-rps = force_ps;
  
-	if ((cur = tb[DEV_ATTR_XPS]))

+   if ((cur = tb[DEV_ATTR_XPS])) {
s-xps = blobmsg_get_bool(cur);
+   s-flags |= DEV_OPT_XPS;
+   }
else
-   s-xps = true;
+   s-xps = force_ps;
  
  	device_set_disabled(dev, disabled);

  }
@@ -370,8 +375,8 @@ int device_init(struct device *dev, const struct 
device_type *type, const char *
  
  	system_if_clear_state(dev);

device_check_state(dev);
-   dev-settings.rps = true;
-   dev-settings.xps = true;
+   dev-settings.rps = force_ps;
+   dev-settings.xps = force_ps;
  
  	return 0;

  }
@@ -723,6 +728,41 @@ device_reset_old(void)
}
  }
  
+void

+device_set_force_ps(bool state)
+{
+   struct device *dev;
+
+   if (state == force_ps)
+   return;
+
+   force_ps = state;
+
+   avl_for_each_element(devices, dev, avl) {
+   struct device_settings *s = dev-settings;
+   unsigned int apply_mask = 0;
+
+   if (!(s-flags  DEV_OPT_RPS)) {
+   s-rps = force_ps;
+   apply_mask |= DEV_OPT_RPS;
+   }
+
+   if (!(s-flags  DEV_OPT_XPS)) {
+   s-xps = force_ps;
+   apply_mask |= DEV_OPT_XPS;
+   }
+
+   if (!apply_mask)
+   continue;
+
+   if (!(dev-external || (dev-present  dev-active)) ||
+   dev-config_pending)
+   continue;
+
+   system_if_apply_settings(dev, s, apply_mask);
+   }
+}
+
  struct device *
  device_create(const char *name, const struct device_type *type,
  struct blob_attr *config)
@@ -758,8 +798,10 @@ device_create(const char *name, const struct device_type 
*type,
if (odev)
device_replace(dev, odev);
  
-	if (!config_init  dev-config_pending)

+   if (!config_init  dev-config_pending) {
type-config_init(dev);
+   dev-config_pending = false;
+   }
  
  	return dev;

  }
diff --git a/device.h b/device.h
index 753e1fa..d80142b 100644
--- a/device.h
+++ b/device.h
@@ -78,6 +78,8 @@ enum {
DEV_OPT_IGMPVERSION = (1  7),
DEV_OPT_MLDVERSION  = (1  8),
DEV_OPT_NEIGHREACHABLETIME  = (1  9),
+   DEV_OPT_RPS = (1  10),
+   DEV_OPT_XPS = (1  11),
  };
  
  /* events broadcasted to all users of a device */

@@ -206,6 +208,7 @@ device_apply_config(struct device *dev, const struct 
device_type *type,
  
  void device_reset_config(void);

  void device_reset_old(void);
+void device_set_force_ps(bool state);
  
  void device_init_virtual(struct device *dev, const struct device_type *type, const char *name);

  int 

[OpenWrt-Devel] [PATCH] netifd: Support for configurable default packet steering

2015-05-11 Thread Hans Dedecker
Default packet steering behavior can be configured via the parameter force_ps
in the global section; the default value is true to keep backwards 
compatibility.
Device packet steering (rps/xps) config can still be used to override the
default behavior.
This allows you to disable packet steering for all devices without the need
to define a device config list which disables receive/transmit packet steering

Signed-off-by: Hans Dedecker dedec...@gmail.com
---
 config.c |  6 ++
 device.c | 56 +---
 device.h |  3 +++
 3 files changed, 58 insertions(+), 7 deletions(-)

diff --git a/config.c b/config.c
index 48c4fbf..77ebb45 100644
--- a/config.c
+++ b/config.c
@@ -306,6 +306,12 @@ config_init_globals(void)
const char *ula_prefix = uci_lookup_option_string(
uci_ctx, globals, ula_prefix);
interface_ip_set_ula_prefix(ula_prefix);
+
+   const char *force_ps = uci_lookup_option_string(
+   uci_ctx, globals, force_ps);
+
+   if (force_ps)
+   device_set_force_ps(strcmp(force_ps, 1) ? false : true);
 }
 
 static void
diff --git a/device.c b/device.c
index 092c2d9..afe917c 100644
--- a/device.c
+++ b/device.c
@@ -29,6 +29,7 @@
 #include config.h
 
 static struct avl_tree devices;
+static bool force_ps = true;
 
 static const struct blobmsg_policy dev_attrs[__DEV_ATTR_MAX] = {
[DEV_ATTR_TYPE] = { .name = type, .type = BLOBMSG_TYPE_STRING },
@@ -244,15 +245,19 @@ device_init_settings(struct device *dev, struct blob_attr 
**tb)
s-flags |= DEV_OPT_NEIGHREACHABLETIME;
}
 
-   if ((cur = tb[DEV_ATTR_RPS]))
+   if ((cur = tb[DEV_ATTR_RPS])) {
s-rps = blobmsg_get_bool(cur);
+   s-flags |= DEV_OPT_RPS;
+   }
else
-   s-rps = true;
+   s-rps = force_ps;
 
-   if ((cur = tb[DEV_ATTR_XPS]))
+   if ((cur = tb[DEV_ATTR_XPS])) {
s-xps = blobmsg_get_bool(cur);
+   s-flags |= DEV_OPT_XPS;
+   }
else
-   s-xps = true;
+   s-xps = force_ps;
 
device_set_disabled(dev, disabled);
 }
@@ -370,8 +375,8 @@ int device_init(struct device *dev, const struct 
device_type *type, const char *
 
system_if_clear_state(dev);
device_check_state(dev);
-   dev-settings.rps = true;
-   dev-settings.xps = true;
+   dev-settings.rps = force_ps;
+   dev-settings.xps = force_ps;
 
return 0;
 }
@@ -723,6 +728,41 @@ device_reset_old(void)
}
 }
 
+void
+device_set_force_ps(bool state)
+{
+   struct device *dev;
+
+   if (state == force_ps)
+   return;
+
+   force_ps = state;
+
+   avl_for_each_element(devices, dev, avl) {
+   struct device_settings *s = dev-settings;
+   unsigned int apply_mask = 0;
+
+   if (!(s-flags  DEV_OPT_RPS)) {
+   s-rps = force_ps;
+   apply_mask |= DEV_OPT_RPS;
+   }
+
+   if (!(s-flags  DEV_OPT_XPS)) {
+   s-xps = force_ps;
+   apply_mask |= DEV_OPT_XPS;
+   }
+
+   if (!apply_mask)
+   continue;
+
+   if (!(dev-external || (dev-present  dev-active)) ||
+   dev-config_pending)
+   continue;
+
+   system_if_apply_settings(dev, s, apply_mask);
+   }
+}
+
 struct device *
 device_create(const char *name, const struct device_type *type,
  struct blob_attr *config)
@@ -758,8 +798,10 @@ device_create(const char *name, const struct device_type 
*type,
if (odev)
device_replace(dev, odev);
 
-   if (!config_init  dev-config_pending)
+   if (!config_init  dev-config_pending) {
type-config_init(dev);
+   dev-config_pending = false;
+   }
 
return dev;
 }
diff --git a/device.h b/device.h
index 753e1fa..d80142b 100644
--- a/device.h
+++ b/device.h
@@ -78,6 +78,8 @@ enum {
DEV_OPT_IGMPVERSION = (1  7),
DEV_OPT_MLDVERSION  = (1  8),
DEV_OPT_NEIGHREACHABLETIME  = (1  9),
+   DEV_OPT_RPS = (1  10),
+   DEV_OPT_XPS = (1  11),
 };
 
 /* events broadcasted to all users of a device */
@@ -206,6 +208,7 @@ device_apply_config(struct device *dev, const struct 
device_type *type,
 
 void device_reset_config(void);
 void device_reset_old(void);
+void device_set_force_ps(bool state);
 
 void device_init_virtual(struct device *dev, const struct device_type *type, 
const char *name);
 int device_init(struct device *iface, const struct device_type *type, const 
char *ifname);
-- 
1.9.1
___
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org