History

xdp: Support specifying expected existing program when attaching XDP

While it is currently possible for userspace to specify that an existing XDP program should not be replaced when attaching to an interface, there is no mechanism to safely replace a specific XDP program with another. This patch adds a new netlink attribute, IFLA_XDP_EXPECTED_FD, which can be set along with IFLA_XDP_FD. If set, the kernel will check that the program currently loaded on the interface matches the expected one, and fail the operation if it does not. This corresponds to a 'cmpxchg' memory operation. Setting the new attribute with a negative value means that no program is expected to be attached, which corresponds to setting the UPDATE_IF_NOEXIST flag. A new companion flag, XDP_FLAGS_REPLACE, is also added to explicitly request checking of the EXPECTED_FD attribute. This is needed for userspace to discover whether the kernel supports the new attribute.

Toke Høiland-Jørgensen committed 6 years ago

Commit 92234c81 parent e9ff9d54 files · +39 −7Browse files

Showing the changes to include/uapi/linux (1 of 4 files). Show all

Unified · Split

include/uapi/linux/if_link.h+3−1
@@ -972,11 +972,12 @@ enum { · 971 unmodified lines
972#define XDP_FLAGS_SKB_MODE (1U << 1)972#define XDP_FLAGS_SKB_MODE (1U << 1)
973#define XDP_FLAGS_DRV_MODE (1U << 2)973#define XDP_FLAGS_DRV_MODE (1U << 2)
974#define XDP_FLAGS_HW_MODE (1U << 3)974#define XDP_FLAGS_HW_MODE (1U << 3)
975#define XDP_FLAGS_REPLACE (1U << 4)
975#define XDP_FLAGS_MODES (XDP_FLAGS_SKB_MODE | \976#define XDP_FLAGS_MODES (XDP_FLAGS_SKB_MODE | \
976 XDP_FLAGS_DRV_MODE | \977 XDP_FLAGS_DRV_MODE | \
977 XDP_FLAGS_HW_MODE)978 XDP_FLAGS_HW_MODE)
978#define XDP_FLAGS_MASK (XDP_FLAGS_UPDATE_IF_NOEXIST | \979#define XDP_FLAGS_MASK (XDP_FLAGS_UPDATE_IF_NOEXIST | \
979 XDP_FLAGS_MODES)980 XDP_FLAGS_MODES | XDP_FLAGS_REPLACE)
980 981
981/* These are stored into IFLA_XDP_ATTACHED on dump. */982/* These are stored into IFLA_XDP_ATTACHED on dump. */
982enum {983enum {
@@ -996,6 +997,7 @@ enum { · 13 unmodified lines
996 IFLA_XDP_DRV_PROG_ID,997 IFLA_XDP_DRV_PROG_ID,
997 IFLA_XDP_SKB_PROG_ID,998 IFLA_XDP_SKB_PROG_ID,
998 IFLA_XDP_HW_PROG_ID,999 IFLA_XDP_HW_PROG_ID,
1000 IFLA_XDP_EXPECTED_FD,
999 __IFLA_XDP_MAX,1001 __IFLA_XDP_MAX,
1000};1002};
1001 1003

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t