Args:
            serial (str): device serial number
            remote (str|int): A int means device port, str can be localabstract:service-name
            local_port (int): optional, if not given, a random port will be generated
        
        Returns:
            local_port
        
        If forwards already exists and local_port not specified, just return current forwarded port

def forward(self, serial, remote, local_port=None): #local_port, remote_port=None):
        '''
        Args:
            serial (str): device serial number
            remote (str|int): A int means device port, str can be localabstract:service-name
            local_port (int): optional, if not given, a random port will be generated
        
        Returns:
            local_port
        
        If forwards already exists and local_port not specified, just return current forwarded port
        '''
        if isinstance(remote, int):
            remote = 'tcp:%d' % remote
        if not local_port:
            for s, lp, rp in self.forward_list():
                if s == serial and rp == remote:
                    return int(lp[4:])
            return self.forward(serial, remote, next_local_port(self.server_host))
        else:
            self.raw_cmd("-s", serial, "forward", 'tcp:%d' % local_port, remote).wait()
            return local_port