Pass flags as a list of strings.

This commit is contained in:
Ian Gulliver
2015-01-10 16:29:51 +00:00
parent 52d7a6a5ca
commit 5b9c67b260

View File

@@ -186,10 +186,12 @@ class Netlink(object):
_NLMSG_F_ECHO = 0x08 _NLMSG_F_ECHO = 0x08
_NLMSG_F_DUMP_INTR = 0x10 _NLMSG_F_DUMP_INTR = 0x10
NLMSG_F_ROOT = 0x100 flags = {
NLMSG_F_MATCH = 0x200 'root': 0x100,
NLMSG_F_ATOMIC = 0x400 'match': 0x200,
NLMSG_F_DUMP = NLMSG_F_ROOT | NLMSG_F_MATCH 'atomic': 0x400,
'dump': 0x100 | 0x200,
}
_NLMSG_DONE = 3 _NLMSG_DONE = 3
@@ -200,13 +202,15 @@ class Netlink(object):
self._sock.bind((0, 0)) self._sock.bind((0, 0))
def Send(self, msgtype, flags, msg): def Send(self, msgtype, flags, msg):
flags |= self._NLMSG_F_REQUEST flagint = self._NLMSG_F_REQUEST
for flag in flags:
flagint |= self.flags[flag]
accumulator = Accumulator() accumulator = Accumulator()
self._nlmsghdr.Pack( self._nlmsghdr.Pack(
accumulator, accumulator,
length=len(msg) + self._nlmsghdr.size, length=len(msg) + self._nlmsghdr.size,
type=msgtype, type=msgtype,
flags=flags, flags=flagint,
seq=random.randint(0, 2 ** 32 - 1), seq=random.randint(0, 2 ** 32 - 1),
pid=os.getpid()) pid=os.getpid())
accumulator.Append(msg) accumulator.Append(msg)
@@ -263,7 +267,7 @@ class GenericNetlink(object):
def __init__(self): def __init__(self):
self._netlink = Netlink() self._netlink = Netlink()
self._UpdateMsgTypes() self._UpdateMsgTypes()
self.Send('nlctrl', self._netlink.NLMSG_F_DUMP, 'getfamily', 1) self.Send('nlctrl', ['dump'], 'getfamily', 1)
for msg in self.Recv(): for msg in self.Recv():
msgtype, attrs = msg msgtype, attrs = msg
assert msgtype == self._msgtypes_by_name['nlctrl']['commands']['newfamily'], msgtype assert msgtype == self._msgtypes_by_name['nlctrl']['commands']['newfamily'], msgtype
@@ -379,5 +383,5 @@ def GetIfIndex(if_name):
gnl = GenericNetlink() gnl = GenericNetlink()
RegisterNL80211(gnl) RegisterNL80211(gnl)
gnl.Send('nl80211', Netlink.NLMSG_F_DUMP, 'get_station', 0, ifindex=GetIfIndex('wlan0')) gnl.Send('nl80211', ['dump'], 'get_station', 0, ifindex=GetIfIndex('wlan0'))
print list(gnl.Recv()) print list(gnl.Recv())