]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/network/netdev/ipvlan.c
tree-wide: beautify remaining copyright statements
[thirdparty/systemd.git] / src / network / netdev / ipvlan.c
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
c4a5ddc9 2/***
96b2fb93 3 Copyright © 2013-2015 Tom Gundersen <teg@jklm.no>
c4a5ddc9
TG
4***/
5
6#include <net/if.h>
c4a5ddc9 7
c4a5ddc9 8#include "conf-parser.h"
441e9ae4 9#include "netdev/ipvlan.h"
8b43440b 10#include "string-table.h"
c4a5ddc9
TG
11
12static const char* const ipvlan_mode_table[_NETDEV_IPVLAN_MODE_MAX] = {
13 [NETDEV_IPVLAN_MODE_L2] = "L2",
14 [NETDEV_IPVLAN_MODE_L3] = "L3",
d384826f 15 [NETDEV_IPVLAN_MODE_L3S] = "L3S",
c4a5ddc9
TG
16};
17
18DEFINE_STRING_TABLE_LOOKUP(ipvlan_mode, IPVlanMode);
19DEFINE_CONFIG_PARSE_ENUM(config_parse_ipvlan_mode, ipvlan_mode, IPVlanMode, "Failed to parse ipvlan mode");
20
d384826f
SS
21static const char* const ipvlan_flags_table[_NETDEV_IPVLAN_FLAGS_MAX] = {
22 [NETDEV_IPVLAN_FLAGS_BRIGDE] = "bridge",
23 [NETDEV_IPVLAN_FLAGS_PRIVATE] = "private",
24 [NETDEV_IPVLAN_FLAGS_VEPA] = "vepa",
25};
26
27DEFINE_STRING_TABLE_LOOKUP(ipvlan_flags, IPVlanFlags);
28DEFINE_CONFIG_PARSE_ENUM(config_parse_ipvlan_flags, ipvlan_flags, IPVlanFlags, "Failed to parse ipvlan flags");
29
1c4baffc 30static int netdev_ipvlan_fill_message_create(NetDev *netdev, Link *link, sd_netlink_message *req) {
0695cb45 31 IPVlan *m;
c4a5ddc9
TG
32 int r;
33
34 assert(netdev);
c4a5ddc9
TG
35 assert(link);
36 assert(netdev->ifname);
37
0695cb45
SS
38 m = IPVLAN(netdev);
39
40 assert(m);
41
c4a5ddc9 42 if (m->mode != _NETDEV_IPVLAN_MODE_INVALID) {
1c4baffc 43 r = sd_netlink_message_append_u16(req, IFLA_IPVLAN_MODE, m->mode);
f6a0ea85
SS
44 if (r < 0)
45 return log_netdev_error_errno(netdev, r, "Could not append IFLA_IPVLAN_MODE attribute: %m");
c4a5ddc9
TG
46 }
47
d384826f
SS
48 if (m->flags != _NETDEV_IPVLAN_FLAGS_INVALID) {
49 r = sd_netlink_message_append_u16(req, IFLA_IPVLAN_FLAGS, m->flags);
50 if (r < 0)
51 return log_netdev_error_errno(netdev, r, "Could not append IFLA_IPVLAN_FLAGS attribute: %m");
52 }
53
c4a5ddc9
TG
54 return 0;
55}
56
57static void ipvlan_init(NetDev *n) {
0695cb45 58 IPVlan *m;
c4a5ddc9
TG
59
60 assert(n);
0695cb45
SS
61
62 m = IPVLAN(n);
63
c4a5ddc9
TG
64 assert(m);
65
66 m->mode = _NETDEV_IPVLAN_MODE_INVALID;
1291a042 67 m->flags = _NETDEV_IPVLAN_FLAGS_INVALID;
c4a5ddc9
TG
68}
69
70const NetDevVTable ipvlan_vtable = {
71 .object_size = sizeof(IPVlan),
72 .init = ipvlan_init,
73 .sections = "Match\0NetDev\0IPVLAN\0",
74 .fill_message_create = netdev_ipvlan_fill_message_create,
75 .create_type = NETDEV_CREATE_STACKED,
76};