diff --git a/modules b/modules index 0a18aa008ba83cf823a391fe86892bc593c8fe00..96b78b1d111ffca2c6e78fe2fe954fb3883cf85d 100644 --- a/modules +++ b/modules @@ -2,11 +2,11 @@ GLUON_FEEDS='packages routing gluon' OPENWRT_REPO=https://github.com/openwrt/openwrt.git OPENWRT_BRANCH=openwrt-23.05 -OPENWRT_COMMIT=cdc8470aecd03e6994714af092f030f209951de4 +OPENWRT_COMMIT=f4e4943d1ab6e38e3fcfc611d2665d5077a479b6 PACKAGES_PACKAGES_REPO=https://github.com/openwrt/packages.git PACKAGES_PACKAGES_BRANCH=openwrt-23.05 -PACKAGES_PACKAGES_COMMIT=c92b5ece1620b30b577b5bc4b2216c8113ec13c1 +PACKAGES_PACKAGES_COMMIT=6526d607db81feb99bfa58e0be11e9b3a0c00cd9 PACKAGES_ROUTING_REPO=https://github.com/openwrt/routing.git PACKAGES_ROUTING_BRANCH=openwrt-23.05 diff --git a/patches/openwrt/0005-kernel-bridge-Implement-MLD-Querier-wake-up-calls-Android-bug-workaround.patch b/patches/openwrt/0005-kernel-bridge-Implement-MLD-Querier-wake-up-calls-Android-bug-workaround.patch index 487d4a9e36e90c03c4c4ae827bf78dea44585aa7..862c5241843de21d5c2f8bb44ad68fe8788873ef 100644 --- a/patches/openwrt/0005-kernel-bridge-Implement-MLD-Querier-wake-up-calls-Android-bug-workaround.patch +++ b/patches/openwrt/0005-kernel-bridge-Implement-MLD-Querier-wake-up-calls-Android-bug-workaround.patch @@ -27,10 +27,10 @@ Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue> diff --git a/package/network/config/netifd/patches/0001-bridge-Add-multicast_wakeupcall-option.patch b/package/network/config/netifd/patches/0001-bridge-Add-multicast_wakeupcall-option.patch new file mode 100644 -index 0000000000000000000000000000000000000000..a00a60d63d37d94cbba116eaa0f9640683ae7fa9 +index 0000000000000000000000000000000000000000..c9e3a2d4e4420387ae48cc5828d4284f2a987c3d --- /dev/null +++ b/package/network/config/netifd/patches/0001-bridge-Add-multicast_wakeupcall-option.patch -@@ -0,0 +1,151 @@ +@@ -0,0 +1,199 @@ +From d23a49e6542dc068b12fbc7b6a4520f9fb3626f9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Linus=20L=C3=BCssing?= <linus.luessing@c0d3.blue> +Date: Sun, 5 Jul 2020 23:33:51 +0200 @@ -70,11 +70,9 @@ index 0000000000000000000000000000000000000000..a00a60d63d37d94cbba116eaa0f96406 + system-linux.c | 13 +++++++++++++ + 3 files changed, 25 insertions(+) + -+diff --git a/device.c b/device.c -+index 1e892191d0ec..67111895b0f9 100644 +--- a/device.c ++++ b/device.c -+@@ -47,6 +47,7 @@ static const struct blobmsg_policy dev_attrs[__DEV_ATTR_MAX] = { ++@@ -47,6 +47,7 @@ static const struct blobmsg_policy dev_a + [DEV_ATTR_NEIGHGCSTALETIME] = { .name = "neighgcstaletime", .type = BLOBMSG_TYPE_INT32 }, + [DEV_ATTR_DADTRANSMITS] = { .name = "dadtransmits", .type = BLOBMSG_TYPE_INT32 }, + [DEV_ATTR_MULTICAST_TO_UNICAST] = { .name = "multicast_to_unicast", .type = BLOBMSG_TYPE_BOOL }, @@ -82,7 +80,7 @@ index 0000000000000000000000000000000000000000..a00a60d63d37d94cbba116eaa0f96406 + [DEV_ATTR_MULTICAST_ROUTER] = { .name = "multicast_router", .type = BLOBMSG_TYPE_INT32 }, + [DEV_ATTR_MULTICAST_FAST_LEAVE] = { .name = "multicast_fast_leave", . type = BLOBMSG_TYPE_BOOL }, + [DEV_ATTR_MULTICAST] = { .name ="multicast", .type = BLOBMSG_TYPE_BOOL }, -+@@ -261,6 +262,7 @@ device_merge_settings(struct device *dev, struct device_settings *n) ++@@ -267,6 +268,7 @@ device_merge_settings(struct device *dev + n->multicast = s->flags & DEV_OPT_MULTICAST ? + s->multicast : os->multicast; + n->multicast_to_unicast = s->multicast_to_unicast; @@ -90,7 +88,7 @@ index 0000000000000000000000000000000000000000..a00a60d63d37d94cbba116eaa0f96406 + n->multicast_router = s->multicast_router; + n->multicast_fast_leave = s->multicast_fast_leave; + n->learning = s->learning; -+@@ -386,6 +388,11 @@ device_init_settings(struct device *dev, struct blob_attr **tb) ++@@ -438,6 +440,11 @@ device_init_settings(struct device *dev, + s->flags |= DEV_OPT_MULTICAST_TO_UNICAST; + } + @@ -102,7 +100,7 @@ index 0000000000000000000000000000000000000000..a00a60d63d37d94cbba116eaa0f96406 + if ((cur = tb[DEV_ATTR_MULTICAST_ROUTER])) { + s->multicast_router = blobmsg_get_u32(cur); + if (s->multicast_router <= 2) -+@@ -1203,6 +1210,8 @@ device_dump_status(struct blob_buf *b, struct device *dev) ++@@ -1281,6 +1288,8 @@ device_dump_status(struct blob_buf *b, s + blobmsg_add_u32(b, "dadtransmits", st.dadtransmits); + if (st.flags & DEV_OPT_MULTICAST_TO_UNICAST) + blobmsg_add_u8(b, "multicast_to_unicast", st.multicast_to_unicast); @@ -111,8 +109,6 @@ index 0000000000000000000000000000000000000000..a00a60d63d37d94cbba116eaa0f96406 + if (st.flags & DEV_OPT_MULTICAST_ROUTER) + blobmsg_add_u32(b, "multicast_router", st.multicast_router); + if (st.flags & DEV_OPT_MULTICAST_FAST_LEAVE) -+diff --git a/device.h b/device.h -+index 6751628b9b33..41583ac3da4f 100644 +--- a/device.h ++++ b/device.h +@@ -44,6 +44,7 @@ enum { @@ -123,15 +119,15 @@ index 0000000000000000000000000000000000000000..a00a60d63d37d94cbba116eaa0f96406 + DEV_ATTR_MULTICAST_ROUTER, + DEV_ATTR_MULTICAST_FAST_LEAVE, + DEV_ATTR_MULTICAST, -+@@ -126,6 +127,7 @@ enum { -+ DEV_OPT_ARP_ACCEPT = (1ULL << 29), -+ DEV_OPT_SPEED = (1ULL << 30), -+ DEV_OPT_DUPLEX = (1ULL << 31), -++ DEV_OPT_MULTICAST_WAKEUPCALL = (1ULL << 63), ++@@ -137,6 +138,7 @@ enum { ++ DEV_OPT_RXPAUSE = (1ULL << 34), ++ DEV_OPT_TXPAUSE = (1ULL << 35), ++ DEV_OPT_AUTONEG = (1ULL << 36), +++ DEV_OPT_MULTICAST_WAKEUPCALL = (1ULL << 63) + }; + + /* events broadcasted to all users of a device */ -+@@ -187,6 +189,7 @@ struct device_settings { ++@@ -198,6 +200,7 @@ struct device_settings { + int neigh4locktime; + unsigned int dadtransmits; + bool multicast_to_unicast; @@ -139,11 +135,9 @@ index 0000000000000000000000000000000000000000..a00a60d63d37d94cbba116eaa0f96406 + unsigned int multicast_router; + bool multicast_fast_leave; + bool multicast; -+diff --git a/system-linux.c b/system-linux.c -+index cc15537ba3ad..5148a7eacce0 100644 +--- a/system-linux.c ++++ b/system-linux.c -+@@ -534,6 +534,11 @@ static void system_bridge_set_multicast_to_unicast(struct device *dev, const cha ++@@ -536,6 +536,11 @@ static void system_bridge_set_multicast_ + system_set_dev_sysfs("brport/multicast_to_unicast", dev->ifname, val); + } + @@ -155,7 +149,7 @@ index 0000000000000000000000000000000000000000..a00a60d63d37d94cbba116eaa0f96406 + static void system_bridge_set_multicast_fast_leave(struct device *dev, const char *val) + { + system_set_dev_sysfs("brport/multicast_fast_leave", dev->ifname, val); -+@@ -913,8 +918,10 @@ static char *system_get_bridge(const char *name, char *buf, int buflen) ++@@ -915,8 +920,10 @@ static char *system_get_bridge(const cha + static void + system_bridge_set_wireless(struct device *bridge, struct device *dev) + { @@ -166,7 +160,7 @@ index 0000000000000000000000000000000000000000..a00a60d63d37d94cbba116eaa0f96406 + + if (dev->settings.flags & DEV_OPT_MULTICAST_TO_UNICAST) + mcast_to_ucast = dev->settings.multicast_to_unicast; -+@@ -929,6 +936,12 @@ system_bridge_set_wireless(struct device *bridge, struct device *dev) ++@@ -931,6 +938,12 @@ system_bridge_set_wireless(struct device + system_bridge_set_multicast_to_unicast(dev, mcast_to_ucast ? "1" : "0"); + system_bridge_set_hairpin_mode(dev, hairpin ? "1" : "0"); + system_bridge_set_proxyarp_wifi(dev, dev->wireless_proxyarp ? "1" : "0"); @@ -179,11 +173,65 @@ index 0000000000000000000000000000000000000000..a00a60d63d37d94cbba116eaa0f96406 + } + + int system_bridge_addif(struct device *bridge, struct device *dev) -+-- -+2.40.1 -+ ++--- a/interface.c +++++ b/interface.c ++@@ -1248,7 +1248,7 @@ interface_device_config_changed(struct i ++ struct blob_attr *ntb[__DEV_ATTR_MAX]; ++ struct blob_attr *otb[__DEV_ATTR_MAX]; ++ struct device *dev = if_old->main_dev.dev; ++- unsigned long diff = 0; +++ unsigned long diff[2] = {}; ++ ++ BUILD_BUG_ON(sizeof(diff) < __DEV_ATTR_MAX / 8); ++ ++@@ -1267,8 +1267,8 @@ interface_device_config_changed(struct i ++ blobmsg_parse(device_attr_list.params, __DEV_ATTR_MAX, ntb, ++ blob_data(if_new->config), blob_len(if_new->config)); ++ ++- uci_blob_diff(ntb, otb, &device_attr_list, &diff); ++- return diff; +++ uci_blob_diff(ntb, otb, &device_attr_list, diff); +++ return diff[0] | diff[1]; ++ } ++ ++ static void ++--- a/bonding.c +++++ b/bonding.c ++@@ -442,7 +442,7 @@ bonding_reload(struct device *dev, struc ++ struct blob_attr *tb_dev[__DEV_ATTR_MAX]; ++ struct blob_attr *tb_b[__BOND_ATTR_MAX]; ++ enum dev_change_type ret = DEV_CONFIG_APPLIED; ++- unsigned long diff; +++ unsigned long diff[2]; ++ struct bonding_device *bdev; ++ ++ BUILD_BUG_ON(sizeof(diff) < __BOND_ATTR_MAX / 8); ++@@ -472,17 +472,17 @@ bonding_reload(struct device *dev, struc ++ blobmsg_parse(device_attr_list.params, __DEV_ATTR_MAX, otb_dev, ++ blob_data(bdev->config_data), blob_len(bdev->config_data)); ++ ++- diff = 0; ++- uci_blob_diff(tb_dev, otb_dev, &device_attr_list, &diff); ++- if (diff) +++ diff[0] = diff[1] = 0; +++ uci_blob_diff(tb_dev, otb_dev, &device_attr_list, diff); +++ if (diff[0] | diff[1]) ++ ret = DEV_CONFIG_RESTART; ++ ++ blobmsg_parse(bonding_attrs, __BOND_ATTR_MAX, otb_b, ++ blob_data(bdev->config_data), blob_len(bdev->config_data)); ++ ++- diff = 0; ++- uci_blob_diff(tb_b, otb_b, &bonding_attr_list, &diff); ++- if (diff & ~(1 << BOND_ATTR_PORTS)) +++ diff[0] = diff[1] = 0; +++ uci_blob_diff(tb_b, otb_b, &bonding_attr_list, diff); +++ if (diff[0] & ~(1 << BOND_ATTR_PORTS)) ++ ret = DEV_CONFIG_RESTART; ++ ++ bonding_config_init(dev); diff --git a/target/linux/generic/config-5.15 b/target/linux/generic/config-5.15 -index 6f28147ee3a0af3611fc108d0534207a4334a6de..476f0d1a6a3c3da1458d71b53214d27a276a1fcc 100644 +index 214a1e6ecd83c067b96cb55ad052ae00b82fa8b5..bf6709ae2dbb87a21659558161d4882befd88b49 100644 --- a/target/linux/generic/config-5.15 +++ b/target/linux/generic/config-5.15 @@ -761,6 +761,7 @@ CONFIG_BRIDGE=y