Files
vrpmdv-web/vrpmdvserver/vrpmdvntlink.py

53 lines
1.3 KiB
Python

#!/usr/bin/env python3
import traceback
from pyroute2.netlink import NLM_F_REQUEST
from pyroute2.netlink import genlmsg
from pyroute2.netlink.generic import GenericNetlinkSocket
import sys
RLINK_CMD_UNSPEC = 0
RLINK_CMD_REQ = 1
class rcmd(genlmsg):
'''
Message class that will be used to communicate
with the kernel module
'''
nla_map = (
('RLINK_ATTR_UNSPEC', 'none'),
('RLINK_ATTR_DATA', 'asciiz'),
)
class Rlink(GenericNetlinkSocket):
def send_data(self, data):
msg = rcmd()
msg['cmd'] = RLINK_CMD_REQ
msg['version'] = 1
msg['attrs'] = [('RLINK_ATTR_DATA', data)]
ret = self.nlm_request(msg, self.prid, msg_flags=NLM_F_REQUEST)[0]
return ret.get_attr('RLINK_ATTR_DATA')
def trySend(data):
# if __name__ == '__main__':
try:
# create protocol instance
rlink = Rlink()
rlink.bind('gnl-vrpmdv-mcmd', rcmd)
#rlink.send_data(data)
# request a method
res = rlink.send_data(data)
if res :
print(res, file=sys.stdout)
sys.stdout.flush()
except:
# if there was an error, log it to the console
traceback.print_exc()
finally:
# finally -- release the instance
rlink.close()
return res