From: Yu Watanabe Date: Sun, 7 Nov 2021 16:27:33 +0900 Subject: network/netdev: introduce .iftype to netdev vtable And disable .generate_mac flag for non-ether interfaces. --- src/network/netdev/bareudp.c | 4 ++++ src/network/netdev/batadv.c | 3 +++ src/network/netdev/bond.c | 4 ++++ src/network/netdev/bridge.c | 4 ++++ src/network/netdev/dummy.c | 3 +++ src/network/netdev/geneve.c | 3 +++ src/network/netdev/ifb.c | 3 +++ src/network/netdev/ipvlan.c | 4 ++++ src/network/netdev/macsec.c | 2 ++ src/network/netdev/macvlan.c | 4 ++++ src/network/netdev/netdev.h | 3 +++ src/network/netdev/netdevsim.c | 3 +++ src/network/netdev/nlmon.c | 3 +++ src/network/netdev/tunnel.c | 20 ++++++++++++-------- src/network/netdev/tuntap.c | 2 ++ src/network/netdev/vcan.c | 4 +++- src/network/netdev/veth.c | 3 +++ src/network/netdev/vlan.c | 2 ++ src/network/netdev/vrf.c | 3 +++ src/network/netdev/vxcan.c | 3 ++- src/network/netdev/vxlan.c | 3 +++ src/network/netdev/wireguard.c | 4 +++- src/network/netdev/xfrm.c | 5 ++++- 23 files changed, 80 insertions(+), 12 deletions(-) diff --git a/src/network/netdev/bareudp.c b/src/network/netdev/bareudp.c index 22c0e49..454aea6 100644 --- a/src/network/netdev/bareudp.c +++ b/src/network/netdev/bareudp.c @@ -1,6 +1,9 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later * Copyright © 2020 VMware, Inc. */ +#include +#include + #include "bareudp.h" #include "netlink-util.h" #include "networkd-manager.h" @@ -135,4 +138,5 @@ const NetDevVTable bare_udp_vtable = { .config_verify = netdev_bare_udp_verify, .create = netdev_bare_udp_create, .create_type = NETDEV_CREATE_INDEPENDENT, + .iftype = ARPHRD_NONE, }; diff --git a/src/network/netdev/batadv.c b/src/network/netdev/batadv.c index 1f899e9..d63d697 100644 --- a/src/network/netdev/batadv.c +++ b/src/network/netdev/batadv.c @@ -1,7 +1,9 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include +#include #include +#include #include "batadv.h" #include "fileio.h" @@ -200,4 +202,5 @@ const NetDevVTable batadv_vtable = { .fill_message_create = netdev_batadv_fill_message_create, .post_create = netdev_batadv_post_create, .create_type = NETDEV_CREATE_MASTER, + .iftype = ARPHRD_ETHER, }; diff --git a/src/network/netdev/bond.c b/src/network/netdev/bond.c index a7a4adc..5f1a061 100644 --- a/src/network/netdev/bond.c +++ b/src/network/netdev/bond.c @@ -1,5 +1,8 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include +#include + #include "alloc-util.h" #include "bond.h" #include "bond-util.h" @@ -449,5 +452,6 @@ const NetDevVTable bond_vtable = { .sections = NETDEV_COMMON_SECTIONS "Bond\0", .fill_message_create = netdev_bond_fill_message_create, .create_type = NETDEV_CREATE_MASTER, + .iftype = ARPHRD_ETHER, .generate_mac = true, }; diff --git a/src/network/netdev/bridge.c b/src/network/netdev/bridge.c index b9a0136..f841ed2 100644 --- a/src/network/netdev/bridge.c +++ b/src/network/netdev/bridge.c @@ -1,6 +1,9 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include +#include +#include +#include #include "bridge.h" #include "netlink-util.h" @@ -269,4 +272,5 @@ const NetDevVTable bridge_vtable = { .sections = NETDEV_COMMON_SECTIONS "Bridge\0", .post_create = netdev_bridge_post_create, .create_type = NETDEV_CREATE_MASTER, + .iftype = ARPHRD_ETHER, }; diff --git a/src/network/netdev/dummy.c b/src/network/netdev/dummy.c index 754ee98..00df1d2 100644 --- a/src/network/netdev/dummy.c +++ b/src/network/netdev/dummy.c @@ -1,10 +1,13 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include + #include "dummy.h" const NetDevVTable dummy_vtable = { .object_size = sizeof(Dummy), .sections = NETDEV_COMMON_SECTIONS, .create_type = NETDEV_CREATE_INDEPENDENT, + .iftype = ARPHRD_ETHER, .generate_mac = true, }; diff --git a/src/network/netdev/geneve.c b/src/network/netdev/geneve.c index fd0b511..ddc373c 100644 --- a/src/network/netdev/geneve.c +++ b/src/network/netdev/geneve.c @@ -1,6 +1,8 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include +#include +#include #include "alloc-util.h" #include "conf-parser.h" @@ -352,5 +354,6 @@ const NetDevVTable geneve_vtable = { .create = netdev_geneve_create, .create_type = NETDEV_CREATE_INDEPENDENT, .config_verify = netdev_geneve_verify, + .iftype = ARPHRD_ETHER, .generate_mac = true, }; diff --git a/src/network/netdev/ifb.c b/src/network/netdev/ifb.c index 16ff49d..d7ff44c 100644 --- a/src/network/netdev/ifb.c +++ b/src/network/netdev/ifb.c @@ -1,11 +1,14 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later * Copyright © 2019 VMware, Inc. */ +#include + #include "ifb.h" const NetDevVTable ifb_vtable = { .object_size = sizeof(IntermediateFunctionalBlock), .sections = NETDEV_COMMON_SECTIONS, .create_type = NETDEV_CREATE_INDEPENDENT, + .iftype = ARPHRD_ETHER, .generate_mac = true, }; diff --git a/src/network/netdev/ipvlan.c b/src/network/netdev/ipvlan.c index 92a8f58..d15766c 100644 --- a/src/network/netdev/ipvlan.c +++ b/src/network/netdev/ipvlan.c @@ -1,6 +1,8 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include +#include +#include #include "conf-parser.h" #include "ipvlan.h" @@ -63,6 +65,7 @@ const NetDevVTable ipvlan_vtable = { .sections = NETDEV_COMMON_SECTIONS "IPVLAN\0", .fill_message_create = netdev_ipvlan_fill_message_create, .create_type = NETDEV_CREATE_STACKED, + .iftype = ARPHRD_ETHER, .generate_mac = true, }; @@ -72,6 +75,7 @@ const NetDevVTable ipvtap_vtable = { .sections = NETDEV_COMMON_SECTIONS "IPVTAP\0", .fill_message_create = netdev_ipvlan_fill_message_create, .create_type = NETDEV_CREATE_STACKED, + .iftype = ARPHRD_ETHER, .generate_mac = true, }; diff --git a/src/network/netdev/macsec.c b/src/network/netdev/macsec.c index 77c5f8c..04feb57 100644 --- a/src/network/netdev/macsec.c +++ b/src/network/netdev/macsec.c @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include +#include #include #include #include @@ -1230,5 +1231,6 @@ const NetDevVTable macsec_vtable = { .done = macsec_done, .create_type = NETDEV_CREATE_STACKED, .config_verify = netdev_macsec_verify, + .iftype = ARPHRD_ETHER, .generate_mac = true, }; diff --git a/src/network/netdev/macvlan.c b/src/network/netdev/macvlan.c index 9d037c2..36e591d 100644 --- a/src/network/netdev/macvlan.c +++ b/src/network/netdev/macvlan.c @@ -1,6 +1,8 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include +#include +#include #include "conf-parser.h" #include "macvlan.h" @@ -153,6 +155,7 @@ const NetDevVTable macvtap_vtable = { .sections = NETDEV_COMMON_SECTIONS "MACVTAP\0", .fill_message_create = netdev_macvlan_fill_message_create, .create_type = NETDEV_CREATE_STACKED, + .iftype = ARPHRD_ETHER, .generate_mac = true, }; @@ -163,5 +166,6 @@ const NetDevVTable macvlan_vtable = { .sections = NETDEV_COMMON_SECTIONS "MACVLAN\0", .fill_message_create = netdev_macvlan_fill_message_create, .create_type = NETDEV_CREATE_STACKED, + .iftype = ARPHRD_ETHER, .generate_mac = true, }; diff --git a/src/network/netdev/netdev.h b/src/network/netdev/netdev.h index 493ae32..63d8a59 100644 --- a/src/network/netdev/netdev.h +++ b/src/network/netdev/netdev.h @@ -159,6 +159,9 @@ typedef struct NetDevVTable { /* verify that compulsory configuration options were specified */ int (*config_verify)(NetDev *netdev, const char *filename); + /* expected iftype, e.g. ARPHRD_ETHER. */ + uint16_t iftype; + /* Generate MAC address or not When MACAddress= is not specified. */ bool generate_mac; } NetDevVTable; diff --git a/src/network/netdev/netdevsim.c b/src/network/netdev/netdevsim.c index b281428..15d5c13 100644 --- a/src/network/netdev/netdevsim.c +++ b/src/network/netdev/netdevsim.c @@ -1,10 +1,13 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include + #include "netdevsim.h" const NetDevVTable netdevsim_vtable = { .object_size = sizeof(NetDevSim), .sections = NETDEV_COMMON_SECTIONS, .create_type = NETDEV_CREATE_INDEPENDENT, + .iftype = ARPHRD_ETHER, .generate_mac = true, }; diff --git a/src/network/netdev/nlmon.c b/src/network/netdev/nlmon.c index a8faed5..b6e2a40 100644 --- a/src/network/netdev/nlmon.c +++ b/src/network/netdev/nlmon.c @@ -1,5 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include + #include "nlmon.h" static int netdev_nlmon_verify(NetDev *netdev, const char *filename) { @@ -19,4 +21,5 @@ const NetDevVTable nlmon_vtable = { .sections = NETDEV_COMMON_SECTIONS, .create_type = NETDEV_CREATE_INDEPENDENT, .config_verify = netdev_nlmon_verify, + .iftype = ARPHRD_NETLINK, }; diff --git a/src/network/netdev/tunnel.c b/src/network/netdev/tunnel.c index 2371808..ed23aab 100644 --- a/src/network/netdev/tunnel.c +++ b/src/network/netdev/tunnel.c @@ -2,8 +2,9 @@ #include #include -#include +#include #include +#include #include #include "conf-parser.h" @@ -808,7 +809,7 @@ const NetDevVTable ipip_vtable = { .fill_message_create = netdev_ipip_sit_fill_message_create, .create_type = NETDEV_CREATE_STACKED, .config_verify = netdev_tunnel_verify, - .generate_mac = true, + .iftype = ARPHRD_TUNNEL, }; const NetDevVTable sit_vtable = { @@ -818,7 +819,7 @@ const NetDevVTable sit_vtable = { .fill_message_create = netdev_ipip_sit_fill_message_create, .create_type = NETDEV_CREATE_STACKED, .config_verify = netdev_tunnel_verify, - .generate_mac = true, + .iftype = ARPHRD_SIT, }; const NetDevVTable vti_vtable = { @@ -828,7 +829,7 @@ const NetDevVTable vti_vtable = { .fill_message_create = netdev_vti_fill_message_create, .create_type = NETDEV_CREATE_STACKED, .config_verify = netdev_tunnel_verify, - .generate_mac = true, + .iftype = ARPHRD_TUNNEL, }; const NetDevVTable vti6_vtable = { @@ -838,7 +839,7 @@ const NetDevVTable vti6_vtable = { .fill_message_create = netdev_vti_fill_message_create, .create_type = NETDEV_CREATE_STACKED, .config_verify = netdev_tunnel_verify, - .generate_mac = true, + .iftype = ARPHRD_TUNNEL6, }; const NetDevVTable gre_vtable = { @@ -848,7 +849,7 @@ const NetDevVTable gre_vtable = { .fill_message_create = netdev_gre_erspan_fill_message_create, .create_type = NETDEV_CREATE_STACKED, .config_verify = netdev_tunnel_verify, - .generate_mac = true, + .iftype = ARPHRD_IPGRE, }; const NetDevVTable gretap_vtable = { @@ -858,6 +859,7 @@ const NetDevVTable gretap_vtable = { .fill_message_create = netdev_gre_erspan_fill_message_create, .create_type = NETDEV_CREATE_STACKED, .config_verify = netdev_tunnel_verify, + .iftype = ARPHRD_ETHER, .generate_mac = true, }; @@ -868,7 +870,7 @@ const NetDevVTable ip6gre_vtable = { .fill_message_create = netdev_ip6gre_fill_message_create, .create_type = NETDEV_CREATE_STACKED, .config_verify = netdev_tunnel_verify, - .generate_mac = true, + .iftype = ARPHRD_IP6GRE, }; const NetDevVTable ip6gretap_vtable = { @@ -878,6 +880,7 @@ const NetDevVTable ip6gretap_vtable = { .fill_message_create = netdev_ip6gre_fill_message_create, .create_type = NETDEV_CREATE_STACKED, .config_verify = netdev_tunnel_verify, + .iftype = ARPHRD_ETHER, .generate_mac = true, }; @@ -888,7 +891,7 @@ const NetDevVTable ip6tnl_vtable = { .fill_message_create = netdev_ip6tnl_fill_message_create, .create_type = NETDEV_CREATE_STACKED, .config_verify = netdev_tunnel_verify, - .generate_mac = true, + .iftype = ARPHRD_TUNNEL6, }; const NetDevVTable erspan_vtable = { @@ -898,5 +901,6 @@ const NetDevVTable erspan_vtable = { .fill_message_create = netdev_gre_erspan_fill_message_create, .create_type = NETDEV_CREATE_STACKED, .config_verify = netdev_tunnel_verify, + .iftype = ARPHRD_ETHER, .generate_mac = true, }; diff --git a/src/network/netdev/tuntap.c b/src/network/netdev/tuntap.c index 0e13c4f..f21dfe9 100644 --- a/src/network/netdev/tuntap.c +++ b/src/network/netdev/tuntap.c @@ -152,6 +152,7 @@ const NetDevVTable tun_vtable = { .done = tuntap_done, .create = netdev_create_tuntap, .create_type = NETDEV_CREATE_INDEPENDENT, + .iftype = ARPHRD_NONE, }; const NetDevVTable tap_vtable = { @@ -161,4 +162,5 @@ const NetDevVTable tap_vtable = { .done = tuntap_done, .create = netdev_create_tuntap, .create_type = NETDEV_CREATE_INDEPENDENT, + .iftype = ARPHRD_ETHER, }; diff --git a/src/network/netdev/vcan.c b/src/network/netdev/vcan.c index 3621d4c..380547e 100644 --- a/src/network/netdev/vcan.c +++ b/src/network/netdev/vcan.c @@ -1,10 +1,12 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include + #include "vcan.h" const NetDevVTable vcan_vtable = { .object_size = sizeof(VCan), .sections = NETDEV_COMMON_SECTIONS, .create_type = NETDEV_CREATE_INDEPENDENT, - .generate_mac = true, + .iftype = ARPHRD_CAN, }; diff --git a/src/network/netdev/veth.c b/src/network/netdev/veth.c index 840a327..f9772f9 100644 --- a/src/network/netdev/veth.c +++ b/src/network/netdev/veth.c @@ -2,6 +2,8 @@ #include #include +#include +#include #include #include "veth.h" @@ -91,5 +93,6 @@ const NetDevVTable veth_vtable = { .fill_message_create = netdev_veth_fill_message_create, .create_type = NETDEV_CREATE_INDEPENDENT, .config_verify = netdev_veth_verify, + .iftype = ARPHRD_ETHER, .generate_mac = true, }; diff --git a/src/network/netdev/vlan.c b/src/network/netdev/vlan.c index de3eb72..af3e779 100644 --- a/src/network/netdev/vlan.c +++ b/src/network/netdev/vlan.c @@ -2,6 +2,7 @@ #include #include +#include #include #include "parse-util.h" @@ -229,4 +230,5 @@ const NetDevVTable vlan_vtable = { .create_type = NETDEV_CREATE_STACKED, .config_verify = netdev_vlan_verify, .done = vlan_done, + .iftype = ARPHRD_ETHER, }; diff --git a/src/network/netdev/vrf.c b/src/network/netdev/vrf.c index ae71ae9..d543b89 100644 --- a/src/network/netdev/vrf.c +++ b/src/network/netdev/vrf.c @@ -1,6 +1,8 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include +#include +#include #include "vrf.h" @@ -28,5 +30,6 @@ const NetDevVTable vrf_vtable = { .sections = NETDEV_COMMON_SECTIONS "VRF\0", .fill_message_create = netdev_vrf_fill_message_create, .create_type = NETDEV_CREATE_MASTER, + .iftype = ARPHRD_ETHER, .generate_mac = true, }; diff --git a/src/network/netdev/vxcan.c b/src/network/netdev/vxcan.c index e4e32ff..a0ba048 100644 --- a/src/network/netdev/vxcan.c +++ b/src/network/netdev/vxcan.c @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include +#include #include "vxcan.h" @@ -70,5 +71,5 @@ const NetDevVTable vxcan_vtable = { .fill_message_create = netdev_vxcan_fill_message_create, .create_type = NETDEV_CREATE_INDEPENDENT, .config_verify = netdev_vxcan_verify, - .generate_mac = true, + .iftype = ARPHRD_CAN, }; diff --git a/src/network/netdev/vxlan.c b/src/network/netdev/vxlan.c index 52d8b37..342df4c 100644 --- a/src/network/netdev/vxlan.c +++ b/src/network/netdev/vxlan.c @@ -1,6 +1,8 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include +#include +#include #include "conf-parser.h" #include "alloc-util.h" @@ -386,5 +388,6 @@ const NetDevVTable vxlan_vtable = { .fill_message_create = netdev_vxlan_fill_message_create, .create_type = NETDEV_CREATE_STACKED, .config_verify = netdev_vxlan_verify, + .iftype = ARPHRD_ETHER, .generate_mac = true, }; diff --git a/src/network/netdev/wireguard.c b/src/network/netdev/wireguard.c index b8fc492..0cc46b1 100644 --- a/src/network/netdev/wireguard.c +++ b/src/network/netdev/wireguard.c @@ -5,6 +5,8 @@ #include #include +#include +#include #include "sd-resolve.h" @@ -937,5 +939,5 @@ const NetDevVTable wireguard_vtable = { .done = wireguard_done, .create_type = NETDEV_CREATE_INDEPENDENT, .config_verify = wireguard_verify, - .generate_mac = true, + .iftype = ARPHRD_NONE, }; diff --git a/src/network/netdev/xfrm.c b/src/network/netdev/xfrm.c index 2e8245c..ef5e735 100644 --- a/src/network/netdev/xfrm.c +++ b/src/network/netdev/xfrm.c @@ -1,5 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include + #include "missing_network.h" #include "xfrm.h" @@ -48,5 +50,6 @@ const NetDevVTable xfrm_vtable = { .sections = NETDEV_COMMON_SECTIONS "Xfrm\0", .fill_message_create = xfrm_fill_message_create, .config_verify = xfrm_verify, - .create_type = NETDEV_CREATE_STACKED + .create_type = NETDEV_CREATE_STACKED, + .iftype = ARPHRD_NONE, };