def nl_sendmsg(sock,msg,override=False):
"""
sends msg to kernel
:param sock: netlink socket
:param msg: nlmsg stream
:param override: if True will keep the message's pid and seq. This can
be used for testing
"""
try:
# change the msg's pid & seq to that of the sockets prior to sending &
# set the ack flag - I can't figure how to tell in recv if an ack was
# requested or not so I force an ACK here
if not override:
msg.pid = sock.pid
msg.seq = sock.seq
msg.flags = msg.flags | nlh.NLM_F_ACK
sent = sock.send(msg.tostream())
if sent != msg.len: raise error(errno.EBADMSG,"Message sent incomplete")
except socket.error as e:
raise error(errno.ECOMM, e)
except AttributeError:
raise error(errno.ENOTSOCK,"Invalid netlink socket")
评论列表
文章目录