Re: [OpenWrt-Devel] [PATCH] [ar71xx] Add support for MERCURY MAC1200R

2015-01-12 Thread Roger Pueyo Centelles
Hi,

Please check http://wiki.openwrt.org/toh/mercury/mac1200r

Regards,

Roger

2015-01-12 0:21 GMT+01:00 Bruno Randolf b...@einfach.org:

 On 01/11/2015 09:25 PM, Gioacchino Mazzurco wrote:
  The device has two radios:
   - 802.11abgn AR9344 SoC, ath9k, working OK
   - 802.11ac QCA988x, ath10k, working in AP and STA modes

 Interesting device. Can you post more specs, or add to the TOH wiki?

 Thanks,
 bruno


___
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


[OpenWrt-Devel] [PATCH v2 1/3] iproute2: bump version to 3.18.0

2015-01-12 Thread Russell Senior
Signed-off-by: Russell Senior russ...@personaltelco.net
---
 package/network/utils/iproute2/Makefile  |  6 +++---
 package/network/utils/iproute2/patches/300-ip_tiny.patch | 15 ---
 2 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/package/network/utils/iproute2/Makefile 
b/package/network/utils/iproute2/Makefile
index 9aea05e..a49b061 100644
--- a/package/network/utils/iproute2/Makefile
+++ b/package/network/utils/iproute2/Makefile
@@ -1,5 +1,5 @@
 #
-# Copyright (C) 2006-2014 OpenWrt.org
+# Copyright (C) 2006-2015 OpenWrt.org
 #
 # This is free software, licensed under the GNU General Public License v2.
 # See /LICENSE for more information.
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=iproute2
-PKG_VERSION:=3.17.0
+PKG_VERSION:=3.18.0
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=http://kernel.org/pub/linux/utils/net/iproute2/
-PKG_MD5SUM:=b741a02c6dda5818d18011d572874493
+PKG_MD5SUM:=6f6ad51a7880460e103367b16057
 PKG_BUILD_PARALLEL:=1
 PKG_LICENSE:=GPL-2.0
 
diff --git a/package/network/utils/iproute2/patches/300-ip_tiny.patch 
b/package/network/utils/iproute2/patches/300-ip_tiny.patch
index 5b0d56c..3620120 100644
--- a/package/network/utils/iproute2/patches/300-ip_tiny.patch
+++ b/package/network/utils/iproute2/patches/300-ip_tiny.patch
@@ -1,6 +1,6 @@
 --- a/ip/Makefile
 +++ b/ip/Makefile
-@@ -15,6 +15,13 @@ ifeq ($(IP_CONFIG_SETNS),y)
+@@ -16,6 +16,13 @@ ifeq ($(IP_CONFIG_SETNS),y)
CFLAGS += -DHAVE_SETNS
  endif
  
@@ -14,7 +14,7 @@
  ALLOBJ=$(IPOBJ) $(RTMONOBJ)
  SCRIPTS=ifcfg rtpr routel routef
  TARGETS=ip rtmon
-@@ -42,7 +49,7 @@ else
+@@ -43,7 +50,7 @@ else
  
  ip: static-syms.o
  static-syms.o: static-syms.h
@@ -25,7 +25,7 @@
sed -n '/'$$s'[^ ]* =/{s:.* \([^ ]*'$$s'[^ ]*\) .*:extern char 
\1[] __attribute__((weak)); if (!strcmp(sym, \1)) return \1;:;p}' $$files ; \
 --- a/ip/ip.c
 +++ b/ip/ip.c
