这篇教程C++ ELEMENT_DATA函数代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中ELEMENT_DATA函数的典型用法代码示例。如果您正苦于以下问题:C++ ELEMENT_DATA函数的具体用法?C++ ELEMENT_DATA怎么用?C++ ELEMENT_DATA使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。 在下文中一共展示了ELEMENT_DATA函数的30个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: ipvs_laddr_group_cmdstatic voidipvs_laddr_group_cmd(int cmd, local_addr_group *laddr_group){ local_addr_entry *laddr_entry; list l; element e; if (!laddr_group) return; l = laddr_group->addr_ip; for (e = LIST_HEAD(l); e; ELEMENT_NEXT(e)) { laddr_entry = ELEMENT_DATA(e); memset(laddr_rule, 0, sizeof(ipvs_laddr_t)); laddr_rule->af = laddr_entry->addr.ss_family; if (laddr_entry->addr.ss_family == AF_INET6) inet_sockaddrip6(&laddr_entry->addr, &laddr_rule->addr.in6); else laddr_rule->addr.ip = inet_sockaddrip4(&laddr_entry->addr); ipvs_talk(cmd); } l = laddr_group->range; for (e = LIST_HEAD(l); e; ELEMENT_NEXT(e)) { laddr_entry = ELEMENT_DATA(e); ipvs_laddr_range_cmd(cmd, laddr_entry); }}
开发者ID:Addision,项目名称:LVS,代码行数:28,
示例2: vrrp_index_lookupvrrp_rt *vrrp_index_lookup(const int vrid, const int fd){ vrrp_rt *vrrp; element e; list l = &vrrp_data->vrrp_index[vrid]; /* return if list is empty */ if (LIST_ISEMPTY(l)) return NULL; /* * If list size's is 1 then no collisions. So * Test and return the singleton. */ if (LIST_SIZE(l) == 1) { vrrp = ELEMENT_DATA(LIST_HEAD(l)); return (vrrp->fd_in == fd) ? vrrp : NULL; } /* * List collision on the vrid bucket. The same * vrid is used on a different interface. We perform * a fd lookup as collisions solver. */ for (e = LIST_HEAD(l); e; ELEMENT_NEXT(e)) { vrrp = ELEMENT_DATA(e); if (vrrp->fd_in == fd) return vrrp; } /* No match */ return NULL;}
开发者ID:Addision,项目名称:LVS,代码行数:34,
示例3: ipvs_group_cmd/* set IPVS group rules */static intipvs_group_cmd(int cmd, list vs_group, real_server * rs, char * vsgname){ virtual_server_group *vsg = ipvs_get_group_by_name(vsgname, vs_group); virtual_server_group_entry *vsg_entry; list l; element e; int err = 1; /* return if jointure fails */ if (!vsg) return -1; /* visit addr_ip list */ l = vsg->addr_ip; for (e = LIST_HEAD(l); e; ELEMENT_NEXT(e)) { vsg_entry = ELEMENT_DATA(e); urule->vaddr = SVR_IP(vsg_entry); urule->vport = SVR_PORT(vsg_entry); /* Talk to the IPVS channel */ if (IPVS_ALIVE(cmd, vsg_entry, rs)) { err = ipvs_talk(cmd); IPVS_SET_ALIVE(cmd, vsg_entry); } } /* visit vfwmark list */ l = vsg->vfwmark; urule->vaddr = 0; urule->vport = 0; for (e = LIST_HEAD(l); e; ELEMENT_NEXT(e)) { vsg_entry = ELEMENT_DATA(e); urule->vfwmark = vsg_entry->vfwmark; /* Talk to the IPVS channel */ if (IPVS_ALIVE(cmd, vsg_entry, rs)) { err = ipvs_talk(cmd); IPVS_SET_ALIVE(cmd, vsg_entry); } } /* visit range list */ l = vsg->range; urule->vfwmark = 0; for (e = LIST_HEAD(l); e; ELEMENT_NEXT(e)) { vsg_entry = ELEMENT_DATA(e); /* Talk to the IPVS channel */ if (IPVS_ALIVE(cmd, vsg_entry, rs)) { err = ipvs_group_range_cmd(cmd, vsg_entry); IPVS_SET_ALIVE(cmd, vsg_entry); } } return err;}
开发者ID:millken,项目名称:zhuxianB30,代码行数:57,
示例4: update_checker_activity/* Sync checkers activity with netlink kernel reflection */voidupdate_checker_activity(uint32_t address, int enable){ checker *checker_obj; element e; /* Display netlink operation */ if (debug & 32) log_message(LOG_INFO, "Netlink reflector reports IP %s %s", inet_ntop2(address), (enable) ? "added" : "removed"); /* Processing Healthcheckers queue */ if (!LIST_ISEMPTY(checkers_queue)) for (e = LIST_HEAD(checkers_queue); e; ELEMENT_NEXT(e)) { checker_obj = ELEMENT_DATA(e); if (CHECKER_VIP(checker_obj) == address && CHECKER_HA_SUSPEND(checker_obj)) { if (!CHECKER_ENABLED(checker_obj) && enable) log_message(LOG_INFO, "Activating healtchecker for service [%s:%d]", inet_ntop2(CHECKER_RIP(checker_obj)), ntohs(CHECKER_RPORT(checker_obj))); if (CHECKER_ENABLED(checker_obj) && !enable) log_message(LOG_INFO, "Suspending healtchecker for service [%s:%d]", inet_ntop2(CHECKER_RIP(checker_obj)), ntohs(CHECKER_RPORT(checker_obj))); checker_obj->enabled = enable; } }}
开发者ID:millken,项目名称:zhuxianB30,代码行数:31,
示例5: find_rttables_tableboolfind_rttables_table(const char *name, unsigned int *id){ element e; char *endptr; *id = strtoul(name, &endptr, 0); if (endptr != name && *endptr == '/0') return true; if (!rt_list && !read_rttables()) return false; if (LIST_ISEMPTY(rt_list)) return false; for (e = LIST_HEAD(rt_list); e; ELEMENT_NEXT(e)) { rt_entry_t *rte = ELEMENT_DATA(e); if (!strcmp(rte->name, name)) { *id = rte->id; return true; } } return false;}
开发者ID:DStape,项目名称:keepalived,代码行数:26,
示例6: init_service_rs/* Set a realserver IPVS rules */static intinit_service_rs(virtual_server_t * vs){ element e; real_server_t *rs; for (e = LIST_HEAD(vs->rs); e; ELEMENT_NEXT(e)) { rs = ELEMENT_DATA(e); /* Do not re-add failed RS instantly on reload */ if (rs->reloaded) { /* force re-adding of the rs into vs_group: * we may have new vsg entries */ if (vs->vsgname) UNSET_ALIVE(rs); continue; } /* In alpha mode, be pessimistic (or realistic?) and don't * add real servers into the VS pool. They will get there * later upon healthchecks recovery (if ever). */ if (vs->alpha) { UNSET_ALIVE(rs); continue; } if (!ISALIVE(rs)) { if (!ipvs_cmd(LVS_CMD_ADD_DEST, check_data->vs_group, vs, rs)) return 0; SET_ALIVE(rs); } } return 1;}
开发者ID:dyhjgl,项目名称:keepalived,代码行数:34,
示例7: netlink_iplist/* Add/Delete a list of IP addresses */voidnetlink_iplist(list ip_list, int cmd){ ip_address_t *ipaddr; element e; /* No addresses in this list */ if (LIST_ISEMPTY(ip_list)) return; /* * If "--dont-release-vrrp" is set then try to release addresses * that may be there, even if we didn't set them. */ for (e = LIST_HEAD(ip_list); e; ELEMENT_NEXT(e)) { ipaddr = ELEMENT_DATA(e); if ((cmd == IPADDRESS_ADD && !ipaddr->set) || (cmd == IPADDRESS_DEL && (ipaddr->set || __test_bit(DONT_RELEASE_VRRP_BIT, &debug)))) { if (netlink_ipaddress(ipaddr, cmd) > 0) ipaddr->set = !(cmd == IPADDRESS_DEL); else ipaddr->set = false; } }}
开发者ID:andempsey,项目名称:keepalived,代码行数:27,
示例8: register_checkers_thread/* register checkers to the global I/O scheduler */voidregister_checkers_thread(void){ checker_t *checker; element e; long warmup; for (e = LIST_HEAD(checkers_queue); e; ELEMENT_NEXT(e)) { checker = ELEMENT_DATA(e); log_message(LOG_INFO, "Activating healthchecker for service %s" , FMT_CHK(checker)); CHECKER_ENABLE(checker); if (checker->launch) { /* wait for a random timeout to begin checker thread. It helps avoiding multiple simultaneous checks to the same RS. */ warmup = checker->warmup; if (warmup) warmup = warmup * rand() / RAND_MAX; thread_add_timer(master, checker->launch, checker, BOOTSTRAP_DELAY + warmup); } }}
开发者ID:daniel666,项目名称:dpvs,代码行数:27,
示例9: netlink_rulelistvoidnetlink_rulelist(list rule_list, int cmd, bool force){ ip_rule_t *iprule; element e; /* No rules to add */ if (LIST_ISEMPTY(rule_list)) return; /* If force is set, we try to remove all the rules, but the * rule might not exist. That's not an error, so indicate not * to report such a situation */ if (force && cmd == IPRULE_DEL) netlink_error_ignore = ENOENT; for (e = LIST_HEAD(rule_list); e; ELEMENT_NEXT(e)) { iprule = ELEMENT_DATA(e); if (force || (cmd && !iprule->set) || (!cmd && iprule->set)) { if (netlink_rule(iprule, cmd) > 0) iprule->set = (cmd) ? 1 : 0; else iprule->set = 0; } } netlink_error_ignore = 0;}
开发者ID:rivy,项目名称:keepalived,代码行数:30,
示例10: init_service_rs/* Set a realserver IPVS rules */static intinit_service_rs(virtual_server_t * vs){ element e; real_server_t *rs; if (LIST_ISEMPTY(vs->rs)) { log_message(LOG_WARNING, "VS [%s] has no configured RS! Skipping RS activation." , FMT_VS(vs)); return 1; } for (e = LIST_HEAD(vs->rs); e; ELEMENT_NEXT(e)) { rs = ELEMENT_DATA(e); if (rs->reloaded) { if (rs->iweight != rs->pweight) update_svr_wgt(rs->iweight, vs, rs, 0); /* Do not re-add failed RS instantly on reload */ continue; } /* In alpha mode, be pessimistic (or realistic?) and don't * add real servers into the VS pool. They will get there * later upon healthchecks recovery (if ever). */ if (!vs->alpha && !ISALIVE(rs)) { ipvs_cmd(LVS_CMD_ADD_DEST, vs, rs); SET_ALIVE(rs); } } return 1;}
开发者ID:F191919,项目名称:keepalived,代码行数:34,
示例11: init_if_linkbeatstatic voidinit_if_linkbeat(void){ interface_t *ifp; element e; int status; for (e = LIST_HEAD(if_queue); e; ELEMENT_NEXT(e)) { ifp = ELEMENT_DATA(e); ifp->lb_type = LB_IOCTL; status = if_mii_probe(ifp->ifname); if (status >= 0) { ifp->lb_type = LB_MII; ifp->linkbeat = (status) ? 1 : 0; } else { status = if_ethtool_probe(ifp->ifname); if (status >= 0) { ifp->lb_type = LB_ETHTOOL; ifp->linkbeat = (status) ? 1 : 0; } } /* Register new monitor thread */ thread_add_timer(master, if_linkbeat_refresh_thread, ifp, POLLING_DELAY); }}
开发者ID:DStape,项目名称:keepalived,代码行数:26,
示例12: sync_service_vsgstatic voidsync_service_vsg(virtual_server_t * vs){ virtual_server_group_t *vsg; virtual_server_group_entry_t *vsge; list *l; element e; vsg = vs->vsg; list ll[] = { vsg->addr_ip, vsg->vfwmark, vsg->range, NULL, }; for (l = ll; *l; l++) for (e = LIST_HEAD(*l); e; ELEMENT_NEXT(e)) { vsge = ELEMENT_DATA(e); if (vs->reloaded && !vsge->reloaded) { log_message(LOG_INFO, "VS [%s:%d:%u] added into group %s" , inet_sockaddrtopair(&vsge->addr) , vsge->range , vsge->vfwmark , vs->vsgname); /* add all reloaded and alive/inhibit-set dests * to the newly created vsg item */ ipvs_group_sync_entry(vs, vsge); } }}
开发者ID:F191919,项目名称:keepalived,代码行数:31,
示例13: init_service_rs/* Set a realserver IPVS rules */static intinit_service_rs(virtual_server * vs){ element e; real_server *rs; for (e = LIST_HEAD(vs->rs); e; ELEMENT_NEXT(e)) { rs = ELEMENT_DATA(e); /* In alpha mode, be pessimistic (or realistic?) and don't * add real servers into the VS pool. They will get there * later upon healthchecks recovery (if ever). */ if (vs->alpha) { UNSET_ALIVE(rs); continue; } if (!ISALIVE(rs)) { if (!ipvs_cmd(LVS_CMD_ADD_DEST, check_data->vs_group, vs, rs)) return 0; else SET_ALIVE(rs); } else if (vs->vsgname) { UNSET_ALIVE(rs); if (!ipvs_cmd(LVS_CMD_ADD_DEST, check_data->vs_group, vs, rs)) return 0; SET_ALIVE(rs); } } return 1;}
开发者ID:coraltech,项目名称:keepalived,代码行数:32,
示例14: vrrp_sync_mastervoidvrrp_sync_master(vrrp_rt * vrrp){ vrrp_rt *isync; vrrp_sgroup *vgroup = vrrp->sync; list l = vgroup->index_list; element e; if (GROUP_STATE(vgroup) == VRRP_STATE_MAST) return; log_message(LOG_INFO, "VRRP_Group(%s) Syncing instances to MASTER state", GROUP_NAME(vgroup)); /* Perform sync index */ for (e = LIST_HEAD(l); e; ELEMENT_NEXT(e)) { isync = ELEMENT_DATA(e); /* Send the higher priority advert on all synced instances */ if (isync != vrrp && isync->state != VRRP_STATE_MAST) { isync->wantstate = VRRP_STATE_MAST; vrrp_state_goto_master(isync); vrrp_init_instance_sands(isync); } } vgroup->state = VRRP_STATE_MAST; vrrp_sync_smtp_notifier(vgroup); notify_group_exec(vgroup, VRRP_STATE_MAST);}
开发者ID:Addision,项目名称:LVS,代码行数:29,
示例15: vrrp_handlerstatic voidvrrp_handler(vector_t *strvec){ list l; element e; vrrp_t *vrrp; char *iname; if (vector_count(strvec) != 2) { log_message(LOG_INFO, "vrrp_instance must have a name"); skip_block(); return; } iname = vector_slot(strvec,1); /* Make sure the vrrp instance doesn't already exist */ if (!LIST_ISEMPTY(vrrp_data->vrrp)) { l = vrrp_data->vrrp; for (e = LIST_HEAD(l); e; ELEMENT_NEXT(e)) { vrrp = ELEMENT_DATA(e); if (!strcmp(iname,vrrp->iname)) { log_message(LOG_INFO, "vrrp instance %s already defined", iname ); skip_block(); return; } } } alloc_vrrp(iname);}
开发者ID:vrit,项目名称:keepalived,代码行数:31,
示例16: vrrp_sync_group_handler/* VRRP handlers */static voidvrrp_sync_group_handler(vector_t *strvec){ list l; element e; vrrp_sgroup_t *sg; char* gname; if (vector_count(strvec) != 2) { log_message(LOG_INFO, "vrrp_sync_group must have a name - skipping"); skip_block(); return; } gname = vector_slot(strvec, 1); /* check group doesn't already exist */ if (!LIST_ISEMPTY(vrrp_data->vrrp_sync_group)) { l = vrrp_data->vrrp_sync_group; for (e = LIST_HEAD(l); e; ELEMENT_NEXT(e)) { sg = ELEMENT_DATA(e); if (!strcmp(gname,sg->gname)) { log_message(LOG_INFO, "vrrp sync group %s already defined", gname); skip_block(); return; } } } alloc_vrrp_sync_group(gname);}
开发者ID:vrit,项目名称:keepalived,代码行数:32,
示例17: find_entrystatic boolfind_entry(const char *name, unsigned int *id, list *l, const char* file_name, const struct rt_entry* default_list, uint32_t max){ element e; char *endptr; unsigned long l_id; l_id = strtoul(name, &endptr, 0); *id = (unsigned int)l_id; if (endptr != name && *endptr == '/0') return (*id <= max); if (!(*l)) initialise_list(l, file_name, default_list, max); if (LIST_ISEMPTY(*l)) return false; for (e = LIST_HEAD(*l); e; ELEMENT_NEXT(e)) { rt_entry_t *rte = ELEMENT_DATA(e); if (!strcmp(rte->name, name)) { *id = rte->id; return true; } } return false;}
开发者ID:acassen,项目名称:keepalived,代码行数:28,
示例18: add_defaultstatic voidadd_default(list *l, const struct rt_entry* default_list){ bool found; rt_entry_t *rte; element e; for (;default_list->name; default_list++) { for (e = LIST_HEAD(*l), found = false; e; ELEMENT_NEXT(e)) { rte = ELEMENT_DATA(e); if (rte->id == default_list->id) { found = true; break; } } if (found) continue; rte = MALLOC(sizeof(rt_entry_t)); rte->name = MALLOC(strlen(default_list->name) + 1); if (!rte->name) { FREE(rte); return; } strcpy(rte->name, default_list->name); rte->id = default_list->id; list_add(*l, rte); }}
开发者ID:acassen,项目名称:keepalived,代码行数:33,
示例19: add_nexthopsstatic voidadd_nexthops(ip_route_t *route, struct nlmsghdr *nlh, struct rtmsg *rtm){ char buf[ENCAP_RTA_SIZE]; struct rtattr *rta = (void *)buf; struct rtnexthop *rtnh; nexthop_t *nh; element e; rta->rta_type = RTA_MULTIPATH; rta->rta_len = RTA_LENGTH(0); rtnh = RTA_DATA(rta); for (e = LIST_HEAD(route->nhs); e; ELEMENT_NEXT(e)) { nh = ELEMENT_DATA(e); memset(rtnh, 0, sizeof(*rtnh)); rtnh->rtnh_len = sizeof(*rtnh); rta->rta_len += rtnh->rtnh_len; add_nexthop(nh, nlh, rtm, rta, sizeof(buf), rtnh); rtnh = RTNH_NEXT(rtnh); } if (rta->rta_len > RTA_LENGTH(0)) addattr_l(nlh, sizeof(buf), RTA_MULTIPATH, RTA_DATA(rta), RTA_PAYLOAD(rta));}
开发者ID:soarpenguin,项目名称:keepalived,代码行数:26,
示例20: vrrp_sync_master_electionvoidvrrp_sync_master_election(vrrp_rt * vrrp){ vrrp_rt *isync; vrrp_sgroup *vgroup = vrrp->sync; list l = vgroup->index_list; element e; if (vrrp->wantstate != VRRP_STATE_GOTO_MASTER) return; if (GROUP_STATE(vgroup) == VRRP_STATE_FAULT) return; log_message(LOG_INFO, "VRRP_Group(%s) Transition to MASTER state", GROUP_NAME(vgroup)); /* Perform sync index */ for (e = LIST_HEAD(l); e; ELEMENT_NEXT(e)) { isync = ELEMENT_DATA(e); if (isync != vrrp && isync->wantstate != VRRP_STATE_GOTO_MASTER) { /* Force a new protocol master election */ isync->wantstate = VRRP_STATE_GOTO_MASTER; log_message(LOG_INFO, "VRRP_Instance(%s) forcing a new MASTER election", isync->iname); vrrp_send_adv(isync, isync->effective_priority); } }}
开发者ID:Addision,项目名称:LVS,代码行数:29,
示例21: update_svr_checker_state/* Update checker's state */voidupdate_svr_checker_state(int alive, checker_id_t cid, virtual_server *vs, real_server *rs){ element e; list l = rs->failed_checkers; checker_id_t *id; /* Handle alive state. Depopulate failed_checkers and call * perform_svr_state() independently, letting the latter sort * things out itself. */ if (alive) { /* Remove the succeeded check from failed_checkers list. */ for (e = LIST_HEAD(l); e; ELEMENT_NEXT(e)) { id = ELEMENT_DATA(e); if (*id == cid) { free_list_element(l, e); /* If we don't break, the next iteration will trigger * a SIGSEGV. */ break; } } if (LIST_SIZE(l) == 0) perform_svr_state(alive, vs, rs); } /* Handle not alive state */ else { id = (checker_id_t *) MALLOC(sizeof(checker_id_t)); *id = cid; list_add(l, id); if (LIST_SIZE(l) == 1) perform_svr_state(alive, vs, rs); }}
开发者ID:coraltech,项目名称:keepalived,代码行数:36,
示例22: vrrp_sync_backupvoidvrrp_sync_backup(vrrp_rt * vrrp){ vrrp_rt *isync; vrrp_sgroup *vgroup = vrrp->sync; list l = vgroup->index_list; element e; if (GROUP_STATE(vgroup) == VRRP_STATE_BACK) return; log_message(LOG_INFO, "VRRP_Group(%s) Syncing instances to BACKUP state", GROUP_NAME(vgroup)); /* Perform sync index */ for (e = LIST_HEAD(l); e; ELEMENT_NEXT(e)) { isync = ELEMENT_DATA(e); if (isync != vrrp && isync->state != VRRP_STATE_BACK) { isync->wantstate = VRRP_STATE_BACK; vrrp_state_leave_master(isync); vrrp_init_instance_sands(isync); } } vgroup->state = VRRP_STATE_BACK; vrrp_sync_smtp_notifier(vgroup); notify_group_exec(vgroup, VRRP_STATE_BACK);}
开发者ID:Addision,项目名称:LVS,代码行数:27,
示例23: vrrp_sync_faultvoidvrrp_sync_fault(vrrp_rt * vrrp){ vrrp_rt *isync; vrrp_sgroup *vgroup = vrrp->sync; list l = vgroup->index_list; element e; if (GROUP_STATE(vgroup) == VRRP_STATE_FAULT) return; log_message(LOG_INFO, "VRRP_Group(%s) Syncing instances to FAULT state", GROUP_NAME(vgroup)); /* Perform sync index */ for (e = LIST_HEAD(l); e; ELEMENT_NEXT(e)) { isync = ELEMENT_DATA(e); /* * We force sync instance to backup mode. * This reduce instance takeover to less than ms_down_timer. * => by default ms_down_timer is set to 3secs. * => Takeover will be less than 3secs ! */ if (isync != vrrp && isync->state != VRRP_STATE_FAULT) { if (isync->state == VRRP_STATE_MAST) isync->wantstate = VRRP_STATE_GOTO_FAULT; if (isync->state == VRRP_STATE_BACK) isync->state = VRRP_STATE_FAULT; } } vgroup->state = VRRP_STATE_FAULT; notify_group_exec(vgroup, VRRP_STATE_FAULT);}
开发者ID:Addision,项目名称:LVS,代码行数:34,
示例24: update_svr_checker_state/* Update checker's state */voidupdate_svr_checker_state(int alive, checker_id_t cid, virtual_server_t *vs, real_server_t *rs){ element e; list l = rs->failed_checkers; checker_id_t *id; /* Handle alive state. Depopulate failed_checkers and call * perform_svr_state() independently, letting the latter sort * things out itself. */ if (alive) { for (e = LIST_HEAD(l); e; ELEMENT_NEXT(e)) { id = ELEMENT_DATA(e); if (*id == cid) break; } /* call the UP handler unless any more failed checks found */ if (LIST_SIZE(l) == 0 || (LIST_SIZE(l) == 1 && e)) { if (perform_svr_state(alive, vs, rs)) return; } /* Remove the succeeded check from failed_checkers */ if (e) free_list_element(l, e); } /* Handle not alive state */ else { if (LIST_SIZE(l) == 0) { if (perform_svr_state(alive, vs, rs)) return; } else { /* do not add failed check into list twice */ for (e = LIST_HEAD(l); e; ELEMENT_NEXT(e)) { id = ELEMENT_DATA(e); if (*id == cid) return; } } id = (checker_id_t *) MALLOC(sizeof(checker_id_t)); *id = cid; list_add(l, id); }}
开发者ID:F191919,项目名称:keepalived,代码行数:48,
示例25: clear_service_rs/* Remove a realserver IPVS rule */static intclear_service_rs(virtual_server_t * vs, list l){ element e; real_server_t *rs; long weight_sum; long down_threshold = vs->quorum - vs->hysteresis; for (e = LIST_HEAD(l); e; ELEMENT_NEXT(e)) { rs = ELEMENT_DATA(e); if (ISALIVE(rs)) { log_message(LOG_INFO, "Removing service %s from VS %s" , FMT_RS(rs) , FMT_VS(vs)); if (!ipvs_cmd(LVS_CMD_DEL_DEST, vs, rs)) return 0; UNSET_ALIVE(rs); if (!vs->omega) continue; /* In Omega mode we call VS and RS down notifiers * all the way down the exit, as necessary. */ if (rs->notify_down) { log_message(LOG_INFO, "Executing [%s] for service %s in VS %s" , rs->notify_down , FMT_RS(rs) , FMT_VS(vs)); notify_exec(rs->notify_down); }#ifdef _WITH_SNMP_ check_snmp_rs_trap(rs, vs);#endif /* Sooner or later VS will lose the quorum (if any). However, * we don't push in a sorry server then, hence the regression * is intended. */ weight_sum = weigh_live_realservers(vs); if (vs->quorum_state == UP && ( !weight_sum || weight_sum < down_threshold) ) { vs->quorum_state = DOWN; if (vs->quorum_down) { log_message(LOG_INFO, "Executing [%s] for VS %s" , vs->quorum_down , FMT_VS(vs)); notify_exec(vs->quorum_down); }#ifdef _WITH_SNMP_ check_snmp_quorum_trap(vs);#endif } } } return 1;}
开发者ID:Distrotech,项目名称:keepalived,代码行数:60,
示例26: vrrp_print_listvoidvrrp_print_list(FILE *file, list l, void (*fptr)(FILE*, void*)){ element e; for (e = LIST_HEAD(l); e; ELEMENT_NEXT(e)) { (*fptr)(file, ELEMENT_DATA(e)); }}
开发者ID:jwalzer,项目名称:keepalived,代码行数:8,
示例27: clear_service_rs/* Remove a realserver IPVS rule */static intclear_service_rs(list vs_group, virtual_server * vs, list l){ element e; real_server *rs; char rsip[16], vsip[16]; for (e = LIST_HEAD(l); e; ELEMENT_NEXT(e)) { rs = ELEMENT_DATA(e); if (ISALIVE(rs)) { if (!ipvs_cmd(LVS_CMD_DEL_DEST , vs_group , vs , rs)) return 0; UNSET_ALIVE(rs); if (!vs->omega) continue; /* In Omega mode we call VS and RS down notifiers * all the way down the exit, as necessary. */ if (rs->notify_down) { log_message(LOG_INFO, "Executing [%s] for service [%s:%d]" " in VS [%s:%d]" , rs->notify_down , inet_ntoa2(SVR_IP(rs), rsip) , ntohs(SVR_PORT(rs)) , (vs->vsgname) ? vs->vsgname : inet_ntoa2(SVR_IP(vs), vsip) , ntohs(SVR_PORT(vs))); notify_exec(rs->notify_down); } /* Sooner or later VS will lose the quorum (if any). However, * we don't push in a sorry server then, hence the regression * is intended. */ if (vs->quorum_state == UP && vs->quorum_down && weigh_live_realservers(vs) < vs->quorum - vs->hysteresis) { vs->quorum_state = DOWN; log_message(LOG_INFO, "Executing [%s] for VS [%s:%d]" , vs->quorum_down , (vs->vsgname) ? vs->vsgname : inet_ntoa2(SVR_IP(vs), vsip) , ntohs(SVR_PORT(vs))); notify_exec(vs->quorum_down); } }#ifdef _KRNL_2_2_ /* if we have a /32 mask, we create one nat rules per * realserver. */ if (vs->nat_mask == HOST_NETMASK) if (!ipfw_cmd(IP_FW_CMD_DEL, vs, rs)) return 0;#endif } return 1;}
开发者ID:millken,项目名称:zhuxianB30,代码行数:59,
示例28: vrrp_init_sandsstatic voidvrrp_init_sands(list l){ vrrp_t *vrrp; element e; for (e = LIST_HEAD(l); e; ELEMENT_NEXT(e)) { vrrp = ELEMENT_DATA(e); vrrp_init_instance_sands(vrrp); }}
开发者ID:Olipro,项目名称:keepalived,代码行数:11,
示例29: set_vrrp_fd_bucketvoid set_vrrp_fd_bucket(int old_fd, vrrp_t *vrrp){ vrrp_t *vrrp_ptr; element e; element next; list l = &vrrp_data->vrrp_index_fd[old_fd%1024 + 1]; /* Release old stalled entries */ for (e = LIST_HEAD(l); e; e = next) { next = e->next; vrrp_ptr = ELEMENT_DATA(e); if (vrrp_ptr->fd_in == old_fd) { if (e->prev) e->prev->next = e->next; else l->head = e->next; if (e->next) e->next->prev = e->prev; else l->tail = e->prev; l->count--; FREE(e); } } if (LIST_ISEMPTY(l)) l->head = l->tail = NULL; /* Hash refreshed entries */ l = vrrp_data->vrrp; for (e = LIST_HEAD(l); e; ELEMENT_NEXT(e)) { vrrp_ptr = ELEMENT_DATA(e); if (vrrp_ptr->fd_in == old_fd) { /* Update new hash */ vrrp_ptr->fd_in = vrrp->fd_in; vrrp_ptr->fd_out = vrrp->fd_out; alloc_vrrp_fd_bucket(vrrp_ptr); } }}
开发者ID:DStape,项目名称:keepalived,代码行数:41,
示例30: clear_services/* IPVS cleaner processing */intclear_services(void){ element e; list l = check_data->vs; virtual_server *vs; real_server *rs; for (e = LIST_HEAD(l); e; ELEMENT_NEXT(e)) { vs = ELEMENT_DATA(e); rs = ELEMENT_DATA(LIST_HEAD(vs->rs)); if (!clear_service_vs(check_data->vs_group, vs)) return 0;#ifdef _KRNL_2_2_ if (vs->nat_mask != HOST_NETMASK) if (!ipfw_cmd(IP_FW_CMD_DEL, vs, rs)) return 0;#endif } return 1;}
开发者ID:millken,项目名称:zhuxianB30,代码行数:22,
注:本文中的ELEMENT_DATA函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 C++ ELEMENT_NEXT函数代码示例 C++ ELEMENTSOF函数代码示例 |