]> git.proxmox.com Git - systemd.git/blob - src/network/networkd-netdev-vlan.c
Imported Upstream version 231
[systemd.git] / src / network / networkd-netdev-vlan.c
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"
23 #include "vlan-util.h"
24
25 static int netdev_vlan_fill_message_create(NetDev *netdev, Link *link, sd_netlink_message *req) {
26 VLan *v;
27 int r;
28
29 assert(netdev);
30 assert(link);
31 assert(req);
32
33 v = VLAN(netdev);
34
35 assert(v);
36
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");
40
41 return 0;
42 }
43
44 static int netdev_vlan_verify(NetDev *netdev, const char *filename) {
45 VLan *v;
46
47 assert(netdev);
48 assert(filename);
49
50 v = VLAN(netdev);
51
52 assert(v);
53
54 if (v->id == VLANID_INVALID) {
55 log_warning("VLAN without valid Id (%"PRIu16") configured in %s.", v->id, filename);
56 return -EINVAL;
57 }
58
59 return 0;
60 }
61
62 static void vlan_init(NetDev *netdev) {
63 VLan *v = VLAN(netdev);
64
65 assert(netdev);
66 assert(v);
67
68 v->id = VLANID_INVALID;
69 }
70
71 const NetDevVTable vlan_vtable = {
72 .object_size = sizeof(VLan),
73 .init = vlan_init,
74 .sections = "Match\0NetDev\0VLAN\0",
75 .fill_message_create = netdev_vlan_fill_message_create,
76 .create_type = NETDEV_CREATE_STACKED,
77 .config_verify = netdev_vlan_verify,
78 };