void VBP_Insert(struct backend *b, const struct vrt_backend_probe *vp, struct tcp_pool *tp) { struct vbp_target *vt; CHECK_OBJ_NOTNULL(b, BACKEND_MAGIC); CHECK_OBJ_NOTNULL(vp, VRT_BACKEND_PROBE_MAGIC); AZ(b->probe); ALLOC_OBJ(vt, VBP_TARGET_MAGIC); XXXAN(vt); vt->tcp_pool = tp; VTP_AddRef(vt->tcp_pool); vt->backend = b; b->probe = vt; vbp_set_defaults(vt, vp); vbp_build_req(vt, vp, b); vbp_reset(vt); VBP_Update_Backend(vt); }
void VBP_Insert(struct backend *b, const struct vrt_backend_probe *p, const char *hosthdr) { struct vbp_target *vt; unsigned u; ASSERT_CLI(); CHECK_OBJ_NOTNULL(b, BACKEND_MAGIC); CHECK_OBJ_NOTNULL(p, VRT_BACKEND_PROBE_MAGIC); AZ(b->probe); ALLOC_OBJ(vt, VBP_TARGET_MAGIC); XXXAN(vt); VTAILQ_INSERT_TAIL(&vbp_list, vt, list); Lck_New(&vt->mtx, lck_backend); vt->disable = -1; vt->tcp_pool = VBT_Ref(b->ipv4, b->ipv6); AN(vt->tcp_pool); vt->probe = *p; vbp_set_defaults(vt); vbp_build_req(vt, hosthdr); for (u = 0; u < vt->probe.initial; u++) { if (u) vbp_has_poked(vt); vbp_start_poke(vt); vt->happy |= 1; vbp_has_poked(vt); } vt->backend = b; b->probe = vt; vbp_has_poked(vt); }