]> git.proxmox.com Git - systemd.git/blame - src/network/networkd-netdev-vlan.c
Merge tag 'upstream/229'
[systemd.git] / src / network / networkd-netdev-vlan.c
CommitLineData
5eef597e
MP
1/***
2 This file is part of systemd.
3
4 Copyright 2013 Tom Gundersen <teg@jklm.no>
5
6 systemd is free software; you can redistribute it and/or modify it
7 under the terms of the GNU Lesser General Public License as published by
8 the Free Software Foundation; either version 2.1 of the License, or
9 (at your option) any later version.
10
11 systemd is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
15
16 You should have received a copy of the GNU Lesser General Public License
17 along with systemd; If not, see <http://www.gnu.org/licenses/>.
18***/
19
20#include <net/if.h>
21
22#include "networkd-netdev-vlan.h"
5eef597e 23
86f210e9 24static int netdev_vlan_fill_message_create(NetDev *netdev, Link *link, sd_netlink_message *req) {
db2df898 25 VLan *v;
5eef597e
MP
26 int r;
27
28 assert(netdev);
5eef597e
MP
29 assert(link);
30 assert(req);
31
db2df898
MP
32 v = VLAN(netdev);
33
34 assert(v);
35
5eef597e 36 if (v->id <= VLANID_MAX) {
86f210e9
MP
37 r = sd_netlink_message_append_u16(req, IFLA_VLAN_ID, v->id);
38 if (r < 0)
39 return log_netdev_error_errno(netdev, r, "Could not append IFLA_VLAN_ID attribute: %m");
5eef597e
MP
40 }
41
42 return 0;
43}
44
45static int netdev_vlan_verify(NetDev *netdev, const char *filename) {
db2df898 46 VLan *v;
5eef597e
MP
47
48 assert(netdev);
5eef597e
MP
49 assert(filename);
50
db2df898
MP
51 v = VLAN(netdev);
52
53 assert(v);
54
5eef597e
MP
55 if (v->id > VLANID_MAX) {
56 log_warning("VLAN without valid Id (%"PRIu64") configured in %s. Ignoring", v->id, filename);
57 return -EINVAL;
58 }
59
60 return 0;
61}
62
63static void vlan_init(NetDev *netdev) {
64 VLan *v = VLAN(netdev);
65
66 assert(netdev);
67 assert(v);
68
69 v->id = VLANID_MAX + 1;
70}
71
72const NetDevVTable vlan_vtable = {
73 .object_size = sizeof(VLan),
74 .init = vlan_init,
75 .sections = "Match\0NetDev\0VLAN\0",
76 .fill_message_create = netdev_vlan_fill_message_create,
77 .create_type = NETDEV_CREATE_STACKED,
78 .config_verify = netdev_vlan_verify,
79};