Commit 68e8b849 authored by Björn Töpel's avatar Björn Töpel Committed by Alexei Starovoitov

net: initial AF_XDP skeleton

Buildable skeleton of AF_XDP without any functionality. Just what it
takes to register a new address family.
Signed-off-by: default avatarBjörn Töpel <bjorn.topel@intel.com>
Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent 03f5781b
...@@ -15424,6 +15424,14 @@ T: git git://linuxtv.org/media_tree.git ...@@ -15424,6 +15424,14 @@ T: git git://linuxtv.org/media_tree.git
S: Maintained S: Maintained
F: drivers/media/tuners/tuner-xc2028.* F: drivers/media/tuners/tuner-xc2028.*
XDP SOCKETS (AF_XDP)
M: Björn Töpel <bjorn.topel@intel.com>
M: Magnus Karlsson <magnus.karlsson@intel.com>
L: netdev@vger.kernel.org
S: Maintained
F: kernel/bpf/xskmap.c
F: net/xdp/
XEN BLOCK SUBSYSTEM XEN BLOCK SUBSYSTEM
M: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> M: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
M: Roger Pau Monné <roger.pau@citrix.com> M: Roger Pau Monné <roger.pau@citrix.com>
......
...@@ -207,8 +207,9 @@ struct ucred { ...@@ -207,8 +207,9 @@ struct ucred {
* PF_SMC protocol family that * PF_SMC protocol family that
* reuses AF_INET address family * reuses AF_INET address family
*/ */
#define AF_XDP 44 /* XDP sockets */
#define AF_MAX 44 /* For now.. */ #define AF_MAX 45 /* For now.. */
/* Protocol families, same as address families. */ /* Protocol families, same as address families. */
#define PF_UNSPEC AF_UNSPEC #define PF_UNSPEC AF_UNSPEC
...@@ -257,6 +258,7 @@ struct ucred { ...@@ -257,6 +258,7 @@ struct ucred {
#define PF_KCM AF_KCM #define PF_KCM AF_KCM
#define PF_QIPCRTR AF_QIPCRTR #define PF_QIPCRTR AF_QIPCRTR
#define PF_SMC AF_SMC #define PF_SMC AF_SMC
#define PF_XDP AF_XDP
#define PF_MAX AF_MAX #define PF_MAX AF_MAX
/* Maximum queue length specifiable by listen. */ /* Maximum queue length specifiable by listen. */
...@@ -338,6 +340,7 @@ struct ucred { ...@@ -338,6 +340,7 @@ struct ucred {
#define SOL_NFC 280 #define SOL_NFC 280
#define SOL_KCM 281 #define SOL_KCM 281
#define SOL_TLS 282 #define SOL_TLS 282
#define SOL_XDP 283
/* IPX options */ /* IPX options */
#define IPX_TYPE 1 #define IPX_TYPE 1
......
...@@ -59,6 +59,7 @@ source "net/tls/Kconfig" ...@@ -59,6 +59,7 @@ source "net/tls/Kconfig"
source "net/xfrm/Kconfig" source "net/xfrm/Kconfig"
source "net/iucv/Kconfig" source "net/iucv/Kconfig"
source "net/smc/Kconfig" source "net/smc/Kconfig"
source "net/xdp/Kconfig"
config INET config INET
bool "TCP/IP networking" bool "TCP/IP networking"
......
...@@ -226,7 +226,8 @@ static struct lock_class_key af_family_kern_slock_keys[AF_MAX]; ...@@ -226,7 +226,8 @@ static struct lock_class_key af_family_kern_slock_keys[AF_MAX];
x "AF_RXRPC" , x "AF_ISDN" , x "AF_PHONET" , \ x "AF_RXRPC" , x "AF_ISDN" , x "AF_PHONET" , \
x "AF_IEEE802154", x "AF_CAIF" , x "AF_ALG" , \ x "AF_IEEE802154", x "AF_CAIF" , x "AF_ALG" , \
x "AF_NFC" , x "AF_VSOCK" , x "AF_KCM" , \ x "AF_NFC" , x "AF_VSOCK" , x "AF_KCM" , \
x "AF_QIPCRTR", x "AF_SMC" , x "AF_MAX" x "AF_QIPCRTR", x "AF_SMC" , x "AF_XDP" , \
x "AF_MAX"
static const char *const af_family_key_strings[AF_MAX+1] = { static const char *const af_family_key_strings[AF_MAX+1] = {
_sock_locks("sk_lock-") _sock_locks("sk_lock-")
...@@ -262,7 +263,8 @@ static const char *const af_family_rlock_key_strings[AF_MAX+1] = { ...@@ -262,7 +263,8 @@ static const char *const af_family_rlock_key_strings[AF_MAX+1] = {
"rlock-AF_RXRPC" , "rlock-AF_ISDN" , "rlock-AF_PHONET" , "rlock-AF_RXRPC" , "rlock-AF_ISDN" , "rlock-AF_PHONET" ,
"rlock-AF_IEEE802154", "rlock-AF_CAIF" , "rlock-AF_ALG" , "rlock-AF_IEEE802154", "rlock-AF_CAIF" , "rlock-AF_ALG" ,
"rlock-AF_NFC" , "rlock-AF_VSOCK" , "rlock-AF_KCM" , "rlock-AF_NFC" , "rlock-AF_VSOCK" , "rlock-AF_KCM" ,
"rlock-AF_QIPCRTR", "rlock-AF_SMC" , "rlock-AF_MAX" "rlock-AF_QIPCRTR", "rlock-AF_SMC" , "rlock-AF_XDP" ,
"rlock-AF_MAX"
}; };
static const char *const af_family_wlock_key_strings[AF_MAX+1] = { static const char *const af_family_wlock_key_strings[AF_MAX+1] = {
"wlock-AF_UNSPEC", "wlock-AF_UNIX" , "wlock-AF_INET" , "wlock-AF_UNSPEC", "wlock-AF_UNIX" , "wlock-AF_INET" ,
...@@ -279,7 +281,8 @@ static const char *const af_family_wlock_key_strings[AF_MAX+1] = { ...@@ -279,7 +281,8 @@ static const char *const af_family_wlock_key_strings[AF_MAX+1] = {
"wlock-AF_RXRPC" , "wlock-AF_ISDN" , "wlock-AF_PHONET" , "wlock-AF_RXRPC" , "wlock-AF_ISDN" , "wlock-AF_PHONET" ,
"wlock-AF_IEEE802154", "wlock-AF_CAIF" , "wlock-AF_ALG" , "wlock-AF_IEEE802154", "wlock-AF_CAIF" , "wlock-AF_ALG" ,
"wlock-AF_NFC" , "wlock-AF_VSOCK" , "wlock-AF_KCM" , "wlock-AF_NFC" , "wlock-AF_VSOCK" , "wlock-AF_KCM" ,
"wlock-AF_QIPCRTR", "wlock-AF_SMC" , "wlock-AF_MAX" "wlock-AF_QIPCRTR", "wlock-AF_SMC" , "wlock-AF_XDP" ,
"wlock-AF_MAX"
}; };
static const char *const af_family_elock_key_strings[AF_MAX+1] = { static const char *const af_family_elock_key_strings[AF_MAX+1] = {
"elock-AF_UNSPEC", "elock-AF_UNIX" , "elock-AF_INET" , "elock-AF_UNSPEC", "elock-AF_UNIX" , "elock-AF_INET" ,
...@@ -296,7 +299,8 @@ static const char *const af_family_elock_key_strings[AF_MAX+1] = { ...@@ -296,7 +299,8 @@ static const char *const af_family_elock_key_strings[AF_MAX+1] = {
"elock-AF_RXRPC" , "elock-AF_ISDN" , "elock-AF_PHONET" , "elock-AF_RXRPC" , "elock-AF_ISDN" , "elock-AF_PHONET" ,
"elock-AF_IEEE802154", "elock-AF_CAIF" , "elock-AF_ALG" , "elock-AF_IEEE802154", "elock-AF_CAIF" , "elock-AF_ALG" ,
"elock-AF_NFC" , "elock-AF_VSOCK" , "elock-AF_KCM" , "elock-AF_NFC" , "elock-AF_VSOCK" , "elock-AF_KCM" ,
"elock-AF_QIPCRTR", "elock-AF_SMC" , "elock-AF_MAX" "elock-AF_QIPCRTR", "elock-AF_SMC" , "elock-AF_XDP" ,
"elock-AF_MAX"
}; };
/* /*
......
config XDP_SOCKETS
bool "XDP sockets"
depends on BPF_SYSCALL
default n
help
XDP sockets allows a channel between XDP programs and
userspace applications.
...@@ -1471,7 +1471,9 @@ static inline u16 socket_type_to_security_class(int family, int type, int protoc ...@@ -1471,7 +1471,9 @@ static inline u16 socket_type_to_security_class(int family, int type, int protoc
return SECCLASS_QIPCRTR_SOCKET; return SECCLASS_QIPCRTR_SOCKET;
case PF_SMC: case PF_SMC:
return SECCLASS_SMC_SOCKET; return SECCLASS_SMC_SOCKET;
#if PF_MAX > 44 case PF_XDP:
return SECCLASS_XDP_SOCKET;
#if PF_MAX > 45
#error New address family defined, please update this function. #error New address family defined, please update this function.
#endif #endif
} }
......
...@@ -240,9 +240,11 @@ struct security_class_mapping secclass_map[] = { ...@@ -240,9 +240,11 @@ struct security_class_mapping secclass_map[] = {
{ "manage_subnet", NULL } }, { "manage_subnet", NULL } },
{ "bpf", { "bpf",
{"map_create", "map_read", "map_write", "prog_load", "prog_run"} }, {"map_create", "map_read", "map_write", "prog_load", "prog_run"} },
{ "xdp_socket",
{ COMMON_SOCK_PERMS, NULL } },
{ NULL } { NULL }
}; };
#if PF_MAX > 44 #if PF_MAX > 45
#error New address family defined, please update secclass_map. #error New address family defined, please update secclass_map.
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment