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