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