code: def add_port_forward_rule(self, is_ipv6, rule_name, proto, host_ip, host_port, guest_ip, guest_port):
          
          if not isinstance(is_ipv6, bool):
              raise TypeError("is_ipv6 can only be an instance of type bool")
          if not isinstance(rule_name, basestring):
              raise TypeError("rule_name can only be an instance of type basestring")
          if not isinstance(proto, NATProtocol):
              raise TypeError("proto can only be an instance of type NATProtocol")
          if not isinstance(host_ip, basestring):
              raise TypeError("host_ip can only be an instance of type basestring")
          if not isinstance(host_port, baseinteger):
              raise TypeError("host_port can only be an instance of type baseinteger")
          if not isinstance(guest_ip, basestring):
              raise TypeError("guest_ip can only be an instance of type basestring")
          if not isinstance(guest_port, baseinteger):
              raise TypeError("guest_port can only be an instance of type baseinteger")
          self._call("addPortForwardRule",
                       in_p=[is_ipv6, rule_name, proto, host_ip, host_port, guest_ip, guest_port])
docs: Protocol handled with the rule.
  
          in is_ipv6 of type bool
  
          in rule_name of type str
  
          in proto of type :class:`NATProtocol`
              Protocol handled with the rule.
  
          in host_ip of type str
              IP of the host interface to which the rule should apply.
              An empty ip address is acceptable, in which case the NAT engine
              binds the handling socket to any interface.
  
          in host_port of type int
              The port number to listen on.
  
          in guest_ip of type str
              The IP address of the guest which the NAT engine will forward
              matching packets to. An empty IP address is not acceptable.
  
          in guest_port of type int
              The port number to forward.