Example #1
0
    def test_sys_tools(self):
        SysTools.touch('/tmp/test_utils')
        SysTools.REBOOT_SKIP_FILES = ('/tmp/test_utils')

        self.assertFalse(SysTools.is_system_openwrt())
        self.assertEqual(SysTools.get_mac_address('if_test'),
                         "00:00:00:00:00:00")
        self.assertEqual(SysTools.get_sys_mac_address(), "00:00:00:00:00:00")

        with open('/tmp/test_mac', 'w') as f:
            f.write('01:02:03:04:05:06')
            f.close()
        SysTools.SYS_MAC_FILE = '/tmp/test_mac'
        self.assertEqual(SysTools.get_sys_mac_address(), "01:02:03:04:05:06")
        SysTools.SYS_MAC_FILE = '/etc/gshadow'
        self.assertEqual(SysTools.get_sys_mac_address(), "00:00:00:00:00:00")

        print(SysTools.get_host_name())
        print(SysTools.get_ip_address('if_test'))
        if not SysTools.reboot():
            SysTools.sys_failure_reboot('skip files exist')
        SysTools.external_reboot(('test', 'test'))
        if os.path.exists('/tmp/test_utils'):
            os.remove('/tmp/test_utils')

        # d = Dispatcher()
        # timestamp = time.time() + 1000
        # SysTools.set_system_time(d, timestamp)
        # SysTools.touch('/etc/openwrt_release')
        # SysTools.set_system_time(d, timestamp)
        # time.sleep(2)
        # self.assertTrue(timestamp > time.time()) #should no permission to change system time
        # del d
        # if os.path.exists('/etc/openwrt_release'):
        #     os.remove('/etc/openwrt_release')
        self.assertIsNotNone(SysTools.sys_up_time())
        ret = SysTools.if_indextoname(1)
        print "ifname of index 1:", ret
        self.assertIsNotNone(ret)
        ret = SysTools.if_indextoname("test")
        self.assertIsNone(ret)
        ret = SysTools.if_indextoname(600)
        self.assertIsNone(ret)

        ret = SysTools.if_nametoindex("lo")
        print "ifindex of lo:", ret
        self.assertIsNotNone(ret)
        ret = SysTools.if_nametoindex(5)
        self.assertIsNone(ret)
        ret = SysTools.if_nametoindex("dafsd")
        self.assertIsNone(ret)
        ret = SysTools.is_if_oper_up('eth0')
        self.assertTrue(ret)
Example #2
0
    def _pack_mcast_group_source_req(self):
        try:
            grp_addrinfo = socket.getaddrinfo(self.grp_ip, None)[0]
            family = grp_addrinfo[0]
            src_addrinfo = socket.getaddrinfo(self.src_ip, None)[0]
            ifindex = SysTools.if_nametoindex(self.interface)
            if ifindex is None:
                raise McastException("ifindex is None for %s" % self.interface)
            """ mcast_req as :
            uint32_t interface;
            struct sockaddr_storage group_req; (128 bytes);
            struct sockaddr_storage source_req; (128 bytes);

            for the sockaddr_storage:
            if this is INET6 family first 28 bytes are struct sockaddr_in6 type:
                sa_family_t sin6_family (2byte);
                in_port_t   sin6_port (2byte);
                uint32_t    sin6_flowinfo (4byte);
                struct in6_addr sin6_addr (16 bytes);
                uint32_t    sin6_scope_id; (4 byte)

            if this is the INET family first 16 bytes are struct sockaddr_in type:
                sa_family_t sa_family (2byte)
                in_port_t   sin_port (2byte)
                struct in_addr  sin_addr (4byte)
                padding (8 bytes)
            char sa_data[14]
            """
            if family == socket.AF_INET:
                group_ip_bin = socket.inet_aton(self.grp_ip)
                group_req = struct.pack(
                    'HH', family, self.port) + group_ip_bin + struct.pack(
                        '120s', "")
                source_ip_bin = socket.inet_aton(self.src_ip)
                source_req = struct.pack(
                    'HH', family, 0) + source_ip_bin + struct.pack('120s', "")
                proto = socket.IPPROTO_IP
            else:
                group_ipv6_bin = socket.inet_pton(family, grp_addrinfo[4][0])
                group_req = struct.pack('HHI', family, self.port,
                                        0) + group_ipv6_bin + struct.pack(
                                            'I100s', 0, "")
                source_ipv6_bin = socket.inet_pton(family, src_addrinfo[4][0])
                source_req = struct.pack('HHI', family, 0,
                                         0) + source_ipv6_bin + struct.pack(
                                             'I100s', 0, "")
                proto = socket.IPPROTO_IPV6
            """ for alignment, 64bit total size is 264, 32bit system, total size is 260 """
            arch = platform.architecture()
            if arch[0] == "32bit":
                mcast_req = struct.pack('I', ifindex) + group_req + source_req
            else:
                mcast_req = struct.pack('II', ifindex,
                                        0) + group_req + source_req
            return (mcast_req, proto)
        except Exception as e:
            self.logger.warning(
                "exception happen when prepare mcast_grp_src_req grp_ip[%s],src_ip[%s],local[%s]: %s",
                self.grp_ip, self.src_ip, self.local_ip, str(e))
            return (None, None)