-@@ -66,29 +66,41 @@ static const struct cmd {
+@@ -69,30 +69,42 @@ static const struct cmd {
int (*func)(int argc, char **argv);
  } cmds[] = {
{ address,do_ipaddr },
@@ -44,6 +44,7 @@
{ link,   do_iplink },
 +#ifndef IPROUTE2_TINY
{ l2tp,   do_ipl2tp },
+   { fou,do_ipfou },
 +#endif
{ tunnel, do_iptunnel },
{ tunl,   do_iptunnel },
@@ -69,7 +70,7 @@
  };
 --- a/lib/utils.c
 +++ b/lib/utils.c
-@@ -627,6 +627,7 @@ const char *rt_addr_n2a(int af, int len,
+@@ -629,6 +629,7 @@ const char *rt_addr_n2a(int af, const vo
case AF_INET:
case AF_INET6:
return inet_ntop(af, addr, buf, buflen);
@@ -77,7 +78,7 @@
case AF_IPX:
return ipx_ntop(af, addr, buf, buflen);
case AF_DECnet:
-@@ -635,6 +636,7 @@ const char *rt_addr_n2a(int af, int len,
+@@ -637,6 +638,7 @@ const char *rt_addr_n2a(int af, const vo
memcpy(dna.a_addr, addr, 2);
return dnet_ntop(af, dna, buf, buflen);
}
@@ -85,7 +86,7 @@
default:
return ???;
}
-@@ -710,6 +712,7 @@ const char *format_host(int af, int len,
+@@ -712,6 +714,7 @@ const char *format_host(int af, int len,
case AF_INET6:
len = 16;
break;
@@ -93,7 +94,7 @@
case AF_IPX:
len = 10;
break;
-@@ -720,6 +723,7 @@ const char *format_host(int af, int len,
+@@ -722,6 +725,7 @@ const char *format_host(int af, int len,
len = 2;
break;
  #endif
-- 
2.1.3
___
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


[OpenWrt-Devel] [PATCH v2 2/3] iproute2: fix header problem for musl

2015-01-12 Thread Russell Senior
iproute2 includes sanitized linux kernel headers, which work fine for uClibc, 
however
with musl there is some header conflict, principally some ipv6 structure 
redefinition.  This
patch removes linux/in6.h from include/linux/if_bridge.h to solve the problem.

Signed-off-by: Russell Senior russ...@personaltelco.net
---
 .../utils/iproute2/patches/910-sanitize_headers_for_musl.patch | 10 ++
 1 file changed, 10 insertions(+)
 create mode 100644 
package/network/utils/iproute2/patches/910-sanitize_headers_for_musl.patch

diff --git 
a/package/network/utils/iproute2/patches/910-sanitize_headers_for_musl.patch 
b/package/network/utils/iproute2/patches/910-sanitize_headers_for_musl.patch
new file mode 100644
index 000..ca1125d
--- /dev/null
+++ b/package/network/utils/iproute2/patches/910-sanitize_headers_for_musl.patch
@@ -0,0 +1,10 @@
+--- a/include/linux/if_bridge.h
 b/include/linux/if_bridge.h
+@@ -15,7 +15,6 @@
+ 
+ #include linux/types.h
+ #include linux/if_ether.h
+-#include linux/in6.h
+ 
+ #define SYSFS_BRIDGE_ATTR bridge
+ #define SYSFS_BRIDGE_FDB  brforward
-- 
2.1.3
___
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


[OpenWrt-Devel] [PATCH v2 3/3] iproute2: add package for bridge program

2015-01-12 Thread Russell Senior
The 'bridge' program has been part of iproute2 for a while, and it was once
declared[1] to the the intended longterm replacement for bridge-utils, but
its features are still mostly distinct[2] from the venerable brctl.

[1] http://lwn.net/Articles/435845/
[2] 
http://sgros-students.blogspot.com/2013/11/comparison-of-brctl-and-bridge-commands.html

Signed-off-by: Russell Senior russ...@personaltelco.net
---
 package/network/utils/iproute2/Makefile | 11 +++
 1 file changed, 11 insertions(+)

diff --git a/package/network/utils/iproute2/Makefile 
b/package/network/utils/iproute2/Makefile
index a49b061..ad14ac4 100644
--- a/package/network/utils/iproute2/Makefile
+++ b/package/network/utils/iproute2/Makefile
@@ -58,6 +58,11 @@ $(call Package/iproute2/Default)
   TITLE:=General netlink utility frontend
 endef
 
+define Package/ip-bridge
+$(call Package/iproute2/Default)
+  TITLE:=Bridge configuration utility from iproute2
+endef
+
 define Package/ss
 $(call Package/iproute2/Default)
   TITLE:=Socket statistics utility
@@ -130,6 +135,11 @@ define Package/genl/install
$(INSTALL_BIN) $(PKG_BUILD_DIR)/genl/genl $(1)/usr/sbin/
 endef
 
+define Package/ip-bridge/install
+   $(INSTALL_DIR) $(1)/usr/sbin
+   $(INSTALL_BIN) $(PKG_BUILD_DIR)/bridge/bridge $(1)/usr/sbin/
+endef
+
 define Package/ss/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/misc/ss $(1)/usr/sbin/
@@ -139,4 +149,5 @@ $(eval $(call BuildPackage,ip))
 $(eval $(call BuildPackage,ip-full))
 $(eval $(call BuildPackage,tc))
 $(eval $(call BuildPackage,genl))
+$(eval $(call BuildPackage,ip-bridge))
 $(eval $(call BuildPackage,ss))
-- 
2.1.3
___
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


[OpenWrt-Devel] [PATCH 6/6] ar8216: display flow control info in swconfig get_link in case of autonegatiation too

2015-01-12 Thread Heiner Kallweit
The swconfig get_link attribute (at least) on AR8327/AR8337 doesn't
consider the autonegotiated flow control.
AR8327/AR8337 provide the info about autonegotiated rx/tx flow control
in bits 10 and 11 of the port status register.
Use these values to display info about autonegotiated rx/tx flow
control as part of the get_link attribute.

Successfully tested on TL-WDR4900 (AR8327 rev.4) and
TL-WDR4300 (AR8327 rev.2).

Signed-off-by: Heiner Kallweit hkallwe...@gmail.com
---
 target/linux/generic/files/drivers/net/phy/ar8327.c | 18 +-
 target/linux/generic/files/drivers/net/phy/ar8327.h |  2 ++
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/target/linux/generic/files/drivers/net/phy/ar8327.c 
b/target/linux/generic/files/drivers/net/phy/ar8327.c
index c0262d7..12b825f 100644
--- a/target/linux/generic/files/drivers/net/phy/ar8327.c
+++ b/target/linux/generic/files/drivers/net/phy/ar8327.c
@@ -710,7 +710,23 @@ ar8327_init_port(struct ar8xxx_priv *priv, int port)
 static u32
 ar8327_read_port_status(struct ar8xxx_priv *priv, int port)
 {
-   return ar8xxx_read(priv, AR8327_REG_PORT_STATUS(port));
+   u32 t;
+
+   t = ar8xxx_read(priv, AR8327_REG_PORT_STATUS(port));
+   /* map the flow control autoneg result bits to the flow control bits
+* used in forced mode to allow ar8216_read_port_link detect
+* flow control properly if autoneg is used
+*/
+   if (t  AR8216_PORT_STATUS_LINK_UP 
+   t  AR8216_PORT_STATUS_LINK_AUTO) {
+   t = ~(AR8216_PORT_STATUS_TXFLOW | AR8216_PORT_STATUS_RXFLOW);
+   if (t  AR8327_PORT_STATUS_TXFLOW_AUTO)
+   t |= AR8216_PORT_STATUS_TXFLOW;
+   if (t  AR8327_PORT_STATUS_RXFLOW_AUTO)
+   t |= AR8216_PORT_STATUS_RXFLOW;
+   }
+
+   return t;
 }
 
 static u32
diff --git a/target/linux/generic/files/drivers/net/phy/ar8327.h 
b/target/linux/generic/files/drivers/net/phy/ar8327.h
index 1877f00..f0ef013 100644
--- a/target/linux/generic/files/drivers/net/phy/ar8327.h
+++ b/target/linux/generic/files/drivers/net/phy/ar8327.h
@@ -84,6 +84,8 @@
 #define   AR8327_MAX_FRAME_SIZE_MTUBITS(0, 14)
 
 #define AR8327_REG_PORT_STATUS(_i) (0x07c + (_i) * 4)
+#define   AR8327_PORT_STATUS_TXFLOW_AUTO   BIT(10)
+#define   AR8327_PORT_STATUS_RXFLOW_AUTO   BIT(11)
 
 #define AR8327_REG_HEADER_CTRL 0x098
 #define AR8327_REG_PORT_HEADER(_i) (0x09c + (_i) * 4)
-- 
2.2.1
___
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


[OpenWrt-Devel] [PATCH 4/6] ar8216: introduce enable_eee swconfig attribute to control 802.3az EEE per port

2015-01-12 Thread Heiner Kallweit
Users reported network issues with AR8327 which turned out to be caused
by EEE not working correctly with certain link partners (ticket 14597).
The workaround was to disable EEE on all ports (changeset 41577).

The issue was with certain link partners only, therefore this patch
allows to control usage of EEE per port via swconfig.
Still the default is to initially disable EEE on all ports.

Successfully tested on a TL-WDR4900 (AR8327 rev.4)

Signed-off-by: Heiner Kallweit hkallwe...@gmail.com
---
 .../linux/generic/files/drivers/net/phy/ar8216.c   |  14 ++-
 .../linux/generic/files/drivers/net/phy/ar8216.h   |   9 ++
 .../linux/generic/files/drivers/net/phy/ar8327.c   | 113 ++---
 .../linux/generic/files/drivers/net/phy/ar8327.h   |   3 +
 4 files changed, 122 insertions(+), 17 deletions(-)

diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c 
b/target/linux/generic/files/drivers/net/phy/ar8216.c
index 2fd4425..99d0e82 100644
--- a/target/linux/generic/files/drivers/net/phy/ar8216.c
+++ b/target/linux/generic/files/drivers/net/phy/ar8216.c
@@ -1041,6 +1041,7 @@ int
 ar8xxx_sw_reset_switch(struct switch_dev *dev)
 {
struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
+   const struct ar8xxx_chip *chip = priv-chip;
int i;
 
mutex_lock(priv-reg_mutex);
@@ -1052,18 +1053,18 @@ ar8xxx_sw_reset_switch(struct switch_dev *dev)
 
/* Configure all ports */
for (i = 0; i  dev-ports; i++)
-   priv-chip-init_port(priv, i);
+   chip-init_port(priv, i);
 
priv-mirror_rx = false;
priv-mirror_tx = false;
priv-source_port = 0;
priv-monitor_port = 0;
 
-   priv-chip-init_globals(priv);
+   chip-init_globals(priv);
 
mutex_unlock(priv-reg_mutex);
 
-   return ar8xxx_sw_hw_apply(dev);
+   return chip-sw_hw_apply(dev);
 }
 
 int
@@ -1194,7 +1195,7 @@ ar8xxx_sw_get_mirror_source_port(struct switch_dev *dev,
return 0;
 }
 
-static int
+int
 ar8xxx_sw_set_port_reset_mib(struct switch_dev *dev,
 const struct switch_attr *attr,
 struct switch_val *val)
@@ -1224,7 +1225,7 @@ unlock:
return ret;
 }
 
-static int
+int
 ar8xxx_sw_get_port_mib(struct switch_dev *dev,
   const struct switch_attr *attr,
   struct switch_val *val)
@@ -1390,6 +1391,7 @@ static const struct ar8xxx_chip ar8216_chip = {
.vtu_flush = ar8216_vtu_flush,
.vtu_load_vlan = ar8216_vtu_load_vlan,
.set_mirror_regs = ar8216_set_mirror_regs,
+   .sw_hw_apply = ar8xxx_sw_hw_apply,
 
.num_mibs = ARRAY_SIZE(ar8216_mibs),
.mib_decs = ar8216_mibs,
@@ -1416,6 +1418,7 @@ static const struct ar8xxx_chip ar8236_chip = {
.vtu_flush = ar8216_vtu_flush,
.vtu_load_vlan = ar8216_vtu_load_vlan,
.set_mirror_regs = ar8216_set_mirror_regs,
+   .sw_hw_apply = ar8xxx_sw_hw_apply,
 
.num_mibs = ARRAY_SIZE(ar8236_mibs),
.mib_decs = ar8236_mibs,
@@ -1442,6 +1445,7 @@ static const struct ar8xxx_chip ar8316_chip = {
.vtu_flush = ar8216_vtu_flush,
.vtu_load_vlan = ar8216_vtu_load_vlan,
.set_mirror_regs = ar8216_set_mirror_regs,
+   .sw_hw_apply = ar8xxx_sw_hw_apply,
 
.num_mibs = ARRAY_SIZE(ar8236_mibs),
.mib_decs = ar8236_mibs,
diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.h 
b/target/linux/generic/files/drivers/net/phy/ar8216.h
index d3d0443..4089a17 100644
--- a/target/linux/generic/files/drivers/net/phy/ar8216.h
+++ b/target/linux/generic/files/drivers/net/phy/ar8216.h
@@ -371,6 +371,7 @@ struct ar8xxx_chip {
void (*vtu_load_vlan)(struct ar8xxx_priv *priv, u32 vid, u32 port_mask);
void (*phy_fixup)(struct ar8xxx_priv *priv, int phy);
void (*set_mirror_regs)(struct ar8xxx_priv *priv);
+   int (*sw_hw_apply)(struct switch_dev *dev);
 
const struct ar8xxx_mib_desc *mib_decs;
unsigned num_mibs;
@@ -487,6 +488,14 @@ int
 ar8xxx_sw_get_port_link(struct switch_dev *dev, int port,
struct switch_port_link *link);
 int
+ar8xxx_sw_set_port_reset_mib(struct switch_dev *dev,
+ const struct switch_attr *attr,
+ struct switch_val *val);
+int
+ar8xxx_sw_get_port_mib(struct switch_dev *dev,
+   const struct switch_attr *attr,
+   struct switch_val *val);
+int
 ar8216_wait_bit(struct ar8xxx_priv *priv, int reg, u32 mask, u32 val);
 
 static inline struct ar8xxx_priv *
diff --git a/target/linux/generic/files/drivers/net/phy/ar8327.c 
b/target/linux/generic/files/drivers/net/phy/ar8327.c
index f6d07c1..0971f80 100644
--- a/target/linux/generic/files/drivers/net/phy/ar8327.c
+++ b/target/linux/generic/files/drivers/net/phy/ar8327.c
@@ -30,7 +30,6 @@
 #include ar8327.h
 
 extern const struct ar8xxx_mib_desc ar8236_mibs[39];
-extern const struct 

[OpenWrt-Devel] [PATCH] netifd: Make interface identifier of delegated IPv6 address configurable

2015-01-12 Thread Hans Dedecker
The ip6ifaceid UCI interface parameter makes the interface identifier of the 
delegated IPv6 address configurable.
The parameter can have the following values:
eui64 : Interface identifier is generated from the interface's MAC address
random : Interface identifier is generated randomly
fixed value : Interface identifier is a fixed value (eg ::1:2)

The latter is the default value with a fixed value of ::1 for backwards 
compatibility

Signed-off-by: Hans Dedecker dedec...@gmail.com
Signed-off-by: Joeri Barbarien joeri.barbar...@gmail.com

---
 interface-ip.c | 66 +++---
 interface-ip.h |  1 +
 interface.c| 35 +++
 interface.h|  8 +++
 4 files changed, 107 insertions(+), 3 deletions(-)

diff --git a/interface-ip.c b/interface-ip.c
index 6659f8b..1a22ce6 100644
--- a/interface-ip.c
+++ b/interface-ip.c
@@ -648,6 +648,56 @@ interface_update_host_route(struct vlist_tree *tree,
}
 }
 
+static void
+random_ifaceid(struct in6_addr *addr)
+{
+   static bool initialized = false;
+   struct timeval t;
+
+   if (!initialized) {
+   long int seed = 0;
+   gettimeofday(t, NULL);
+   seed = t.tv_sec ^ t.tv_usec ^ getpid();
+   srand48(seed);
+   initialized = true;
+   }
+   addr-s6_addr32[2] = (uint32_t)mrand48();
+   addr-s6_addr32[3] = (uint32_t)mrand48();
+}
+
+static void
+eui64_ifaceid(struct interface *iface, struct in6_addr *addr)
+{
+   /* get mac address */
+   uint8_t *macaddr = iface-l3_dev.dev-settings.macaddr;
+   uint8_t *ifaceid = addr-s6_addr + 8;
+   memcpy(ifaceid,macaddr,3);
+   memcpy(ifaceid + 5,macaddr + 3, 3);
+   ifaceid[3] = 0xff;
+   ifaceid[4] = 0xfe;
+   ifaceid[0] ^= 0x02;
+}
+
+static void
+generate_ifaceid(struct interface *iface, struct in6_addr *addr)
+{
+   /* generate new iface id */
+   switch (iface-assignment_iface_id_selection) {
+   case IFID_FIXED:
+   /* fixed */
+   /* copy host part from assignment_fixed_iface_id */
+   memcpy(addr-s6_addr + 8, 
iface-assignment_fixed_iface_id.s6_addr + 8, 8);
+   break;
+   case IFID_RANDOM:
+   /* randomize last 64 bits */
+   random_ifaceid(addr);
+   break;
+   case IFID_EUI64:
+   /* eui64 */
+   eui64_ifaceid(iface, addr);
+   break;
+   }
+}
 
 static void
 interface_set_prefix_address(struct device_prefix_assignment *assignment,
@@ -661,9 +711,16 @@ interface_set_prefix_address(struct 
device_prefix_assignment *assignment,
 
struct device_addr addr;
memset(addr, 0, sizeof(addr));
-   addr.addr.in6 = prefix-addr;
-   addr.addr.in6.s6_addr32[1] |= htonl(assignment-assigned);
-   addr.addr.in6.s6_addr[15] += 1;
+
+   if (IN6_IS_ADDR_UNSPECIFIED(assignment-addr)) {
+   addr.addr.in6 = prefix-addr;
+   addr.addr.in6.s6_addr32[1] |= htonl(assignment-assigned);
+   generate_ifaceid(iface, addr.addr.in6);
+   assignment-addr = addr.addr.in6;
+   }
+   else
+   addr.addr.in6 = assignment-addr;
+
addr.mask = assignment-length;
addr.flags = DEVADDR_INET6;
addr.preferred_until = prefix-preferred_until;
@@ -775,6 +832,7 @@ static void interface_update_prefix_assignments(struct 
device_prefix *prefix, bo
c-assigned = 1  (64 - prefix-length);
c-length = 64;
c-name[0] = 0;
+   c-addr = in6addr_any;
list_add(c-head, prefix-assignments);
 
// Excluded prefix
@@ -784,6 +842,7 @@ static void interface_update_prefix_assignments(struct 
device_prefix *prefix, bo
c-assigned = ntohl(prefix-excl_addr.s6_addr32[1]) 
((1  (64 - prefix-length)) - 1);
c-length = prefix-excl_length;
+   c-addr = in6addr_any;
memcpy(c-name, name, sizeof(name));
list_add(c-head, prefix-assignments);
}
@@ -815,6 +874,7 @@ static void interface_update_prefix_assignments(struct 
device_prefix *prefix, bo
c = malloc(sizeof(*c) + namelen);
c-length = iface-assignment_length;
c-assigned = iface-assignment_hint;
+   c-addr = in6addr_any;
c-enabled = false;
memcpy(c-name, iface-name, namelen);
 
diff --git a/interface-ip.h b/interface-ip.h
index a5612e5..7c4a8ae 100644
--- a/interface-ip.h
+++ b/interface-ip.h
@@ -59,6 +59,7 @@ struct device_prefix_assignment {
struct list_head head;
int32_t assigned;
uint8_t length;
+   struct in6_addr addr;
bool enabled;
char name[];
 };
diff --git a/interface.c b/interface.c
index 83d7f94..4ab2431 100644
--- a/interface.c
+++ b/interface.c
@@ -43,6 +43,7 @@ enum {

[OpenWrt-Devel] [PATCH 0/6] ar8216: patch series for AR8327/AR8337

2015-01-12 Thread Heiner Kallweit
Patches 1-3 are improvements w/o functional change.

Patches 4 allows to control EEE PHY sleep mode per port via swconfig.
Motivation is that as workaround for issues with certain link partners
EEE was disabled in general.
Still the default is to initially disable EEE on all ports, however the
brave now have the option to enable EEE on selected ports.

Patch 5 displays autonegotiated EEE capabilities as part of the get_link
attribute. Note that enabling/disabling PHY EEE sleep mode is independent
of autonegotiated EEE capabilities. Even if PHY EEE sleep mode is disabled
the switch advertises EEE capabilities to the link partner.
This might still allow the link partner to sleep if network is inactive.

Patch 6 displays autonegotiated rx/tx flow control as part of the get_link
attribute. So far this was the case in forced mode only.

Heiner Kallweit (6):
  ar8216: define all switch_addr structs as const
  ar8216: replace ar8xxx_rmw with ar8xxx_reg_set where appropriate
  ar8216: introduce ar8xxx_reg_clear complementing ar8xxx_reg_set
  ar8216: introduce enable_eee swconfig attribute to control 802.3az EEE per 
port
  ar8216: add 802.3az EEE info to swconfig get_link attribute
  ar8216: display flow control info in swconfig get_link in case of 
autonegatiation too

 .../linux/generic/files/drivers/net/phy/ar8216.c   |  60 ---
 .../linux/generic/files/drivers/net/phy/ar8216.h   |  18 +++
 .../linux/generic/files/drivers/net/phy/ar8327.c   | 175 ++---
 .../linux/generic/files/drivers/net/phy/ar8327.h   |   5 +
 .../linux/generic/files/drivers/net/phy/swconfig.c |   4 +-
 target/linux/generic/files/include/linux/switch.h  |   2 +
 6 files changed, 216 insertions(+), 48 deletions(-)

-- 
2.2.1
___
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


[OpenWrt-Devel] [PATCH 3/6] ar8216: introduce ar8xxx_reg_clear complementing ar8xxx_reg_set

2015-01-12 Thread Heiner Kallweit
Introduce ar8xxx_reg_clear complementing ar8xxx_reg_set.

Signed-off-by: Heiner Kallweit hkallwe...@gmail.com
---
 target/linux/generic/files/drivers/net/phy/ar8216.c | 10 --
 target/linux/generic/files/drivers/net/phy/ar8216.h |  6 ++
 target/linux/generic/files/drivers/net/phy/ar8327.c | 10 --
 3 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c 
b/target/linux/generic/files/drivers/net/phy/ar8216.c
index 76dfcf4..2fd4425 100644
--- a/target/linux/generic/files/drivers/net/phy/ar8216.c
+++ b/target/linux/generic/files/drivers/net/phy/ar8216.c
@@ -957,13 +957,11 @@ ar8216_set_mirror_regs(struct ar8xxx_priv *priv)
   AR8216_GLOBAL_CPUPORT_MIRROR_PORT,
   (0xF  AR8216_GLOBAL_CPUPORT_MIRROR_PORT_S));
for (port = 0; port  AR8216_NUM_PORTS; port++) {
-   ar8xxx_rmw(priv, AR8216_REG_PORT_CTRL(port),
-  AR8216_PORT_CTRL_MIRROR_RX,
-  0);
+   ar8xxx_reg_clear(priv, AR8216_REG_PORT_CTRL(port),
+  AR8216_PORT_CTRL_MIRROR_RX);
 
-   ar8xxx_rmw(priv, AR8216_REG_PORT_CTRL(port),
-  AR8216_PORT_CTRL_MIRROR_TX,
-  0);
+   ar8xxx_reg_clear(priv, AR8216_REG_PORT_CTRL(port),
+  AR8216_PORT_CTRL_MIRROR_TX);
}
 
/* now enable mirroring if necessary */
diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.h 
b/target/linux/generic/files/drivers/net/phy/ar8216.h
index 50f2252..d3d0443 100644
--- a/target/linux/generic/files/drivers/net/phy/ar8216.h
+++ b/target/linux/generic/files/drivers/net/phy/ar8216.h
@@ -536,4 +536,10 @@ ar8xxx_reg_set(struct ar8xxx_priv *priv, int reg, u32 val)
ar8xxx_rmw(priv, reg, 0, val);
 }
 
+static inline void
+ar8xxx_reg_clear(struct ar8xxx_priv *priv, int reg, u32 val)
+{
+   ar8xxx_rmw(priv, reg, val, 0);
+}
+
 #endif
diff --git a/target/linux/generic/files/drivers/net/phy/ar8327.c 
b/target/linux/generic/files/drivers/net/phy/ar8327.c
index b69c33b..f6d07c1 100644
--- a/target/linux/generic/files/drivers/net/phy/ar8327.c
+++ b/target/linux/generic/files/drivers/net/phy/ar8327.c
@@ -865,13 +865,11 @@ ar8327_set_mirror_regs(struct ar8xxx_priv *priv)
   AR8327_FWD_CTRL0_MIRROR_PORT,
   (0xF  AR8327_FWD_CTRL0_MIRROR_PORT_S));
for (port = 0; port  AR8327_NUM_PORTS; port++) {
-   ar8xxx_rmw(priv, AR8327_REG_PORT_LOOKUP(port),
-  AR8327_PORT_LOOKUP_ING_MIRROR_EN,
-  0);
+   ar8xxx_reg_clear(priv, AR8327_REG_PORT_LOOKUP(port),
+  AR8327_PORT_LOOKUP_ING_MIRROR_EN);
 
-   ar8xxx_rmw(priv, AR8327_REG_PORT_HOL_CTRL1(port),
-  AR8327_PORT_HOL_CTRL1_EG_MIRROR_EN,
-  0);
+   ar8xxx_reg_clear(priv, AR8327_REG_PORT_HOL_CTRL1(port),
+  AR8327_PORT_HOL_CTRL1_EG_MIRROR_EN);
}
 
/* now enable mirroring if necessary */
-- 
2.2.1
___
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


[OpenWrt-Devel] [PATCH 5/6] ar8216: add 802.3az EEE info to swconfig get_link attribute

2015-01-12 Thread Heiner Kallweit
AR8327/AR8337 allow to read the result of EEE autonegotiation.
If EEE is autonegotiated between the link partners, display
this as part of the swconfig get_link attribute.

eee100:  100MBit EEE supported by both link partners
eee1000: 1GBit EEE supported by both link partners

Signed-off-by: Heiner Kallweit hkallwe...@gmail.com
---
 .../linux/generic/files/drivers/net/phy/ar8216.c   | 17 +++
 .../linux/generic/files/drivers/net/phy/ar8216.h   |  3 +++
 .../linux/generic/files/drivers/net/phy/ar8327.c   | 24 ++
 .../linux/generic/files/drivers/net/phy/swconfig.c |  4 +++-
 target/linux/generic/files/include/linux/switch.h  |  2 ++
 5 files changed, 49 insertions(+), 1 deletion(-)

diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c 
b/target/linux/generic/files/drivers/net/phy/ar8216.c
index 99d0e82..90484d6 100644
--- a/target/linux/generic/files/drivers/net/phy/ar8216.c
+++ b/target/linux/generic/files/drivers/net/phy/ar8216.c
@@ -332,6 +332,20 @@ ar8xxx_phy_mmd_write(struct ar8xxx_priv *priv, int 
phy_addr, u16 addr, u16 data)
mutex_unlock(bus-mdio_lock);
 }
 
+u16
+ar8xxx_phy_mmd_read(struct ar8xxx_priv *priv, int phy_addr, u16 addr)
+{
+   struct mii_bus *bus = priv-mii_bus;
+   u16 data;
+
+   mutex_lock(bus-mdio_lock);
+   bus-write(bus, phy_addr, MII_ATH_MMD_ADDR, addr);
+   data = bus-read(bus, phy_addr, MII_ATH_MMD_DATA);
+   mutex_unlock(bus-mdio_lock);
+
+   return data;
+}
+
 static int
 ar8xxx_reg_wait(struct ar8xxx_priv *priv, u32 reg, u32 mask, u32 val,
unsigned timeout)
@@ -453,6 +467,9 @@ ar8216_read_port_link(struct ar8xxx_priv *priv, int port,
link-tx_flow = !!(status  AR8216_PORT_STATUS_TXFLOW);
link-rx_flow = !!(status  AR8216_PORT_STATUS_RXFLOW);
 
+   if (link-aneg  link-duplex  priv-chip-read_port_eee_status)
+   link-eee = priv-chip-read_port_eee_status(priv, port);
+
speed = (status  AR8216_PORT_STATUS_SPEED) 
 AR8216_PORT_STATUS_SPEED_S;
 
diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.h 
b/target/linux/generic/files/drivers/net/phy/ar8216.h
index 4089a17..8487c3e 100644
--- a/target/linux/generic/files/drivers/net/phy/ar8216.h
+++ b/target/linux/generic/files/drivers/net/phy/ar8216.h
@@ -366,6 +366,7 @@ struct ar8xxx_chip {
void (*init_port)(struct ar8xxx_priv *priv, int port);
void (*setup_port)(struct ar8xxx_priv *priv, int port, u32 members);
u32 (*read_port_status)(struct ar8xxx_priv *priv, int port);
+   u32 (*read_port_eee_status)(struct ar8xxx_priv *priv, int port);
int (*atu_flush)(struct ar8xxx_priv *priv);
void (*vtu_flush)(struct ar8xxx_priv *priv);
void (*vtu_load_vlan)(struct ar8xxx_priv *priv, u32 vid, u32 port_mask);
@@ -432,6 +433,8 @@ ar8xxx_phy_dbg_write(struct ar8xxx_priv *priv, int phy_addr,
 u16 dbg_addr, u16 dbg_data);
 void
 ar8xxx_phy_mmd_write(struct ar8xxx_priv *priv, int phy_addr, u16 addr, u16 
data);
+u16
+ar8xxx_phy_mmd_read(struct ar8xxx_priv *priv, int phy_addr, u16 addr);
 void
 ar8xxx_phy_init(struct ar8xxx_priv *priv);
 int
diff --git a/target/linux/generic/files/drivers/net/phy/ar8327.c 
b/target/linux/generic/files/drivers/net/phy/ar8327.c
index 0971f80..c0262d7 100644
--- a/target/linux/generic/files/drivers/net/phy/ar8327.c
+++ b/target/linux/generic/files/drivers/net/phy/ar8327.c
@@ -25,6 +25,7 @@
 #include linux/workqueue.h
 #include linux/of_device.h
 #include linux/leds.h
+#include linux/mdio.h
 
 #include ar8216.h
 #include ar8327.h
@@ -712,6 +713,27 @@ ar8327_read_port_status(struct ar8xxx_priv *priv, int port)
return ar8xxx_read(priv, AR8327_REG_PORT_STATUS(port));
 }
 
+static u32
+ar8327_read_port_eee_status(struct ar8xxx_priv *priv, int port)
+{
+   int phy;
+   u16 t;
+
+   if (port = priv-dev.ports)
+   return 0;
+
+   if (port == 0 || port == 6)
+   return 0;
+
+   phy = port - 1;
+
+   /* EEE Ability Auto-negotiation Result */
+   ar8xxx_phy_mmd_write(priv, phy, 0x7, 0x8000);
+   t = ar8xxx_phy_mmd_read(priv, phy, 0x4007);
+
+   return mmd_eee_adv_to_ethtool_adv_t(t);
+}
+
 static int
 ar8327_atu_flush(struct ar8xxx_priv *priv)
 {
@@ -1069,6 +1091,7 @@ const struct ar8xxx_chip ar8327_chip = {
.init_port = ar8327_init_port,
.setup_port = ar8327_setup_port,
.read_port_status = ar8327_read_port_status,
+   .read_port_eee_status = ar8327_read_port_eee_status,
.atu_flush = ar8327_atu_flush,
.vtu_flush = ar8327_vtu_flush,
.vtu_load_vlan = ar8327_vtu_load_vlan,
@@ -1100,6 +1123,7 @@ const struct ar8xxx_chip ar8337_chip = {
.init_port = ar8327_init_port,
.setup_port = ar8327_setup_port,
.read_port_status = ar8327_read_port_status,
+   .read_port_eee_status = ar8327_read_port_eee_status,
.atu_flush = ar8327_atu_flush,
.vtu_flush = 

[OpenWrt-Devel] [PATCH 1/6] ar8216: define all switch_addr structs as const

2015-01-12 Thread Heiner Kallweit
Define all switch_addr structs as const.

Signed-off-by: Heiner Kallweit hkallwe...@gmail.com
---
 target/linux/generic/files/drivers/net/phy/ar8216.c | 6 +++---
 target/linux/generic/files/drivers/net/phy/ar8327.c | 6 +++---
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c 
b/target/linux/generic/files/drivers/net/phy/ar8216.c
index b88e9ec..906dc7a 100644
--- a/target/linux/generic/files/drivers/net/phy/ar8216.c
+++ b/target/linux/generic/files/drivers/net/phy/ar8216.c
@@ -1277,7 +1277,7 @@ unlock:
return ret;
 }
 
-static struct switch_attr ar8xxx_sw_attr_globals[] = {
+static const struct switch_attr ar8xxx_sw_attr_globals[] = {
{
.type = SWITCH_TYPE_INT,
.name = enable_vlan,
@@ -1326,7 +1326,7 @@ static struct switch_attr ar8xxx_sw_attr_globals[] = {
},
 };
 
-struct switch_attr ar8xxx_sw_attr_port[2] = {
+const struct switch_attr ar8xxx_sw_attr_port[2] = {
{
.type = SWITCH_TYPE_NOVAL,
.name = reset_mib,
@@ -1342,7 +1342,7 @@ struct switch_attr ar8xxx_sw_attr_port[2] = {
},
 };
 
-struct switch_attr ar8xxx_sw_attr_vlan[1] = {
+const struct switch_attr ar8xxx_sw_attr_vlan[1] = {
{
.type = SWITCH_TYPE_INT,
.name = vid,
diff --git a/target/linux/generic/files/drivers/net/phy/ar8327.c 
b/target/linux/generic/files/drivers/net/phy/ar8327.c
index 77ee4bf..38c11cb 100644
--- a/target/linux/generic/files/drivers/net/phy/ar8327.c
+++ b/target/linux/generic/files/drivers/net/phy/ar8327.c
@@ -30,8 +30,8 @@
 #include ar8327.h
 
 extern const struct ar8xxx_mib_desc ar8236_mibs[39];
-extern struct switch_attr ar8xxx_sw_attr_port[2];
-extern struct switch_attr ar8xxx_sw_attr_vlan[1];
+extern const struct switch_attr ar8xxx_sw_attr_port[2];
+extern const struct switch_attr ar8xxx_sw_attr_vlan[1];
 
 static u32
 ar8327_get_pad_cfg(struct ar8327_pad_cfg *cfg)
@@ -896,7 +896,7 @@ ar8327_set_mirror_regs(struct ar8xxx_priv *priv)
   AR8327_PORT_HOL_CTRL1_EG_MIRROR_EN);
 }
 
-static struct switch_attr ar8327_sw_attr_globals[] = {
+static const struct switch_attr ar8327_sw_attr_globals[] = {
{
.type = SWITCH_TYPE_INT,
.name = enable_vlan,
-- 
2.2.1
___
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


[OpenWrt-Devel] [PATCH 2/6] ar8216: replace ar8xxx_rmw with ar8xxx_reg_set where appropriate

2015-01-12 Thread Heiner Kallweit
Replace ar8xxx_rmw with ar8xxx_reg_set where appropriate.

Signed-off-by: Heiner Kallweit hkallwe...@gmail.com
---
 target/linux/generic/files/drivers/net/phy/ar8216.c | 13 +
 target/linux/generic/files/drivers/net/phy/ar8327.c |  6 ++
 2 files changed, 7 insertions(+), 12 deletions(-)

diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c 
b/target/linux/generic/files/drivers/net/phy/ar8216.c
index 906dc7a..76dfcf4 100644
--- a/target/linux/generic/files/drivers/net/phy/ar8216.c
+++ b/target/linux/generic/files/drivers/net/phy/ar8216.c
@@ -742,12 +742,11 @@ ar8236_init_globals(struct ar8xxx_priv *priv)
   AR8316_GCTRL_MTU, 9018 + 8 + 2);
 
/* enable cpu port to receive arp frames */
-   ar8xxx_rmw(priv, AR8216_REG_ATU_CTRL,
-  AR8236_ATU_CTRL_RES, AR8236_ATU_CTRL_RES);
+   ar8xxx_reg_set(priv, AR8216_REG_ATU_CTRL,
+  AR8236_ATU_CTRL_RES);
 
/* enable cpu port to receive multicast and broadcast frames */
-   ar8xxx_rmw(priv, AR8216_REG_FLOOD_MASK,
-  AR8236_FM_CPU_BROADCAST_EN | AR8236_FM_CPU_BCAST_FWD_EN,
+   ar8xxx_reg_set(priv, AR8216_REG_FLOOD_MASK,
   AR8236_FM_CPU_BROADCAST_EN | AR8236_FM_CPU_BCAST_FWD_EN);
 
/* Enable MIB counters */
@@ -979,13 +978,11 @@ ar8216_set_mirror_regs(struct ar8xxx_priv *priv)
   (priv-monitor_port  AR8216_GLOBAL_CPUPORT_MIRROR_PORT_S));
 
if (priv-mirror_rx)
-   ar8xxx_rmw(priv, AR8216_REG_PORT_CTRL(priv-source_port),
-  AR8216_PORT_CTRL_MIRROR_RX,
+   ar8xxx_reg_set(priv, AR8216_REG_PORT_CTRL(priv-source_port),
   AR8216_PORT_CTRL_MIRROR_RX);
 
if (priv-mirror_tx)
-   ar8xxx_rmw(priv, AR8216_REG_PORT_CTRL(priv-source_port),
-  AR8216_PORT_CTRL_MIRROR_TX,
+   ar8xxx_reg_set(priv, AR8216_REG_PORT_CTRL(priv-source_port),
   AR8216_PORT_CTRL_MIRROR_TX);
 }
 
diff --git a/target/linux/generic/files/drivers/net/phy/ar8327.c 
b/target/linux/generic/files/drivers/net/phy/ar8327.c
index 38c11cb..b69c33b 100644
--- a/target/linux/generic/files/drivers/net/phy/ar8327.c
+++ b/target/linux/generic/files/drivers/net/phy/ar8327.c
@@ -886,13 +886,11 @@ ar8327_set_mirror_regs(struct ar8xxx_priv *priv)
   (priv-monitor_port  AR8327_FWD_CTRL0_MIRROR_PORT_S));
 
if (priv-mirror_rx)
-   ar8xxx_rmw(priv, AR8327_REG_PORT_LOOKUP(priv-source_port),
-  AR8327_PORT_LOOKUP_ING_MIRROR_EN,
+   ar8xxx_reg_set(priv, AR8327_REG_PORT_LOOKUP(priv-source_port),
   AR8327_PORT_LOOKUP_ING_MIRROR_EN);
 
if (priv-mirror_tx)
-   ar8xxx_rmw(priv, AR8327_REG_PORT_HOL_CTRL1(priv-source_port),
-  AR8327_PORT_HOL_CTRL1_EG_MIRROR_EN,
+   ar8xxx_reg_set(priv, 
AR8327_REG_PORT_HOL_CTRL1(priv-source_port),
   AR8327_PORT_HOL_CTRL1_EG_MIRROR_EN);
 }
 
-- 
2.2.1
___
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


[OpenWrt-Devel] [PATCH] Initramfs image copied to bin for malta builds

2015-01-12 Thread Eric Schultz
Malta ramdisk images are no longer copied to output due to a recent change.
This change reimplements copying of ramdisk images for Malta builds.

Signed-off-by: Eric Schultz eschu...@prplfoundation.org
---
 target/linux/malta/image/Makefile | 5 +
 1 file changed, 5 insertions(+)

diff --git a/target/linux/malta/image/Makefile 
b/target/linux/malta/image/Makefile
index db2637a..c8f15fd 100644
--- a/target/linux/malta/image/Makefile
+++ b/target/linux/malta/image/Makefile
@@ -37,6 +37,11 @@ define Image/Build/squashfs
 $(call prepare_generic_squashfs,$(KDIR)/root.squashfs)
 endef
 
+define Image/Build/Initramfs
+   cp $(KDIR)/vmlinux-initramfs.elf 
$(BIN_DIR)/$(IMG_PREFIX)-vmlinux-initramfs.elf
+   cp $(KDIR)/vmlinux-initramfs 
$(BIN_DIR)/$(IMG_PREFIX)-vmlinux-initramfs.bin
+endef
+
 define Image/Build
$(call Image/Build/$(1))
dd if=$(KDIR)/root.$(1) of=$(BIN_DIR)/$(IMG_PREFIX)-root.$(1) bs=128k 
conv=sync
-- 
2.1.0
___
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


[OpenWrt-Devel] [PATCH] Add kmod-w1-slave-ds2413

2015-01-12 Thread Wouter Paesen

This patch adds support for building the ds2413 one-wire kernel module.

Signed-off-by: Wouter Paesen wou...@blue-gate.be
--- trunk/package/kernel/linux/modules/w1.mk(revision 43950)
+++ trunk/package/kernel/linux/modules/w1.mk(working copy)
@@ -174,3 +174,19 @@
 endef

 $(eval $(call KernelPackage,w1-slave-ds2760))
+
+define KernelPackage/w1-slave-ds2413
+  TITLE:=DS2413 2 Ch. Addressable Switch
+  KCONFIG:= \
+CONFIG_W1_SLAVE_DS2413
+  FILES:=$(W1_SLAVES_DIR)/w1_ds2413.ko
+  AUTOLOAD:=$(call AutoProbe,w1_ds2413)
+  $(call AddDepends/w1)
+endef
+
+define KernelPackage/w1-slave-ds2413/description
+ Kernel module for 1-wire DS2413 Dual Channel Addressable Switch support
+endef
+
+$(eval $(call KernelPackage,w1-slave-ds2413))
+
___
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


Re: [OpenWrt-Devel] Announcement of mac80211 driver support for Marvell 88W8864 chip

2015-01-12 Thread Ian Kent
On Mon, 2015-01-12 at 19:03 -0800, David Lin wrote:
 Hi Ian,
 
   1. I will take off these additional blank lines.
   2. I work for problems reported from community. If you do find problems 
 for the driver, please let me know.

Thanks David.

I've posted an issue description at
https://github.com/kaloz/mwlwifi/issues along with the others but,
sadly, I suspect there's really not enough detailed information to work
with in these.

I'm still trying to work out how isr and tasklets work together and how
the locking works within them. I don't have experience with device
drivers since file systems are more my area, actually more the VFS than
anything, necessarily, as I'm the autofs maintainer, ;)

 
 Thanks
 David
 
 -Original Message-
 From: Ian Kent [mailto:ra...@themaw.net] 
 Sent: Tuesday, January 13, 2015 10:41 AM
 To: David Lin
 Cc: Jiri Pirko; openwrt-devel@lists.openwrt.org; Imre Kaloz
 Subject: Re: [OpenWrt-Devel] Announcement of mac80211 driver support for 
 Marvell 88W8864 chip
 
 Hi David,
 
 Please forgive the top posting.
 
 I don't think that the kernel programming style guidelines recommend against 
 it and I also don't know if checkpatch.pl will complain about it but 
 personally I find the additional blank lines in things like the below 
 actually make the code harder to read:
 
 struct hostcmd_header {
 
 u16 cmd;
 u16 len;
 u8 seq_num;
 u8 macid;
 u16 result;
 
 } __packed;
 
 and 
 if ((conf-chandef.width == NL80211_CHAN_WIDTH_20_NOHT) ||
 (conf-chandef.width == NL80211_CHAN_WIDTH_20)) {
 
 width = CH_20_MHz_WIDTH;
 sub_ch = NO_EXT_CHANNEL;
 
 } else if (conf-chandef.width == NL80211_CHAN_WIDTH_40) {
 
 Certainly we all have own own preferences about what is more readable for 
 ourselves but please re-consider whether this really does aid readability.
 
 One other thing to consider about using checkpatch.pl is that the changes it 
 reports are strongly recommended to be made, based on the kernel coding style 
 guide, but if you feel strongly about some of the needed changes you can try 
 and make a case for what you believe aids readability more so than the 
 recommended changes.
 
 It might not be my place to ask but I'm having some problems with the driver. 
 I've started to become familiar with the code and, after a while, may have 
 some questions. This is likely to be a little tedious for you since mac80211 
 and wireless is not my area in the kernel. 
 
 Would you mind discussing them here on the list or would you rather me wait 
 for the next update (don't feel obligated, I'll survive)?
 
 Ian
 
 On Sun, 2015-01-11 at 19:46 -0800, David Lin wrote:
  Hi Jiri,
  
  It is always nice to include all needed headers in all .c files. For 
  example when you use skb_queue_head_init please include linux/skbuff.h
  Spotted a comment typo in mwl_fwdl.c:
  This file implements frimware downloa related functions
  MODULE_ macros are usually placed by the end of file.
  
  -- Modifications should be included in next release.
  
  Drop comments like:
  /* PRIVATE FUNCTION DEFINITION
  */
  Not needed.
  
  -- Unless it is really forbidden, I will keep this comment.
  
  I would suggest you to develop your driver inside net-next git:
  http://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/
  That would save you time during potential forward port need.
  Also, if you use scripts/checkpatch.pl script to check your patches, it 
  will reveal many problems to you. The obvious one is lines longer than 80 
  chars.
  Module parameters should be always avoided if possible.
  I suggest you make patch against net-next and send it on 
  linux-wirel...@vger.kernel.org and net...@vger.kernel.org mailing lists.
  You will get much more reviewers there.
  
  -- After major problems reported from community are fixed, I will try 
  to apply patch against net-next as suggested by you. Lines longer than 80 
  chars and avoiding module parameters would be checked at that time.
  
  Note: Once if a version is ready for release, I will add patch to 
  https://github.com/kaloz/mwlwifi.
  
  Regards
  David
  
  -Original Message-
  From: Jiri Pirko [mailto:j...@resnulli.us]
  Sent: Thursday, January 01, 2015 2:55 AM
  To: David Lin
  Cc: openwrt-devel@lists.openwrt.org; Imre Kaloz
  Subject: Re: [OpenWrt-Devel] Announcement of mac80211 driver support 
  for Marvell 88W8864 chip
  
  Wed, Dec 24, 2014 at 05:04:29PM CET, d...@marvell.com wrote:
  Hi all,
  
  
  
  Marvell is pleased to announce this open source driver for the 88W8864 
  chip as a joint effort with Linksys.  The 88W8864 features 4x4 MIMO 
  3-spatial Stream Dual-band 802.11ac enabling 1.3Gbps WLAN PHY rate and 
  support for 80/40/20 MHz channel bandwidths. The 88W8864 is used in the 
  Linksys WRT1900AC and other products.
  
  
  
  Please note 

Re: [OpenWrt-Devel] [PATCH] [mvebu] WRT1900AC set default switch config

2015-01-12 Thread mark milburn
Oops.  forgot to --signoff.  resubmitting.

On Mon, Jan 12, 2015 at 6:15 PM, Mark Milburn mark.a.milb...@gmail.com wrote:
 Set the default configuration for the switch so that is consistent with how it
 was configured by u-Boot.  These changes are essentially identical to:
 https://dev.openwrt.org/browser/trunk/target/linux/kirkwood/base-files/etc/uci-defaults/02_network?rev=43750
 ---
  .../linux/mvebu/base-files/etc/uci-defaults/02_network   | 16 
 
  1 file changed, 16 insertions(+)

 diff --git a/target/linux/mvebu/base-files/etc/uci-defaults/02_network 
 b/target/linux/mvebu/base-files/etc/uci-defaults/02_network
 index 8b1ed6a..a17b239 100644
 --- a/target/linux/mvebu/base-files/etc/uci-defaults/02_network
 +++ b/target/linux/mvebu/base-files/etc/uci-defaults/02_network
 @@ -7,6 +7,19 @@

  touch /etc/config/network

 +add_port_based_vlan() {
 +local device=$1
 +   local vlan=$2
 +   local ports=$3
 +   uci batch EOF
 +add network switch_vlan
 +set network.@switch_vlan[-1].device='$device'
 +set network.@switch_vlan[-1].vlan='$vlan'
 +set network.@switch_vlan[-1].ports='$ports'
 +set network.@switch_vlan[-1].port_based='1'
 +EOF
 +}
 +
  . /lib/functions/uci-defaults.sh
  . /lib/mvebu.sh

 @@ -17,6 +30,9 @@ board=$(mvebu_board_name)
  case $board in
  armada-xp-mamba)
 ucidef_set_interfaces_lan_wan eth0 eth1
 +   ucidef_add_switch switch0 1 0
 +   add_port_based_vlan switch0 1 0 1 2 3 5
 +   add_port_based_vlan switch0 2 4 6
 ;;

  *)
 --
 2.2.1

___
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


Re: [OpenWrt-Devel] Announcement of mac80211 driver support for Marvell 88W8864 chip

2015-01-12 Thread David Lin
Hi Ian,

1. I will take off these additional blank lines.
2. I work for problems reported from community. If you do find problems 
for the driver, please let me know.

Thanks
David

-Original Message-
From: Ian Kent [mailto:ra...@themaw.net] 
Sent: Tuesday, January 13, 2015 10:41 AM
To: David Lin
Cc: Jiri Pirko; openwrt-devel@lists.openwrt.org; Imre Kaloz
Subject: Re: [OpenWrt-Devel] Announcement of mac80211 driver support for 
Marvell 88W8864 chip

Hi David,

Please forgive the top posting.

I don't think that the kernel programming style guidelines recommend against it 
and I also don't know if checkpatch.pl will complain about it but personally I 
find the additional blank lines in things like the below actually make the code 
harder to read:

struct hostcmd_header {

u16 cmd;
u16 len;
u8 seq_num;
u8 macid;
u16 result;

} __packed;

and 
if ((conf-chandef.width == NL80211_CHAN_WIDTH_20_NOHT) ||
(conf-chandef.width == NL80211_CHAN_WIDTH_20)) {

width = CH_20_MHz_WIDTH;
sub_ch = NO_EXT_CHANNEL;

} else if (conf-chandef.width == NL80211_CHAN_WIDTH_40) {

Certainly we all have own own preferences about what is more readable for 
ourselves but please re-consider whether this really does aid readability.

One other thing to consider about using checkpatch.pl is that the changes it 
reports are strongly recommended to be made, based on the kernel coding style 
guide, but if you feel strongly about some of the needed changes you can try 
and make a case for what you believe aids readability more so than the 
recommended changes.

It might not be my place to ask but I'm having some problems with the driver. 
I've started to become familiar with the code and, after a while, may have some 
questions. This is likely to be a little tedious for you since mac80211 and 
wireless is not my area in the kernel. 

Would you mind discussing them here on the list or would you rather me wait for 
the next update (don't feel obligated, I'll survive)?

Ian

On Sun, 2015-01-11 at 19:46 -0800, David Lin wrote:
 Hi Jiri,
 
   It is always nice to include all needed headers in all .c files. For 
 example when you use skb_queue_head_init please include linux/skbuff.h
   Spotted a comment typo in mwl_fwdl.c:
   This file implements frimware downloa related functions
   MODULE_ macros are usually placed by the end of file.
 
   -- Modifications should be included in next release.
 
   Drop comments like:
   /* PRIVATE FUNCTION DEFINITION
   */
   Not needed.
 
   -- Unless it is really forbidden, I will keep this comment.
 
   I would suggest you to develop your driver inside net-next git:
   http://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/
   That would save you time during potential forward port need.
   Also, if you use scripts/checkpatch.pl script to check your patches, it 
 will reveal many problems to you. The obvious one is lines longer than 80 
 chars.
   Module parameters should be always avoided if possible.
   I suggest you make patch against net-next and send it on 
 linux-wirel...@vger.kernel.org and net...@vger.kernel.org mailing lists.
   You will get much more reviewers there.
 
   -- After major problems reported from community are fixed, I will try 
 to apply patch against net-next as suggested by you. Lines longer than 80 
 chars and avoiding module parameters would be checked at that time.
 
   Note: Once if a version is ready for release, I will add patch to 
 https://github.com/kaloz/mwlwifi.
 
 Regards
 David
 
 -Original Message-
 From: Jiri Pirko [mailto:j...@resnulli.us]
 Sent: Thursday, January 01, 2015 2:55 AM
 To: David Lin
 Cc: openwrt-devel@lists.openwrt.org; Imre Kaloz
 Subject: Re: [OpenWrt-Devel] Announcement of mac80211 driver support 
 for Marvell 88W8864 chip
 
 Wed, Dec 24, 2014 at 05:04:29PM CET, d...@marvell.com wrote:
 Hi all,
 
 
 
 Marvell is pleased to announce this open source driver for the 88W8864 chip 
 as a joint effort with Linksys.  The 88W8864 features 4x4 MIMO 3-spatial 
 Stream Dual-band 802.11ac enabling 1.3Gbps WLAN PHY rate and support for 
 80/40/20 MHz channel bandwidths. The 88W8864 is used in the Linksys 
 WRT1900AC and other products.
 
 
 
 Please note that this is an initial release and we plan to send the driver 
 upstream after cleanup.
 
 
 
 We do appreciate your feedback and look forward to serving the community 
 with exciting new offerings in the future!
 
 
 Hi.
 
 I took a very quick peek at the sources you sent.
 
 First I would like to thank you for taking the upstream way with this.
 Much appreciated.
 
 I would suggest you to develop your driver inside net-next git:
 http://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/
 
 That would save you time during potential forward port need.
 
 Also, if you use scripts/checkpatch.pl 

[OpenWrt-Devel] [PATCH] [mvebu] WRT1900AC set default switch config

2015-01-12 Thread Mark Milburn
Set the default configuration for the switch so that is consistent with how it
was configured by u-Boot.  These changes are essentially identical to:
https://dev.openwrt.org/browser/trunk/target/linux/kirkwood/base-files/etc/uci-defaults/02_network?rev=43750
---
 .../linux/mvebu/base-files/etc/uci-defaults/02_network   | 16 
 1 file changed, 16 insertions(+)

diff --git a/target/linux/mvebu/base-files/etc/uci-defaults/02_network 
b/target/linux/mvebu/base-files/etc/uci-defaults/02_network
index 8b1ed6a..a17b239 100644
--- a/target/linux/mvebu/base-files/etc/uci-defaults/02_network
+++ b/target/linux/mvebu/base-files/etc/uci-defaults/02_network
@@ -7,6 +7,19 @@
 
 touch /etc/config/network
 
+add_port_based_vlan() {
+local device=$1
+   local vlan=$2
+   local ports=$3
+   uci batch EOF
+add network switch_vlan
+set network.@switch_vlan[-1].device='$device'
+set network.@switch_vlan[-1].vlan='$vlan'
+set network.@switch_vlan[-1].ports='$ports'
+set network.@switch_vlan[-1].port_based='1'
+EOF
+}
+
 . /lib/functions/uci-defaults.sh
 . /lib/mvebu.sh
 
@@ -17,6 +30,9 @@ board=$(mvebu_board_name)
 case $board in
 armada-xp-mamba)
ucidef_set_interfaces_lan_wan eth0 eth1
+   ucidef_add_switch switch0 1 0
+   add_port_based_vlan switch0 1 0 1 2 3 5
+   add_port_based_vlan switch0 2 4 6
;;
 
 *)
-- 
2.2.1
___
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


[OpenWrt-Devel] [PATCH] [mvebu] WRT1900AC set default switch config

2015-01-12 Thread Mark Milburn
Set the default configuration for the switch so that is consistent with how it
was configured by u-Boot.  These changes are essentially identical to:
https://dev.openwrt.org/browser/trunk/target/linux/kirkwood/base-files/etc/uci-defaults/02_network?rev=43750

Signed-off-by: Mark Milburn mark.a.milb...@gmail.com
---
 .../linux/mvebu/base-files/etc/uci-defaults/02_network   | 16 
 1 file changed, 16 insertions(+)

diff --git a/target/linux/mvebu/base-files/etc/uci-defaults/02_network 
b/target/linux/mvebu/base-files/etc/uci-defaults/02_network
index 8b1ed6a..a17b239 100644
--- a/target/linux/mvebu/base-files/etc/uci-defaults/02_network
+++ b/target/linux/mvebu/base-files/etc/uci-defaults/02_network
@@ -7,6 +7,19 @@
 
 touch /etc/config/network
 
+add_port_based_vlan() {
+local device=$1
+   local vlan=$2
+   local ports=$3
+   uci batch EOF
+add network switch_vlan
+set network.@switch_vlan[-1].device='$device'
+set network.@switch_vlan[-1].vlan='$vlan'
+set network.@switch_vlan[-1].ports='$ports'
+set network.@switch_vlan[-1].port_based='1'
+EOF
+}
+
 . /lib/functions/uci-defaults.sh
 . /lib/mvebu.sh
 
@@ -17,6 +30,9 @@ board=$(mvebu_board_name)
 case $board in
 armada-xp-mamba)
ucidef_set_interfaces_lan_wan eth0 eth1
+   ucidef_add_switch switch0 1 0
+   add_port_based_vlan switch0 1 0 1 2 3 5
+   add_port_based_vlan switch0 2 4 6
;;
 
 *)
-- 
2.2.1
___
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


Re: [OpenWrt-Devel] Announcement of mac80211 driver support for Marvell 88W8864 chip

2015-01-12 Thread Ian Kent
Hi David,

Please forgive the top posting.

I don't think that the kernel programming style guidelines recommend
against it and I also don't know if checkpatch.pl will complain about it
but personally I find the additional blank lines in things like the
below actually make the code harder to read:

struct hostcmd_header {

u16 cmd;
u16 len;
u8 seq_num;
u8 macid;
u16 result;

} __packed;

and 
if ((conf-chandef.width == NL80211_CHAN_WIDTH_20_NOHT) ||
(conf-chandef.width == NL80211_CHAN_WIDTH_20)) {

width = CH_20_MHz_WIDTH;
sub_ch = NO_EXT_CHANNEL;

} else if (conf-chandef.width == NL80211_CHAN_WIDTH_40) {

Certainly we all have own own preferences about what is more readable
for ourselves but please re-consider whether this really does aid
readability.

One other thing to consider about using checkpatch.pl is that the
changes it reports are strongly recommended to be made, based on the
kernel coding style guide, but if you feel strongly about some of the
needed changes you can try and make a case for what you believe aids
readability more so than the recommended changes.

It might not be my place to ask but I'm having some problems with the
driver. I've started to become familiar with the code and, after a
while, may have some questions. This is likely to be a little tedious
for you since mac80211 and wireless is not my area in the kernel. 

Would you mind discussing them here on the list or would you rather me
wait for the next update (don't feel obligated, I'll survive)?

Ian

On Sun, 2015-01-11 at 19:46 -0800, David Lin wrote:
 Hi Jiri,
 
   It is always nice to include all needed headers in all .c files. For 
 example when you use skb_queue_head_init please include linux/skbuff.h
   Spotted a comment typo in mwl_fwdl.c:
   This file implements frimware downloa related functions
   MODULE_ macros are usually placed by the end of file.
 
   -- Modifications should be included in next release.
 
   Drop comments like:
   /* PRIVATE FUNCTION DEFINITION
   */
   Not needed.
 
   -- Unless it is really forbidden, I will keep this comment.
 
   I would suggest you to develop your driver inside net-next git:
   http://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/
   That would save you time during potential forward port need.
   Also, if you use scripts/checkpatch.pl script to check your patches, it 
 will reveal many problems to you. The obvious one is lines longer than 80 
 chars.
   Module parameters should be always avoided if possible.
   I suggest you make patch against net-next and send it on 
 linux-wirel...@vger.kernel.org and net...@vger.kernel.org mailing lists.
   You will get much more reviewers there.
 
   -- After major problems reported from community are fixed, I will try 
 to apply patch against net-next as suggested by you. Lines longer than 80 
 chars and avoiding module parameters would be checked at that time.
 
   Note: Once if a version is ready for release, I will add patch to 
 https://github.com/kaloz/mwlwifi.
 
 Regards
 David
 
 -Original Message-
 From: Jiri Pirko [mailto:j...@resnulli.us] 
 Sent: Thursday, January 01, 2015 2:55 AM
 To: David Lin
 Cc: openwrt-devel@lists.openwrt.org; Imre Kaloz
 Subject: Re: [OpenWrt-Devel] Announcement of mac80211 driver support for 
 Marvell 88W8864 chip
 
 Wed, Dec 24, 2014 at 05:04:29PM CET, d...@marvell.com wrote:
 Hi all,
 
 
 
 Marvell is pleased to announce this open source driver for the 88W8864 chip 
 as a joint effort with Linksys.  The 88W8864 features 4x4 MIMO 3-spatial 
 Stream Dual-band 802.11ac enabling 1.3Gbps WLAN PHY rate and support for 
 80/40/20 MHz channel bandwidths. The 88W8864 is used in the Linksys 
 WRT1900AC and other products.
 
 
 
 Please note that this is an initial release and we plan to send the driver 
 upstream after cleanup.
 
 
 
 We do appreciate your feedback and look forward to serving the community 
 with exciting new offerings in the future!
 
 
 Hi.
 
 I took a very quick peek at the sources you sent.
 
 First I would like to thank you for taking the upstream way with this.
 Much appreciated.
 
 I would suggest you to develop your driver inside net-next git:
 http://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/
 
 That would save you time during potential forward port need.
 
 Also, if you use scripts/checkpatch.pl script to check your patches, it will 
 reveal many problems to you. The obvious one is lines longer than 80 chars.
 
 It is always nice to include all needed headers in all .c files. For example 
 when you use skb_queue_head_init please include linux/skbuff.h
 
 Spotted a comment typo in mwl_fwdl.c:
 This file implements frimware downloa related functions
 
 Drop comments like:
 /* PRIVATE FUNCTION DEFINITION
 */
 Not needed.
 
 MODULE_ macros are usually placed by the end of file.
 
 

[OpenWrt-Devel] ddns-scripts 2.0.1-1 breaks freedns.afraid.org?

2015-01-12 Thread Catalin Patulea
Hi Christian,

I use ddns-scripts with freedns.afraid.org. Here is the service line for it:

#freedns.afraid.org is weird, you just need an update code, for which
we use the password variable
freedns.afraid.org
http://freedns.afraid.org/dynamic/update.php?[PASSWORD]address=[IP];

So I was leaving the username option empty and setting password to
the update code. This worked fine. But since 07d3672d, ddns-scripts
now checks that $password is set and fails like this:

Tue Jan 13 00:17:30 2015 user.warn ddns-scripts[3685]: myddns: Service
section not correctly configured! - TERMINATE

Due to this line I think:
https://github.com/openwrt/packages/blob/master/net/ddns-scripts/files/usr/lib/ddns/dynamic_dns_updater.sh#L161

What do you think? Should the check be relaxed?

I can work around it by setting 'username' to an ignored value.. but
that seems ugly.

Catalin
___
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


[OpenWrt-Devel] ddns-scripts sleep 10 before updating?

2015-01-12 Thread Catalin Patulea
Hi Christian, curious about something else..

In dynamic_dns_updater.sh there's a sleep 10:
# we need time here because hotplug.d is fired by netifd
# but IP addresses are not set by DHCP/DHCPv6 etc.
write_log 7 Waiting 10 seconds for interfaces to fully come up
sleep 10 
PID_SLEEP=$!
wait $PID_SLEEP # enable trap-handler
PID_SLEEP=0

https://github.com/openwrt/packages/blob/master/net/ddns-scripts/files/usr/lib/ddns/dynamic_dns_updater.sh#L218

But on my system (trunk r43888) it seems when ifup event comes,
address is already set:

Tue Jan 13 00:46:59 2015 kern.info kernel: [ 2621.36] eth1: link
up (1000Mbps/Full duplex)
Tue Jan 13 00:46:59 2015 daemon.notice netifd: Network device 'eth1' link is up
Tue Jan 13 00:46:59 2015 daemon.notice netifd: Interface 'wan' has
link connectivity
Tue Jan 13 00:46:59 2015 daemon.notice netifd: Interface 'wan' is setting up now
Tue Jan 13 00:46:59 2015 daemon.notice netifd: wan (9426): udhcpc
(v1.22.1) started
Tue Jan 13 00:46:59 2015 daemon.notice netifd: wan (9426): Sending discover...
Tue Jan 13 00:46:59 2015 daemon.notice netifd: wan (9426): Sending
select for 198.48.205.121...
Tue Jan 13 00:46:59 2015 daemon.notice netifd: wan (9426): Lease of
198.48.205.121 obtained, lease time 69146
Tue Jan 13 00:46:59 2015 daemon.notice netifd: Interface 'wan6' is
setting up now
Tue Jan 13 00:46:59 2015 daemon.notice netifd: Interface 'wan' is now up
Tue Jan 13 00:47:00 2015 user.notice root: hotplug iface: DEVICE=eth1
ACTION=ifup
Tue Jan 13 00:47:00 2015 user.notice root: 3: eth1:
BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc tbf state UP group
default qlen 1000
Tue Jan 13 00:47:00 2015 user.notice root: link/ether
10:6f:3f:e7:00:b6 brd ff:ff:ff:ff:ff:ff
Tue Jan 13 00:47:00 2015 user.notice root: inet 198.48.205.121/27
brd 198.48.205.127 scope global eth1
Tue Jan 13 00:47:00 2015 user.notice root:valid_lft forever
preferred_lft forever
Tue Jan 13 00:47:00 2015 user.notice root: inet6
fe80::126f:3fff:fee7:b6/64 scope link
Tue Jan 13 00:47:00 2015 user.notice root:valid_lft forever
preferred_lft forever

I added those last few lines using a debug script in
/etc/hotplug.d/iface to see what the state of the interface was.

It would be cool not to sleep I think, so the update happens as soon
as the interface gets an address.

Looking at netifd/DESIGN it says:

Interfaces
--
[...]
state:
  IFS_SETUP:
The interface is currently being configured by the protocol handler
  IFS_UP:
The interface is fully configured

and the scripts in /etc/hotplug.d/iface are called only for IFS_UP, so
I think this behaviour is reliable.

In what case did you see the need for a sleep 10?

Catalin
___
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


[OpenWrt-Devel] hostapd disconnects with Apple devices.

2015-01-12 Thread Mikko Hissa
Hi everyone,

If I recall correctly, since June/July 2014, Apple devices get constantly 
disconnected from AP.
A simple fix is to disable hostapd's disassoc_low_ack. I saw this behaviour on 
iPads, iPhones, MacBooks, iMacs etc.
Should the default setting be altered?

Best regards,
Mikko
___
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel