]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/network/netdev/macvlan.c
tree-wide: drop license boilerplate
[thirdparty/systemd.git] / src / network / netdev / macvlan.c
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
0372cb2b
TG
2/***
3 This file is part of systemd.
4
5 Copyright 2013 Tom Gundersen <teg@jklm.no>
0372cb2b
TG
6***/
7
8#include <net/if.h>
9
0372cb2b 10#include "conf-parser.h"
441e9ae4 11#include "netdev/macvlan.h"
8b43440b 12#include "string-table.h"
0372cb2b
TG
13
14static const char* const macvlan_mode_table[_NETDEV_MACVLAN_MODE_MAX] = {
15 [NETDEV_MACVLAN_MODE_PRIVATE] = "private",
16 [NETDEV_MACVLAN_MODE_VEPA] = "vepa",
17 [NETDEV_MACVLAN_MODE_BRIDGE] = "bridge",
18 [NETDEV_MACVLAN_MODE_PASSTHRU] = "passthru",
19};
20
21DEFINE_STRING_TABLE_LOOKUP(macvlan_mode, MacVlanMode);
22DEFINE_CONFIG_PARSE_ENUM(config_parse_macvlan_mode, macvlan_mode, MacVlanMode, "Failed to parse macvlan mode");
23
1c4baffc 24static int netdev_macvlan_fill_message_create(NetDev *netdev, Link *link, sd_netlink_message *req) {
f33ff02b 25 MacVlan *m;
0372cb2b
TG
26 int r;
27
28 assert(netdev);
0372cb2b 29 assert(link);
0372cb2b 30 assert(netdev->ifname);
0372cb2b 31
f33ff02b
SS
32 if (netdev->kind == NETDEV_KIND_MACVLAN)
33 m = MACVLAN(netdev);
34 else
35 m = MACVTAP(netdev);
36
37 assert(m);
38
aa9f1140 39 if (m->mode != _NETDEV_MACVLAN_MODE_INVALID) {
1c4baffc 40 r = sd_netlink_message_append_u32(req, IFLA_MACVLAN_MODE, m->mode);
c8a09ef4
SS
41 if (r < 0)
42 return log_netdev_error_errno(netdev, r, "Could not append IFLA_MACVLAN_MODE attribute: %m");
0372cb2b
TG
43 }
44
aa9f1140
TG
45 return 0;
46}
0372cb2b 47
aa9f1140 48static void macvlan_init(NetDev *n) {
f33ff02b 49 MacVlan *m;
0372cb2b 50
aa9f1140 51 assert(n);
f33ff02b
SS
52
53 if (n->kind == NETDEV_KIND_MACVLAN)
54 m = MACVLAN(n);
55 else
56 m = MACVTAP(n);
57
aa9f1140
TG
58 assert(m);
59
60 m->mode = _NETDEV_MACVLAN_MODE_INVALID;
0372cb2b 61}
3be1d7e0 62
f33ff02b
SS
63const NetDevVTable macvtap_vtable = {
64 .object_size = sizeof(MacVlan),
65 .init = macvlan_init,
66 .sections = "Match\0NetDev\0MACVTAP\0",
67 .fill_message_create = netdev_macvlan_fill_message_create,
68 .create_type = NETDEV_CREATE_STACKED,
69};
70
3be1d7e0 71const NetDevVTable macvlan_vtable = {
aa9f1140
TG
72 .object_size = sizeof(MacVlan),
73 .init = macvlan_init,
74 .sections = "Match\0NetDev\0MACVLAN\0",
75 .fill_message_create = netdev_macvlan_fill_message_create,
76 .create_type = NETDEV_CREATE_STACKED,
3be1d7e0 77};