make dns a abstract class