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