mirror of
https://github.com/systemd/systemd
synced 2026-02-25 08:44:45 +01:00
Compare commits
17 Commits
04d2a86e66
...
e48b6fca76
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e48b6fca76 | ||
|
|
20ce80436e | ||
|
|
c418543a65 | ||
|
|
fb0078ae69 | ||
|
|
3cfb169988 | ||
|
|
a11f07d78c | ||
|
|
d0ad8f1175 | ||
|
|
d70a73c05b | ||
|
|
92ca07e93c | ||
|
|
b965ce61aa | ||
|
|
482aa607a5 | ||
|
|
46075fc92b | ||
|
|
1fcd11d56c | ||
|
|
9ed12a81b2 | ||
|
|
f753f898ed | ||
|
|
2516d6598c | ||
|
|
e0684a9abc |
26
NEWS
26
NEWS
@ -64,6 +64,14 @@ CHANGES WITH 260 in spe:
|
|||||||
directory or not, we make use of it unconditionally and have dropped
|
directory or not, we make use of it unconditionally and have dropped
|
||||||
support for the old way using protofiles.
|
support for the old way using protofiles.
|
||||||
|
|
||||||
|
* The org.systemd.login1.Manager D-Bus interface has a minor API break.
|
||||||
|
The `CanPowerOff()`, `CanReboot()`, `CanSuspend()`, etc. family of
|
||||||
|
methods have introduced new return values which may break downstream
|
||||||
|
consumers, such as desktop environments. The new return values more
|
||||||
|
precisely communicate the status of inhibitors. This allows desktops
|
||||||
|
to differentiate between system administrator policy and
|
||||||
|
temporary restrictions imposed by inhibitors.
|
||||||
|
|
||||||
New system interfaces and components:
|
New system interfaces and components:
|
||||||
|
|
||||||
* The os-release(3) gained a new field FANCY_NAME= that is similar
|
* The os-release(3) gained a new field FANCY_NAME= that is similar
|
||||||
@ -115,6 +123,9 @@ CHANGES WITH 260 in spe:
|
|||||||
* SetProperties() D-Bus method now has a Varlink counterpart. For now,
|
* SetProperties() D-Bus method now has a Varlink counterpart. For now,
|
||||||
it only supports setting the Markers= property.
|
it only supports setting the Markers= property.
|
||||||
|
|
||||||
|
* New 'needs-start' and 'needs-stop' settings are now supported for the
|
||||||
|
Markers= property.
|
||||||
|
|
||||||
Changes in udev:
|
Changes in udev:
|
||||||
|
|
||||||
* Permissions for /dev/ptp* are now set to 0664 (previously 0660),
|
* Permissions for /dev/ptp* are now set to 0664 (previously 0660),
|
||||||
@ -138,6 +149,18 @@ CHANGES WITH 260 in spe:
|
|||||||
low brightness values at runtime independently of the systemd clamp
|
low brightness values at runtime independently of the systemd clamp
|
||||||
which only applies during boot.
|
which only applies during boot.
|
||||||
|
|
||||||
|
* A new variable ID_INTEGRATION is now exposed to devices that have
|
||||||
|
ID_BUS defined. This variable can be set to internal when the device
|
||||||
|
is integral part of the system or external otherwise. Actually,
|
||||||
|
internal buses like PCI, I2C, SPI... makes it to be internal and
|
||||||
|
external buses like bluetooth set it to external, while for USB the
|
||||||
|
removable attribute of the port the device is connected tells us to
|
||||||
|
decide, fixed is set to internal and removable or unknown to external.
|
||||||
|
|
||||||
|
* ID_INPUT_JOYSTICK_INTEGRATION variable has been dropped in favor of
|
||||||
|
ID_INTEGRATION because it was never used and the new variable cover
|
||||||
|
better the idea that variable was intended for.
|
||||||
|
|
||||||
Changes in systemd-networkd:
|
Changes in systemd-networkd:
|
||||||
|
|
||||||
* MultiPathRoute= option now supports interface-bound ECMP routes.
|
* MultiPathRoute= option now supports interface-bound ECMP routes.
|
||||||
@ -178,6 +201,9 @@ CHANGES WITH 260 in spe:
|
|||||||
|
|
||||||
* resolvectl now uses varlink to connect to systemd-resolved.
|
* resolvectl now uses varlink to connect to systemd-resolved.
|
||||||
|
|
||||||
|
* systemd-resolved now supports ifindex=0 in the BrowseServices IPC API,
|
||||||
|
to allow browsing all mDNS interfaces in one call.
|
||||||
|
|
||||||
Changes in other components:
|
Changes in other components:
|
||||||
|
|
||||||
* systemd-repart gained basic support for integrity checks of encrypted
|
* systemd-repart gained basic support for integrity checks of encrypted
|
||||||
|
|||||||
@ -26,10 +26,10 @@
|
|||||||
#
|
#
|
||||||
# Permitted keys:
|
# Permitted keys:
|
||||||
# Specify if a joystick is a built-in one or external:
|
# Specify if a joystick is a built-in one or external:
|
||||||
# ID_INPUT_JOYSTICK_INTEGRATION=internal|external
|
# ID_INTEGRATION=internal|external
|
||||||
#
|
#
|
||||||
# If the property is missing, user-space can assume:
|
# If the property is missing, user-space can assume:
|
||||||
# ID_INPUT_JOYSTICK_INTEGRATION=external
|
# ID_INTEGRATION=external
|
||||||
#
|
#
|
||||||
# By default i8042, i2c, and rmi devices are assumed to be internal,
|
# By default i8042, i2c, and rmi devices are assumed to be internal,
|
||||||
# bluetooth devices are assumed to be external, usb devices are assumed
|
# bluetooth devices are assumed to be external, usb devices are assumed
|
||||||
@ -38,4 +38,4 @@
|
|||||||
# Example entry; vid: ffff, pid: 0000; both must be lowercase.
|
# Example entry; vid: ffff, pid: 0000; both must be lowercase.
|
||||||
# this will make this usb joystick to behave as internal.
|
# this will make this usb joystick to behave as internal.
|
||||||
#joystick:usb:vffffp0000*
|
#joystick:usb:vffffp0000*
|
||||||
# ID_INPUT_JOYSTICK_INTEGRATION=internal
|
# ID_INTEGRATION=internal
|
||||||
|
|||||||
@ -183,7 +183,7 @@ def property_grammar():
|
|||||||
('ID_MM_DEVICE_IGNORE', Or((Literal('0'), Literal('1')))),
|
('ID_MM_DEVICE_IGNORE', Or((Literal('0'), Literal('1')))),
|
||||||
('ID_NET_AUTO_LINK_LOCAL_ONLY', Or((Literal('0'), Literal('1')))),
|
('ID_NET_AUTO_LINK_LOCAL_ONLY', Or((Literal('0'), Literal('1')))),
|
||||||
('POINTINGSTICK_SENSITIVITY', INTEGER),
|
('POINTINGSTICK_SENSITIVITY', INTEGER),
|
||||||
('ID_INPUT_JOYSTICK_INTEGRATION', Or(('internal', 'external'))),
|
('ID_INTEGRATION', Or(('internal', 'external'))),
|
||||||
('ID_INPUT_TOUCHPAD_INTEGRATION', Or(('internal', 'external'))),
|
('ID_INPUT_TOUCHPAD_INTEGRATION', Or(('internal', 'external'))),
|
||||||
('XKB_FIXED_LAYOUT', xkb_setting),
|
('XKB_FIXED_LAYOUT', xkb_setting),
|
||||||
('XKB_FIXED_VARIANT', xkb_setting),
|
('XKB_FIXED_VARIANT', xkb_setting),
|
||||||
|
|||||||
@ -276,7 +276,6 @@ node /org/freedesktop/login1 {
|
|||||||
readonly t RuntimeDirectoryInodesMax = ...;
|
readonly t RuntimeDirectoryInodesMax = ...;
|
||||||
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
|
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
|
||||||
readonly t InhibitorsMax = ...;
|
readonly t InhibitorsMax = ...;
|
||||||
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
|
|
||||||
readonly t NCurrentInhibitors = ...;
|
readonly t NCurrentInhibitors = ...;
|
||||||
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
|
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
|
||||||
readonly t SessionsMax = ...;
|
readonly t SessionsMax = ...;
|
||||||
@ -711,12 +710,19 @@ node /org/freedesktop/login1 {
|
|||||||
<function>CanRebootParameter()</function>, <function>CanRebootToFirmwareSetup()</function>,
|
<function>CanRebootParameter()</function>, <function>CanRebootToFirmwareSetup()</function>,
|
||||||
<function>CanRebootToBootLoaderMenu()</function>, and <function>CanRebootToBootLoaderEntry()</function>
|
<function>CanRebootToBootLoaderMenu()</function>, and <function>CanRebootToBootLoaderEntry()</function>
|
||||||
test whether the system supports the respective operation and whether the calling user is allowed to
|
test whether the system supports the respective operation and whether the calling user is allowed to
|
||||||
execute it. Returns one of <literal>na</literal>, <literal>yes</literal>, <literal>no</literal>, and
|
execute it. Returns one of <literal>na</literal>, <literal>yes</literal>, <literal>no</literal>,
|
||||||
<literal>challenge</literal>. If <literal>na</literal> is returned, the operation is not available because
|
<literal>challenge</literal>, and <literal>inhibited</literal>. If <literal>na</literal> is returned,
|
||||||
hardware, kernel, or drivers do not support it. If <literal>yes</literal> is returned, the operation is
|
the operation is not available because hardware, kernel, or drivers do not support it. If <literal>yes</literal>
|
||||||
supported and the user may execute the operation without further authentication. If <literal>no</literal>
|
is returned, the operation is supported and the user may execute the operation without further authentication.
|
||||||
is returned, the operation is available but the user is not allowed to execute the operation. If
|
If <literal>no</literal> is returned, the operation is available but the user is not allowed to execute
|
||||||
<literal>challenge</literal> is returned, the operation is available but only after authorization.</para>
|
the operation. If <literal>challenge</literal> is returned, the operation is available but only after
|
||||||
|
authorization. If <literal>inhibited</literal> is returned, the operation is normally available without
|
||||||
|
authorization but is currently inhibited. The operation is available only if inhibitors are ignored and
|
||||||
|
after authorization. If <literal>inhibitor-blocked</literal> is returned, the operation is normally
|
||||||
|
available without authorization but is currently inhibited. While the inhibitor remains active, the user
|
||||||
|
is not allowed to execute the operation. <literal>challenge-inhibitor-blocked</literal> is similar:
|
||||||
|
the operation is normally available after authorization but a held inhibitor disallows the user from
|
||||||
|
executing the operation.</para>
|
||||||
|
|
||||||
<para><function>ScheduleShutdown()</function> schedules a shutdown operation <varname>type</varname> at
|
<para><function>ScheduleShutdown()</function> schedules a shutdown operation <varname>type</varname> at
|
||||||
time <varname>usec</varname> in microseconds since the UNIX epoch. Alternatively, if
|
time <varname>usec</varname> in microseconds since the UNIX epoch. Alternatively, if
|
||||||
|
|||||||
@ -16,10 +16,7 @@ ENV{ID_BUS}=="bluetooth", ENV{ID_INTEGRATION}="external"
|
|||||||
ENV{ID_BUS}=="usb", DRIVERS=="usb", ATTRS{maxchild}=="0", ATTRS{removable}=="fixed", ENV{ID_INTEGRATION}="internal"
|
ENV{ID_BUS}=="usb", DRIVERS=="usb", ATTRS{maxchild}=="0", ATTRS{removable}=="fixed", ENV{ID_INTEGRATION}="internal"
|
||||||
ENV{ID_BUS}=="usb", DRIVERS=="usb", ATTRS{maxchild}=="0", ATTRS{removable}=="removable|unknown", ENV{ID_INTEGRATION}="external"
|
ENV{ID_BUS}=="usb", DRIVERS=="usb", ATTRS{maxchild}=="0", ATTRS{removable}=="removable|unknown", ENV{ID_INTEGRATION}="external"
|
||||||
|
|
||||||
# libinput compatibility variables, must be loaded before 70-(joystick|touchpad).rules to allow hwdb quirks to override.
|
# libinput compatibility, must be loaded before 70-touchpad.rules to allow hwdb quirks to override.
|
||||||
ENV{ID_INPUT}=="", GOTO="integration_libinput_end"
|
|
||||||
ENV{ID_INPUT_JOYSTICK}=="1", ENV{ID_INPUT_JOYSTICK_INTEGRATION}="$env{ID_INTEGRATION}"
|
|
||||||
ENV{ID_INPUT_TOUCHPAD}=="1", ENV{ID_INPUT_TOUCHPAD_INTEGRATION}="$env{ID_INTEGRATION}"
|
ENV{ID_INPUT_TOUCHPAD}=="1", ENV{ID_INPUT_TOUCHPAD_INTEGRATION}="$env{ID_INTEGRATION}"
|
||||||
LABEL="integration_libinput_end"
|
|
||||||
|
|
||||||
LABEL="integration_end"
|
LABEL="integration_end"
|
||||||
|
|||||||
@ -8,9 +8,4 @@ KERNEL!="event*", GOTO="joystick_end"
|
|||||||
KERNELS=="input*", ENV{ID_BUS}!="", \
|
KERNELS=="input*", ENV{ID_BUS}!="", \
|
||||||
IMPORT{builtin}="hwdb 'joystick:$env{ID_BUS}:v$attr{id/vendor}p$attr{id/product}:name:$attr{name}:'"
|
IMPORT{builtin}="hwdb 'joystick:$env{ID_BUS}:v$attr{id/vendor}p$attr{id/product}:name:$attr{name}:'"
|
||||||
|
|
||||||
# Spread the hwdb override to ID_INTEGRATION, in the future we could remove the
|
|
||||||
# joystick hwdb entirely or retain it using the generic ID_INTEGRATION instead
|
|
||||||
# specific ID_INPUT_JOYSTICK_INTEGRATION.
|
|
||||||
ENV{ID_INPUT_JOYSTICK_INTEGRATION}!="", ENV{ID_INTEGRATION}="$env{ID_INPUT_JOYSTICK_INTEGRATION}"
|
|
||||||
|
|
||||||
LABEL="joystick_end"
|
LABEL="joystick_end"
|
||||||
|
|||||||
@ -14,7 +14,7 @@ ENV{ID_SEAT}=="", IMPORT{parent}="ID_SEAT"
|
|||||||
|
|
||||||
ENV{ID_SEAT}!="", TAG+="$env{ID_SEAT}"
|
ENV{ID_SEAT}!="", TAG+="$env{ID_SEAT}"
|
||||||
{% if HAVE_ACL %}
|
{% if HAVE_ACL %}
|
||||||
TAG=="uaccess|xaccess", ENV{MAJOR}!="", RUN{builtin}+="uaccess"
|
TAG=="uaccess|xaccess-*", ENV{MAJOR}!="", RUN{builtin}+="uaccess"
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
LABEL="seat_late_end"
|
LABEL="seat_late_end"
|
||||||
|
|||||||
@ -80,6 +80,7 @@ NAME_TO_MAGIC = {
|
|||||||
'nsfs': ['NSFS_MAGIC'],
|
'nsfs': ['NSFS_MAGIC'],
|
||||||
'ntfs': ['NTFS_SB_MAGIC'],
|
'ntfs': ['NTFS_SB_MAGIC'],
|
||||||
'ntfs3': ['NTFS3_SUPER_MAGIC'],
|
'ntfs3': ['NTFS3_SUPER_MAGIC'],
|
||||||
|
'nullfs': ['NULL_FS_MAGIC'],
|
||||||
'ocfs2': ['OCFS2_SUPER_MAGIC'],
|
'ocfs2': ['OCFS2_SUPER_MAGIC'],
|
||||||
'openpromfs': ['OPENPROM_SUPER_MAGIC'],
|
'openpromfs': ['OPENPROM_SUPER_MAGIC'],
|
||||||
'orangefs': ['ORANGEFS_DEVREQ_MAGIC'],
|
'orangefs': ['ORANGEFS_DEVREQ_MAGIC'],
|
||||||
|
|||||||
@ -3,12 +3,16 @@
|
|||||||
set -eu
|
set -eu
|
||||||
set -o pipefail
|
set -o pipefail
|
||||||
|
|
||||||
# In kernel's arch/parisc/include/uapi/asm/errno.h, ECANCELLED and EREFUSED are defined as aliases of
|
# In kernel's arch/parisc/include/uapi/asm/errno.h, The following aliases are defined:
|
||||||
# ECANCELED and ECONNREFUSED, respectively. Let's drop them.
|
# ECANCELLED → ECANCELED
|
||||||
|
# EREFUSED → ECONNREFUSED
|
||||||
|
# EFSBADCRC → EBADMSG
|
||||||
|
# EFSCORRUPTED → EUCLEAN
|
||||||
|
# Let's drop them.
|
||||||
|
|
||||||
CC=${1:?}
|
CC=${1:?}
|
||||||
shift
|
shift
|
||||||
|
|
||||||
$CC -dM -include errno.h "$@" - </dev/null | \
|
$CC -dM -include errno.h "$@" - </dev/null | \
|
||||||
grep -Ev '^#define[[:space:]]+(ECANCELLED|EREFUSED)' | \
|
grep -Ev '^#define[[:space:]]+(ECANCELLED|EREFUSED|EFSBADCRC|EFSCORRUPTED)' | \
|
||||||
awk '/^#define[ \t]+E[^ _]+[ \t]+/ { print $2; }'
|
awk '/^#define[ \t]+E[^ _]+[ \t]+/ { print $2; }'
|
||||||
|
|||||||
@ -119,6 +119,14 @@ enum bpf_cgroup_iter_order {
|
|||||||
BPF_CGROUP_ITER_DESCENDANTS_PRE, /* walk descendants in pre-order. */
|
BPF_CGROUP_ITER_DESCENDANTS_PRE, /* walk descendants in pre-order. */
|
||||||
BPF_CGROUP_ITER_DESCENDANTS_POST, /* walk descendants in post-order. */
|
BPF_CGROUP_ITER_DESCENDANTS_POST, /* walk descendants in post-order. */
|
||||||
BPF_CGROUP_ITER_ANCESTORS_UP, /* walk ancestors upward. */
|
BPF_CGROUP_ITER_ANCESTORS_UP, /* walk ancestors upward. */
|
||||||
|
/*
|
||||||
|
* Walks the immediate children of the specified parent
|
||||||
|
* cgroup_subsys_state. Unlike BPF_CGROUP_ITER_DESCENDANTS_PRE,
|
||||||
|
* BPF_CGROUP_ITER_DESCENDANTS_POST, and BPF_CGROUP_ITER_ANCESTORS_UP
|
||||||
|
* the iterator does not include the specified parent as one of the
|
||||||
|
* returned iterator elements.
|
||||||
|
*/
|
||||||
|
BPF_CGROUP_ITER_CHILDREN,
|
||||||
};
|
};
|
||||||
|
|
||||||
union bpf_iter_link_info {
|
union bpf_iter_link_info {
|
||||||
@ -918,6 +926,16 @@ union bpf_iter_link_info {
|
|||||||
* Number of bytes read from the stream on success, or -1 if an
|
* Number of bytes read from the stream on success, or -1 if an
|
||||||
* error occurred (in which case, *errno* is set appropriately).
|
* error occurred (in which case, *errno* is set appropriately).
|
||||||
*
|
*
|
||||||
|
* BPF_PROG_ASSOC_STRUCT_OPS
|
||||||
|
* Description
|
||||||
|
* Associate a BPF program with a struct_ops map. The struct_ops
|
||||||
|
* map is identified by *map_fd* and the BPF program is
|
||||||
|
* identified by *prog_fd*.
|
||||||
|
*
|
||||||
|
* Return
|
||||||
|
* 0 on success or -1 if an error occurred (in which case,
|
||||||
|
* *errno* is set appropriately).
|
||||||
|
*
|
||||||
* NOTES
|
* NOTES
|
||||||
* eBPF objects (maps and programs) can be shared between processes.
|
* eBPF objects (maps and programs) can be shared between processes.
|
||||||
*
|
*
|
||||||
@ -974,6 +992,7 @@ enum bpf_cmd {
|
|||||||
BPF_PROG_BIND_MAP,
|
BPF_PROG_BIND_MAP,
|
||||||
BPF_TOKEN_CREATE,
|
BPF_TOKEN_CREATE,
|
||||||
BPF_PROG_STREAM_READ_BY_FD,
|
BPF_PROG_STREAM_READ_BY_FD,
|
||||||
|
BPF_PROG_ASSOC_STRUCT_OPS,
|
||||||
__MAX_BPF_CMD,
|
__MAX_BPF_CMD,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1134,6 +1153,7 @@ enum bpf_attach_type {
|
|||||||
BPF_NETKIT_PEER,
|
BPF_NETKIT_PEER,
|
||||||
BPF_TRACE_KPROBE_SESSION,
|
BPF_TRACE_KPROBE_SESSION,
|
||||||
BPF_TRACE_UPROBE_SESSION,
|
BPF_TRACE_UPROBE_SESSION,
|
||||||
|
BPF_TRACE_FSESSION,
|
||||||
__MAX_BPF_ATTACH_TYPE
|
__MAX_BPF_ATTACH_TYPE
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1373,6 +1393,8 @@ enum {
|
|||||||
BPF_NOEXIST = 1, /* create new element if it didn't exist */
|
BPF_NOEXIST = 1, /* create new element if it didn't exist */
|
||||||
BPF_EXIST = 2, /* update existing element */
|
BPF_EXIST = 2, /* update existing element */
|
||||||
BPF_F_LOCK = 4, /* spin_lock-ed map_lookup/map_update */
|
BPF_F_LOCK = 4, /* spin_lock-ed map_lookup/map_update */
|
||||||
|
BPF_F_CPU = 8, /* cpu flag for percpu maps, upper 32-bit of flags is a cpu number */
|
||||||
|
BPF_F_ALL_CPUS = 16, /* update value across all CPUs for percpu maps */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* flags for BPF_MAP_CREATE command */
|
/* flags for BPF_MAP_CREATE command */
|
||||||
@ -1894,6 +1916,12 @@ union bpf_attr {
|
|||||||
__u32 prog_fd;
|
__u32 prog_fd;
|
||||||
} prog_stream_read;
|
} prog_stream_read;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
__u32 map_fd;
|
||||||
|
__u32 prog_fd;
|
||||||
|
__u32 flags;
|
||||||
|
} prog_assoc_struct_ops;
|
||||||
|
|
||||||
} __attribute__((aligned(8)));
|
} __attribute__((aligned(8)));
|
||||||
|
|
||||||
/* The description below is an attempt at providing documentation to eBPF
|
/* The description below is an attempt at providing documentation to eBPF
|
||||||
|
|||||||
@ -334,6 +334,7 @@ struct btrfs_ioctl_fs_info_args {
|
|||||||
#define BTRFS_FEATURE_INCOMPAT_EXTENT_TREE_V2 (1ULL << 13)
|
#define BTRFS_FEATURE_INCOMPAT_EXTENT_TREE_V2 (1ULL << 13)
|
||||||
#define BTRFS_FEATURE_INCOMPAT_RAID_STRIPE_TREE (1ULL << 14)
|
#define BTRFS_FEATURE_INCOMPAT_RAID_STRIPE_TREE (1ULL << 14)
|
||||||
#define BTRFS_FEATURE_INCOMPAT_SIMPLE_QUOTA (1ULL << 16)
|
#define BTRFS_FEATURE_INCOMPAT_SIMPLE_QUOTA (1ULL << 16)
|
||||||
|
#define BTRFS_FEATURE_INCOMPAT_REMAP_TREE (1ULL << 17)
|
||||||
|
|
||||||
struct btrfs_ioctl_feature_flags {
|
struct btrfs_ioctl_feature_flags {
|
||||||
__u64 compat_flags;
|
__u64 compat_flags;
|
||||||
|
|||||||
@ -72,6 +72,9 @@
|
|||||||
/* Tracks RAID stripes in block groups. */
|
/* Tracks RAID stripes in block groups. */
|
||||||
#define BTRFS_RAID_STRIPE_TREE_OBJECTID 12ULL
|
#define BTRFS_RAID_STRIPE_TREE_OBJECTID 12ULL
|
||||||
|
|
||||||
|
/* Holds details of remapped addresses after relocation. */
|
||||||
|
#define BTRFS_REMAP_TREE_OBJECTID 13ULL
|
||||||
|
|
||||||
/* device stats in the device tree */
|
/* device stats in the device tree */
|
||||||
#define BTRFS_DEV_STATS_OBJECTID 0ULL
|
#define BTRFS_DEV_STATS_OBJECTID 0ULL
|
||||||
|
|
||||||
@ -278,6 +281,10 @@
|
|||||||
|
|
||||||
#define BTRFS_RAID_STRIPE_KEY 230
|
#define BTRFS_RAID_STRIPE_KEY 230
|
||||||
|
|
||||||
|
#define BTRFS_IDENTITY_REMAP_KEY 234
|
||||||
|
#define BTRFS_REMAP_KEY 235
|
||||||
|
#define BTRFS_REMAP_BACKREF_KEY 236
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Records the overall state of the qgroups.
|
* Records the overall state of the qgroups.
|
||||||
* There's only one instance of this key present,
|
* There's only one instance of this key present,
|
||||||
@ -710,9 +717,12 @@ struct btrfs_super_block {
|
|||||||
__u8 metadata_uuid[BTRFS_FSID_SIZE];
|
__u8 metadata_uuid[BTRFS_FSID_SIZE];
|
||||||
|
|
||||||
__u64 nr_global_roots;
|
__u64 nr_global_roots;
|
||||||
|
__le64 remap_root;
|
||||||
|
__le64 remap_root_generation;
|
||||||
|
__u8 remap_root_level;
|
||||||
|
|
||||||
/* Future expansion */
|
/* Future expansion */
|
||||||
__le64 reserved[27];
|
__u8 reserved[199];
|
||||||
__u8 sys_chunk_array[BTRFS_SYSTEM_CHUNK_ARRAY_SIZE];
|
__u8 sys_chunk_array[BTRFS_SYSTEM_CHUNK_ARRAY_SIZE];
|
||||||
struct btrfs_root_backup super_roots[BTRFS_NUM_BACKUP_ROOTS];
|
struct btrfs_root_backup super_roots[BTRFS_NUM_BACKUP_ROOTS];
|
||||||
|
|
||||||
@ -1157,12 +1167,15 @@ struct btrfs_dev_replace_item {
|
|||||||
#define BTRFS_BLOCK_GROUP_RAID6 (1ULL << 8)
|
#define BTRFS_BLOCK_GROUP_RAID6 (1ULL << 8)
|
||||||
#define BTRFS_BLOCK_GROUP_RAID1C3 (1ULL << 9)
|
#define BTRFS_BLOCK_GROUP_RAID1C3 (1ULL << 9)
|
||||||
#define BTRFS_BLOCK_GROUP_RAID1C4 (1ULL << 10)
|
#define BTRFS_BLOCK_GROUP_RAID1C4 (1ULL << 10)
|
||||||
|
#define BTRFS_BLOCK_GROUP_REMAPPED (1ULL << 11)
|
||||||
|
#define BTRFS_BLOCK_GROUP_METADATA_REMAP (1ULL << 12)
|
||||||
#define BTRFS_BLOCK_GROUP_RESERVED (BTRFS_AVAIL_ALLOC_BIT_SINGLE | \
|
#define BTRFS_BLOCK_GROUP_RESERVED (BTRFS_AVAIL_ALLOC_BIT_SINGLE | \
|
||||||
BTRFS_SPACE_INFO_GLOBAL_RSV)
|
BTRFS_SPACE_INFO_GLOBAL_RSV)
|
||||||
|
|
||||||
#define BTRFS_BLOCK_GROUP_TYPE_MASK (BTRFS_BLOCK_GROUP_DATA | \
|
#define BTRFS_BLOCK_GROUP_TYPE_MASK (BTRFS_BLOCK_GROUP_DATA | \
|
||||||
BTRFS_BLOCK_GROUP_SYSTEM | \
|
BTRFS_BLOCK_GROUP_SYSTEM | \
|
||||||
BTRFS_BLOCK_GROUP_METADATA)
|
BTRFS_BLOCK_GROUP_METADATA | \
|
||||||
|
BTRFS_BLOCK_GROUP_METADATA_REMAP)
|
||||||
|
|
||||||
#define BTRFS_BLOCK_GROUP_PROFILE_MASK (BTRFS_BLOCK_GROUP_RAID0 | \
|
#define BTRFS_BLOCK_GROUP_PROFILE_MASK (BTRFS_BLOCK_GROUP_RAID0 | \
|
||||||
BTRFS_BLOCK_GROUP_RAID1 | \
|
BTRFS_BLOCK_GROUP_RAID1 | \
|
||||||
@ -1215,6 +1228,14 @@ struct btrfs_block_group_item {
|
|||||||
__le64 flags;
|
__le64 flags;
|
||||||
} __attribute__ ((__packed__));
|
} __attribute__ ((__packed__));
|
||||||
|
|
||||||
|
struct btrfs_block_group_item_v2 {
|
||||||
|
__le64 used;
|
||||||
|
__le64 chunk_objectid;
|
||||||
|
__le64 flags;
|
||||||
|
__le64 remap_bytes;
|
||||||
|
__le32 identity_remap_count;
|
||||||
|
} __attribute__ ((__packed__));
|
||||||
|
|
||||||
struct btrfs_free_space_info {
|
struct btrfs_free_space_info {
|
||||||
__le32 extent_count;
|
__le32 extent_count;
|
||||||
__le32 flags;
|
__le32 flags;
|
||||||
@ -1319,4 +1340,13 @@ struct btrfs_verity_descriptor_item {
|
|||||||
__u8 encryption;
|
__u8 encryption;
|
||||||
} __attribute__ ((__packed__));
|
} __attribute__ ((__packed__));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For a range identified by a BTRFS_REMAP_KEY item in the remap tree, gives
|
||||||
|
* the address that the start of the range will get remapped to. This
|
||||||
|
* structure is also shared by BTRFS_REMAP_BACKREF_KEY.
|
||||||
|
*/
|
||||||
|
struct btrfs_remap_item {
|
||||||
|
__le64 address;
|
||||||
|
} __attribute__ ((__packed__));
|
||||||
|
|
||||||
#endif /* _BTRFS_CTREE_H_ */
|
#endif /* _BTRFS_CTREE_H_ */
|
||||||
|
|||||||
@ -15,11 +15,10 @@
|
|||||||
#define _LINUX_ETHTOOL_H
|
#define _LINUX_ETHTOOL_H
|
||||||
|
|
||||||
#include <linux/const.h>
|
#include <linux/const.h>
|
||||||
|
#include <linux/typelimits.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/if_ether.h>
|
#include <linux/if_ether.h>
|
||||||
|
|
||||||
#include <limits.h> /* for INT_MAX */
|
|
||||||
|
|
||||||
/* All structures exposed to userland should be defined such that they
|
/* All structures exposed to userland should be defined such that they
|
||||||
* have the same layout for 32-bit and 64-bit userland.
|
* have the same layout for 32-bit and 64-bit userland.
|
||||||
*/
|
*/
|
||||||
@ -601,6 +600,8 @@ enum ethtool_link_ext_state {
|
|||||||
ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED,
|
ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED,
|
||||||
ETHTOOL_LINK_EXT_STATE_OVERHEAT,
|
ETHTOOL_LINK_EXT_STATE_OVERHEAT,
|
||||||
ETHTOOL_LINK_EXT_STATE_MODULE,
|
ETHTOOL_LINK_EXT_STATE_MODULE,
|
||||||
|
ETHTOOL_LINK_EXT_STATE_OTP_SPEED_VIOLATION,
|
||||||
|
ETHTOOL_LINK_EXT_STATE_BMC_REQUEST_DOWN,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* More information in addition to ETHTOOL_LINK_EXT_STATE_AUTONEG. */
|
/* More information in addition to ETHTOOL_LINK_EXT_STATE_AUTONEG. */
|
||||||
@ -1092,13 +1093,20 @@ enum ethtool_module_fw_flash_status {
|
|||||||
* struct ethtool_gstrings - string set for data tagging
|
* struct ethtool_gstrings - string set for data tagging
|
||||||
* @cmd: Command number = %ETHTOOL_GSTRINGS
|
* @cmd: Command number = %ETHTOOL_GSTRINGS
|
||||||
* @string_set: String set ID; one of &enum ethtool_stringset
|
* @string_set: String set ID; one of &enum ethtool_stringset
|
||||||
* @len: On return, the number of strings in the string set
|
* @len: Number of strings in the string set
|
||||||
* @data: Buffer for strings. Each string is null-padded to a size of
|
* @data: Buffer for strings. Each string is null-padded to a size of
|
||||||
* %ETH_GSTRING_LEN.
|
* %ETH_GSTRING_LEN.
|
||||||
*
|
*
|
||||||
* Users must use %ETHTOOL_GSSET_INFO to find the number of strings in
|
* Users must use %ETHTOOL_GSSET_INFO to find the number of strings in
|
||||||
* the string set. They must allocate a buffer of the appropriate
|
* the string set. They must allocate a buffer of the appropriate
|
||||||
* size immediately following this structure.
|
* size immediately following this structure.
|
||||||
|
*
|
||||||
|
* Setting @len on input is optional (though preferred), but must be zeroed
|
||||||
|
* otherwise.
|
||||||
|
* When set, @len will return the requested count if it matches the actual
|
||||||
|
* count; otherwise, it will be zero.
|
||||||
|
* This prevents issues when the number of strings is different than the
|
||||||
|
* userspace allocation.
|
||||||
*/
|
*/
|
||||||
struct ethtool_gstrings {
|
struct ethtool_gstrings {
|
||||||
__u32 cmd;
|
__u32 cmd;
|
||||||
@ -1175,13 +1183,20 @@ struct ethtool_test {
|
|||||||
/**
|
/**
|
||||||
* struct ethtool_stats - device-specific statistics
|
* struct ethtool_stats - device-specific statistics
|
||||||
* @cmd: Command number = %ETHTOOL_GSTATS
|
* @cmd: Command number = %ETHTOOL_GSTATS
|
||||||
* @n_stats: On return, the number of statistics
|
* @n_stats: Number of statistics
|
||||||
* @data: Array of statistics
|
* @data: Array of statistics
|
||||||
*
|
*
|
||||||
* Users must use %ETHTOOL_GSSET_INFO or %ETHTOOL_GDRVINFO to find the
|
* Users must use %ETHTOOL_GSSET_INFO or %ETHTOOL_GDRVINFO to find the
|
||||||
* number of statistics that will be returned. They must allocate a
|
* number of statistics that will be returned. They must allocate a
|
||||||
* buffer of the appropriate size (8 * number of statistics)
|
* buffer of the appropriate size (8 * number of statistics)
|
||||||
* immediately following this structure.
|
* immediately following this structure.
|
||||||
|
*
|
||||||
|
* Setting @n_stats on input is optional (though preferred), but must be zeroed
|
||||||
|
* otherwise.
|
||||||
|
* When set, @n_stats will return the requested count if it matches the actual
|
||||||
|
* count; otherwise, it will be zero.
|
||||||
|
* This prevents issues when the number of stats is different than the
|
||||||
|
* userspace allocation.
|
||||||
*/
|
*/
|
||||||
struct ethtool_stats {
|
struct ethtool_stats {
|
||||||
__u32 cmd;
|
__u32 cmd;
|
||||||
@ -2188,6 +2203,7 @@ enum ethtool_link_mode_bit_indices {
|
|||||||
#define SPEED_40000 40000
|
#define SPEED_40000 40000
|
||||||
#define SPEED_50000 50000
|
#define SPEED_50000 50000
|
||||||
#define SPEED_56000 56000
|
#define SPEED_56000 56000
|
||||||
|
#define SPEED_80000 80000
|
||||||
#define SPEED_100000 100000
|
#define SPEED_100000 100000
|
||||||
#define SPEED_200000 200000
|
#define SPEED_200000 200000
|
||||||
#define SPEED_400000 400000
|
#define SPEED_400000 400000
|
||||||
@ -2198,7 +2214,7 @@ enum ethtool_link_mode_bit_indices {
|
|||||||
|
|
||||||
static __inline__ int ethtool_validate_speed(__u32 speed)
|
static __inline__ int ethtool_validate_speed(__u32 speed)
|
||||||
{
|
{
|
||||||
return speed <= INT_MAX || speed == (__u32)SPEED_UNKNOWN;
|
return speed <= __KERNEL_INT_MAX || speed == (__u32)SPEED_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Duplex, half or full. */
|
/* Duplex, half or full. */
|
||||||
|
|||||||
@ -249,6 +249,7 @@ struct file_attr {
|
|||||||
#define FS_XFLAG_FILESTREAM 0x00004000 /* use filestream allocator */
|
#define FS_XFLAG_FILESTREAM 0x00004000 /* use filestream allocator */
|
||||||
#define FS_XFLAG_DAX 0x00008000 /* use DAX for IO */
|
#define FS_XFLAG_DAX 0x00008000 /* use DAX for IO */
|
||||||
#define FS_XFLAG_COWEXTSIZE 0x00010000 /* CoW extent size allocator hint */
|
#define FS_XFLAG_COWEXTSIZE 0x00010000 /* CoW extent size allocator hint */
|
||||||
|
#define FS_XFLAG_VERITY 0x00020000 /* fs-verity enabled */
|
||||||
#define FS_XFLAG_HASATTR 0x80000000 /* no DIFLAG for this */
|
#define FS_XFLAG_HASATTR 0x80000000 /* no DIFLAG for this */
|
||||||
|
|
||||||
/* the read-only stuff doesn't really belong here, but any other place is
|
/* the read-only stuff doesn't really belong here, but any other place is
|
||||||
|
|||||||
@ -1441,6 +1441,7 @@ enum {
|
|||||||
IFLA_GENEVE_DF,
|
IFLA_GENEVE_DF,
|
||||||
IFLA_GENEVE_INNER_PROTO_INHERIT,
|
IFLA_GENEVE_INNER_PROTO_INHERIT,
|
||||||
IFLA_GENEVE_PORT_RANGE,
|
IFLA_GENEVE_PORT_RANGE,
|
||||||
|
IFLA_GENEVE_GRO_HINT,
|
||||||
__IFLA_GENEVE_MAX
|
__IFLA_GENEVE_MAX
|
||||||
};
|
};
|
||||||
#define IFLA_GENEVE_MAX (__IFLA_GENEVE_MAX - 1)
|
#define IFLA_GENEVE_MAX (__IFLA_GENEVE_MAX - 1)
|
||||||
|
|||||||
@ -104,5 +104,6 @@
|
|||||||
#define SECRETMEM_MAGIC 0x5345434d /* "SECM" */
|
#define SECRETMEM_MAGIC 0x5345434d /* "SECM" */
|
||||||
#define PID_FS_MAGIC 0x50494446 /* "PIDF" */
|
#define PID_FS_MAGIC 0x50494446 /* "PIDF" */
|
||||||
#define GUEST_MEMFD_MAGIC 0x474d454d /* "GMEM" */
|
#define GUEST_MEMFD_MAGIC 0x474d454d /* "GMEM" */
|
||||||
|
#define NULL_FS_MAGIC 0x4E554C4C /* "NULL" */
|
||||||
|
|
||||||
#endif /* __LINUX_MAGIC_H__ */
|
#endif /* __LINUX_MAGIC_H__ */
|
||||||
|
|||||||
@ -39,6 +39,9 @@ enum {
|
|||||||
#define MPOL_MODE_FLAGS \
|
#define MPOL_MODE_FLAGS \
|
||||||
(MPOL_F_STATIC_NODES | MPOL_F_RELATIVE_NODES | MPOL_F_NUMA_BALANCING)
|
(MPOL_F_STATIC_NODES | MPOL_F_RELATIVE_NODES | MPOL_F_NUMA_BALANCING)
|
||||||
|
|
||||||
|
/* Whether the nodemask is specified by users */
|
||||||
|
#define MPOL_USER_NODEMASK_FLAGS (MPOL_F_STATIC_NODES | MPOL_F_RELATIVE_NODES)
|
||||||
|
|
||||||
/* Flags for get_mempolicy */
|
/* Flags for get_mempolicy */
|
||||||
#define MPOL_F_NODE (1<<0) /* return next IL mode instead of node mask */
|
#define MPOL_F_NODE (1<<0) /* return next IL mode instead of node mask */
|
||||||
#define MPOL_F_ADDR (1<<1) /* look up vma using address */
|
#define MPOL_F_ADDR (1<<1) /* look up vma using address */
|
||||||
|
|||||||
@ -61,7 +61,8 @@
|
|||||||
/*
|
/*
|
||||||
* open_tree() flags.
|
* open_tree() flags.
|
||||||
*/
|
*/
|
||||||
#define OPEN_TREE_CLONE 1 /* Clone the target tree and attach the clone */
|
#define OPEN_TREE_CLONE (1 << 0) /* Clone the target tree and attach the clone */
|
||||||
|
#define OPEN_TREE_NAMESPACE (1 << 1) /* Clone the target tree into a new mount namespace */
|
||||||
#define OPEN_TREE_CLOEXEC O_CLOEXEC /* Close the file on execve() */
|
#define OPEN_TREE_CLOEXEC O_CLOEXEC /* Close the file on execve() */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -197,7 +198,10 @@ struct statmount {
|
|||||||
*/
|
*/
|
||||||
struct mnt_id_req {
|
struct mnt_id_req {
|
||||||
__u32 size;
|
__u32 size;
|
||||||
__u32 mnt_ns_fd;
|
union {
|
||||||
|
__u32 mnt_ns_fd;
|
||||||
|
__u32 mnt_fd;
|
||||||
|
};
|
||||||
__u64 mnt_id;
|
__u64 mnt_id;
|
||||||
__u64 param;
|
__u64 param;
|
||||||
__u64 mnt_ns_id;
|
__u64 mnt_ns_id;
|
||||||
@ -232,4 +236,9 @@ struct mnt_id_req {
|
|||||||
#define LSMT_ROOT 0xffffffffffffffff /* root mount */
|
#define LSMT_ROOT 0xffffffffffffffff /* root mount */
|
||||||
#define LISTMOUNT_REVERSE (1 << 0) /* List later mounts first */
|
#define LISTMOUNT_REVERSE (1 << 0) /* List later mounts first */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @flag bits for statmount(2)
|
||||||
|
*/
|
||||||
|
#define STATMOUNT_BY_FD 0x00000001U /* want mountinfo for given fd */
|
||||||
|
|
||||||
#endif /* _LINUX_MOUNT_H */
|
#endif /* _LINUX_MOUNT_H */
|
||||||
|
|||||||
@ -7,11 +7,10 @@
|
|||||||
|
|
||||||
|
|
||||||
#include <linux/netfilter.h>
|
#include <linux/netfilter.h>
|
||||||
|
#include <linux/typelimits.h>
|
||||||
|
|
||||||
/* only for userspace compatibility */
|
/* only for userspace compatibility */
|
||||||
|
|
||||||
#include <limits.h> /* for INT_MIN, INT_MAX */
|
|
||||||
|
|
||||||
/* IP Hooks */
|
/* IP Hooks */
|
||||||
/* After promisc drops, checksum checks. */
|
/* After promisc drops, checksum checks. */
|
||||||
#define NF_IP_PRE_ROUTING 0
|
#define NF_IP_PRE_ROUTING 0
|
||||||
@ -26,7 +25,7 @@
|
|||||||
#define NF_IP_NUMHOOKS 5
|
#define NF_IP_NUMHOOKS 5
|
||||||
|
|
||||||
enum nf_ip_hook_priorities {
|
enum nf_ip_hook_priorities {
|
||||||
NF_IP_PRI_FIRST = INT_MIN,
|
NF_IP_PRI_FIRST = __KERNEL_INT_MIN,
|
||||||
NF_IP_PRI_RAW_BEFORE_DEFRAG = -450,
|
NF_IP_PRI_RAW_BEFORE_DEFRAG = -450,
|
||||||
NF_IP_PRI_CONNTRACK_DEFRAG = -400,
|
NF_IP_PRI_CONNTRACK_DEFRAG = -400,
|
||||||
NF_IP_PRI_RAW = -300,
|
NF_IP_PRI_RAW = -300,
|
||||||
@ -39,8 +38,8 @@ enum nf_ip_hook_priorities {
|
|||||||
NF_IP_PRI_NAT_SRC = 100,
|
NF_IP_PRI_NAT_SRC = 100,
|
||||||
NF_IP_PRI_SELINUX_LAST = 225,
|
NF_IP_PRI_SELINUX_LAST = 225,
|
||||||
NF_IP_PRI_CONNTRACK_HELPER = 300,
|
NF_IP_PRI_CONNTRACK_HELPER = 300,
|
||||||
NF_IP_PRI_CONNTRACK_CONFIRM = INT_MAX,
|
NF_IP_PRI_CONNTRACK_CONFIRM = __KERNEL_INT_MAX,
|
||||||
NF_IP_PRI_LAST = INT_MAX,
|
NF_IP_PRI_LAST = __KERNEL_INT_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Arguments for setsockopt SOL_IP: */
|
/* Arguments for setsockopt SOL_IP: */
|
||||||
|
|||||||
@ -11,7 +11,7 @@
|
|||||||
* Copyright 2008 Jouni Malinen <jouni.malinen@atheros.com>
|
* Copyright 2008 Jouni Malinen <jouni.malinen@atheros.com>
|
||||||
* Copyright 2008 Colin McCabe <colin@cozybit.com>
|
* Copyright 2008 Colin McCabe <colin@cozybit.com>
|
||||||
* Copyright 2015-2017 Intel Deutschland GmbH
|
* Copyright 2015-2017 Intel Deutschland GmbH
|
||||||
* Copyright (C) 2018-2025 Intel Corporation
|
* Copyright (C) 2018-2026 Intel Corporation
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for any
|
* Permission to use, copy, modify, and/or distribute this software for any
|
||||||
* purpose with or without fee is hereby granted, provided that the above
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
@ -2974,6 +2974,16 @@ enum nl80211_commands {
|
|||||||
* primary channel is 2 MHz wide, and the control channel designates
|
* primary channel is 2 MHz wide, and the control channel designates
|
||||||
* the 1 MHz primary subchannel within that 2 MHz primary.
|
* the 1 MHz primary subchannel within that 2 MHz primary.
|
||||||
*
|
*
|
||||||
|
* @NL80211_ATTR_EPP_PEER: A flag attribute to indicate if the peer is an EPP
|
||||||
|
* STA. Used with %NL80211_CMD_NEW_STA and %NL80211_CMD_ADD_LINK_STA
|
||||||
|
*
|
||||||
|
* @NL80211_ATTR_UHR_CAPABILITY: UHR Capability information element (from
|
||||||
|
* association request when used with NL80211_CMD_NEW_STATION). Can be set
|
||||||
|
* only if HE/EHT are also available.
|
||||||
|
* @NL80211_ATTR_DISABLE_UHR: Force UHR capable interfaces to disable
|
||||||
|
* this feature during association. This is a flag attribute.
|
||||||
|
* Currently only supported in mac80211 drivers.
|
||||||
|
*
|
||||||
* @NUM_NL80211_ATTR: total number of nl80211_attrs available
|
* @NUM_NL80211_ATTR: total number of nl80211_attrs available
|
||||||
* @NL80211_ATTR_MAX: highest attribute number currently defined
|
* @NL80211_ATTR_MAX: highest attribute number currently defined
|
||||||
* @__NL80211_ATTR_AFTER_LAST: internal use
|
* @__NL80211_ATTR_AFTER_LAST: internal use
|
||||||
@ -3542,6 +3552,11 @@ enum nl80211_attrs {
|
|||||||
|
|
||||||
NL80211_ATTR_S1G_PRIMARY_2MHZ,
|
NL80211_ATTR_S1G_PRIMARY_2MHZ,
|
||||||
|
|
||||||
|
NL80211_ATTR_EPP_PEER,
|
||||||
|
|
||||||
|
NL80211_ATTR_UHR_CAPABILITY,
|
||||||
|
NL80211_ATTR_DISABLE_UHR,
|
||||||
|
|
||||||
/* add attributes here, update the policy in nl80211.c */
|
/* add attributes here, update the policy in nl80211.c */
|
||||||
|
|
||||||
__NL80211_ATTR_AFTER_LAST,
|
__NL80211_ATTR_AFTER_LAST,
|
||||||
@ -3894,6 +3909,12 @@ enum nl80211_eht_ru_alloc {
|
|||||||
* @NL80211_RATE_INFO_4_MHZ_WIDTH: 4 MHz S1G rate
|
* @NL80211_RATE_INFO_4_MHZ_WIDTH: 4 MHz S1G rate
|
||||||
* @NL80211_RATE_INFO_8_MHZ_WIDTH: 8 MHz S1G rate
|
* @NL80211_RATE_INFO_8_MHZ_WIDTH: 8 MHz S1G rate
|
||||||
* @NL80211_RATE_INFO_16_MHZ_WIDTH: 16 MHz S1G rate
|
* @NL80211_RATE_INFO_16_MHZ_WIDTH: 16 MHz S1G rate
|
||||||
|
* @NL80211_RATE_INFO_UHR_MCS: UHR MCS index (u8, 0-15, 17, 19, 20, 23)
|
||||||
|
* Note that the other EHT attributes (such as @NL80211_RATE_INFO_EHT_NSS)
|
||||||
|
* are used in conjunction with this where applicable
|
||||||
|
* @NL80211_RATE_INFO_UHR_ELR: UHR ELR flag, which restricts NSS to 1,
|
||||||
|
* MCS to 0 or 1, and GI to %NL80211_RATE_INFO_EHT_GI_1_6.
|
||||||
|
* @NL80211_RATE_INFO_UHR_IM: UHR Interference Mitigation flag
|
||||||
* @__NL80211_RATE_INFO_AFTER_LAST: internal use
|
* @__NL80211_RATE_INFO_AFTER_LAST: internal use
|
||||||
*/
|
*/
|
||||||
enum nl80211_rate_info {
|
enum nl80211_rate_info {
|
||||||
@ -3927,6 +3948,9 @@ enum nl80211_rate_info {
|
|||||||
NL80211_RATE_INFO_4_MHZ_WIDTH,
|
NL80211_RATE_INFO_4_MHZ_WIDTH,
|
||||||
NL80211_RATE_INFO_8_MHZ_WIDTH,
|
NL80211_RATE_INFO_8_MHZ_WIDTH,
|
||||||
NL80211_RATE_INFO_16_MHZ_WIDTH,
|
NL80211_RATE_INFO_16_MHZ_WIDTH,
|
||||||
|
NL80211_RATE_INFO_UHR_MCS,
|
||||||
|
NL80211_RATE_INFO_UHR_ELR,
|
||||||
|
NL80211_RATE_INFO_UHR_IM,
|
||||||
|
|
||||||
/* keep last */
|
/* keep last */
|
||||||
__NL80211_RATE_INFO_AFTER_LAST,
|
__NL80211_RATE_INFO_AFTER_LAST,
|
||||||
@ -4249,6 +4273,10 @@ enum nl80211_mpath_info {
|
|||||||
* capabilities element
|
* capabilities element
|
||||||
* @NL80211_BAND_IFTYPE_ATTR_EHT_CAP_PPE: EHT PPE thresholds information as
|
* @NL80211_BAND_IFTYPE_ATTR_EHT_CAP_PPE: EHT PPE thresholds information as
|
||||||
* defined in EHT capabilities element
|
* defined in EHT capabilities element
|
||||||
|
* @NL80211_BAND_IFTYPE_ATTR_UHR_CAP_MAC: UHR MAC capabilities as in UHR
|
||||||
|
* capabilities element
|
||||||
|
* @NL80211_BAND_IFTYPE_ATTR_UHR_CAP_PHY: UHR PHY capabilities as in UHR
|
||||||
|
* capabilities element
|
||||||
* @__NL80211_BAND_IFTYPE_ATTR_AFTER_LAST: internal use
|
* @__NL80211_BAND_IFTYPE_ATTR_AFTER_LAST: internal use
|
||||||
* @NL80211_BAND_IFTYPE_ATTR_MAX: highest band attribute currently defined
|
* @NL80211_BAND_IFTYPE_ATTR_MAX: highest band attribute currently defined
|
||||||
*/
|
*/
|
||||||
@ -4266,6 +4294,8 @@ enum nl80211_band_iftype_attr {
|
|||||||
NL80211_BAND_IFTYPE_ATTR_EHT_CAP_PHY,
|
NL80211_BAND_IFTYPE_ATTR_EHT_CAP_PHY,
|
||||||
NL80211_BAND_IFTYPE_ATTR_EHT_CAP_MCS_SET,
|
NL80211_BAND_IFTYPE_ATTR_EHT_CAP_MCS_SET,
|
||||||
NL80211_BAND_IFTYPE_ATTR_EHT_CAP_PPE,
|
NL80211_BAND_IFTYPE_ATTR_EHT_CAP_PPE,
|
||||||
|
NL80211_BAND_IFTYPE_ATTR_UHR_CAP_MAC,
|
||||||
|
NL80211_BAND_IFTYPE_ATTR_UHR_CAP_PHY,
|
||||||
|
|
||||||
/* keep last */
|
/* keep last */
|
||||||
__NL80211_BAND_IFTYPE_ATTR_AFTER_LAST,
|
__NL80211_BAND_IFTYPE_ATTR_AFTER_LAST,
|
||||||
@ -4445,6 +4475,11 @@ enum nl80211_wmm_rule {
|
|||||||
* channel in current regulatory domain.
|
* channel in current regulatory domain.
|
||||||
* @NL80211_FREQUENCY_ATTR_NO_16MHZ: 16 MHz operation is not allowed on this
|
* @NL80211_FREQUENCY_ATTR_NO_16MHZ: 16 MHz operation is not allowed on this
|
||||||
* channel in current regulatory domain.
|
* channel in current regulatory domain.
|
||||||
|
* @NL80211_FREQUENCY_ATTR_S1G_NO_PRIMARY: Channel is not permitted for use
|
||||||
|
* as a primary channel. Does not prevent the channel from existing
|
||||||
|
* as a non-primary subchannel. Only applicable to S1G channels.
|
||||||
|
* @NL80211_FREQUENCY_ATTR_NO_UHR: UHR operation is not allowed on this channel
|
||||||
|
* in current regulatory domain.
|
||||||
* @NL80211_FREQUENCY_ATTR_MAX: highest frequency attribute number
|
* @NL80211_FREQUENCY_ATTR_MAX: highest frequency attribute number
|
||||||
* currently defined
|
* currently defined
|
||||||
* @__NL80211_FREQUENCY_ATTR_AFTER_LAST: internal use
|
* @__NL80211_FREQUENCY_ATTR_AFTER_LAST: internal use
|
||||||
@ -4493,6 +4528,8 @@ enum nl80211_frequency_attr {
|
|||||||
NL80211_FREQUENCY_ATTR_NO_4MHZ,
|
NL80211_FREQUENCY_ATTR_NO_4MHZ,
|
||||||
NL80211_FREQUENCY_ATTR_NO_8MHZ,
|
NL80211_FREQUENCY_ATTR_NO_8MHZ,
|
||||||
NL80211_FREQUENCY_ATTR_NO_16MHZ,
|
NL80211_FREQUENCY_ATTR_NO_16MHZ,
|
||||||
|
NL80211_FREQUENCY_ATTR_S1G_NO_PRIMARY,
|
||||||
|
NL80211_FREQUENCY_ATTR_NO_UHR,
|
||||||
|
|
||||||
/* keep last */
|
/* keep last */
|
||||||
__NL80211_FREQUENCY_ATTR_AFTER_LAST,
|
__NL80211_FREQUENCY_ATTR_AFTER_LAST,
|
||||||
@ -4706,6 +4743,7 @@ enum nl80211_sched_scan_match_attr {
|
|||||||
* despite NO_IR configuration.
|
* despite NO_IR configuration.
|
||||||
* @NL80211_RRF_ALLOW_20MHZ_ACTIVITY: Allow activity in 20 MHz bandwidth,
|
* @NL80211_RRF_ALLOW_20MHZ_ACTIVITY: Allow activity in 20 MHz bandwidth,
|
||||||
* despite NO_IR configuration.
|
* despite NO_IR configuration.
|
||||||
|
* @NL80211_RRF_NO_UHR: UHR operation not allowed
|
||||||
*/
|
*/
|
||||||
enum nl80211_reg_rule_flags {
|
enum nl80211_reg_rule_flags {
|
||||||
NL80211_RRF_NO_OFDM = 1 << 0,
|
NL80211_RRF_NO_OFDM = 1 << 0,
|
||||||
@ -4732,6 +4770,7 @@ enum nl80211_reg_rule_flags {
|
|||||||
NL80211_RRF_NO_6GHZ_AFC_CLIENT = 1 << 23,
|
NL80211_RRF_NO_6GHZ_AFC_CLIENT = 1 << 23,
|
||||||
NL80211_RRF_ALLOW_6GHZ_VLP_AP = 1 << 24,
|
NL80211_RRF_ALLOW_6GHZ_VLP_AP = 1 << 24,
|
||||||
NL80211_RRF_ALLOW_20MHZ_ACTIVITY = 1 << 25,
|
NL80211_RRF_ALLOW_20MHZ_ACTIVITY = 1 << 25,
|
||||||
|
NL80211_RRF_NO_UHR = 1 << 26,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define NL80211_RRF_PASSIVE_SCAN NL80211_RRF_NO_IR
|
#define NL80211_RRF_PASSIVE_SCAN NL80211_RRF_NO_IR
|
||||||
@ -5426,6 +5465,7 @@ enum nl80211_bss_status {
|
|||||||
* @NL80211_AUTHTYPE_FILS_SK: Fast Initial Link Setup shared key
|
* @NL80211_AUTHTYPE_FILS_SK: Fast Initial Link Setup shared key
|
||||||
* @NL80211_AUTHTYPE_FILS_SK_PFS: Fast Initial Link Setup shared key with PFS
|
* @NL80211_AUTHTYPE_FILS_SK_PFS: Fast Initial Link Setup shared key with PFS
|
||||||
* @NL80211_AUTHTYPE_FILS_PK: Fast Initial Link Setup public key
|
* @NL80211_AUTHTYPE_FILS_PK: Fast Initial Link Setup public key
|
||||||
|
* @NL80211_AUTHTYPE_EPPKE: Enhanced Privacy Protection Key Exchange
|
||||||
* @__NL80211_AUTHTYPE_NUM: internal
|
* @__NL80211_AUTHTYPE_NUM: internal
|
||||||
* @NL80211_AUTHTYPE_MAX: maximum valid auth algorithm
|
* @NL80211_AUTHTYPE_MAX: maximum valid auth algorithm
|
||||||
* @NL80211_AUTHTYPE_AUTOMATIC: determine automatically (if necessary by
|
* @NL80211_AUTHTYPE_AUTOMATIC: determine automatically (if necessary by
|
||||||
@ -5441,6 +5481,7 @@ enum nl80211_auth_type {
|
|||||||
NL80211_AUTHTYPE_FILS_SK,
|
NL80211_AUTHTYPE_FILS_SK,
|
||||||
NL80211_AUTHTYPE_FILS_SK_PFS,
|
NL80211_AUTHTYPE_FILS_SK_PFS,
|
||||||
NL80211_AUTHTYPE_FILS_PK,
|
NL80211_AUTHTYPE_FILS_PK,
|
||||||
|
NL80211_AUTHTYPE_EPPKE,
|
||||||
|
|
||||||
/* keep last */
|
/* keep last */
|
||||||
__NL80211_AUTHTYPE_NUM,
|
__NL80211_AUTHTYPE_NUM,
|
||||||
@ -6745,6 +6786,15 @@ enum nl80211_feature_flags {
|
|||||||
* @NL80211_EXT_FEATURE_BEACON_RATE_EHT: Driver supports beacon rate
|
* @NL80211_EXT_FEATURE_BEACON_RATE_EHT: Driver supports beacon rate
|
||||||
* configuration (AP/mesh) with EHT rates.
|
* configuration (AP/mesh) with EHT rates.
|
||||||
*
|
*
|
||||||
|
* @NL80211_EXT_FEATURE_EPPKE: Driver supports Enhanced Privacy Protection
|
||||||
|
* Key Exchange (EPPKE) with user space SME (NL80211_CMD_AUTHENTICATE)
|
||||||
|
* in non-AP STA mode.
|
||||||
|
*
|
||||||
|
* @NL80211_EXT_FEATURE_ASSOC_FRAME_ENCRYPTION: This specifies that the
|
||||||
|
* driver supports encryption of (Re)Association Request and Response
|
||||||
|
* frames in both non‑AP STA and AP mode as specified in
|
||||||
|
* "IEEE P802.11bi/D3.0, 12.16.6".
|
||||||
|
*
|
||||||
* @NUM_NL80211_EXT_FEATURES: number of extended features.
|
* @NUM_NL80211_EXT_FEATURES: number of extended features.
|
||||||
* @MAX_NL80211_EXT_FEATURES: highest extended feature index.
|
* @MAX_NL80211_EXT_FEATURES: highest extended feature index.
|
||||||
*/
|
*/
|
||||||
@ -6821,6 +6871,8 @@ enum nl80211_ext_feature_index {
|
|||||||
NL80211_EXT_FEATURE_DFS_CONCURRENT,
|
NL80211_EXT_FEATURE_DFS_CONCURRENT,
|
||||||
NL80211_EXT_FEATURE_SPP_AMSDU_SUPPORT,
|
NL80211_EXT_FEATURE_SPP_AMSDU_SUPPORT,
|
||||||
NL80211_EXT_FEATURE_BEACON_RATE_EHT,
|
NL80211_EXT_FEATURE_BEACON_RATE_EHT,
|
||||||
|
NL80211_EXT_FEATURE_EPPKE,
|
||||||
|
NL80211_EXT_FEATURE_ASSOC_FRAME_ENCRYPTION,
|
||||||
|
|
||||||
/* add new features before the definition below */
|
/* add new features before the definition below */
|
||||||
NUM_NL80211_EXT_FEATURES,
|
NUM_NL80211_EXT_FEATURES,
|
||||||
@ -7433,6 +7485,8 @@ enum nl80211_nan_band_conf_attributes {
|
|||||||
* address that can take values from 50-6F-9A-01-00-00 to
|
* address that can take values from 50-6F-9A-01-00-00 to
|
||||||
* 50-6F-9A-01-FF-FF. This attribute is optional. If not present,
|
* 50-6F-9A-01-FF-FF. This attribute is optional. If not present,
|
||||||
* a random Cluster ID will be chosen.
|
* a random Cluster ID will be chosen.
|
||||||
|
* This attribute will be ignored in NL80211_CMD_CHANGE_NAN_CONFIG
|
||||||
|
* since after NAN was started, the cluster ID can no longer change.
|
||||||
* @NL80211_NAN_CONF_EXTRA_ATTRS: Additional NAN attributes to be
|
* @NL80211_NAN_CONF_EXTRA_ATTRS: Additional NAN attributes to be
|
||||||
* published in the beacons. This is an optional byte array.
|
* published in the beacons. This is an optional byte array.
|
||||||
* @NL80211_NAN_CONF_VENDOR_ELEMS: Vendor-specific elements that will
|
* @NL80211_NAN_CONF_VENDOR_ELEMS: Vendor-specific elements that will
|
||||||
@ -7767,6 +7821,30 @@ enum nl80211_peer_measurement_attrs {
|
|||||||
* trigger based ranging measurement is supported
|
* trigger based ranging measurement is supported
|
||||||
* @NL80211_PMSR_FTM_CAPA_ATTR_NON_TRIGGER_BASED: flag attribute indicating
|
* @NL80211_PMSR_FTM_CAPA_ATTR_NON_TRIGGER_BASED: flag attribute indicating
|
||||||
* if non-trigger-based ranging measurement is supported
|
* if non-trigger-based ranging measurement is supported
|
||||||
|
* @NL80211_PMSR_FTM_CAPA_ATTR_6GHZ_SUPPORT: flag attribute indicating if
|
||||||
|
* ranging on the 6 GHz band is supported
|
||||||
|
* @NL80211_PMSR_FTM_CAPA_ATTR_MAX_TX_LTF_REP: u32 attribute indicating
|
||||||
|
* the maximum number of LTF repetitions the device can transmit in the
|
||||||
|
* preamble of the ranging NDP (zero means only one LTF, no repetitions)
|
||||||
|
* @NL80211_PMSR_FTM_CAPA_ATTR_MAX_RX_LTF_REP: u32 attribute indicating
|
||||||
|
* the maximum number of LTF repetitions the device can receive in the
|
||||||
|
* preamble of the ranging NDP (zero means only one LTF, no repetitions)
|
||||||
|
* @NL80211_PMSR_FTM_CAPA_ATTR_MAX_TX_STS: u32 attribute indicating
|
||||||
|
* the maximum number of space-time streams supported for ranging NDP TX
|
||||||
|
* (zero-based)
|
||||||
|
* @NL80211_PMSR_FTM_CAPA_ATTR_MAX_RX_STS: u32 attribute indicating
|
||||||
|
* the maximum number of space-time streams supported for ranging NDP RX
|
||||||
|
* (zero-based)
|
||||||
|
* @NL80211_PMSR_FTM_CAPA_ATTR_MAX_TOTAL_LTF_TX: u32 attribute indicating the
|
||||||
|
* maximum total number of LTFs the device can transmit. The total number
|
||||||
|
* of LTFs is (number of LTF repetitions) * (number of space-time streams).
|
||||||
|
* This limits the allowed combinations of LTF repetitions and STS.
|
||||||
|
* @NL80211_PMSR_FTM_CAPA_ATTR_MAX_TOTAL_LTF_RX: u32 attribute indicating the
|
||||||
|
* maximum total number of LTFs the device can receive. The total number
|
||||||
|
* of LTFs is (number of LTF repetitions) * (number of space-time streams).
|
||||||
|
* This limits the allowed combinations of LTF repetitions and STS.
|
||||||
|
* @NL80211_PMSR_FTM_CAPA_ATTR_RSTA_SUPPORT: flag attribute indicating the
|
||||||
|
* device supports operating as the RSTA in PMSR FTM request
|
||||||
*
|
*
|
||||||
* @NUM_NL80211_PMSR_FTM_CAPA_ATTR: internal
|
* @NUM_NL80211_PMSR_FTM_CAPA_ATTR: internal
|
||||||
* @NL80211_PMSR_FTM_CAPA_ATTR_MAX: highest attribute number
|
* @NL80211_PMSR_FTM_CAPA_ATTR_MAX: highest attribute number
|
||||||
@ -7784,6 +7862,14 @@ enum nl80211_peer_measurement_ftm_capa {
|
|||||||
NL80211_PMSR_FTM_CAPA_ATTR_MAX_FTMS_PER_BURST,
|
NL80211_PMSR_FTM_CAPA_ATTR_MAX_FTMS_PER_BURST,
|
||||||
NL80211_PMSR_FTM_CAPA_ATTR_TRIGGER_BASED,
|
NL80211_PMSR_FTM_CAPA_ATTR_TRIGGER_BASED,
|
||||||
NL80211_PMSR_FTM_CAPA_ATTR_NON_TRIGGER_BASED,
|
NL80211_PMSR_FTM_CAPA_ATTR_NON_TRIGGER_BASED,
|
||||||
|
NL80211_PMSR_FTM_CAPA_ATTR_6GHZ_SUPPORT,
|
||||||
|
NL80211_PMSR_FTM_CAPA_ATTR_MAX_TX_LTF_REP,
|
||||||
|
NL80211_PMSR_FTM_CAPA_ATTR_MAX_RX_LTF_REP,
|
||||||
|
NL80211_PMSR_FTM_CAPA_ATTR_MAX_TX_STS,
|
||||||
|
NL80211_PMSR_FTM_CAPA_ATTR_MAX_RX_STS,
|
||||||
|
NL80211_PMSR_FTM_CAPA_ATTR_MAX_TOTAL_LTF_TX,
|
||||||
|
NL80211_PMSR_FTM_CAPA_ATTR_MAX_TOTAL_LTF_RX,
|
||||||
|
NL80211_PMSR_FTM_CAPA_ATTR_RSTA_SUPPORT,
|
||||||
|
|
||||||
/* keep last */
|
/* keep last */
|
||||||
NUM_NL80211_PMSR_FTM_CAPA_ATTR,
|
NUM_NL80211_PMSR_FTM_CAPA_ATTR,
|
||||||
@ -7799,12 +7885,15 @@ enum nl80211_peer_measurement_ftm_capa {
|
|||||||
* &enum nl80211_preamble), optional for DMG (u32)
|
* &enum nl80211_preamble), optional for DMG (u32)
|
||||||
* @NL80211_PMSR_FTM_REQ_ATTR_NUM_BURSTS_EXP: number of bursts exponent as in
|
* @NL80211_PMSR_FTM_REQ_ATTR_NUM_BURSTS_EXP: number of bursts exponent as in
|
||||||
* 802.11-2016 9.4.2.168 "Fine Timing Measurement Parameters element"
|
* 802.11-2016 9.4.2.168 "Fine Timing Measurement Parameters element"
|
||||||
* (u8, 0-15, optional with default 15 i.e. "no preference")
|
* (u8, 0-15, optional with default 15 i.e. "no preference". No limit for
|
||||||
|
* non-EDCA ranging)
|
||||||
* @NL80211_PMSR_FTM_REQ_ATTR_BURST_PERIOD: interval between bursts in units
|
* @NL80211_PMSR_FTM_REQ_ATTR_BURST_PERIOD: interval between bursts in units
|
||||||
* of 100ms (u16, optional with default 0)
|
* of 100ms (u16, optional with default 0)
|
||||||
* @NL80211_PMSR_FTM_REQ_ATTR_BURST_DURATION: burst duration, as in 802.11-2016
|
* @NL80211_PMSR_FTM_REQ_ATTR_BURST_DURATION: burst duration, as in 802.11-2016
|
||||||
* Table 9-257 "Burst Duration field encoding" (u8, 0-15, optional with
|
* Table 9-257 "Burst Duration field encoding" (u8, 0-15, optional with
|
||||||
* default 15 i.e. "no preference")
|
* default 15 i.e. "no preference"). For non-EDCA ranging, this is the
|
||||||
|
* burst duration in milliseconds (optional with default 0, i.e. let the
|
||||||
|
* device decide).
|
||||||
* @NL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST: number of successful FTM frames
|
* @NL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST: number of successful FTM frames
|
||||||
* requested per burst
|
* requested per burst
|
||||||
* (u8, 0-31, optional with default 0 i.e. "no preference")
|
* (u8, 0-31, optional with default 0 i.e. "no preference")
|
||||||
@ -7833,6 +7922,14 @@ enum nl80211_peer_measurement_ftm_capa {
|
|||||||
* @NL80211_PMSR_FTM_REQ_ATTR_BSS_COLOR: optional. The BSS color of the
|
* @NL80211_PMSR_FTM_REQ_ATTR_BSS_COLOR: optional. The BSS color of the
|
||||||
* responder. Only valid if %NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED
|
* responder. Only valid if %NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED
|
||||||
* or %NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED is set.
|
* or %NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED is set.
|
||||||
|
* @NL80211_PMSR_FTM_REQ_ATTR_RSTA: optional. Request to perform the measurement
|
||||||
|
* as the RSTA (flag). When set, the device is expected to dwell on the
|
||||||
|
* channel specified in %NL80211_PMSR_PEER_ATTR_CHAN until it receives the
|
||||||
|
* FTM request from the peer or the timeout specified by
|
||||||
|
* %NL80211_ATTR_TIMEOUT has expired.
|
||||||
|
* Only valid if %NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK is set (so the
|
||||||
|
* RSTA will have the measurement results to report back in the FTM
|
||||||
|
* response).
|
||||||
*
|
*
|
||||||
* @NUM_NL80211_PMSR_FTM_REQ_ATTR: internal
|
* @NUM_NL80211_PMSR_FTM_REQ_ATTR: internal
|
||||||
* @NL80211_PMSR_FTM_REQ_ATTR_MAX: highest attribute number
|
* @NL80211_PMSR_FTM_REQ_ATTR_MAX: highest attribute number
|
||||||
@ -7853,6 +7950,7 @@ enum nl80211_peer_measurement_ftm_req {
|
|||||||
NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED,
|
NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED,
|
||||||
NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK,
|
NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK,
|
||||||
NL80211_PMSR_FTM_REQ_ATTR_BSS_COLOR,
|
NL80211_PMSR_FTM_REQ_ATTR_BSS_COLOR,
|
||||||
|
NL80211_PMSR_FTM_REQ_ATTR_RSTA,
|
||||||
|
|
||||||
/* keep last */
|
/* keep last */
|
||||||
NUM_NL80211_PMSR_FTM_REQ_ATTR,
|
NUM_NL80211_PMSR_FTM_REQ_ATTR,
|
||||||
@ -7937,6 +8035,8 @@ enum nl80211_peer_measurement_ftm_failure_reasons {
|
|||||||
* 9.4.2.22.1) starting with the Measurement Token, with Measurement
|
* 9.4.2.22.1) starting with the Measurement Token, with Measurement
|
||||||
* Type 11.
|
* Type 11.
|
||||||
* @NL80211_PMSR_FTM_RESP_ATTR_PAD: ignore, for u64/s64 padding only
|
* @NL80211_PMSR_FTM_RESP_ATTR_PAD: ignore, for u64/s64 padding only
|
||||||
|
* @NL80211_PMSR_FTM_RESP_ATTR_BURST_PERIOD: actual burst period used by
|
||||||
|
* the responder (similar to request, u16)
|
||||||
*
|
*
|
||||||
* @NUM_NL80211_PMSR_FTM_RESP_ATTR: internal
|
* @NUM_NL80211_PMSR_FTM_RESP_ATTR: internal
|
||||||
* @NL80211_PMSR_FTM_RESP_ATTR_MAX: highest attribute number
|
* @NL80211_PMSR_FTM_RESP_ATTR_MAX: highest attribute number
|
||||||
@ -7965,6 +8065,7 @@ enum nl80211_peer_measurement_ftm_resp {
|
|||||||
NL80211_PMSR_FTM_RESP_ATTR_LCI,
|
NL80211_PMSR_FTM_RESP_ATTR_LCI,
|
||||||
NL80211_PMSR_FTM_RESP_ATTR_CIVICLOC,
|
NL80211_PMSR_FTM_RESP_ATTR_CIVICLOC,
|
||||||
NL80211_PMSR_FTM_RESP_ATTR_PAD,
|
NL80211_PMSR_FTM_RESP_ATTR_PAD,
|
||||||
|
NL80211_PMSR_FTM_RESP_ATTR_BURST_PERIOD,
|
||||||
|
|
||||||
/* keep last */
|
/* keep last */
|
||||||
NUM_NL80211_PMSR_FTM_RESP_ATTR,
|
NUM_NL80211_PMSR_FTM_RESP_ATTR,
|
||||||
|
|||||||
@ -1036,6 +1036,7 @@ enum {
|
|||||||
TCA_CAKE_STATS_DROP_NEXT_US,
|
TCA_CAKE_STATS_DROP_NEXT_US,
|
||||||
TCA_CAKE_STATS_P_DROP,
|
TCA_CAKE_STATS_P_DROP,
|
||||||
TCA_CAKE_STATS_BLUE_TIMER_US,
|
TCA_CAKE_STATS_BLUE_TIMER_US,
|
||||||
|
TCA_CAKE_STATS_ACTIVE_QUEUES,
|
||||||
__TCA_CAKE_STATS_MAX
|
__TCA_CAKE_STATS_MAX
|
||||||
};
|
};
|
||||||
#define TCA_CAKE_STATS_MAX (__TCA_CAKE_STATS_MAX - 1)
|
#define TCA_CAKE_STATS_MAX (__TCA_CAKE_STATS_MAX - 1)
|
||||||
|
|||||||
@ -386,4 +386,41 @@ struct prctl_mm_map {
|
|||||||
# define PR_FUTEX_HASH_SET_SLOTS 1
|
# define PR_FUTEX_HASH_SET_SLOTS 1
|
||||||
# define PR_FUTEX_HASH_GET_SLOTS 2
|
# define PR_FUTEX_HASH_GET_SLOTS 2
|
||||||
|
|
||||||
|
/* RSEQ time slice extensions */
|
||||||
|
#define PR_RSEQ_SLICE_EXTENSION 79
|
||||||
|
# define PR_RSEQ_SLICE_EXTENSION_GET 1
|
||||||
|
# define PR_RSEQ_SLICE_EXTENSION_SET 2
|
||||||
|
/*
|
||||||
|
* Bits for RSEQ_SLICE_EXTENSION_GET/SET
|
||||||
|
* PR_RSEQ_SLICE_EXT_ENABLE: Enable
|
||||||
|
*/
|
||||||
|
# define PR_RSEQ_SLICE_EXT_ENABLE 0x01
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get the current indirect branch tracking configuration for the current
|
||||||
|
* thread, this will be the value configured via PR_SET_INDIR_BR_LP_STATUS.
|
||||||
|
*/
|
||||||
|
#define PR_GET_INDIR_BR_LP_STATUS 80
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the indirect branch tracking configuration. PR_INDIR_BR_LP_ENABLE will
|
||||||
|
* enable cpu feature for user thread, to track all indirect branches and ensure
|
||||||
|
* they land on arch defined landing pad instruction.
|
||||||
|
* x86 - If enabled, an indirect branch must land on an ENDBRANCH instruction.
|
||||||
|
* arch64 - If enabled, an indirect branch must land on a BTI instruction.
|
||||||
|
* riscv - If enabled, an indirect branch must land on an lpad instruction.
|
||||||
|
* PR_INDIR_BR_LP_DISABLE will disable feature for user thread and indirect
|
||||||
|
* branches will no more be tracked by cpu to land on arch defined landing pad
|
||||||
|
* instruction.
|
||||||
|
*/
|
||||||
|
#define PR_SET_INDIR_BR_LP_STATUS 81
|
||||||
|
# define PR_INDIR_BR_LP_ENABLE (1UL << 0)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Prevent further changes to the specified indirect branch tracking
|
||||||
|
* configuration. All bits may be locked via this call, including
|
||||||
|
* undefined bits.
|
||||||
|
*/
|
||||||
|
#define PR_LOCK_INDIR_BR_LP_STATUS 82
|
||||||
|
|
||||||
#endif /* _LINUX_PRCTL_H */
|
#endif /* _LINUX_PRCTL_H */
|
||||||
|
|||||||
@ -69,6 +69,10 @@
|
|||||||
#define __counted_by_be(m)
|
#define __counted_by_be(m)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __counted_by_ptr
|
||||||
|
#define __counted_by_ptr(m)
|
||||||
|
#endif
|
||||||
|
|
||||||
#define __kernel_nonstring
|
#define __kernel_nonstring
|
||||||
|
|
||||||
#endif /* _LINUX_STDDEF_H */
|
#endif /* _LINUX_STDDEF_H */
|
||||||
|
|||||||
8
src/include/uapi/linux/typelimits.h
Normal file
8
src/include/uapi/linux/typelimits.h
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||||
|
#ifndef _LINUX_TYPELIMITS_H
|
||||||
|
#define _LINUX_TYPELIMITS_H
|
||||||
|
|
||||||
|
#define __KERNEL_INT_MAX ((int)(~0U >> 1))
|
||||||
|
#define __KERNEL_INT_MIN (-__KERNEL_INT_MAX - 1)
|
||||||
|
|
||||||
|
#endif /* _LINUX_TYPELIMITS_H */
|
||||||
@ -2927,7 +2927,6 @@ static int method_can_shutdown_or_sleep(
|
|||||||
_cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
|
_cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
|
||||||
bool multiple_sessions, challenge, blocked, check_unit_state = true;
|
bool multiple_sessions, challenge, blocked, check_unit_state = true;
|
||||||
const HandleActionData *a;
|
const HandleActionData *a;
|
||||||
const char *result = NULL;
|
|
||||||
uid_t uid;
|
uid_t uid;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
@ -2984,12 +2983,27 @@ static int method_can_shutdown_or_sleep(
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
if (!streq(load_state, "loaded")) {
|
if (!streq(load_state, "loaded"))
|
||||||
result = "no";
|
return sd_bus_reply_method_return(message, "s", "no");
|
||||||
goto finish;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *result;
|
||||||
|
r = bus_test_polkit(
|
||||||
|
message,
|
||||||
|
a->polkit_action,
|
||||||
|
/* details= */ NULL,
|
||||||
|
/* good_user= */ UID_INVALID,
|
||||||
|
&challenge,
|
||||||
|
error);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
if (r > 0)
|
||||||
|
result = "yes";
|
||||||
|
else if (challenge)
|
||||||
|
result = "challenge";
|
||||||
|
else
|
||||||
|
result = "no";
|
||||||
|
|
||||||
if (multiple_sessions) {
|
if (multiple_sessions) {
|
||||||
r = bus_test_polkit(
|
r = bus_test_polkit(
|
||||||
message,
|
message,
|
||||||
@ -3001,12 +3015,13 @@ static int method_can_shutdown_or_sleep(
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
if (r > 0)
|
if (r == 0) {
|
||||||
result = "yes";
|
if (challenge) {
|
||||||
else if (challenge)
|
if (streq(result, "yes")) /* Avoid upgrading no -> challenge */
|
||||||
result = "challenge";
|
result = "challenge";
|
||||||
else
|
} else
|
||||||
result = "no";
|
result = "no";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (blocked) {
|
if (blocked) {
|
||||||
@ -3020,39 +3035,21 @@ static int method_can_shutdown_or_sleep(
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
if (r > 0) {
|
if (r == 0) {
|
||||||
if (!result)
|
if (challenge) {
|
||||||
result = "yes";
|
if (streq(result, "yes"))
|
||||||
} else if (challenge) {
|
result = "inhibited";
|
||||||
if (!result || streq(result, "yes"))
|
/* If result is already "challenge" or "no", the held inhibitor has no effect */
|
||||||
result = "challenge";
|
} else {
|
||||||
} else
|
if (streq(result, "yes"))
|
||||||
result = "no";
|
result = "inhibitor-blocked";
|
||||||
|
else if (streq(result, "challenge"))
|
||||||
|
result = "challenge-inhibitor-blocked";
|
||||||
|
/* If the result is already "no", the held inhibitor has no effect */
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!multiple_sessions && !blocked) {
|
|
||||||
/* If neither inhibit nor multiple sessions
|
|
||||||
* apply then just check the normal policy */
|
|
||||||
|
|
||||||
r = bus_test_polkit(
|
|
||||||
message,
|
|
||||||
a->polkit_action,
|
|
||||||
/* details= */ NULL,
|
|
||||||
/* good_user= */ UID_INVALID,
|
|
||||||
&challenge,
|
|
||||||
error);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
if (r > 0)
|
|
||||||
result = "yes";
|
|
||||||
else if (challenge)
|
|
||||||
result = "challenge";
|
|
||||||
else
|
|
||||||
result = "no";
|
|
||||||
}
|
|
||||||
|
|
||||||
finish:
|
|
||||||
return sd_bus_reply_method_return(message, "s", result);
|
return sd_bus_reply_method_return(message, "s", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3963,7 +3960,7 @@ static const sd_bus_vtable manager_vtable[] = {
|
|||||||
SD_BUS_PROPERTY("RuntimeDirectorySize", "t", NULL, offsetof(Manager, runtime_dir_size), SD_BUS_VTABLE_PROPERTY_CONST),
|
SD_BUS_PROPERTY("RuntimeDirectorySize", "t", NULL, offsetof(Manager, runtime_dir_size), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||||
SD_BUS_PROPERTY("RuntimeDirectoryInodesMax", "t", NULL, offsetof(Manager, runtime_dir_inodes), SD_BUS_VTABLE_PROPERTY_CONST),
|
SD_BUS_PROPERTY("RuntimeDirectoryInodesMax", "t", NULL, offsetof(Manager, runtime_dir_inodes), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||||
SD_BUS_PROPERTY("InhibitorsMax", "t", NULL, offsetof(Manager, inhibitors_max), SD_BUS_VTABLE_PROPERTY_CONST),
|
SD_BUS_PROPERTY("InhibitorsMax", "t", NULL, offsetof(Manager, inhibitors_max), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||||
SD_BUS_PROPERTY("NCurrentInhibitors", "t", property_get_hashmap_size, offsetof(Manager, inhibitors), 0),
|
SD_BUS_PROPERTY("NCurrentInhibitors", "t", property_get_hashmap_size, offsetof(Manager, inhibitors), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||||
SD_BUS_PROPERTY("SessionsMax", "t", NULL, offsetof(Manager, sessions_max), SD_BUS_VTABLE_PROPERTY_CONST),
|
SD_BUS_PROPERTY("SessionsMax", "t", NULL, offsetof(Manager, sessions_max), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||||
SD_BUS_PROPERTY("NCurrentSessions", "t", property_get_hashmap_size, offsetof(Manager, sessions), 0),
|
SD_BUS_PROPERTY("NCurrentSessions", "t", property_get_hashmap_size, offsetof(Manager, sessions), 0),
|
||||||
SD_BUS_PROPERTY("UserTasksMax", "t", property_get_compat_user_tasks_max, 0, SD_BUS_VTABLE_PROPERTY_CONST|SD_BUS_VTABLE_HIDDEN),
|
SD_BUS_PROPERTY("UserTasksMax", "t", property_get_compat_user_tasks_max, 0, SD_BUS_VTABLE_PROPERTY_CONST|SD_BUS_VTABLE_HIDDEN),
|
||||||
|
|||||||
@ -148,13 +148,11 @@ static int inhibitor_save(Inhibitor *i) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int bus_manager_send_inhibited_change(Inhibitor *i) {
|
static int bus_manager_send_inhibited_change(Inhibitor *i) {
|
||||||
const char *property;
|
|
||||||
|
|
||||||
assert(i);
|
assert(i);
|
||||||
|
|
||||||
property = IN_SET(i->mode, INHIBIT_BLOCK, INHIBIT_BLOCK_WEAK) ? "BlockInhibited" : "DelayInhibited";
|
return manager_send_changed(i->manager,
|
||||||
|
i->mode == INHIBIT_DELAY ? "DelayInhibited" : "BlockInhibited",
|
||||||
return manager_send_changed(i->manager, property);
|
"NCurrentInhibitors");
|
||||||
}
|
}
|
||||||
|
|
||||||
int inhibitor_start(Inhibitor *i) {
|
int inhibitor_start(Inhibitor *i) {
|
||||||
|
|||||||
@ -155,7 +155,7 @@ static int mdns_maintenance_query(sd_event_source *s, uint64_t usec, void *userd
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int dns_add_new_service(DnsServiceBrowser *sb, DnsResourceRecord *rr, int owner_family, usec_t until) {
|
int dns_add_new_service(DnsServiceBrowser *sb, DnsResourceRecord *rr, int owner_family, int ifindex, usec_t until) {
|
||||||
_cleanup_(dnssd_discovered_service_unrefp) DnssdDiscoveredService *s = NULL;
|
_cleanup_(dnssd_discovered_service_unrefp) DnssdDiscoveredService *s = NULL;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
@ -173,6 +173,7 @@ int dns_add_new_service(DnsServiceBrowser *sb, DnsResourceRecord *rr, int owner_
|
|||||||
.service_browser = sb,
|
.service_browser = sb,
|
||||||
.rr = dns_resource_record_copy(rr),
|
.rr = dns_resource_record_copy(rr),
|
||||||
.family = owner_family,
|
.family = owner_family,
|
||||||
|
.ifindex = ifindex,
|
||||||
.until = until,
|
.until = until,
|
||||||
.query = NULL,
|
.query = NULL,
|
||||||
.rr_ttl_state = DNS_RECORD_TTL_STATE_80_PERCENT,
|
.rr_ttl_state = DNS_RECORD_TTL_STATE_80_PERCENT,
|
||||||
@ -326,6 +327,7 @@ int mdns_manage_services_answer(DnsServiceBrowser *sb, DnsAnswer *answer, int ow
|
|||||||
DNS_ANSWER_FOREACH_ITEM(item, answer) {
|
DNS_ANSWER_FOREACH_ITEM(item, answer) {
|
||||||
_cleanup_free_ char *name = NULL, *type = NULL, *domain = NULL;
|
_cleanup_free_ char *name = NULL, *type = NULL, *domain = NULL;
|
||||||
_cleanup_(sd_json_variant_unrefp) sd_json_variant *entry = NULL;
|
_cleanup_(sd_json_variant_unrefp) sd_json_variant *entry = NULL;
|
||||||
|
int ifindex;
|
||||||
|
|
||||||
if (dns_service_match_and_update(sb->dns_services, item->rr, owner_family, item->until))
|
if (dns_service_match_and_update(sb->dns_services, item->rr, owner_family, item->until))
|
||||||
continue;
|
continue;
|
||||||
@ -349,7 +351,10 @@ int mdns_manage_services_answer(DnsServiceBrowser *sb, DnsAnswer *answer, int ow
|
|||||||
if (!type)
|
if (!type)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
r = dns_add_new_service(sb, item->rr, owner_family, item->until);
|
/* Prefer the per-item ifindex, fall back to the service browser's ifindex */
|
||||||
|
ifindex = item->ifindex > 0 ? item->ifindex : sb->ifindex;
|
||||||
|
|
||||||
|
r = dns_add_new_service(sb, item->rr, owner_family, ifindex, item->until);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
log_error_errno(r, "Failed to add new DNS service: %m");
|
log_error_errno(r, "Failed to add new DNS service: %m");
|
||||||
goto finish;
|
goto finish;
|
||||||
@ -360,7 +365,7 @@ int mdns_manage_services_answer(DnsServiceBrowser *sb, DnsAnswer *answer, int ow
|
|||||||
strna(type),
|
strna(type),
|
||||||
strna(domain),
|
strna(domain),
|
||||||
strna(af_to_ipv4_ipv6(owner_family)),
|
strna(af_to_ipv4_ipv6(owner_family)),
|
||||||
sb->ifindex);
|
ifindex);
|
||||||
|
|
||||||
r = sd_json_buildo(
|
r = sd_json_buildo(
|
||||||
&entry,
|
&entry,
|
||||||
@ -375,7 +380,7 @@ int mdns_manage_services_answer(DnsServiceBrowser *sb, DnsAnswer *answer, int ow
|
|||||||
!isempty(type), "type", SD_JSON_BUILD_STRING(type)),
|
!isempty(type), "type", SD_JSON_BUILD_STRING(type)),
|
||||||
SD_JSON_BUILD_PAIR_CONDITION(
|
SD_JSON_BUILD_PAIR_CONDITION(
|
||||||
!isempty(domain), "domain", SD_JSON_BUILD_STRING(domain)),
|
!isempty(domain), "domain", SD_JSON_BUILD_STRING(domain)),
|
||||||
SD_JSON_BUILD_PAIR_INTEGER("ifindex", sb->ifindex));
|
SD_JSON_BUILD_PAIR_INTEGER("ifindex", ifindex));
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
log_error_errno(r, "Failed to build JSON for new service: %m");
|
log_error_errno(r, "Failed to build JSON for new service: %m");
|
||||||
goto finish;
|
goto finish;
|
||||||
@ -392,6 +397,7 @@ int mdns_manage_services_answer(DnsServiceBrowser *sb, DnsAnswer *answer, int ow
|
|||||||
LIST_FOREACH(dns_services, service, sb->dns_services) {
|
LIST_FOREACH(dns_services, service, sb->dns_services) {
|
||||||
_cleanup_free_ char *name = NULL, *type = NULL, *domain = NULL;
|
_cleanup_free_ char *name = NULL, *type = NULL, *domain = NULL;
|
||||||
_cleanup_(sd_json_variant_unrefp) sd_json_variant *entry = NULL;
|
_cleanup_(sd_json_variant_unrefp) sd_json_variant *entry = NULL;
|
||||||
|
int ifindex;
|
||||||
|
|
||||||
if (service->family != owner_family)
|
if (service->family != owner_family)
|
||||||
continue;
|
continue;
|
||||||
@ -416,6 +422,9 @@ int mdns_manage_services_answer(DnsServiceBrowser *sb, DnsAnswer *answer, int ow
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Capture ifindex before removing the service */
|
||||||
|
ifindex = service->ifindex;
|
||||||
|
|
||||||
dns_remove_service(sb, service);
|
dns_remove_service(sb, service);
|
||||||
|
|
||||||
log_debug("Remove from the list %s, %s, %s, %s, %d",
|
log_debug("Remove from the list %s, %s, %s, %s, %d",
|
||||||
@ -423,7 +432,7 @@ int mdns_manage_services_answer(DnsServiceBrowser *sb, DnsAnswer *answer, int ow
|
|||||||
strna(type),
|
strna(type),
|
||||||
strna(domain),
|
strna(domain),
|
||||||
strna(af_to_ipv4_ipv6(owner_family)),
|
strna(af_to_ipv4_ipv6(owner_family)),
|
||||||
sb->ifindex);
|
ifindex);
|
||||||
|
|
||||||
r = sd_json_buildo(
|
r = sd_json_buildo(
|
||||||
&entry,
|
&entry,
|
||||||
@ -435,7 +444,7 @@ int mdns_manage_services_answer(DnsServiceBrowser *sb, DnsAnswer *answer, int ow
|
|||||||
SD_JSON_BUILD_PAIR_STRING("name", name ?: ""),
|
SD_JSON_BUILD_PAIR_STRING("name", name ?: ""),
|
||||||
SD_JSON_BUILD_PAIR_STRING("type", type ?: ""),
|
SD_JSON_BUILD_PAIR_STRING("type", type ?: ""),
|
||||||
SD_JSON_BUILD_PAIR_STRING("domain", domain ?: ""),
|
SD_JSON_BUILD_PAIR_STRING("domain", domain ?: ""),
|
||||||
SD_JSON_BUILD_PAIR_INTEGER("ifindex", sb->ifindex));
|
SD_JSON_BUILD_PAIR_INTEGER("ifindex", ifindex));
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
log_error_errno(r, "Failed to build JSON for removed service: %m");
|
log_error_errno(r, "Failed to build JSON for removed service: %m");
|
||||||
goto finish;
|
goto finish;
|
||||||
@ -473,19 +482,61 @@ finish:
|
|||||||
|
|
||||||
int mdns_browser_revisit_cache(DnsServiceBrowser *sb, int owner_family) {
|
int mdns_browser_revisit_cache(DnsServiceBrowser *sb, int owner_family) {
|
||||||
_cleanup_(dns_answer_unrefp) DnsAnswer *lookup_ret_answer = NULL;
|
_cleanup_(dns_answer_unrefp) DnsAnswer *lookup_ret_answer = NULL;
|
||||||
DnsScope *scope;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(sb);
|
assert(sb);
|
||||||
assert(sb->manager);
|
assert(sb->manager);
|
||||||
|
|
||||||
scope = manager_find_scope_from_protocol(sb->manager, sb->ifindex, DNS_PROTOCOL_MDNS, owner_family);
|
/* ifindex=0 means "all interfaces" */
|
||||||
|
if (sb->ifindex == 0) {
|
||||||
|
LIST_FOREACH(scopes, scope, sb->manager->dns_scopes) {
|
||||||
|
_cleanup_(dns_answer_unrefp) DnsAnswer *answer = NULL;
|
||||||
|
|
||||||
|
if (scope->protocol != DNS_PROTOCOL_MDNS)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (scope->family != owner_family)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
dns_cache_prune(&scope->cache);
|
||||||
|
|
||||||
|
r = dns_cache_lookup(
|
||||||
|
&scope->cache,
|
||||||
|
sb->key,
|
||||||
|
sb->flags,
|
||||||
|
/* ret_rcode= */ NULL,
|
||||||
|
&answer,
|
||||||
|
/* ret_full_packet= */ NULL,
|
||||||
|
/* ret_query_flags= */ NULL,
|
||||||
|
/* ret_dnssec_result= */ NULL);
|
||||||
|
if (r < 0)
|
||||||
|
return log_error_errno(r, "Failed to look up DNS cache for service browser key on scope %s: %m",
|
||||||
|
dns_scope_ifname(scope) ?: "global");
|
||||||
|
|
||||||
|
r = mdns_manage_services_answer(sb, answer, owner_family);
|
||||||
|
if (r < 0)
|
||||||
|
return log_error_errno(r, "Failed to manage mDNS services after cache lookup on scope %s: %m",
|
||||||
|
dns_scope_ifname(scope) ?: "global");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Single scope for specifically requested interface */
|
||||||
|
DnsScope *scope = manager_find_scope_from_protocol(sb->manager, sb->ifindex, DNS_PROTOCOL_MDNS, owner_family);
|
||||||
if (!scope)
|
if (!scope)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
dns_cache_prune(&scope->cache);
|
dns_cache_prune(&scope->cache);
|
||||||
|
|
||||||
r = dns_cache_lookup(&scope->cache, sb->key, sb->flags, NULL, &lookup_ret_answer, NULL, NULL, NULL);
|
r = dns_cache_lookup(
|
||||||
|
&scope->cache,
|
||||||
|
sb->key,
|
||||||
|
sb->flags,
|
||||||
|
/* ret_rcode= */ NULL,
|
||||||
|
&lookup_ret_answer,
|
||||||
|
/* ret_full_packet= */ NULL,
|
||||||
|
/* ret_query_flags= */ NULL,
|
||||||
|
/* ret_dnssec_result= */ NULL);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_error_errno(r, "Failed to look up DNS cache for service browser key: %m");
|
return log_error_errno(r, "Failed to look up DNS cache for service browser key: %m");
|
||||||
|
|
||||||
@ -667,6 +718,9 @@ int dns_subscribe_browse_service(
|
|||||||
if (ifindex < 0)
|
if (ifindex < 0)
|
||||||
return sd_varlink_error_invalid_parameter_name(link, "ifindex");
|
return sd_varlink_error_invalid_parameter_name(link, "ifindex");
|
||||||
|
|
||||||
|
if (ifindex == 0)
|
||||||
|
log_debug("BrowseServices: browsing all mDNS interfaces");
|
||||||
|
|
||||||
if (isempty(type))
|
if (isempty(type))
|
||||||
type = NULL;
|
type = NULL;
|
||||||
else if (!dnssd_srv_type_is_valid(type))
|
else if (!dnssd_srv_type_is_valid(type))
|
||||||
|
|||||||
@ -30,6 +30,7 @@ struct DnssdDiscoveredService {
|
|||||||
sd_event_source *schedule_event;
|
sd_event_source *schedule_event;
|
||||||
DnsResourceRecord *rr;
|
DnsResourceRecord *rr;
|
||||||
int family;
|
int family;
|
||||||
|
int ifindex;
|
||||||
usec_t until;
|
usec_t until;
|
||||||
DnsRecordTTLState rr_ttl_state;
|
DnsRecordTTLState rr_ttl_state;
|
||||||
DnsQuery *query;
|
DnsQuery *query;
|
||||||
@ -66,7 +67,7 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(DnssdDiscoveredService *, dnssd_discovered_service_u
|
|||||||
|
|
||||||
bool dns_service_match_and_update(DnssdDiscoveredService *services, DnsResourceRecord *rr, int owner_family, usec_t until);
|
bool dns_service_match_and_update(DnssdDiscoveredService *services, DnsResourceRecord *rr, int owner_family, usec_t until);
|
||||||
int mdns_manage_services_answer(DnsServiceBrowser *sb, DnsAnswer *answer, int owner_family);
|
int mdns_manage_services_answer(DnsServiceBrowser *sb, DnsAnswer *answer, int owner_family);
|
||||||
int dns_add_new_service(DnsServiceBrowser *sb, DnsResourceRecord *rr, int owner_family, usec_t until);
|
int dns_add_new_service(DnsServiceBrowser *sb, DnsResourceRecord *rr, int owner_family, int ifindex, usec_t until);
|
||||||
int mdns_service_update(DnssdDiscoveredService *service, DnsResourceRecord *rr, usec_t t, usec_t until);
|
int mdns_service_update(DnssdDiscoveredService *service, DnsResourceRecord *rr, usec_t t, usec_t until);
|
||||||
int mdns_browser_revisit_cache(DnsServiceBrowser *sb, int owner_family);
|
int mdns_browser_revisit_cache(DnsServiceBrowser *sb, int owner_family);
|
||||||
int dns_subscribe_browse_service(
|
int dns_subscribe_browse_service(
|
||||||
|
|||||||
@ -24,6 +24,7 @@
|
|||||||
#include "varlink-io.systemd.Hostname.h"
|
#include "varlink-io.systemd.Hostname.h"
|
||||||
#include "varlink-io.systemd.Import.h"
|
#include "varlink-io.systemd.Import.h"
|
||||||
#include "varlink-io.systemd.Journal.h"
|
#include "varlink-io.systemd.Journal.h"
|
||||||
|
#include "varlink-io.systemd.JournalAccess.h"
|
||||||
#include "varlink-io.systemd.Login.h"
|
#include "varlink-io.systemd.Login.h"
|
||||||
#include "varlink-io.systemd.Machine.h"
|
#include "varlink-io.systemd.Machine.h"
|
||||||
#include "varlink-io.systemd.MachineImage.h"
|
#include "varlink-io.systemd.MachineImage.h"
|
||||||
@ -188,6 +189,7 @@ TEST(parse_format) {
|
|||||||
&vl_interface_io_systemd_Hostname,
|
&vl_interface_io_systemd_Hostname,
|
||||||
&vl_interface_io_systemd_Import,
|
&vl_interface_io_systemd_Import,
|
||||||
&vl_interface_io_systemd_Journal,
|
&vl_interface_io_systemd_Journal,
|
||||||
|
&vl_interface_io_systemd_JournalAccess,
|
||||||
&vl_interface_io_systemd_Login,
|
&vl_interface_io_systemd_Login,
|
||||||
&vl_interface_io_systemd_Machine,
|
&vl_interface_io_systemd_Machine,
|
||||||
&vl_interface_io_systemd_MachineImage,
|
&vl_interface_io_systemd_MachineImage,
|
||||||
|
|||||||
@ -193,6 +193,50 @@ testcase_single_service_multiple_times() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Helper function to run browse services with a custom ifindex
|
||||||
|
run_and_check_services_with_ifindex() {
|
||||||
|
local service_id="${1:?}"
|
||||||
|
local check_func="${2:?}"
|
||||||
|
local ifindex="${3:?}"
|
||||||
|
local unit_name="varlinkctl-$service_id-$SRANDOM.service"
|
||||||
|
local i out_file parameters service_type svc tmp_file
|
||||||
|
|
||||||
|
out_file="$(mktemp)"
|
||||||
|
error_file="$(mktemp)"
|
||||||
|
tmp_file="$(mktemp)"
|
||||||
|
service_type="_testService$service_id._udp"
|
||||||
|
parameters="{ \"domain\": \"$service_type.local\", \"type\": \"\", \"ifindex\": $ifindex, \"flags\": 16785432 }"
|
||||||
|
|
||||||
|
systemd-run --unit="$unit_name" --service-type=exec -p StandardOutput="file:$out_file" -p StandardError="file:$error_file" \
|
||||||
|
varlinkctl call --more /run/systemd/resolve/io.systemd.Resolve io.systemd.Resolve.BrowseServices "$parameters"
|
||||||
|
|
||||||
|
# shellcheck disable=SC2064
|
||||||
|
# Note: same as above about unregistering the trap once it's fired
|
||||||
|
trap "trap - RETURN; systemctl stop $unit_name" RETURN
|
||||||
|
|
||||||
|
for _ in {0..14}; do
|
||||||
|
if [[ -s "$out_file" ]]; then
|
||||||
|
grep -o '"name":"[^"]*"' "$out_file" | sed 's/"name":"//;s/"//g' | sort | tee "$tmp_file"
|
||||||
|
if "$check_func" "$service_id" "$tmp_file"; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
sleep 2
|
||||||
|
done
|
||||||
|
|
||||||
|
cat "$out_file"
|
||||||
|
cat "$error_file"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
testcase_browse_all_interfaces_ifindex_zero() {
|
||||||
|
: "Test browsing all interfaces with ifindex=0"
|
||||||
|
resolvectl flush-caches
|
||||||
|
# Using ifindex=0 should discover services on all mDNS interfaces
|
||||||
|
run_and_check_services_with_ifindex 0 check_both 0
|
||||||
|
}
|
||||||
|
|
||||||
testcase_second_unreachable() {
|
testcase_second_unreachable() {
|
||||||
: "Test each service type while the second container is unreachable"
|
: "Test each service type while the second container is unreachable"
|
||||||
systemd-run -M "$CONTAINER_2" --wait --pipe -- networkctl down host0
|
systemd-run -M "$CONTAINER_2" --wait --pipe -- networkctl down host0
|
||||||
|
|||||||
@ -12,6 +12,7 @@ Description=Journal Log Access Socket
|
|||||||
Documentation=man:journalctl(1)
|
Documentation=man:journalctl(1)
|
||||||
DefaultDependencies=no
|
DefaultDependencies=no
|
||||||
Before=sockets.target
|
Before=sockets.target
|
||||||
|
After=systemd-sysusers.service
|
||||||
|
|
||||||
[Socket]
|
[Socket]
|
||||||
ListenStream=/run/systemd/io.systemd.JournalAccess
|
ListenStream=/run/systemd/io.systemd.JournalAccess
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user