diff --git a/man/systemd.netdev.xml b/man/systemd.netdev.xml index acda76fff3..e88897450c 100644 --- a/man/systemd.netdev.xml +++ b/man/systemd.netdev.xml @@ -174,6 +174,8 @@ wireguard WireGuard Secure Network Tunnel. + netdevsim + A simulator. This simulated networking device is used for testing various networking APIs and at this time is particularly focused on testing hardware offloading related interfaces. diff --git a/src/libsystemd/sd-netlink/netlink-types.c b/src/libsystemd/sd-netlink/netlink-types.c index 9dca344f8d..ddb4d90eaf 100644 --- a/src/libsystemd/sd-netlink/netlink-types.c +++ b/src/libsystemd/sd-netlink/netlink-types.c @@ -325,6 +325,7 @@ static const char* const nl_union_link_info_data_table[] = { [NL_UNION_LINK_INFO_DATA_GENEVE] = "geneve", [NL_UNION_LINK_INFO_DATA_VXCAN] = "vxcan", [NL_UNION_LINK_INFO_DATA_WIREGUARD] = "wireguard", + [NL_UNION_LINK_INFO_DATA_NETDEVSIM] = "netdevsim", }; DEFINE_STRING_TABLE_LOOKUP(nl_union_link_info_data, NLUnionLinkInfoData); diff --git a/src/libsystemd/sd-netlink/netlink-types.h b/src/libsystemd/sd-netlink/netlink-types.h index 456562d329..a7542eb33d 100644 --- a/src/libsystemd/sd-netlink/netlink-types.h +++ b/src/libsystemd/sd-netlink/netlink-types.h @@ -82,6 +82,7 @@ typedef enum NLUnionLinkInfoData { NL_UNION_LINK_INFO_DATA_GENEVE, NL_UNION_LINK_INFO_DATA_VXCAN, NL_UNION_LINK_INFO_DATA_WIREGUARD, + NL_UNION_LINK_INFO_DATA_NETDEVSIM, _NL_UNION_LINK_INFO_DATA_MAX, _NL_UNION_LINK_INFO_DATA_INVALID = -1 } NLUnionLinkInfoData; diff --git a/src/network/meson.build b/src/network/meson.build index e9ce2083ec..a717152e20 100644 --- a/src/network/meson.build +++ b/src/network/meson.build @@ -35,6 +35,8 @@ sources = files(''' netdev/vxcan.h netdev/wireguard.c netdev/wireguard.h + netdev/netdevsim.c + netdev/netdevsim.h networkd-address-label.c networkd-address-label.h networkd-address-pool.c diff --git a/src/network/netdev/netdev.c b/src/network/netdev/netdev.c index a0b2697183..da6a50c5a2 100644 --- a/src/network/netdev/netdev.c +++ b/src/network/netdev/netdev.c @@ -37,6 +37,7 @@ #include "netdev/vcan.h" #include "netdev/vxcan.h" #include "netdev/wireguard.h" +#include "netdev/netdevsim.h" const NetDevVTable * const netdev_vtable[_NETDEV_KIND_MAX] = { [NETDEV_KIND_BRIDGE] = &bridge_vtable, @@ -64,6 +65,7 @@ const NetDevVTable * const netdev_vtable[_NETDEV_KIND_MAX] = { [NETDEV_KIND_GENEVE] = &geneve_vtable, [NETDEV_KIND_VXCAN] = &vxcan_vtable, [NETDEV_KIND_WIREGUARD] = &wireguard_vtable, + [NETDEV_KIND_NETDEVSIM] = &netdevsim_vtable, }; static const char* const netdev_kind_table[_NETDEV_KIND_MAX] = { @@ -92,6 +94,7 @@ static const char* const netdev_kind_table[_NETDEV_KIND_MAX] = { [NETDEV_KIND_GENEVE] = "geneve", [NETDEV_KIND_VXCAN] = "vxcan", [NETDEV_KIND_WIREGUARD] = "wireguard", + [NETDEV_KIND_NETDEVSIM] = "netdevsim", }; DEFINE_STRING_TABLE_LOOKUP(netdev_kind, NetDevKind); diff --git a/src/network/netdev/netdev.h b/src/network/netdev/netdev.h index 0d0671d37b..fa90b14f86 100644 --- a/src/network/netdev/netdev.h +++ b/src/network/netdev/netdev.h @@ -48,6 +48,7 @@ typedef enum NetDevKind { NETDEV_KIND_GENEVE, NETDEV_KIND_VXCAN, NETDEV_KIND_WIREGUARD, + NETDEV_KIND_NETDEVSIM, _NETDEV_KIND_MAX, _NETDEV_KIND_INVALID = -1 } NetDevKind; diff --git a/src/network/netdev/netdevsim.c b/src/network/netdev/netdevsim.c new file mode 100644 index 0000000000..857a63f3de --- /dev/null +++ b/src/network/netdev/netdevsim.c @@ -0,0 +1,15 @@ +/* SPDX-License-Identifier: LGPL-2.1+ */ +/*** + This file is part of systemd. + + Copyright 2018 Susant Sahani +***/ + +#include "netdev/netdevsim.h" +#include "missing.h" + +const NetDevVTable netdevsim_vtable = { + .object_size = sizeof(NetDevSim), + .sections = "Match\0NetDev\0", + .create_type = NETDEV_CREATE_INDEPENDENT, +}; diff --git a/src/network/netdev/netdevsim.h b/src/network/netdev/netdevsim.h new file mode 100644 index 0000000000..1e560279ff --- /dev/null +++ b/src/network/netdev/netdevsim.h @@ -0,0 +1,19 @@ +/* SPDX-License-Identifier: LGPL-2.1+ */ +#pragma once + +/*** + This file is part of systemd. + + Copyright 2018 Susant Sahani +***/ + +typedef struct NetDevSim NetDevSim; + +#include "netdev/netdev.h" + +struct NetDevSim { + NetDev meta; +}; + +DEFINE_NETDEV_CAST(NETDEVSIM, NetDevSim); +extern const NetDevVTable netdevsim_vtable; diff --git a/src/network/netdev/vxcan.h b/src/network/netdev/vxcan.h index a41b75ce96..a8af01ba33 100644 --- a/src/network/netdev/vxcan.h +++ b/src/network/netdev/vxcan.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: LGPL-2.1+ */ #pragma once /***