From c1547d90d70016c04c35a3ad2ff42190eb4de18a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BE=D1=80=D0=B5=D0=BD=D0=B1=D0=B5=D1=80=D0=B3=20?= =?UTF-8?q?=D0=9C=D0=B0=D1=80=D0=BA=20=28=D0=BD=D0=BE=D1=83=D1=82=D0=B1?= =?UTF-8?q?=D1=83=D0=BA=20=D0=B4=D0=BE=D0=BC=D0=B0=29?= Date: Mon, 4 Jun 2012 23:39:30 +0600 Subject: Flags properties description and implementation fixed 1. Address, Link and Vlan classes affected with same bug 2. Flags property are not designed as set class. Setting to property will not replace flags, just add flags to set. So, jist document that, and fixed obvious logick. --- python/netlink/route/address.py | 18 +++++++++++++++--- python/netlink/route/link.py | 16 +++++++++++++--- python/netlink/route/links/vlan.py | 17 ++++++++++++++--- 3 files changed, 42 insertions(+), 9 deletions(-) diff --git a/python/netlink/route/address.py b/python/netlink/route/address.py index 8fab97d..a8da1ed 100644 --- a/python/netlink/route/address.py +++ b/python/netlink/route/address.py @@ -147,17 +147,29 @@ class Address(netlink.Object): @netlink.nlattr('address.flags', type=str, fmt=util.string) @property def flags(self): - """Flags""" + """Flags + + Setting this property will *Not* reset flags to value you supply in + + Examples: + addr.flags = '+xxx' # add xxx flag + addr.flags = 'xxx' # exactly the same + addr.flags = '-xxx' # remove xxx flag + addr.flags = [ '+xxx', '-yyy' ] # list operation + """ flags = capi.rtnl_addr_get_flags(self._rtnl_addr) return capi.rtnl_addr_flags2str(flags, 256)[0].split(',') def _set_flag(self, flag): - if flag[0] == '-': + if flag.startswith('-'): i = capi.rtnl_addr_str2flags(flag[1:]) capi.rtnl_addr_unset_flags(self._rtnl_addr, i) - else: + elif flag.startswith('+'): i = capi.rtnl_addr_str2flags(flag[1:]) capi.rtnl_addr_set_flags(self._rtnl_addr, i) + else: + i = capi.rtnl_addr_str2flags(flag) + capi.rtnl_addr_set_flags(self._rtnl_addr, i) @flags.setter def flags(self, value): diff --git a/python/netlink/route/link.py b/python/netlink/route/link.py index 8c87971..b7a377a 100644 --- a/python/netlink/route/link.py +++ b/python/netlink/route/link.py @@ -213,17 +213,27 @@ class Link(netlink.Object): @netlink.nlattr('link.flags', type=str, fmt=util.string) @property def flags(self): - """Flags""" + """Flags + Setting this property will *Not* reset flags to value you supply in + Examples: + link.flags = '+xxx' # add xxx flag + link.flags = 'xxx' # exactly the same + link.flags = '-xxx' # remove xxx flag + link.flags = [ '+xxx', '-yyy' ] # list operation + """ flags = capi.rtnl_link_get_flags(self._rtnl_link) return capi.rtnl_link_flags2str(flags, 256)[0].split(',') def _set_flag(self, flag): - if flag[0] == '-': + if flag.startswith('-'): i = capi.rtnl_link_str2flags(flag[1:]) capi.rtnl_link_unset_flags(self._rtnl_link, i) - else: + elif flag.startswith('+'): i = capi.rtnl_link_str2flags(flag[1:]) capi.rtnl_link_set_flags(self._rtnl_link, i) + else: + i = capi.rtnl_link_str2flags(flag) + capi.rtnl_link_set_flags(self._rtnl_link, i) @flags.setter def flags(self, value): diff --git a/python/netlink/route/links/vlan.py b/python/netlink/route/links/vlan.py index c9fe2a7..bb339d0 100644 --- a/python/netlink/route/links/vlan.py +++ b/python/netlink/route/links/vlan.py @@ -32,15 +32,26 @@ class VLANLink(object): @netlink.nlattr('link.vlan.flags', type=str) @property def flags(self): - """vlan flags""" + """ VLAN flags + Setting this property will *Not* reset flags to value you supply in + Examples: + link.flags = '+xxx' # add xxx flag + link.flags = 'xxx' # exactly the same + link.flags = '-xxx' # remove xxx flag + link.flags = [ '+xxx', '-yyy' ] # list operation + """ flags = capi.rtnl_link_vlan_get_flags(self._link) return capi.rtnl_link_vlan_flags2str(flags, 256)[0].split(',') def _set_flag(self, flag): - i = capi.rtnl_link_vlan_str2flags(flag[1:]) - if flag[0] == '-': + if flag.startswith('-'): + i = capi.rtnl_link_vlan_str2flags(flag[1:]) capi.rtnl_link_vlan_unset_flags(self._link, i) + elif flag.startswith('+'): + i = capi.rtnl_link_vlan_str2flags(flag[1:]) + capi.rtnl_link_vlan_set_flags(self._link, i) else: + i = capi.rtnl_link_vlan_str2flags(flag) capi.rtnl_link_vlan_set_flags(self._link, i) @flags.setter -- cgit v1.2.1