Adds the given IP address to the given ipset.
        
        If a timeout is given, the IP will stay in the ipset for
        the given duration. Else it's added forever.

        The resulting command looks like this:

        ``ipset add -exist ellis_blacklist4 192.0.2.10 timeout 14400``

async def add(self, setname, ip, timeout=0):
        """
        Adds the given IP address to the given ipset.
        
        If a timeout is given, the IP will stay in the ipset for
        the given duration. Else it's added forever.

        The resulting command looks like this:

        ``ipset add -exist ellis_blacklist4 192.0.2.10 timeout 14400``

        """
        args = ['add', '-exist', setname, ip, 'timeout', timeout]

        return await self.start(__class__.CMD, *args)