summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Ahern <dsahern@kernel.org>2023-08-20 10:42:35 -0600
committerDavid Ahern <dsahern@kernel.org>2023-08-20 10:42:35 -0600
commitce67bbcccb237f837c0ec2b5d4c85a4fd11ef1b5 (patch)
treed7beefd03f0203cfe0b48c5868553a3d777d8ff8
parent877f8149d2ed94b6ab412fabaab9fe8d15193db7 (diff)
parent872148f54e35cb13aa6c9e48e52306cd469aaa53 (diff)
Merge remote-tracking branch 'main' into next
Signed-off-by: David Ahern <dsahern@kernel.org>
-rw-r--r--devlink/devlink.c2
-rw-r--r--include/uapi/linux/pkt_cls.h4
-rw-r--r--man/man8/bridge.814
-rw-r--r--man/man8/ip-route.8.in10
-rw-r--r--misc/ss.c11
-rw-r--r--tc/q_taprio.c91
6 files changed, 82 insertions, 50 deletions
diff --git a/devlink/devlink.c b/devlink/devlink.c
index fe69f53c..616720a9 100644
--- a/devlink/devlink.c
+++ b/devlink/devlink.c
@@ -4860,7 +4860,7 @@ static int cmd_port_param_show(struct dl *dl)
static void cmd_port_function_help(void)
{
- pr_err("Usage: devlink port function set DEV/PORT_INDEX [ hw_addr ADDR ] [ state STATE ]\n");
+ pr_err("Usage: devlink port function set DEV/PORT_INDEX [ hw_addr ADDR ] [ state { active | inactive } ]\n");
pr_err(" [ roce { enable | disable } ] [ migratable { enable | disable } ]\n");
pr_err(" devlink port function rate { help | show | add | del | set }\n");
}
diff --git a/include/uapi/linux/pkt_cls.h b/include/uapi/linux/pkt_cls.h
index 75506f15..c7082cc6 100644
--- a/include/uapi/linux/pkt_cls.h
+++ b/include/uapi/linux/pkt_cls.h
@@ -713,9 +713,11 @@ enum {
TCA_FLOWER_KEY_CFM_OPT_UNSPEC,
TCA_FLOWER_KEY_CFM_MD_LEVEL,
TCA_FLOWER_KEY_CFM_OPCODE,
- TCA_FLOWER_KEY_CFM_OPT_MAX,
+ __TCA_FLOWER_KEY_CFM_OPT_MAX,
};
+#define TCA_FLOWER_KEY_CFM_OPT_MAX (__TCA_FLOWER_KEY_CFM_OPT_MAX - 1)
+
#define TCA_FLOWER_MASK_FLAGS_RANGE (1 << 0) /* Range-based match */
/* Match-all classifier */
diff --git a/man/man8/bridge.8 b/man/man8/bridge.8
index dd0659d3..c52c9331 100644
--- a/man/man8/bridge.8
+++ b/man/man8/bridge.8
@@ -68,7 +68,9 @@ bridge \- show / manipulate bridge addresses and devices
.ti -8
.BR "bridge link" " [ " show " ] [ "
.B dev
-.IR DEV " ]"
+.IR DEV " ] ["
+.B master
+.IR DEVICE " ]"
.ti -8
.BR "bridge fdb" " { " add " | " append " | " del " | " replace " } "
@@ -670,9 +672,15 @@ display current time when using monitor option.
.SS bridge link show - list ports configuration for all bridges.
-This command displays port configuration and flags for all bridges.
+This command displays ports configuration and flags for all bridges by default.
+
+.TP
+.BI dev " DEV"
+only display the specific bridge port named DEV.
-To display port configuration and flags for a specific bridge, use the
+.TP
+.BI master " DEVICE"
+only display ports of the bridge named DEVICE. This is similar to
"ip link show master <bridge_device>" command.
.SH bridge fdb - forwarding database management
diff --git a/man/man8/ip-route.8.in b/man/man8/ip-route.8.in
index 76151689..7a97d744 100644
--- a/man/man8/ip-route.8.in
+++ b/man/man8/ip-route.8.in
@@ -866,10 +866,16 @@ See \fBFlavors parameters\fR section.
.B End.X nh6
.I NEXTHOP
+.RB [ " flavors "
+.IR FLAVORS " ] "
- Regular SRv6 processing as intermediate segment endpoint.
Additionally, forward processed packets to given next-hop.
This action only accepts packets with a non-zero Segments Left
-value. Other matching packets are dropped.
+value. Other matching packets are dropped. The presence of flavors
+can change the regular processing of an End.X behavior according to
+the user-provided Flavor operations and information carried in the packet.
+See \fBFlavors parameters\fR section.
+
.B End.DX6 nh6
.I NEXTHOP
@@ -977,7 +983,7 @@ subset of the existing behaviors.
removes (i.e. pops) the SRH from the IPv6 header.
The PSP operation takes place only at a penultimate SR Segment Endpoint node
(e.g., the Segment Left must be one) and does not happen at non-penultimate
-endpoint nodes.
+endpoint nodes. This flavor is currently only supported by End behavior.
.B usp
- Ultimate Segment Pop of the SRH (not yet supported in kernel)
diff --git a/misc/ss.c b/misc/ss.c
index 13b2523f..6d34ad0e 100644
--- a/misc/ss.c
+++ b/misc/ss.c
@@ -2983,12 +2983,6 @@ static void tcp_tls_conf(const char *name, struct rtattr *attr)
}
}
-static void tcp_tls_zc_sendfile(struct rtattr *attr)
-{
- if (attr)
- out(" zc_ro_tx");
-}
-
static void mptcp_subflow_info(struct rtattr *tb[])
{
u_int32_t flags = 0;
@@ -3219,7 +3213,10 @@ static void tcp_show_info(const struct nlmsghdr *nlh, struct inet_diag_msg *r,
tcp_tls_cipher(tlsinfo[TLS_INFO_CIPHER]);
tcp_tls_conf("rxconf", tlsinfo[TLS_INFO_RXCONF]);
tcp_tls_conf("txconf", tlsinfo[TLS_INFO_TXCONF]);
- tcp_tls_zc_sendfile(tlsinfo[TLS_INFO_ZC_RO_TX]);
+ if (!!tlsinfo[TLS_INFO_ZC_RO_TX])
+ out(" zc_ro_tx");
+ if (!!tlsinfo[TLS_INFO_RX_NO_PAD])
+ out(" no_pad_rx");
}
if (ulpinfo[INET_ULP_INFO_MPTCP]) {
struct rtattr *sfinfo[MPTCP_SUBFLOW_ATTR_MAX + 1] =
diff --git a/tc/q_taprio.c b/tc/q_taprio.c
index 913197f6..ef8fc7a0 100644
--- a/tc/q_taprio.c
+++ b/tc/q_taprio.c
@@ -416,14 +416,11 @@ static int taprio_parse_opt(struct qdisc_util *qu, int argc,
return 0;
}
-static int print_sched_list(FILE *f, struct rtattr *list)
+static void print_sched_list(FILE *f, struct rtattr *list)
{
- struct rtattr *item;
+ struct rtattr *item, *nla;
int rem;
- if (list == NULL)
- return 0;
-
rem = RTA_PAYLOAD(list);
open_json_array(PRINT_JSON, "schedule");
@@ -432,60 +429,82 @@ static int print_sched_list(FILE *f, struct rtattr *list)
for (item = RTA_DATA(list); RTA_OK(item, rem); item = RTA_NEXT(item, rem)) {
struct rtattr *tb[TCA_TAPRIO_SCHED_ENTRY_MAX + 1];
- __u32 index = 0, gatemask = 0, interval = 0;
- __u8 command = 0;
parse_rtattr_nested(tb, TCA_TAPRIO_SCHED_ENTRY_MAX, item);
- if (tb[TCA_TAPRIO_SCHED_ENTRY_INDEX])
- index = rta_getattr_u32(tb[TCA_TAPRIO_SCHED_ENTRY_INDEX]);
+ open_json_object(NULL);
- if (tb[TCA_TAPRIO_SCHED_ENTRY_CMD])
- command = rta_getattr_u8(tb[TCA_TAPRIO_SCHED_ENTRY_CMD]);
+ nla = tb[TCA_TAPRIO_SCHED_ENTRY_INDEX];
+ if (nla) {
+ __u32 index = rta_getattr_u32(nla);
- if (tb[TCA_TAPRIO_SCHED_ENTRY_GATE_MASK])
- gatemask = rta_getattr_u32(tb[TCA_TAPRIO_SCHED_ENTRY_GATE_MASK]);
+ print_uint(PRINT_ANY, "index", "\tindex %u", index);
+ }
- if (tb[TCA_TAPRIO_SCHED_ENTRY_INTERVAL])
- interval = rta_getattr_u32(tb[TCA_TAPRIO_SCHED_ENTRY_INTERVAL]);
+ nla = tb[TCA_TAPRIO_SCHED_ENTRY_CMD];
+ if (nla) {
+ __u8 command = rta_getattr_u8(nla);
+
+ print_string(PRINT_ANY, "cmd", " cmd %s",
+ entry_cmd_to_str(command));
+ }
+
+ nla = tb[TCA_TAPRIO_SCHED_ENTRY_GATE_MASK];
+ if (nla) {
+ __u32 gatemask = rta_getattr_u32(nla);
+
+ print_0xhex(PRINT_ANY, "gatemask", " gatemask %#llx",
+ gatemask);
+ }
+
+ nla = tb[TCA_TAPRIO_SCHED_ENTRY_INTERVAL];
+ if (nla) {
+ __u32 interval = rta_getattr_u32(nla);
+
+ print_uint(PRINT_ANY, "interval", " interval %u",
+ interval);
+ }
- open_json_object(NULL);
- print_uint(PRINT_ANY, "index", "\tindex %u", index);
- print_string(PRINT_ANY, "cmd", " cmd %s", entry_cmd_to_str(command));
- print_0xhex(PRINT_ANY, "gatemask", " gatemask %#llx", gatemask);
- print_uint(PRINT_ANY, "interval", " interval %u", interval);
close_json_object();
print_nl();
}
close_json_array(PRINT_ANY, "");
-
- return 0;
}
static int print_schedule(FILE *f, struct rtattr **tb)
{
- int64_t base_time = 0, cycle_time = 0, cycle_time_extension = 0;
+ struct rtattr *nla;
- if (tb[TCA_TAPRIO_ATTR_SCHED_BASE_TIME])
- base_time = rta_getattr_s64(tb[TCA_TAPRIO_ATTR_SCHED_BASE_TIME]);
+ nla = tb[TCA_TAPRIO_ATTR_SCHED_BASE_TIME];
+ if (nla) {
+ int64_t base_time = rta_getattr_s64(nla);
- if (tb[TCA_TAPRIO_ATTR_SCHED_CYCLE_TIME])
- cycle_time = rta_getattr_s64(tb[TCA_TAPRIO_ATTR_SCHED_CYCLE_TIME]);
+ print_lluint(PRINT_ANY, "base_time", "\tbase-time %lld",
+ base_time);
+ }
- if (tb[TCA_TAPRIO_ATTR_SCHED_CYCLE_TIME_EXTENSION])
- cycle_time_extension = rta_getattr_s64(
- tb[TCA_TAPRIO_ATTR_SCHED_CYCLE_TIME_EXTENSION]);
+ nla = tb[TCA_TAPRIO_ATTR_SCHED_CYCLE_TIME];
+ if (nla) {
+ int64_t cycle_time = rta_getattr_s64(nla);
- print_lluint(PRINT_ANY, "base_time", "\tbase-time %lld", base_time);
+ print_lluint(PRINT_ANY, "cycle_time", " cycle-time %lld",
+ cycle_time);
+ }
- print_lluint(PRINT_ANY, "cycle_time", " cycle-time %lld", cycle_time);
+ nla = tb[TCA_TAPRIO_ATTR_SCHED_CYCLE_TIME_EXTENSION];
+ if (nla) {
+ int64_t cycle_time_extension = rta_getattr_s64(nla);
- print_lluint(PRINT_ANY, "cycle_time_extension",
- " cycle-time-extension %lld", cycle_time_extension);
+ print_lluint(PRINT_ANY, "cycle_time_extension",
+ " cycle-time-extension %lld",
+ cycle_time_extension);
+ }
- print_sched_list(f, tb[TCA_TAPRIO_ATTR_SCHED_ENTRY_LIST]);
+ nla = tb[TCA_TAPRIO_ATTR_SCHED_ENTRY_LIST];
+ if (nla)
+ print_sched_list(f, nla);
return 0;
}
@@ -635,7 +654,7 @@ static int taprio_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt)
parse_rtattr_nested(t, TCA_TAPRIO_ATTR_MAX,
tb[TCA_TAPRIO_ATTR_ADMIN_SCHED]);
- open_json_object(NULL);
+ open_json_object("admin");
print_schedule(f, t);