From: Yu Watanabe Date: Thu, 23 May 2019 02:27:12 +0000 (+0900) Subject: network: add NetDevVTable::generate_mac flag X-Git-Tag: v243-rc1~355^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=daf0f8ca87284b847c40102dbaca0890fec2f971;p=thirdparty%2Fsystemd.git network: add NetDevVTable::generate_mac flag --- diff --git a/src/network/netdev/bond.c b/src/network/netdev/bond.c index 240cfe34e22..a85c9e33ec2 100644 --- a/src/network/netdev/bond.c +++ b/src/network/netdev/bond.c @@ -592,4 +592,5 @@ const NetDevVTable bond_vtable = { .sections = "Match\0NetDev\0Bond\0", .fill_message_create = netdev_bond_fill_message_create, .create_type = NETDEV_CREATE_MASTER, + .generate_mac = true, }; diff --git a/src/network/netdev/dummy.c b/src/network/netdev/dummy.c index aded1c589fe..091a54ff39e 100644 --- a/src/network/netdev/dummy.c +++ b/src/network/netdev/dummy.c @@ -6,4 +6,5 @@ const NetDevVTable dummy_vtable = { .object_size = sizeof(Dummy), .sections = "Match\0NetDev\0", .create_type = NETDEV_CREATE_INDEPENDENT, + .generate_mac = true, }; diff --git a/src/network/netdev/geneve.c b/src/network/netdev/geneve.c index 3dc8f083cc6..611f9b2f6d8 100644 --- a/src/network/netdev/geneve.c +++ b/src/network/netdev/geneve.c @@ -355,4 +355,5 @@ const NetDevVTable geneve_vtable = { .create = netdev_geneve_create, .create_type = NETDEV_CREATE_INDEPENDENT, .config_verify = netdev_geneve_verify, + .generate_mac = true, }; diff --git a/src/network/netdev/ipvlan.c b/src/network/netdev/ipvlan.c index f48cb0231ad..45dfe17777a 100644 --- a/src/network/netdev/ipvlan.c +++ b/src/network/netdev/ipvlan.c @@ -77,6 +77,7 @@ const NetDevVTable ipvlan_vtable = { .sections = "Match\0NetDev\0IPVLAN\0", .fill_message_create = netdev_ipvlan_fill_message_create, .create_type = NETDEV_CREATE_STACKED, + .generate_mac = true, }; const NetDevVTable ipvtap_vtable = { @@ -85,6 +86,7 @@ const NetDevVTable ipvtap_vtable = { .sections = "Match\0NetDev\0IPVTAP\0", .fill_message_create = netdev_ipvlan_fill_message_create, .create_type = NETDEV_CREATE_STACKED, + .generate_mac = true, }; IPVlanMode link_get_ipvlan_mode(Link *link) { diff --git a/src/network/netdev/macsec.c b/src/network/netdev/macsec.c index c82a6fd0ac1..740d8853395 100644 --- a/src/network/netdev/macsec.c +++ b/src/network/netdev/macsec.c @@ -1246,4 +1246,5 @@ const NetDevVTable macsec_vtable = { .done = macsec_done, .create_type = NETDEV_CREATE_STACKED, .config_verify = netdev_macsec_verify, + .generate_mac = true, }; diff --git a/src/network/netdev/macvlan.c b/src/network/netdev/macvlan.c index 871f0201a87..e13c3af9fd8 100644 --- a/src/network/netdev/macvlan.c +++ b/src/network/netdev/macvlan.c @@ -61,6 +61,7 @@ const NetDevVTable macvtap_vtable = { .sections = "Match\0NetDev\0MACVTAP\0", .fill_message_create = netdev_macvlan_fill_message_create, .create_type = NETDEV_CREATE_STACKED, + .generate_mac = true, }; const NetDevVTable macvlan_vtable = { @@ -69,4 +70,5 @@ const NetDevVTable macvlan_vtable = { .sections = "Match\0NetDev\0MACVLAN\0", .fill_message_create = netdev_macvlan_fill_message_create, .create_type = NETDEV_CREATE_STACKED, + .generate_mac = true, }; diff --git a/src/network/netdev/netdev.c b/src/network/netdev/netdev.c index 3968ab54956..1c307a3125d 100644 --- a/src/network/netdev/netdev.c +++ b/src/network/netdev/netdev.c @@ -734,7 +734,7 @@ int netdev_load_one(Manager *manager, const char *filename) { if (!netdev->filename) return log_oom(); - if (!netdev->mac && !IN_SET(netdev->kind, NETDEV_KIND_VLAN, NETDEV_KIND_BRIDGE)) { + if (!netdev->mac && NETDEV_VTABLE(netdev)->generate_mac) { r = netdev_get_mac(netdev->ifname, &netdev->mac); if (r < 0) return log_netdev_error_errno(netdev, r, diff --git a/src/network/netdev/netdev.h b/src/network/netdev/netdev.h index dcf072ce944..8295ba1966d 100644 --- a/src/network/netdev/netdev.h +++ b/src/network/netdev/netdev.h @@ -131,6 +131,9 @@ typedef struct NetDevVTable { /* verify that compulsory configuration options were specified */ int (*config_verify)(NetDev *netdev, const char *filename); + + /* Generate MAC address or not When MACAddress= is not specified. */ + bool generate_mac; } NetDevVTable; extern const NetDevVTable * const netdev_vtable[_NETDEV_KIND_MAX]; diff --git a/src/network/netdev/netdevsim.c b/src/network/netdev/netdevsim.c index 8caba676006..3b9d875183e 100644 --- a/src/network/netdev/netdevsim.c +++ b/src/network/netdev/netdevsim.c @@ -7,4 +7,5 @@ const NetDevVTable netdevsim_vtable = { .object_size = sizeof(NetDevSim), .sections = "Match\0NetDev\0", .create_type = NETDEV_CREATE_INDEPENDENT, + .generate_mac = true, }; diff --git a/src/network/netdev/tunnel.c b/src/network/netdev/tunnel.c index e69a009c315..1572836b69c 100644 --- a/src/network/netdev/tunnel.c +++ b/src/network/netdev/tunnel.c @@ -778,6 +778,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, }; const NetDevVTable sit_vtable = { @@ -787,6 +788,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, }; const NetDevVTable vti_vtable = { @@ -796,6 +798,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, }; const NetDevVTable vti6_vtable = { @@ -805,6 +808,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, }; const NetDevVTable gre_vtable = { @@ -814,6 +818,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, }; const NetDevVTable gretap_vtable = { @@ -823,6 +828,7 @@ const NetDevVTable gretap_vtable = { .fill_message_create = netdev_gre_erspan_fill_message_create, .create_type = NETDEV_CREATE_STACKED, .config_verify = netdev_tunnel_verify, + .generate_mac = true, }; const NetDevVTable ip6gre_vtable = { @@ -832,6 +838,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, }; const NetDevVTable ip6gretap_vtable = { @@ -841,6 +848,7 @@ const NetDevVTable ip6gretap_vtable = { .fill_message_create = netdev_ip6gre_fill_message_create, .create_type = NETDEV_CREATE_STACKED, .config_verify = netdev_tunnel_verify, + .generate_mac = true, }; const NetDevVTable ip6tnl_vtable = { @@ -850,6 +858,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, }; const NetDevVTable erspan_vtable = { @@ -859,4 +868,5 @@ const NetDevVTable erspan_vtable = { .fill_message_create = netdev_gre_erspan_fill_message_create, .create_type = NETDEV_CREATE_STACKED, .config_verify = netdev_tunnel_verify, + .generate_mac = true, }; diff --git a/src/network/netdev/vcan.c b/src/network/netdev/vcan.c index 574d1cad312..f6a4dbb098d 100644 --- a/src/network/netdev/vcan.c +++ b/src/network/netdev/vcan.c @@ -6,4 +6,5 @@ const NetDevVTable vcan_vtable = { .object_size = sizeof(VCan), .sections = "Match\0NetDev\0", .create_type = NETDEV_CREATE_INDEPENDENT, + .generate_mac = true, }; diff --git a/src/network/netdev/veth.c b/src/network/netdev/veth.c index a0a0b8e39ec..e996b49b0a9 100644 --- a/src/network/netdev/veth.c +++ b/src/network/netdev/veth.c @@ -92,4 +92,5 @@ const NetDevVTable veth_vtable = { .fill_message_create = netdev_veth_fill_message_create, .create_type = NETDEV_CREATE_INDEPENDENT, .config_verify = netdev_veth_verify, + .generate_mac = true, }; diff --git a/src/network/netdev/vrf.c b/src/network/netdev/vrf.c index 5efab537cc4..596a91453c0 100644 --- a/src/network/netdev/vrf.c +++ b/src/network/netdev/vrf.c @@ -30,4 +30,5 @@ const NetDevVTable vrf_vtable = { .sections = "Match\0NetDev\0VRF\0", .fill_message_create = netdev_vrf_fill_message_create, .create_type = NETDEV_CREATE_MASTER, + .generate_mac = true, }; diff --git a/src/network/netdev/vxcan.c b/src/network/netdev/vxcan.c index c5dd5df51c5..79f47690adb 100644 --- a/src/network/netdev/vxcan.c +++ b/src/network/netdev/vxcan.c @@ -70,4 +70,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, }; diff --git a/src/network/netdev/vxlan.c b/src/network/netdev/vxlan.c index e24537083b6..bba58e8aaf4 100644 --- a/src/network/netdev/vxlan.c +++ b/src/network/netdev/vxlan.c @@ -380,4 +380,5 @@ const NetDevVTable vxlan_vtable = { .fill_message_create = netdev_vxlan_fill_message_create, .create_type = NETDEV_CREATE_STACKED, .config_verify = netdev_vxlan_verify, + .generate_mac = true, }; diff --git a/src/network/netdev/wireguard.c b/src/network/netdev/wireguard.c index 91fcee1401b..154ca3b7a44 100644 --- a/src/network/netdev/wireguard.c +++ b/src/network/netdev/wireguard.c @@ -978,4 +978,5 @@ const NetDevVTable wireguard_vtable = { .done = wireguard_done, .create_type = NETDEV_CREATE_INDEPENDENT, .config_verify = wireguard_verify, + .generate_mac = true, };