Пример #1
0
int kr_nsrep_update_rtt(struct kr_nsrep *ns, unsigned score, kr_nsrep_lru_t *cache)
{
	if (!ns || !cache || ns->addr.ip.sa_family == AF_UNSPEC) {
		return kr_error(EINVAL);
	}

	char *addr = kr_nsrep_inaddr(ns->addr);
	size_t addr_len = kr_nsrep_inaddr_len(ns->addr);
	unsigned *cur = lru_set(cache, addr, addr_len);
	if (!cur) {
		return kr_error(ENOMEM);
	}
	/* Score limits */
	if (score > KR_NS_MAX_SCORE) {
		score = KR_NS_MAX_SCORE;
	}
	if (score <= KR_NS_GLUED) {
		score = KR_NS_GLUED + 1;
	}
	/* Set initial value or smooth over last two measurements */
	if (*cur != 0) {
		*cur = (*cur + score) / 2;
	} else {
	/* First measurement, reset */
		*cur = score;
	}
	return kr_ok();
}
Пример #2
0
int kr_nsrep_update_rep(struct kr_nsrep *ns, unsigned reputation, kr_nsrep_lru_t *cache)
{
	if (!ns || !cache ) {
		return kr_error(EINVAL);
	}

	/* Store in the struct */
	ns->reputation = reputation;
	/* Store reputation in the LRU cache */
	unsigned *cur = lru_set(cache, (const char *)ns->name, knot_dname_size(ns->name));
	if (!cur) {
		return kr_error(ENOMEM);
	}
	*cur = reputation;
	return kr_ok();
}
Пример #3
0
int kr_nsrep_update_rtt(struct kr_nsrep *ns, const struct sockaddr *addr, unsigned score, kr_nsrep_lru_t *cache)
{
	if (!ns || !cache || ns->addr[0].ip.sa_family == AF_UNSPEC) {
		return kr_error(EINVAL);
	}

	const char *addr_in = kr_nsrep_inaddr(ns->addr[0]);
	size_t addr_len = kr_nsrep_inaddr_len(ns->addr[0]);
	if (addr) { /* Caller provided specific address */
		if (addr->sa_family == AF_INET) {
			addr_in = (const char *)&((struct sockaddr_in *)addr)->sin_addr;
			addr_len = sizeof(struct in_addr);
		} else if (addr->sa_family == AF_INET6) {
			addr_in = (const char *)&((struct sockaddr_in6 *)addr)->sin6_addr;
			addr_len = sizeof(struct in6_addr);
		}
	}
	unsigned *cur = lru_set(cache, addr_in, addr_len);
	if (!cur) {
		return kr_error(ENOMEM);
	}
	/* Score limits */
	if (score > KR_NS_MAX_SCORE) {
		score = KR_NS_MAX_SCORE;
	}
	if (score <= KR_NS_GLUED) {
		score = KR_NS_GLUED + 1;
	}
	/* Set initial value or smooth over last two measurements */
	if (*cur != 0) {
		*cur = (*cur + score) / 2;
	} else {
	/* First measurement, reset */
		*cur = score;
	}
	return kr_ok();
}
Пример #4
0
/****************************** LOCAL FUNCTIONS *******************************/
int main ()
{
   int32_t i_ret_val = -1;
   PAL_RET_E e_pal_ret = ePAL_RET_FAILURE;
   bool b_pal_init = false;
   PAL_LOGGER_INIT_PARAMS_X x_logger_param = { false };
   LRU_RET_E e_lru_ret = eLRU_RET_FAILURE;
   LRU_HDL hl_lru_hdl = NULL;
   LRU_INIT_PARAMS_X x_lru_init_params = {0};
   LRU_NODE_DATA_X x_node_data = {eHM_KEY_TYPE_INVALID};
   uint8_t uca_str_buf[1024] = {0};
   int i_command = -1;
   int i_ret = -1;
   bool b_exit = false;

   x_logger_param.b_enable_console_logging = true;
   x_logger_param.e_level = eLOG_LEVEL_HIGH;
   pal_logger_env_init (&x_logger_param);

   e_pal_ret = pal_env_init ();
   if (ePAL_RET_SUCCESS != e_pal_ret)
   {
      LRU_TEST_LOG ("pal_env_init failed: %d", e_pal_ret);
      goto CLEAN_RETURN;
   }
   b_pal_init = true;
   LRU_TEST_LOG ("pal_env_init success");

   x_lru_init_params.ui_max_size_bytes = (1 * 1024 * 1024);
   e_lru_ret = lru_init(&hl_lru_hdl, &x_lru_init_params);
   if ((eLRU_RET_SUCCESS != e_lru_ret) || (NULL == hl_lru_hdl)) {
      LRU_TEST_LOG ("lru_create failed: %d, %p", e_lru_ret, hl_lru_hdl);
      goto CLEAN_RETURN;
   }
   LRU_TEST_LOG ("lru_create success: %d, %p", e_lru_ret, hl_lru_hdl);




   while (1)
   {
      printf ("Commands:\n\t1. Add\n\t2. Search\n\t3. Delete"
               "\n\t4. Delete All\n\t5. Exit\n"
               "Enter Command: ");
      fflush (stdout);

      PAL_GET_INT32_FROM_CONSOLE(&i_command);

      if (4 != i_command && 5 != i_command && 6 != i_command)
      {
         printf ("Enter String: "); fflush (stdout);

         PAL_GET_STRING_FROM_CONSOLE(uca_str_buf, sizeof(uca_str_buf));
      }

      switch (i_command)
      {
         case 1:
         {
            (void) pal_memset(&x_node_data, 0x00, sizeof(x_node_data));
            x_node_data.x_hm_node.e_hm_key_type = eHM_KEY_TYPE_STRING;
            x_node_data.x_hm_node.u_hm_key.puc_str_key = uca_str_buf;
            x_node_data.x_hm_node.p_data = malloc (100);
            x_node_data.x_hm_node.ui_data_size = 100;
            e_lru_ret = lru_set (hl_lru_hdl, &x_node_data);
            if (eLRU_RET_SUCCESS != e_lru_ret) {
               LRU_TEST_LOG ("lru_set failed: %d, %p", e_lru_ret, hl_lru_hdl);
            }
            else {
               LRU_TEST_LOG ("lru_set success: %d, %p", e_lru_ret, hl_lru_hdl);
               lru_print (hl_lru_hdl);
            }
            break;
         }
         case 2:
         {
            (void) pal_memset(&x_node_data, 0x00, sizeof(x_node_data));
            x_node_data.x_hm_node.e_hm_key_type = eHM_KEY_TYPE_STRING;
            x_node_data.x_hm_node.u_hm_key.puc_str_key = uca_str_buf;
            e_lru_ret = lru_has (hl_lru_hdl, &x_node_data);
            if (eLRU_RET_NODE_FOUND == e_lru_ret)
            {
               LRU_TEST_LOG("Key \"%s\" Found: %p", uca_str_buf, x_node_data.x_hm_node.p_data);
            }
            else
            {
               LRU_TEST_LOG("Key \"%s\" Not Found: %d", uca_str_buf, e_lru_ret);
            }
            break;
         }
         case 3:
         {
            (void) pal_memset(&x_node_data, 0x00, sizeof(x_node_data));
            x_node_data.x_hm_node.e_hm_key_type = eHM_KEY_TYPE_STRING;
            x_node_data.x_hm_node.u_hm_key.puc_str_key = uca_str_buf;
            e_lru_ret = lru_delete (hl_lru_hdl, &x_node_data);
            if (eLRU_RET_SUCCESS == e_lru_ret)
            {
               LRU_TEST_LOG("Key \"%s\" Deleted", uca_str_buf);
            }
            else
            {
               LRU_TEST_LOG("Key \"%s\" Not Found: %d", uca_str_buf, e_lru_ret);
            }

            lru_print (hl_lru_hdl);
            break;
         }
         case 4:
         {
            e_lru_ret = lru_delete_all (hl_lru_hdl);
            lru_print (hl_lru_hdl);
          break;
         }
         case 5:
         {
            b_exit = true;
            break;
         }
      }
      if (true == b_exit)
      {
         break;
      }
   }




CLEAN_RETURN:
   if (NULL != hl_lru_hdl) {
      lru_deinit(hl_lru_hdl);
   }
   if (true == b_pal_init)
   {
      e_pal_ret = pal_env_deinit();
      if (ePAL_RET_SUCCESS != e_pal_ret)
      {
         LRU_TEST_LOG("pal_env_deinit failed: %d", e_pal_ret);
      }
      else
      {
         LRU_TEST_LOG("pal_env_deinit success");
      }
   }
   return i_ret_val;
}