示例#1
0
static mrb_value
mrb_ipvs_dest_set_weight(mrb_state *mrb, mrb_value self){
  struct mrb_ipvs_entry *svc, *dest;
  mrb_int weight;
  dest = DATA_PTR(self);
  mrb_get_args(mrb, "i", &weight);
  dest->dest.weight = weight;
  if (mrb_nil_p(mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "@service")))) {
    svc = DATA_PTR(mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "@service")));
    ipvs_update_dest(&svc->svc, &dest->dest);
  }
  return mrb_nil_value();
}
示例#2
0
/* Send user rules to IPVS module */
static void
ipvs_talk(int cmd)
{
	int result = -1;

	switch (cmd) {
		case IP_VS_SO_SET_STARTDAEMON:
			result = ipvs_start_daemon(daemonrule);
			break;
		case IP_VS_SO_SET_STOPDAEMON:
			result = ipvs_stop_daemon(daemonrule);
			break;
		case IP_VS_SO_SET_ADD:
			result = ipvs_add_service(srule);
			break;
		case IP_VS_SO_SET_DEL:
			result = ipvs_del_service(srule);
			break;
		case IP_VS_SO_SET_EDIT:
			result = ipvs_update_service(srule);
			break;
		case IP_VS_SO_SET_ZERO:
			result = ipvs_zero_service(srule);
			break;
		case IP_VS_SO_SET_ADDLADDR:
			result = ipvs_add_laddr(srule, laddr_rule);
			break;
		case IP_VS_SO_SET_DELLADDR:
			result = ipvs_del_laddr(srule, laddr_rule);
			break;
		case IP_VS_SO_SET_ADDDEST:
			result = ipvs_add_dest(srule, drule);
			break;
		case IP_VS_SO_SET_DELDEST:
			result = ipvs_del_dest(srule, drule);
			break;
		case IP_VS_SO_SET_EDITDEST:
			if ((result = ipvs_update_dest(srule, drule)) &&
			    (errno == ENOENT))
				result = ipvs_add_dest(srule, drule);
			break;
	}

	if (result)
		log_message(LOG_INFO, "IPVS: %s", ipvs_strerror(errno));
}
示例#3
0
/* ------------------------------------------------------------ */
int ipvsfuncs_update_dest(ipvs_service_t *svc, ipvs_dest_t *dest) {
	int ret;

    gchar *s1 = g_strdup_printf("%s:%d proto=%d fwmark=%d", INETTXTADDR(svc->addr.ip), ntohs(svc->port),
                                svc->protocol, svc->fwmark);
    gchar *s2 = g_strdup_printf("%s:%d proto=%d fwmark=%d", INETTXTADDR(dest->addr.ip), ntohs(dest->port),
                                svc->protocol, svc->fwmark);

    LOGDEBUG(" * update_dest: [%s :: %s]", s1, s2);

	ret = ipvs_update_dest(svc, dest);
	if (ret) {
        LOGDEBUG(" * ERROR update_dest: [%s :: %s] [%s]", s1, s2, ipvs_strerror(errno));
        free(s1); 
        free(s2);
		return -1;
	}
    free(s1); 
    free(s2);

	return 0;
}