code: def add_redirect(self, name, proto, host_ip, host_port, guest_ip, guest_port):
          
          if not isinstance(name, basestring):
              raise TypeError("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("addRedirect",
                       in_p=[name, proto, host_ip, host_port, guest_ip, guest_port])
docs: Adds a new NAT port-forwarding rule.
  
          in name of type str
              The name of the rule. An empty name is acceptable, in which case the NAT engine
              auto-generates one using the other parameters.
  
          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 acceptable, in which case the NAT engine will forward
              packets to the first DHCP lease (x.x.x.15).
  
          in guest_port of type int
              The port number to forward.