#!/usr/bin/python # Copyright (c) 2012, 2013, Intel Corporation # Copyright (c) 2009 David Wolinsky L", bmask)[0]).count("1") tags = [ addr+"/"+str(prefix)+" Network::Local\n", "0.0.0.0/0 Network::Cloud\n", "127.0.0.1/8 -CIPSO\n"] smackfs_netlabel(tags) def loadnetlabelrules(): rulesSystem = [ "System Network::Cloud w\n", "System Network::Local w\n", "Network::Cloud System w\n", "Network::Local System w\n"] smackfs_load2(rulesSystem) def smackfs_load2 (rules): with open(SMACKFS_LOAD, "w") as load2: for rule in rules: load2.write(rule) def smackfs_netlabel (tags): for tag in tags: with open(SMACKFS_NETLABEL, "w") as netlabel: netlabel.write(tag) """ Source of: Class ip monitor, and other functions named bellow. Original author: David Wolinsky " + addr) def request_addrs(self, sock): sock.send(struct.pack("IHHIIBBBBI", 24, rtattr.GETADDR, \ netlink.REQUEST | netlink.ROOT | netlink.MATCH, 0, sock.getsockname()[0], \ socket.AF_INET, 0, 0, 0, 0)) def start_thread(self): thread.start_new_thread(self.run, ()) def run(self): sock = socket.socket(socket.AF_NETLINK, socket.SOCK_RAW, socket.NETLINK_ROUTE) sock.bind((0, rtattr.GRP_IPV4_IFADDR)) self.request_addrs(sock) while True: data = sock.recv(4096) pos = 0 while pos < len(data): nl = netlink(data[pos:]) if nl.msgtype == netlink.DONE: break pos += align(nl.msglen) if nl.msgtype != rtattr.NEWADDR: continue self._callback(nl.rtas[ifaddr.LABEL], nl.rtas[ifaddr.LOCAL]) def main(): if not os.path.isfile(SMACKFS_LOAD): print ("Smack not found.") return -1 loadnetlabelrules() ip_monitor(applynetlabeltags).run() if __name__ == "__main__": main()