mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-16 14:23:38 +00:00
x64: improve docker support
This commit is contained in:
parent
d452feca3a
commit
101c974800
@ -203,7 +203,7 @@ define Image/mkfs/squashfs
|
|||||||
$(STAGING_DIR_HOST)/bin/mksquashfs4 $(call mkfs_target_dir,$(1)) $@ \
|
$(STAGING_DIR_HOST)/bin/mksquashfs4 $(call mkfs_target_dir,$(1)) $@ \
|
||||||
-nopad -noappend -root-owned \
|
-nopad -noappend -root-owned \
|
||||||
-comp $(SQUASHFSCOMP) $(SQUASHFSOPT) \
|
-comp $(SQUASHFSCOMP) $(SQUASHFSOPT) \
|
||||||
-processors 1 \
|
-processors 16 \
|
||||||
$(if $(SOURCE_DATE_EPOCH),-fixed-time $(SOURCE_DATE_EPOCH))
|
$(if $(SOURCE_DATE_EPOCH),-fixed-time $(SOURCE_DATE_EPOCH))
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
@ -0,0 +1,63 @@
|
|||||||
|
From 28b5c129ca6e585ec95c160ec4297bc6c6360b6f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Minas Harutyunyan <minas.harutyunyan@synopsys.com>
|
||||||
|
Date: Mon, 4 Mar 2019 17:08:07 +0400
|
||||||
|
Subject: usb: dwc2: Set lpm mode parameters depend on HW configuration
|
||||||
|
|
||||||
|
If core not supported lpm, i.e. BCM2835 then confusing warnings seen
|
||||||
|
in log.
|
||||||
|
|
||||||
|
To avoid these warnings, added function dwc2_set_param_lpm() to set
|
||||||
|
lpm and other lpm related parameters based on lpm support by core.
|
||||||
|
|
||||||
|
Signed-off-by: Minas Harutyunyan <hminas@synopsys.com>
|
||||||
|
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
|
||||||
|
---
|
||||||
|
drivers/usb/dwc2/params.c | 23 ++++++++++++++++++-----
|
||||||
|
1 file changed, 18 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/usb/dwc2/params.c
|
||||||
|
+++ b/drivers/usb/dwc2/params.c
|
||||||
|
@@ -272,6 +272,23 @@ static void dwc2_set_param_power_down(st
|
||||||
|
hsotg->params.power_down = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void dwc2_set_param_lpm(struct dwc2_hsotg *hsotg)
|
||||||
|
+{
|
||||||
|
+ struct dwc2_core_params *p = &hsotg->params;
|
||||||
|
+
|
||||||
|
+ p->lpm = hsotg->hw_params.lpm_mode;
|
||||||
|
+ if (p->lpm) {
|
||||||
|
+ p->lpm_clock_gating = true;
|
||||||
|
+ p->besl = true;
|
||||||
|
+ p->hird_threshold_en = true;
|
||||||
|
+ p->hird_threshold = 4;
|
||||||
|
+ } else {
|
||||||
|
+ p->lpm_clock_gating = false;
|
||||||
|
+ p->besl = false;
|
||||||
|
+ p->hird_threshold_en = false;
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* dwc2_set_default_params() - Set all core parameters to their
|
||||||
|
* auto-detected default values.
|
||||||
|
@@ -290,6 +307,7 @@ static void dwc2_set_default_params(stru
|
||||||
|
dwc2_set_param_speed(hsotg);
|
||||||
|
dwc2_set_param_phy_utmi_width(hsotg);
|
||||||
|
dwc2_set_param_power_down(hsotg);
|
||||||
|
+ dwc2_set_param_lpm(hsotg);
|
||||||
|
p->phy_ulpi_ddr = false;
|
||||||
|
p->phy_ulpi_ext_vbus = false;
|
||||||
|
|
||||||
|
@@ -302,11 +320,6 @@ static void dwc2_set_default_params(stru
|
||||||
|
p->reload_ctl = (hw->snpsid >= DWC2_CORE_REV_2_92a);
|
||||||
|
p->uframe_sched = true;
|
||||||
|
p->external_id_pin_ctl = false;
|
||||||
|
- p->lpm = true;
|
||||||
|
- p->lpm_clock_gating = true;
|
||||||
|
- p->besl = true;
|
||||||
|
- p->hird_threshold_en = true;
|
||||||
|
- p->hird_threshold = 4;
|
||||||
|
p->ipg_isoc_en = false;
|
||||||
|
p->max_packet_count = hw->max_packet_count;
|
||||||
|
p->max_transfer_size = hw->max_transfer_size;
|
@ -555,7 +555,7 @@ Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
|
|||||||
+{
|
+{
|
||||||
+ struct tc_action_net *tn = net_generic(net, ctinfo_net_id);
|
+ struct tc_action_net *tn = net_generic(net, ctinfo_net_id);
|
||||||
+
|
+
|
||||||
+ return tc_action_net_init(tn, &act_ctinfo_ops);
|
+ return tc_action_net_init(net, tn, &act_ctinfo_ops);
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+static void __net_exit ctinfo_exit_net(struct list_head *net_list)
|
+static void __net_exit ctinfo_exit_net(struct list_head *net_list)
|
||||||
|
@ -0,0 +1,25 @@
|
|||||||
|
From 81554171373018b83f3554b9e725d2b5bf1844a5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alexander Sverdlin <alexander.sverdlin@nokia.com>
|
||||||
|
Date: Fri, 13 Jul 2018 15:06:46 +0200
|
||||||
|
Subject: [PATCH] mtd: spi-nor: Add support for mx25u12835f
|
||||||
|
|
||||||
|
This chip supports dual and quad read and uniform 4K-byte erase.
|
||||||
|
|
||||||
|
Signed-off-by: Alexander Sverdlin <alexander.sverdlin@nokia.com>
|
||||||
|
Reviewed-by: Tudor Ambarus <tudor.ambarus@microchip.com>
|
||||||
|
Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com>
|
||||||
|
---
|
||||||
|
drivers/mtd/spi-nor/spi-nor.c | 2 ++
|
||||||
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/mtd/spi-nor/spi-nor.c
|
||||||
|
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
||||||
|
@@ -1088,6 +1088,8 @@ static const struct flash_info spi_nor_i
|
||||||
|
{ "mx25u6435f", INFO(0xc22537, 0, 64 * 1024, 128, SECT_4K) },
|
||||||
|
{ "mx25l12805d", INFO(0xc22018, 0, 64 * 1024, 256, 0) },
|
||||||
|
{ "mx25l12855e", INFO(0xc22618, 0, 64 * 1024, 256, 0) },
|
||||||
|
+ { "mx25u12835f", INFO(0xc22538, 0, 64 * 1024, 256,
|
||||||
|
+ SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
|
||||||
|
{ "mx25l25635e", INFO(0xc22019, 0, 64 * 1024, 512, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
|
||||||
|
{ "mx25u25635f", INFO(0xc22539, 0, 64 * 1024, 512, SECT_4K | SPI_NOR_4B_OPCODES) },
|
||||||
|
{ "mx25l25655e", INFO(0xc22619, 0, 64 * 1024, 512, 0) },
|
@ -1,79 +0,0 @@
|
|||||||
From 38a3549ffc0033761063cc5c7b994ab075694db8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Christian Lamparter <chunkeey@gmail.com>
|
|
||||||
Date: Tue, 25 Dec 2018 21:11:08 +0100
|
|
||||||
Subject: [RFC PATCH] leds: fix regression in usbport led trigger
|
|
||||||
|
|
||||||
In the patch "usb: simplify usbport trigger" together with
|
|
||||||
"leds: triggers: add device attribute support" caused an
|
|
||||||
regression for the usbport trigger. it will no longer
|
|
||||||
enumerate any "ports" (i.e the sysfs directory stays empty)
|
|
||||||
if the usb host drivers are fully initialized before the
|
|
||||||
usbport trigger was loaded.
|
|
||||||
|
|
||||||
The reason is that the usbport driver registers the sysfs
|
|
||||||
entries in the ports subdirectory during the activate()
|
|
||||||
callback. Whereas the patch
|
|
||||||
"leds: triggers: add device attribute support" made it so
|
|
||||||
that the sysfs "ports" group was only being added after
|
|
||||||
the activate() callback succeeded.
|
|
||||||
|
|
||||||
This patch moves the device_add_groups() in front of the
|
|
||||||
call to the trigger's activate() function in order to
|
|
||||||
solve the problem.
|
|
||||||
|
|
||||||
Fixes: 6f7b0bad8839 ("usb: simplify usbport trigger")
|
|
||||||
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
|
|
||||||
---
|
|
||||||
drivers/leds/led-triggers.c | 19 ++++++++++---------
|
|
||||||
1 file changed, 10 insertions(+), 9 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/leds/led-triggers.c
|
|
||||||
+++ b/drivers/leds/led-triggers.c
|
|
||||||
@@ -134,6 +134,12 @@ int led_trigger_set(struct led_classdev
|
|
||||||
led_set_brightness(led_cdev, LED_OFF);
|
|
||||||
}
|
|
||||||
if (trig) {
|
|
||||||
+ ret = device_add_groups(led_cdev->dev, trig->groups);
|
|
||||||
+ if (ret) {
|
|
||||||
+ dev_err(led_cdev->dev, "Failed to add trigger attributes\n");
|
|
||||||
+ goto err_add_groups;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
write_lock_irqsave(&trig->leddev_list_lock, flags);
|
|
||||||
list_add_tail(&led_cdev->trig_list, &trig->led_cdevs);
|
|
||||||
write_unlock_irqrestore(&trig->leddev_list_lock, flags);
|
|
||||||
@@ -146,12 +152,6 @@ int led_trigger_set(struct led_classdev
|
|
||||||
|
|
||||||
if (ret)
|
|
||||||
goto err_activate;
|
|
||||||
-
|
|
||||||
- ret = device_add_groups(led_cdev->dev, trig->groups);
|
|
||||||
- if (ret) {
|
|
||||||
- dev_err(led_cdev->dev, "Failed to add trigger attributes\n");
|
|
||||||
- goto err_add_groups;
|
|
||||||
- }
|
|
||||||
}
|
|
||||||
|
|
||||||
if (event) {
|
|
||||||
@@ -165,17 +165,18 @@ int led_trigger_set(struct led_classdev
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
-err_add_groups:
|
|
||||||
-
|
|
||||||
+err_activate:
|
|
||||||
+ device_remove_groups(led_cdev->dev, trig->groups);
|
|
||||||
if (trig->deactivate)
|
|
||||||
trig->deactivate(led_cdev);
|
|
||||||
-err_activate:
|
|
||||||
|
|
||||||
led_cdev->trigger = NULL;
|
|
||||||
led_cdev->trigger_data = NULL;
|
|
||||||
write_lock_irqsave(&led_cdev->trigger->leddev_list_lock, flags);
|
|
||||||
list_del(&led_cdev->trig_list);
|
|
||||||
write_unlock_irqrestore(&led_cdev->trigger->leddev_list_lock, flags);
|
|
||||||
+
|
|
||||||
+err_add_groups:
|
|
||||||
led_set_brightness(led_cdev, LED_OFF);
|
|
||||||
|
|
||||||
return ret;
|
|
@ -1,24 +0,0 @@
|
|||||||
From fd66884da2f96d2a7ea73f58b1b86251b959a913 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Felix Fietkau <nbd@nbd.name>
|
|
||||||
Date: Fri, 7 Jul 2017 16:56:19 +0200
|
|
||||||
Subject: kernel: strip unnecessary symbol table information from kernel modules
|
|
||||||
|
|
||||||
reduces default squashfs size on ar71xx by about 4k
|
|
||||||
|
|
||||||
lede-commit: 058d331a39077f159ca8922f1f422a1346d6aa67
|
|
||||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
||||||
---
|
|
||||||
Makefile | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/Makefile
|
|
||||||
+++ b/Makefile
|
|
||||||
@@ -427,7 +427,7 @@ KBUILD_AFLAGS_KERNEL :=
|
|
||||||
KBUILD_CFLAGS_KERNEL :=
|
|
||||||
KBUILD_AFLAGS_MODULE := -DMODULE
|
|
||||||
KBUILD_CFLAGS_MODULE := -DMODULE
|
|
||||||
-KBUILD_LDFLAGS_MODULE := -T $(srctree)/scripts/module-common.lds
|
|
||||||
+KBUILD_LDFLAGS_MODULE = -T $(srctree)/scripts/module-common.lds $(if $(CONFIG_PROFILING),,-s)
|
|
||||||
KBUILD_LDFLAGS :=
|
|
||||||
GCC_PLUGINS_CFLAGS :=
|
|
||||||
|
|
@ -1,40 +0,0 @@
|
|||||||
From 7f698012384ccb1ed10cc758acfd085096fdb307 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Felix Fietkau <nbd@nbd.name>
|
|
||||||
Date: Fri, 7 Jul 2017 17:02:03 +0200
|
|
||||||
Subject: kernel: fix linux 4.9 host tools portability issues
|
|
||||||
|
|
||||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
||||||
---
|
|
||||||
tools/build/Build.include | 2 +-
|
|
||||||
tools/perf/pmu-events/jevents.c | 1 +
|
|
||||||
tools/perf/pmu-events/json.c | 1 -
|
|
||||||
3 files changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
--- a/tools/build/Build.include
|
|
||||||
+++ b/tools/build/Build.include
|
|
||||||
@@ -98,4 +98,4 @@ cxx_flags = -Wp,-MD,$(depfile) -Wp,-MT,$
|
|
||||||
###
|
|
||||||
## HOSTCC C flags
|
|
||||||
|
|
||||||
-host_c_flags = -Wp,-MD,$(depfile) -Wp,-MT,$@ $(KBUILD_HOSTCFLAGS) -D"BUILD_STR(s)=\#s" $(HOSTCFLAGS_$(basetarget).o) $(HOSTCFLAGS_$(obj))
|
|
||||||
+host_c_flags = -MD -MF $(depfile) -MT $@ $(CHOSTFLAGS) -D"BUILD_STR(s)=\#s" $(CHOSTFLAGS_$(basetarget).o) $(CHOSTFLAGS_$(obj))
|
|
||||||
--- a/tools/perf/pmu-events/jevents.c
|
|
||||||
+++ b/tools/perf/pmu-events/jevents.c
|
|
||||||
@@ -35,6 +35,7 @@
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <string.h>
|
|
||||||
+#include <strings.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
--- a/tools/perf/pmu-events/json.c
|
|
||||||
+++ b/tools/perf/pmu-events/json.c
|
|
||||||
@@ -38,7 +38,6 @@
|
|
||||||
#include <unistd.h>
|
|
||||||
#include "jsmn.h"
|
|
||||||
#include "json.h"
|
|
||||||
-#include <linux/kernel.h>
|
|
||||||
|
|
||||||
|
|
||||||
static char *mapfile(const char *fn, size_t *size)
|
|
@ -1,4 +1,3 @@
|
|||||||
From c6905cfdeb31a5c049db3da434b10fa0d3e83569 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Felix Fietkau <nbd@nbd.name>
|
From: Felix Fietkau <nbd@nbd.name>
|
||||||
Date: Fri, 7 Jul 2017 17:18:54 +0200
|
Date: Fri, 7 Jul 2017 17:18:54 +0200
|
||||||
Subject: bridge: only accept EAP locally
|
Subject: bridge: only accept EAP locally
|
||||||
@ -7,9 +6,9 @@ When bridging, do not forward EAP frames to other ports, only deliver
|
|||||||
them locally, regardless of the state.
|
them locally, regardless of the state.
|
||||||
|
|
||||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
[add disable_eap_hack sysfs attribute]
|
||||||
|
Signed-off-by: Etienne Champetier <champetier.etienne@gmail.com>
|
||||||
---
|
---
|
||||||
net/bridge/br_input.c | 7 +++++--
|
|
||||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
--- a/net/bridge/br_input.c
|
--- a/net/bridge/br_input.c
|
||||||
+++ b/net/bridge/br_input.c
|
+++ b/net/bridge/br_input.c
|
||||||
@ -19,7 +18,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
+ BR_INPUT_SKB_CB(skb)->brdev = br->dev;
|
+ BR_INPUT_SKB_CB(skb)->brdev = br->dev;
|
||||||
+
|
+
|
||||||
+ if (skb->protocol == htons(ETH_P_PAE))
|
+ if (skb->protocol == htons(ETH_P_PAE) && !br->disable_eap_hack)
|
||||||
+ return br_pass_frame_up(skb);
|
+ return br_pass_frame_up(skb);
|
||||||
+
|
+
|
||||||
if (p->state == BR_STATE_LEARNING)
|
if (p->state == BR_STATE_LEARNING)
|
||||||
@ -29,3 +28,55 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
BR_INPUT_SKB_CB(skb)->src_port_isolated = !!(p->flags & BR_ISOLATED);
|
BR_INPUT_SKB_CB(skb)->src_port_isolated = !!(p->flags & BR_ISOLATED);
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_INET) &&
|
if (IS_ENABLED(CONFIG_INET) &&
|
||||||
|
--- a/net/bridge/br_private.h
|
||||||
|
+++ b/net/bridge/br_private.h
|
||||||
|
@@ -337,6 +337,8 @@ struct net_bridge {
|
||||||
|
u16 group_fwd_mask;
|
||||||
|
u16 group_fwd_mask_required;
|
||||||
|
|
||||||
|
+ bool disable_eap_hack;
|
||||||
|
+
|
||||||
|
/* STP */
|
||||||
|
bridge_id designated_root;
|
||||||
|
bridge_id bridge_id;
|
||||||
|
--- a/net/bridge/br_sysfs_br.c
|
||||||
|
+++ b/net/bridge/br_sysfs_br.c
|
||||||
|
@@ -170,6 +170,30 @@ static ssize_t group_fwd_mask_store(stru
|
||||||
|
}
|
||||||
|
static DEVICE_ATTR_RW(group_fwd_mask);
|
||||||
|
|
||||||
|
+static ssize_t disable_eap_hack_show(struct device *d,
|
||||||
|
+ struct device_attribute *attr,
|
||||||
|
+ char *buf)
|
||||||
|
+{
|
||||||
|
+ struct net_bridge *br = to_bridge(d);
|
||||||
|
+ return sprintf(buf, "%u\n", br->disable_eap_hack);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int set_disable_eap_hack(struct net_bridge *br, unsigned long val)
|
||||||
|
+{
|
||||||
|
+ br->disable_eap_hack = !!val;
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static ssize_t disable_eap_hack_store(struct device *d,
|
||||||
|
+ struct device_attribute *attr,
|
||||||
|
+ const char *buf,
|
||||||
|
+ size_t len)
|
||||||
|
+{
|
||||||
|
+ return store_bridge_parm(d, buf, len, set_disable_eap_hack);
|
||||||
|
+}
|
||||||
|
+static DEVICE_ATTR_RW(disable_eap_hack);
|
||||||
|
+
|
||||||
|
static ssize_t priority_show(struct device *d, struct device_attribute *attr,
|
||||||
|
char *buf)
|
||||||
|
{
|
||||||
|
@@ -810,6 +834,7 @@ static struct attribute *bridge_attrs[]
|
||||||
|
&dev_attr_ageing_time.attr,
|
||||||
|
&dev_attr_stp_state.attr,
|
||||||
|
&dev_attr_group_fwd_mask.attr,
|
||||||
|
+ &dev_attr_disable_eap_hack.attr,
|
||||||
|
&dev_attr_priority.attr,
|
||||||
|
&dev_attr_bridge_id.attr,
|
||||||
|
&dev_attr_root_id.attr,
|
||||||
|
@ -0,0 +1,135 @@
|
|||||||
|
From f171924dcf1d0b31fb7bd1cff113d7a1f7f05ec2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
|
||||||
|
Date: Sat, 23 Mar 2019 09:29:49 +0000
|
||||||
|
Subject: [PATCH] netfilter: connmark: introduce savedscp
|
||||||
|
|
||||||
|
savedscp is a method of storing the DSCP of an ip packet into conntrack
|
||||||
|
mark. In combination with a suitable tc filter action (act_ctinfo) DSCP
|
||||||
|
values are able to be stored in the mark on egress and restored on
|
||||||
|
ingress across links that otherwise alter or bleach DSCP.
|
||||||
|
|
||||||
|
This is useful for qdiscs such as CAKE which are able to shape according
|
||||||
|
to policies based on DSCP.
|
||||||
|
|
||||||
|
Ingress classification is traditionally a challenging task since
|
||||||
|
iptables rules haven't yet run and tc filter/eBPF programs are pre-NAT
|
||||||
|
lookups, hence are unable to see internal IPv4 addresses as used on the
|
||||||
|
typical home masquerading gateway.
|
||||||
|
|
||||||
|
x_tables CONNMARK savedscp action solves the problem of storing the DSCP
|
||||||
|
to the conntrack mark in a way suitable for the new act_ctinfo tc action
|
||||||
|
to restore.
|
||||||
|
|
||||||
|
The savedsp option accepts 2 parameters, a 32bit 'dscpmask' and a 32bit
|
||||||
|
'statemask'. The dscp mask must be a minimum of 6 contiguous bits and
|
||||||
|
represents the area where the DSCP will be stored in the connmark. The
|
||||||
|
state mask is a minimum 1 bit length mask that must not overlap with the
|
||||||
|
dscpmask. It represents a flag which is set when the DSCP has been
|
||||||
|
stored in the conntrack mark. This is useful to implement a 'one shot'
|
||||||
|
iptables based classification where the 'complicated' iptables rules are
|
||||||
|
only run once to classify the connection on initial (egress) packet and
|
||||||
|
subsequent packets are all marked/restored with the same DSCP. A state
|
||||||
|
mask of zero disables the setting of a status bit/s.
|
||||||
|
|
||||||
|
example syntax with a suitably modified iptables user space application:
|
||||||
|
|
||||||
|
iptables -A QOS_MARK_eth0 -t mangle -j CONNMARK --savedscp-mark 0xfc000000/0x01000000
|
||||||
|
|
||||||
|
Would store the DSCP in the top 6 bits of the 32bit mark field, and use
|
||||||
|
the LSB of the top byte as the 'DSCP has been stored' marker.
|
||||||
|
|
||||||
|
|----0xFC----conntrack mark----000000---|
|
||||||
|
| Bits 31-26 | bit 25 | bit24 |~~~ Bit 0|
|
||||||
|
| DSCP | unused | flag |unused |
|
||||||
|
|-----------------------0x01---000000---|
|
||||||
|
^ ^
|
||||||
|
| |
|
||||||
|
---| Conditional flag
|
||||||
|
| set this when dscp
|
||||||
|
|-ip diffserv-| stored in mark
|
||||||
|
| 6 bits |
|
||||||
|
|-------------|
|
||||||
|
|
||||||
|
an identically configured tc action to restore looks like:
|
||||||
|
|
||||||
|
tc filter show dev eth0 ingress
|
||||||
|
filter parent ffff: protocol all pref 10 u32 chain 0
|
||||||
|
filter parent ffff: protocol all pref 10 u32 chain 0 fh 800: ht divisor 1
|
||||||
|
filter parent ffff: protocol all pref 10 u32 chain 0 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:1 not_in_hw
|
||||||
|
match 00000000/00000000 at 0
|
||||||
|
action order 1: ctinfo zone 0 pipe
|
||||||
|
index 2 ref 1 bind 1 dscp 0xfc000000/0x1000000
|
||||||
|
|
||||||
|
action order 2: mirred (Egress Redirect to device ifb4eth0) stolen
|
||||||
|
index 1 ref 1 bind 1
|
||||||
|
|
||||||
|
|----0xFC----conntrack mark----000000---|
|
||||||
|
| Bits 31-26 | bit 25 | bit24 |~~~ Bit 0|
|
||||||
|
| DSCP | unused | flag |unused |
|
||||||
|
|-----------------------0x01---000000---|
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
---| Conditional flag
|
||||||
|
v only restore if set
|
||||||
|
|-ip diffserv-|
|
||||||
|
| 6 bits |
|
||||||
|
|-------------|
|
||||||
|
|
||||||
|
Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
|
||||||
|
---
|
||||||
|
include/uapi/linux/netfilter/xt_connmark.h | 3 ++-
|
||||||
|
net/netfilter/xt_connmark.c | 17 +++++++++++++++++
|
||||||
|
2 files changed, 19 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/include/uapi/linux/netfilter/xt_connmark.h
|
||||||
|
+++ b/include/uapi/linux/netfilter/xt_connmark.h
|
||||||
|
@@ -16,7 +16,8 @@
|
||||||
|
enum {
|
||||||
|
XT_CONNMARK_SET = 0,
|
||||||
|
XT_CONNMARK_SAVE,
|
||||||
|
- XT_CONNMARK_RESTORE
|
||||||
|
+ XT_CONNMARK_RESTORE,
|
||||||
|
+ XT_CONNMARK_SAVEDSCP
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
--- a/net/netfilter/xt_connmark.c
|
||||||
|
+++ b/net/netfilter/xt_connmark.c
|
||||||
|
@@ -42,6 +42,7 @@ connmark_tg_shift(struct sk_buff *skb, c
|
||||||
|
u_int32_t new_targetmark;
|
||||||
|
struct nf_conn *ct;
|
||||||
|
u_int32_t newmark;
|
||||||
|
+ u_int8_t dscp;
|
||||||
|
|
||||||
|
ct = nf_ct_get(skb, &ctinfo);
|
||||||
|
if (ct == NULL)
|
||||||
|
@@ -74,6 +75,21 @@ connmark_tg_shift(struct sk_buff *skb, c
|
||||||
|
nf_conntrack_event_cache(IPCT_MARK, ct);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
+ case XT_CONNMARK_SAVEDSCP:
|
||||||
|
+ if (skb->protocol == htons(ETH_P_IP))
|
||||||
|
+ dscp = ipv4_get_dsfield(ip_hdr(skb)) >> 2;
|
||||||
|
+ else if (skb->protocol == htons(ETH_P_IPV6))
|
||||||
|
+ dscp = ipv6_get_dsfield(ipv6_hdr(skb)) >> 2;
|
||||||
|
+ else /* protocol doesn't have diffserv */
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ newmark = (ct->mark & ~info->ctmark) |
|
||||||
|
+ (info->ctmask | (dscp << info->shift_bits));
|
||||||
|
+ if (ct->mark != newmark) {
|
||||||
|
+ ct->mark = newmark;
|
||||||
|
+ nf_conntrack_event_cache(IPCT_MARK, ct);
|
||||||
|
+ }
|
||||||
|
+ break;
|
||||||
|
case XT_CONNMARK_RESTORE:
|
||||||
|
new_targetmark = (ct->mark & info->ctmask);
|
||||||
|
if (info->shift_dir == D_SHIFT_RIGHT)
|
||||||
|
@@ -86,6 +102,7 @@ connmark_tg_shift(struct sk_buff *skb, c
|
||||||
|
skb->mark = newmark;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
+out:
|
||||||
|
return XT_CONTINUE;
|
||||||
|
}
|
||||||
|
|
@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
--- a/drivers/mtd/spi-nor/spi-nor.c
|
--- a/drivers/mtd/spi-nor/spi-nor.c
|
||||||
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
||||||
@@ -1455,7 +1455,7 @@ static int spi_nor_write(struct mtd_info
|
@@ -1457,7 +1457,7 @@ static int spi_nor_write(struct mtd_info
|
||||||
|
|
||||||
write_enable(nor);
|
write_enable(nor);
|
||||||
ret = nor->write(nor, addr, page_remain, buf + i);
|
ret = nor->write(nor, addr, page_remain, buf + i);
|
||||||
@ -20,7 +20,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
goto write_err;
|
goto write_err;
|
||||||
written = ret;
|
written = ret;
|
||||||
|
|
||||||
@@ -1464,13 +1464,6 @@ static int spi_nor_write(struct mtd_info
|
@@ -1466,13 +1466,6 @@ static int spi_nor_write(struct mtd_info
|
||||||
goto write_err;
|
goto write_err;
|
||||||
*retlen += written;
|
*retlen += written;
|
||||||
i += written;
|
i += written;
|
||||||
|
@ -8,7 +8,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
--- a/drivers/mtd/spi-nor/spi-nor.c
|
--- a/drivers/mtd/spi-nor/spi-nor.c
|
||||||
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
||||||
@@ -2733,6 +2733,7 @@ static int spi_nor_init(struct spi_nor *
|
@@ -2735,6 +2735,7 @@ static int spi_nor_init(struct spi_nor *
|
||||||
*/
|
*/
|
||||||
if (JEDEC_MFR(nor->info) == SNOR_MFR_ATMEL ||
|
if (JEDEC_MFR(nor->info) == SNOR_MFR_ATMEL ||
|
||||||
JEDEC_MFR(nor->info) == SNOR_MFR_INTEL ||
|
JEDEC_MFR(nor->info) == SNOR_MFR_INTEL ||
|
||||||
|
@ -17,7 +17,7 @@ Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
|
|||||||
|
|
||||||
--- a/drivers/mtd/spi-nor/spi-nor.c
|
--- a/drivers/mtd/spi-nor/spi-nor.c
|
||||||
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
||||||
@@ -2735,6 +2735,7 @@ static int spi_nor_init(struct spi_nor *
|
@@ -2737,6 +2737,7 @@ static int spi_nor_init(struct spi_nor *
|
||||||
JEDEC_MFR(nor->info) == SNOR_MFR_INTEL ||
|
JEDEC_MFR(nor->info) == SNOR_MFR_INTEL ||
|
||||||
JEDEC_MFR(nor->info) == SNOR_MFR_MACRONIX ||
|
JEDEC_MFR(nor->info) == SNOR_MFR_MACRONIX ||
|
||||||
JEDEC_MFR(nor->info) == SNOR_MFR_SST ||
|
JEDEC_MFR(nor->info) == SNOR_MFR_SST ||
|
||||||
@ -25,7 +25,7 @@ Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
|
|||||||
nor->info->flags & SPI_NOR_HAS_LOCK) {
|
nor->info->flags & SPI_NOR_HAS_LOCK) {
|
||||||
write_enable(nor);
|
write_enable(nor);
|
||||||
write_sr(nor, 0);
|
write_sr(nor, 0);
|
||||||
@@ -2871,7 +2872,8 @@ int spi_nor_scan(struct spi_nor *nor, co
|
@@ -2873,7 +2874,8 @@ int spi_nor_scan(struct spi_nor *nor, co
|
||||||
|
|
||||||
/* NOR protection support for STmicro/Micron chips and similar */
|
/* NOR protection support for STmicro/Micron chips and similar */
|
||||||
if (JEDEC_MFR(info) == SNOR_MFR_MICRON ||
|
if (JEDEC_MFR(info) == SNOR_MFR_MICRON ||
|
||||||
|
@ -39,7 +39,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
depends on ARCH_AT91 || (ARM && COMPILE_TEST && !ARCH_EBSA110)
|
depends on ARCH_AT91 || (ARM && COMPILE_TEST && !ARCH_EBSA110)
|
||||||
--- a/drivers/mtd/spi-nor/spi-nor.c
|
--- a/drivers/mtd/spi-nor/spi-nor.c
|
||||||
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
||||||
@@ -2647,10 +2647,12 @@ static int spi_nor_select_erase(struct s
|
@@ -2649,10 +2649,12 @@ static int spi_nor_select_erase(struct s
|
||||||
|
|
||||||
#ifdef CONFIG_MTD_SPI_NOR_USE_4K_SECTORS
|
#ifdef CONFIG_MTD_SPI_NOR_USE_4K_SECTORS
|
||||||
/* prefer "small sector" erase if possible */
|
/* prefer "small sector" erase if possible */
|
||||||
|
@ -20,7 +20,7 @@ Changes in v2:
|
|||||||
|
|
||||||
--- a/drivers/mtd/spi-nor/spi-nor.c
|
--- a/drivers/mtd/spi-nor/spi-nor.c
|
||||||
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
||||||
@@ -1239,6 +1239,11 @@ static const struct flash_info spi_nor_i
|
@@ -1241,6 +1241,11 @@ static const struct flash_info spi_nor_i
|
||||||
SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
|
SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
|
||||||
SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
|
SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
|
||||||
},
|
},
|
||||||
|
@ -1,95 +0,0 @@
|
|||||||
From: John Crispin <john@phrozen.org>
|
|
||||||
Subject: net: phy: add phy_ethtool_ioctl()
|
|
||||||
|
|
||||||
Signed-off-by: John Crispin <john@phrozen.org>
|
|
||||||
---
|
|
||||||
drivers/net/phy/phy.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
include/linux/phy.h | 1 +
|
|
||||||
2 files changed, 45 insertions(+)
|
|
||||||
|
|
||||||
--- a/drivers/net/phy/phy.c
|
|
||||||
+++ b/drivers/net/phy/phy.c
|
|
||||||
@@ -382,6 +382,73 @@ void phy_ethtool_ksettings_get(struct ph
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(phy_ethtool_ksettings_get);
|
|
||||||
|
|
||||||
+static int phy_ethtool_gset(struct phy_device *phydev, struct ethtool_cmd *cmd)
|
|
||||||
+{
|
|
||||||
+ cmd->supported = phydev->supported;
|
|
||||||
+
|
|
||||||
+ cmd->advertising = phydev->advertising;
|
|
||||||
+ cmd->lp_advertising = phydev->lp_advertising;
|
|
||||||
+
|
|
||||||
+ ethtool_cmd_speed_set(cmd, phydev->speed);
|
|
||||||
+ cmd->duplex = phydev->duplex;
|
|
||||||
+ if (phydev->interface == PHY_INTERFACE_MODE_MOCA)
|
|
||||||
+ cmd->port = PORT_BNC;
|
|
||||||
+ else
|
|
||||||
+ cmd->port = PORT_MII;
|
|
||||||
+ cmd->phy_address = phydev->mdio.addr;
|
|
||||||
+ cmd->transceiver = phy_is_internal(phydev) ?
|
|
||||||
+ XCVR_INTERNAL : XCVR_EXTERNAL;
|
|
||||||
+ cmd->autoneg = phydev->autoneg;
|
|
||||||
+ cmd->eth_tp_mdix_ctrl = phydev->mdix_ctrl;
|
|
||||||
+ cmd->eth_tp_mdix = phydev->mdix;
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+int phy_ethtool_ioctl(struct phy_device *phydev, void *useraddr)
|
|
||||||
+{
|
|
||||||
+ u32 cmd;
|
|
||||||
+ int tmp;
|
|
||||||
+ struct ethtool_cmd ecmd = { ETHTOOL_GSET };
|
|
||||||
+ struct ethtool_value edata = { ETHTOOL_GLINK };
|
|
||||||
+
|
|
||||||
+ if (get_user(cmd, (u32 *) useraddr))
|
|
||||||
+ return -EFAULT;
|
|
||||||
+
|
|
||||||
+ switch (cmd) {
|
|
||||||
+ case ETHTOOL_GSET:
|
|
||||||
+ phy_ethtool_gset(phydev, &ecmd);
|
|
||||||
+ if (copy_to_user(useraddr, &ecmd, sizeof(ecmd)))
|
|
||||||
+ return -EFAULT;
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
+ case ETHTOOL_SSET:
|
|
||||||
+ if (copy_from_user(&ecmd, useraddr, sizeof(ecmd)))
|
|
||||||
+ return -EFAULT;
|
|
||||||
+ return phy_ethtool_sset(phydev, &ecmd);
|
|
||||||
+
|
|
||||||
+ case ETHTOOL_NWAY_RST:
|
|
||||||
+ /* if autoneg is off, it's an error */
|
|
||||||
+ tmp = phy_read(phydev, MII_BMCR);
|
|
||||||
+ if (tmp & BMCR_ANENABLE) {
|
|
||||||
+ tmp |= (BMCR_ANRESTART);
|
|
||||||
+ phy_write(phydev, MII_BMCR, tmp);
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+ return -EINVAL;
|
|
||||||
+
|
|
||||||
+ case ETHTOOL_GLINK:
|
|
||||||
+ edata.data = (phy_read(phydev,
|
|
||||||
+ MII_BMSR) & BMSR_LSTATUS) ? 1 : 0;
|
|
||||||
+ if (copy_to_user(useraddr, &edata, sizeof(edata)))
|
|
||||||
+ return -EFAULT;
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return -EOPNOTSUPP;
|
|
||||||
+}
|
|
||||||
+EXPORT_SYMBOL(phy_ethtool_ioctl);
|
|
||||||
+
|
|
||||||
/**
|
|
||||||
* phy_mii_ioctl - generic PHY MII ioctl interface
|
|
||||||
* @phydev: the phy_device struct
|
|
||||||
--- a/include/linux/phy.h
|
|
||||||
+++ b/include/linux/phy.h
|
|
||||||
@@ -1045,6 +1045,7 @@ void phy_ethtool_ksettings_get(struct ph
|
|
||||||
struct ethtool_link_ksettings *cmd);
|
|
||||||
int phy_ethtool_ksettings_set(struct phy_device *phydev,
|
|
||||||
const struct ethtool_link_ksettings *cmd);
|
|
||||||
+int phy_ethtool_ioctl(struct phy_device *phydev, void *useraddr);
|
|
||||||
int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd);
|
|
||||||
int phy_start_interrupts(struct phy_device *phydev);
|
|
||||||
void phy_print_status(struct phy_device *phydev);
|
|
@ -21,11 +21,11 @@ include $(INCLUDE_DIR)/target.mk
|
|||||||
|
|
||||||
DEFAULT_PACKAGES += partx-utils mkf2fs fdisk e2fsprogs wpad kmod-usb-hid \
|
DEFAULT_PACKAGES += partx-utils mkf2fs fdisk e2fsprogs wpad kmod-usb-hid \
|
||||||
kmod-ath5k kmod-ath9k kmod-ath9k-htc kmod-ath10k kmod-rt2800-usb kmod-e1000e kmod-igb kmod-igbvf kmod-ixgbe kmod-pcnet32 kmod-tulip kmod-vmxnet3 kmod-i40e kmod-i40evf kmod-fs-f2fs \
|
kmod-ath5k kmod-ath9k kmod-ath9k-htc kmod-ath10k kmod-rt2800-usb kmod-e1000e kmod-igb kmod-igbvf kmod-ixgbe kmod-pcnet32 kmod-tulip kmod-vmxnet3 kmod-i40e kmod-i40evf kmod-fs-f2fs \
|
||||||
htop lm-sensors autocore automount autosamba luci-app-zerotier luci-app-ipsec-vpnd luci-app-pptp-server luci-proto-bonding luci-app-zerotier \
|
htop lm-sensors autocore automount autosamba luci-app-zerotier luci-app-ipsec-vpnd luci-app-pptp-server luci-proto-bonding luci-app-zerotier luci-app-unblockmusic \
|
||||||
ath10k-firmware-qca988x ath10k-firmware-qca9888 ath10k-firmware-qca9984 brcmfmac-firmware-43602a1-pcie intel-microcode amd64-microcode\
|
ath10k-firmware-qca988x ath10k-firmware-qca9888 ath10k-firmware-qca9984 brcmfmac-firmware-43602a1-pcie intel-microcode amd64-microcode\
|
||||||
alsa-utils kmod-ac97 kmod-sound-hda-core kmod-sound-hda-codec-realtek kmod-sound-hda-codec-via kmod-sound-via82xx kmod-usb-audio \
|
alsa-utils kmod-ac97 kmod-sound-hda-core kmod-sound-hda-codec-realtek kmod-sound-hda-codec-via kmod-sound-via82xx kmod-usb-audio \
|
||||||
kmod-usb-net kmod-usb-net-asix kmod-usb-net-asix-ax88179 kmod-usb-net-rtl8150 kmod-usb-net-rtl8152 \
|
kmod-usb-net kmod-usb-net-asix kmod-usb-net-asix-ax88179 kmod-usb-net-rtl8150 kmod-usb-net-rtl8152 \
|
||||||
shadowsocks-libev-ss-redir v2ray shadowsocksr-libev-server shadowsocksr-libev-ssr-local
|
shadowsocks-libev-ss-redir v2ray shadowsocksr-libev-server shadowsocksr-libev-ssr-local dsmboot cfdisk docker-ce
|
||||||
|
|
||||||
$(eval $(call BuildTarget))
|
$(eval $(call BuildTarget))
|
||||||
|
|
||||||
|
9
target/linux/x86/base-files/etc/docker-init
Executable file
9
target/linux/x86/base-files/etc/docker-init
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
echo "n
|
||||||
|
p
|
||||||
|
3
|
||||||
|
|
||||||
|
|
||||||
|
w
|
||||||
|
" | fdisk /dev/sda && mkfs.ext4 /dev/sda3
|
9
target/linux/x86/base-files/etc/docker-web
Executable file
9
target/linux/x86/base-files/etc/docker-web
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
echo "n
|
||||||
|
p
|
||||||
|
3
|
||||||
|
|
||||||
|
|
||||||
|
w
|
||||||
|
" | fdisk /dev/sda && mkfs.ext4 /dev/sda3
|
Loading…
Reference in New Issue
Block a user