xref: /aosp_15_r20/external/libnl/python/netlink/route/links/vlan.py (revision 4dc78e53d49367fa8e61b07018507c90983a077d)
1#
2# Copyright (c) 2011 Thomas Graf <[email protected]>
3#
4
5"""VLAN network link
6
7"""
8
9from __future__ import absolute_import
10
11
12from ... import core as netlink
13from .. import capi as capi
14
15
16class VLANLink(object):
17    def __init__(self, link):
18        self._link = link
19
20    @property
21    @netlink.nlattr(type=int)
22    def id(self):
23        """vlan identifier"""
24        return capi.rtnl_link_vlan_get_id(self._link)
25
26    @id.setter
27    def id(self, value):
28        capi.rtnl_link_vlan_set_id(self._link, int(value))
29
30    @property
31    @netlink.nlattr(type=str)
32    def flags(self):
33        """VLAN flags
34        Setting this property will *Not* reset flags to value you supply in
35        Examples:
36        link.flags = '+xxx' # add xxx flag
37        link.flags = 'xxx'  # exactly the same
38        link.flags = '-xxx' # remove xxx flag
39        link.flags = [ '+xxx', '-yyy' ] # list operation
40        """
41        flags = capi.rtnl_link_vlan_get_flags(self._link)
42        return capi.rtnl_link_vlan_flags2str(flags, 256)[0].split(",")
43
44    def _set_flag(self, flag):
45        if flag.startswith("-"):
46            i = capi.rtnl_link_vlan_str2flags(flag[1:])
47            capi.rtnl_link_vlan_unset_flags(self._link, i)
48        elif flag.startswith("+"):
49            i = capi.rtnl_link_vlan_str2flags(flag[1:])
50            capi.rtnl_link_vlan_set_flags(self._link, i)
51        else:
52            i = capi.rtnl_link_vlan_str2flags(flag)
53            capi.rtnl_link_vlan_set_flags(self._link, i)
54
55    @flags.setter
56    def flags(self, value):
57        if type(value) is list:
58            for flag in value:
59                self._set_flag(flag)
60        else:
61            self._set_flag(value)
62
63    ###################################################################
64    # TODO:
65    #   - ingress map
66    #   - egress map
67
68    def brief(self):
69        return "vlan-id {0}".format(self.id)
70
71
72def init(link):
73    link.vlan = VLANLink(link._rtnl_link)
74    return link.vlan
75