def METHOD_NAME(self, config):
    client_nic = config.host1.msec0
    server_nic = config.host2.msec0
    ip_vers = self.params.ip_versions
    count = self.params.ping_count
    interval = self.params.ping_interval
    size = self.params.ping_psize
    common_args = {'count': count, 'interval': interval, 'size': size}
    for ipv in ip_vers:
        kwargs = {}
        if ipv == "ipv4":
            kwargs.update(family = AF_INET)
        elif ipv == "ipv6":
            kwargs.update(family = AF_INET6)
            kwargs.update(is_link_local = False)
        client_ips = client_nic.ips_filter(**kwargs)
        server_ips = server_nic.ips_filter(**kwargs)
        if ipv == "ipv6":
            client_ips = client_ips[::-1]
            server_ips = server_ips[::-1]
        if len(client_ips) != len(server_ips) or (len(client_ips) *
            len(server_ips) == 0):
            raise LnstError("Source/destination ip lists are of "
                "different size or empty.")
        for src_addr, dst_addr in zip(client_ips, server_ips):
            pconf = PingConf(client = client_nic.netns,
                             client_bind = src_addr,
                             destination = server_nic.netns,
                             destination_address = dst_addr,
                             **common_args)
            yield [pconf]