Lines Matching refs:rule

118 	ilb_rule_t	*rule;  member
211 ilb_rule_kstat_init(netstackid_t stackid, ilb_rule_t *rule) in ilb_rule_kstat_init() argument
230 ksp = kstat_create_netstack(ILB_KSTAT_MOD_NAME, rule->ir_ks_instance, in ilb_rule_kstat_init()
231 rule->ir_name, ILB_RULE_KS_CNAME, KSTAT_TYPE_NAMED, in ilb_rule_kstat_init()
236 bcopy(&template, &rule->ir_kstat, sizeof (template)); in ilb_rule_kstat_init()
237 ksp->ks_data = &rule->ir_kstat; in ilb_rule_kstat_init()
245 ilb_server_kstat_init(netstackid_t stackid, ilb_rule_t *rule, in ilb_server_kstat_init() argument
257 ASSERT(strlen(rule->ir_name) + 7 < KSTAT_STRLEN); in ilb_server_kstat_init()
258 (void) sprintf(cname_buf, "%s-sstat", rule->ir_name); in ilb_server_kstat_init()
259 ksp = kstat_create_netstack(ILB_KSTAT_MOD_NAME, rule->ir_ks_instance, in ilb_server_kstat_init()
315 ilb_rule_hash_add(ilb_stack_t *ilbs, ilb_rule_t *rule, const in6_addr_t *addr) in ilb_rule_hash_add() argument
321 DTRACE_PROBE2(ilb__rule__hash__add, ilb_rule_t *, rule, int, i); in ilb_rule_hash_add()
323 rule->ir_hash_next = ilbs->ilbs_g_hash[i].ilb_hash_rule; in ilb_rule_hash_add()
325 ilbs->ilbs_g_hash[i].ilb_hash_rule->ir_hash_prev = rule; in ilb_rule_hash_add()
326 rule->ir_hash_prev = NULL; in ilb_rule_hash_add()
327 ilbs->ilbs_g_hash[i].ilb_hash_rule = rule; in ilb_rule_hash_add()
329 rule->ir_hash = &ilbs->ilbs_g_hash[i]; in ilb_rule_hash_add()
338 ilb_rule_hash_del(ilb_rule_t *rule) in ilb_rule_hash_del() argument
340 mutex_enter(&rule->ir_hash->ilb_hash_lock); in ilb_rule_hash_del()
341 if (rule->ir_hash->ilb_hash_rule == rule) { in ilb_rule_hash_del()
342 rule->ir_hash->ilb_hash_rule = rule->ir_hash_next; in ilb_rule_hash_del()
343 if (rule->ir_hash_next != NULL) in ilb_rule_hash_del()
344 rule->ir_hash_next->ir_hash_prev = NULL; in ilb_rule_hash_del()
346 if (rule->ir_hash_prev != NULL) in ilb_rule_hash_del()
347 rule->ir_hash_prev->ir_hash_next = in ilb_rule_hash_del()
348 rule->ir_hash_next; in ilb_rule_hash_del()
349 if (rule->ir_hash_next != NULL) { in ilb_rule_hash_del()
350 rule->ir_hash_next->ir_hash_prev = in ilb_rule_hash_del()
351 rule->ir_hash_prev; in ilb_rule_hash_del()
354 mutex_exit(&rule->ir_hash->ilb_hash_lock); in ilb_rule_hash_del()
356 rule->ir_hash_next = NULL; in ilb_rule_hash_del()
357 rule->ir_hash_prev = NULL; in ilb_rule_hash_del()
358 rule->ir_hash = NULL; in ilb_rule_hash_del()
369 ilb_rule_t *rule; in ilb_rule_hash() local
378 for (rule = ilbs->ilbs_g_hash[i].ilb_hash_rule; rule != NULL; in ilb_rule_hash()
379 rule = rule->ir_hash_next) { in ilb_rule_hash()
380 if (!rule->ir_port_range) { in ilb_rule_hash()
381 if (rule->ir_min_port != port) in ilb_rule_hash()
384 if (port < rule->ir_min_port || in ilb_rule_hash()
385 port > rule->ir_max_port) { in ilb_rule_hash()
389 if (rule->ir_ipver != l3 || rule->ir_proto != l4 || in ilb_rule_hash()
390 rule->ir_zoneid != zoneid) { in ilb_rule_hash()
395 if (rule->ir_target_v4 != INADDR_ANY && in ilb_rule_hash()
396 rule->ir_target_v4 != v4_addr) { in ilb_rule_hash()
400 if (!IN6_IS_ADDR_UNSPECIFIED(&rule->ir_target_v6) && in ilb_rule_hash()
401 !IN6_ARE_ADDR_EQUAL(addr, &rule->ir_target_v6)) { in ilb_rule_hash()
409 mutex_enter(&rule->ir_lock); in ilb_rule_hash()
410 if (!(rule->ir_flags & ILB_RULE_ENABLED)) { in ilb_rule_hash()
411 ILB_R_KSTAT(rule, pkt_not_processed); in ilb_rule_hash()
412 ILB_R_KSTAT_UPDATE(rule, bytes_not_processed, len); in ilb_rule_hash()
413 mutex_exit(&rule->ir_lock); in ilb_rule_hash()
414 rule = NULL; in ilb_rule_hash()
416 } else if (rule->ir_flags & ILB_RULE_BUSY) { in ilb_rule_hash()
425 ILB_R_KSTAT(rule, pkt_dropped); in ilb_rule_hash()
426 ILB_R_KSTAT_UPDATE(rule, bytes_dropped, len); in ilb_rule_hash()
427 mutex_exit(&rule->ir_lock); in ilb_rule_hash()
429 rule = NULL; in ilb_rule_hash()
432 rule->ir_refcnt++; in ilb_rule_hash()
433 ASSERT(rule->ir_refcnt != 1); in ilb_rule_hash()
434 mutex_exit(&rule->ir_lock); in ilb_rule_hash()
439 return (rule); in ilb_rule_hash()
447 ilb_rule_g_add(ilb_stack_t *ilbs, ilb_rule_t *rule) in ilb_rule_g_add() argument
450 rule->ir_next = ilbs->ilbs_rule_head; in ilb_rule_g_add()
451 ilbs->ilbs_rule_head = rule; in ilb_rule_g_add()
457 ilb_rule_g_del(ilb_stack_t *ilbs, ilb_rule_t *rule) in ilb_rule_g_del() argument
466 if (tmp_rule == rule) in ilb_rule_g_del()
519 ilb_rule_t *rule; in ilb_rule_add() local
633 rule = kmem_zalloc(sizeof (ilb_rule_t), KM_NOSLEEP); in ilb_rule_add()
634 if (rule == NULL) { in ilb_rule_add()
640 (void) memcpy(rule->ir_name, cmd->name, ILB_RULE_NAMESZ - 1); in ilb_rule_add()
642 rule->ir_ks_instance = atomic_inc_uint_nv(&ilb_kstat_instance); in ilb_rule_add()
644 if ((rule->ir_ksp = ilb_rule_kstat_init(stackid, rule)) == NULL) { in ilb_rule_add()
650 rule->ir_nat_src_start = cmd->nat_src_start; in ilb_rule_add()
651 rule->ir_nat_src_end = cmd->nat_src_end; in ilb_rule_add()
654 rule->ir_ipver = cmd->ip_ver; in ilb_rule_add()
655 rule->ir_proto = cmd->proto; in ilb_rule_add()
656 rule->ir_topo = cmd->topo; in ilb_rule_add()
658 rule->ir_min_port = min_port; in ilb_rule_add()
659 rule->ir_max_port = max_port; in ilb_rule_add()
660 if (rule->ir_min_port != rule->ir_max_port) in ilb_rule_add()
661 rule->ir_port_range = B_TRUE; in ilb_rule_add()
663 rule->ir_port_range = B_FALSE; in ilb_rule_add()
665 rule->ir_zoneid = zoneid; in ilb_rule_add()
667 rule->ir_target_v6 = cmd->vip; in ilb_rule_add()
668 rule->ir_servers = NULL; in ilb_rule_add()
675 rule->ir_conn_drain_timeout = cmd->conn_drain_timeout; in ilb_rule_add()
677 rule->ir_nat_expiry = cmd->nat_expiry; in ilb_rule_add()
679 switch (rule->ir_proto) { in ilb_rule_add()
681 rule->ir_nat_expiry = ilb_conn_tcp_expiry; in ilb_rule_add()
684 rule->ir_nat_expiry = ilb_conn_udp_expiry; in ilb_rule_add()
688 (void *)rule); in ilb_rule_add()
693 rule->ir_sticky_expiry = cmd->sticky_expiry; in ilb_rule_add()
695 rule->ir_sticky_expiry = ilb_sticky_expiry; in ilb_rule_add()
698 rule->ir_flags |= ILB_RULE_STICKY; in ilb_rule_add()
699 rule->ir_sticky_mask = cmd->sticky_mask; in ilb_rule_add()
704 rule->ir_flags |= ILB_RULE_ENABLED; in ilb_rule_add()
706 mutex_init(&rule->ir_lock, NULL, MUTEX_DEFAULT, NULL); in ilb_rule_add()
707 cv_init(&rule->ir_cv, NULL, CV_DEFAULT, NULL); in ilb_rule_add()
709 rule->ir_refcnt = 1; in ilb_rule_add()
713 if ((rule->ir_alg = ilb_alg_rr_init(rule, NULL)) == NULL) { in ilb_rule_add()
717 rule->ir_alg_type = ILB_ALG_IMPL_ROUNDROBIN; in ilb_rule_add()
722 if ((rule->ir_alg = ilb_alg_hash_init(rule, in ilb_rule_add()
727 rule->ir_alg_type = cmd->algo; in ilb_rule_add()
735 ilb_rule_g_add(ilbs, rule); in ilb_rule_add()
736 ilb_rule_hash_add(ilbs, rule, &cmd->vip); in ilb_rule_add()
744 if (rule->ir_ksp != NULL) { in ilb_rule_add()
746 kstat_delete_netstack(rule->ir_ksp, stackid); in ilb_rule_add()
748 kmem_free(rule, sizeof (ilb_rule_t)); in ilb_rule_add()
804 ilb_rule_t *rule = ((ilb_rule_tq_t *)arg)->rule; in ilb_rule_del_tq() local
806 mutex_enter(&rule->ir_lock); in ilb_rule_del_tq()
807 while (rule->ir_refcnt > 1) in ilb_rule_del_tq()
808 cv_wait(&rule->ir_cv, &rule->ir_lock); in ilb_rule_del_tq()
809 ilb_rule_del_common(ilbs, rule); in ilb_rule_del_tq()
848 arg->rule = tmp_rule; in ilb_rule_del()
863 ilb_rule_t *rule; in ilb_rule_match_vip_v6() local
869 for (rule = ilbs->ilbs_g_hash[i].ilb_hash_rule; rule != NULL; in ilb_rule_match_vip_v6()
870 rule = rule->ir_hash_next) { in ilb_rule_match_vip_v6()
871 if (IN6_ARE_ADDR_EQUAL(vip, &rule->ir_target_v6)) { in ilb_rule_match_vip_v6()
872 mutex_enter(&rule->ir_lock); in ilb_rule_match_vip_v6()
873 if (rule->ir_flags & ILB_RULE_BUSY) { in ilb_rule_match_vip_v6()
874 mutex_exit(&rule->ir_lock); in ilb_rule_match_vip_v6()
878 rule->ir_refcnt++; in ilb_rule_match_vip_v6()
879 mutex_exit(&rule->ir_lock); in ilb_rule_match_vip_v6()
880 *ret_rule = rule; in ilb_rule_match_vip_v6()
882 mutex_exit(&rule->ir_lock); in ilb_rule_match_vip_v6()
896 ilb_rule_t *rule; in ilb_rule_match_vip_v4() local
901 for (rule = ilbs->ilbs_g_hash[i].ilb_hash_rule; rule != NULL; in ilb_rule_match_vip_v4()
902 rule = rule->ir_hash_next) { in ilb_rule_match_vip_v4()
903 if (rule->ir_target_v6.s6_addr32[3] == addr) { in ilb_rule_match_vip_v4()
904 mutex_enter(&rule->ir_lock); in ilb_rule_match_vip_v4()
905 if (rule->ir_flags & ILB_RULE_BUSY) { in ilb_rule_match_vip_v4()
906 mutex_exit(&rule->ir_lock); in ilb_rule_match_vip_v4()
910 rule->ir_refcnt++; in ilb_rule_match_vip_v4()
911 mutex_exit(&rule->ir_lock); in ilb_rule_match_vip_v4()
912 *ret_rule = rule; in ilb_rule_match_vip_v4()
914 mutex_exit(&rule->ir_lock); in ilb_rule_match_vip_v4()
1018 ilb_rule_t *rule; in ilb_rule_enable() local
1023 if ((rule = in_rule) == NULL) { in ilb_rule_enable()
1024 if ((rule = ilb_find_rule(ilbs, zoneid, rule_name, in ilb_rule_enable()
1029 mutex_enter(&rule->ir_lock); in ilb_rule_enable()
1030 rule->ir_flags |= ILB_RULE_ENABLED; in ilb_rule_enable()
1031 mutex_exit(&rule->ir_lock); in ilb_rule_enable()
1035 ILB_RULE_REFRELE(rule); in ilb_rule_enable()
1043 ilb_rule_t *rule; in ilb_rule_disable() local
1048 if ((rule = in_rule) == NULL) { in ilb_rule_disable()
1049 if ((rule = ilb_find_rule(ilbs, zoneid, rule_name, in ilb_rule_disable()
1054 mutex_enter(&rule->ir_lock); in ilb_rule_disable()
1055 rule->ir_flags &= ~ILB_RULE_ENABLED; in ilb_rule_disable()
1056 mutex_exit(&rule->ir_lock); in ilb_rule_disable()
1060 ILB_RULE_REFRELE(rule); in ilb_rule_disable()
1071 ilb_rule_t *rule; in ilb_rule_enable_all() local
1074 for (rule = ilbs->ilbs_rule_head; rule != NULL; rule = rule->ir_next) { in ilb_rule_enable_all()
1075 if (rule->ir_zoneid != zoneid) in ilb_rule_enable_all()
1082 (void) ilb_rule_enable(ilbs, zoneid, NULL, rule); in ilb_rule_enable_all()
1090 ilb_rule_t *rule; in ilb_rule_disable_all() local
1093 for (rule = ilbs->ilbs_rule_head; rule != NULL; in ilb_rule_disable_all()
1094 rule = rule->ir_next) { in ilb_rule_disable_all()
1095 if (rule->ir_zoneid != zoneid) in ilb_rule_disable_all()
1097 (void) ilb_rule_disable(ilbs, zoneid, NULL, rule); in ilb_rule_disable_all()
1105 ilb_rule_t *rule; in ilb_rule_del_all() local
1109 while ((rule = ilbs->ilbs_rule_head) != NULL) { in ilb_rule_del_all()
1110 if (rule->ir_zoneid != zoneid) in ilb_rule_del_all()
1112 ilb_rule_hash_del(rule); in ilb_rule_del_all()
1113 ilb_rule_g_del(ilbs, rule); in ilb_rule_del_all()
1118 arg->rule = rule; in ilb_rule_del_all()
1140 ilb_rule_t *rule, in6_addr_t *addr, boolean_t enable) in ilb_server_toggle() argument
1145 ASSERT((rule == NULL && rule_name != NULL) || in ilb_server_toggle()
1146 (rule != NULL && rule_name == NULL)); in ilb_server_toggle()
1148 if (rule == NULL) { in ilb_server_toggle()
1149 if ((rule = ilb_find_rule(ilbs, zoneid, rule_name, in ilb_server_toggle()
1156 for (tmp_server = rule->ir_servers; tmp_server != NULL; in ilb_server_toggle()
1167 ret = rule->ir_alg->ilb_alg_server_enable(tmp_server, in ilb_server_toggle()
1168 rule->ir_alg->ilb_alg_data); in ilb_server_toggle()
1174 ret = rule->ir_alg->ilb_alg_server_disable(tmp_server, in ilb_server_toggle()
1175 rule->ir_alg->ilb_alg_data); in ilb_server_toggle()
1178 if (rule->ir_conn_drain_timeout != 0) { in ilb_server_toggle()
1182 rule->ir_conn_drain_timeout)); in ilb_server_toggle()
1189 ILB_RULE_REFRELE(rule); in ilb_server_toggle()
1194 ilb_rule_t *rule, in6_addr_t *addr) in ilb_server_enable() argument
1196 return (ilb_server_toggle(ilbs, zoneid, name, rule, addr, B_TRUE)); in ilb_server_enable()
1201 ilb_rule_t *rule, in6_addr_t *addr) in ilb_server_disable() argument
1203 return (ilb_server_toggle(ilbs, zoneid, name, rule, addr, B_FALSE)); in ilb_server_disable()
1211 ilb_server_add(ilb_stack_t *ilbs, ilb_rule_t *rule, ilb_server_info_t *info) in ilb_server_add() argument
1232 mutex_enter(&rule->ir_lock); in ilb_server_add()
1234 while (rule->ir_flags & ILB_RULE_BUSY) { in ilb_server_add()
1235 if (cv_wait_sig(&rule->ir_cv, &rule->ir_lock) == 0) { in ilb_server_add()
1236 mutex_exit(&rule->ir_lock); in ilb_server_add()
1245 rule->ir_flags |= ILB_RULE_BUSY; in ilb_server_add()
1248 while (rule->ir_refcnt > 2) { in ilb_server_add()
1249 if (cv_wait_sig(&rule->ir_cv, &rule->ir_lock) == 0) { in ilb_server_add()
1250 mutex_exit(&rule->ir_lock); in ilb_server_add()
1255 mutex_exit(&rule->ir_lock); in ilb_server_add()
1259 rule->ir_ipver != IPPROTO_IP) || in ilb_server_add()
1261 rule->ir_ipver != IPPROTO_IPV6)) { in ilb_server_add()
1276 if (rule->ir_topo == ILB_TOPO_IMPL_DSR) { in ilb_server_add()
1277 if (rule->ir_max_port != max_port || in ilb_server_add()
1278 rule->ir_min_port != min_port) { in ilb_server_add()
1283 if ((range != rule->ir_max_port - rule->ir_min_port) && in ilb_server_add()
1291 for (server = rule->ir_servers; server != NULL; in ilb_server_add()
1312 server->iser_ksp = ilb_server_kstat_init(stackid, rule, server); in ilb_server_add()
1332 if (rule->ir_topo == ILB_TOPO_IMPL_NAT) { in ilb_server_add()
1346 &server->iser_addr_v6, port, &rule->ir_nat_src_start, in ilb_server_add()
1347 num_nat_src_v6(&rule->ir_nat_src_start, in ilb_server_add()
1348 &rule->ir_nat_src_end))) != 0) { in ilb_server_add()
1369 ASSERT(rule->ir_alg != NULL); in ilb_server_add()
1370 if ((ret = rule->ir_alg->ilb_alg_server_add(server, in ilb_server_add()
1371 rule->ir_alg->ilb_alg_data)) != 0) { in ilb_server_add()
1381 if (rule->ir_servers == NULL) { in ilb_server_add()
1384 server->iser_next = rule->ir_servers; in ilb_server_add()
1386 rule->ir_servers = server; in ilb_server_add()
1387 ILB_R_KSTAT(rule, num_servers); in ilb_server_add()
1390 mutex_enter(&rule->ir_lock); in ilb_server_add()
1391 rule->ir_flags &= ~ILB_RULE_BUSY; in ilb_server_add()
1392 cv_signal(&rule->ir_cv); in ilb_server_add()
1393 mutex_exit(&rule->ir_lock); in ilb_server_add()
1416 ilb_rule_t *rule, in6_addr_t *addr) in ilb_server_del() argument
1422 ASSERT((rule == NULL && rule_name != NULL) || in ilb_server_del()
1423 (rule != NULL && rule_name == NULL)); in ilb_server_del()
1424 if (rule == NULL) { in ilb_server_del()
1425 if ((rule = ilb_find_rule(ilbs, zoneid, rule_name, in ilb_server_del()
1431 mutex_enter(&rule->ir_lock); in ilb_server_del()
1433 while (rule->ir_flags & ILB_RULE_BUSY) { in ilb_server_del()
1434 if (cv_wait_sig(&rule->ir_cv, &rule->ir_lock) == 0) { in ilb_server_del()
1436 if (--rule->ir_refcnt <= 2) in ilb_server_del()
1437 cv_signal(&rule->ir_cv); in ilb_server_del()
1439 mutex_exit(&rule->ir_lock); in ilb_server_del()
1447 rule->ir_flags |= ILB_RULE_BUSY; in ilb_server_del()
1450 while (rule->ir_refcnt > 2) { in ilb_server_del()
1451 if (cv_wait_sig(&rule->ir_cv, &rule->ir_lock) == 0) { in ilb_server_del()
1452 mutex_exit(&rule->ir_lock); in ilb_server_del()
1457 mutex_exit(&rule->ir_lock); in ilb_server_del()
1460 for (server = rule->ir_servers; server != NULL; in ilb_server_del()
1474 if ((ret = rule->ir_alg->ilb_alg_server_del(server, in ilb_server_del()
1475 rule->ir_alg->ilb_alg_data)) != 0) { in ilb_server_del()
1480 rule->ir_servers = server->iser_next; in ilb_server_del()
1484 ILB_R_KSTAT_UPDATE(rule, num_servers, -1); in ilb_server_del()
1502 if (rule->ir_conn_drain_timeout != 0) { in ilb_server_del()
1505 SEC_TO_TICK(rule->ir_conn_drain_timeout)); in ilb_server_del()
1518 mutex_enter(&rule->ir_lock); in ilb_server_del()
1519 rule->ir_flags &= ~ILB_RULE_BUSY; in ilb_server_del()
1521 rule->ir_refcnt--; in ilb_server_del()
1522 cv_signal(&rule->ir_cv); in ilb_server_del()
1523 mutex_exit(&rule->ir_lock); in ilb_server_del()
1548 ilb_rule_t *rule; in ilb_icmp_v4() local
1551 if (!ilb_rule_match_vip_v4(ilbs, ipha->ipha_dst, &rule)) in ilb_icmp_v4()
1556 ILB_R_KSTAT(rule, icmp_dropped); in ilb_icmp_v4()
1557 ILB_RULE_REFRELE(rule); in ilb_icmp_v4()
1563 ILB_R_KSTAT(rule, icmp_echo_processed); in ilb_icmp_v4()
1564 ILB_RULE_REFRELE(rule); in ilb_icmp_v4()
1580 ILB_R_KSTAT(rule, icmp_dropped); in ilb_icmp_v4()
1581 ILB_RULE_REFRELE(rule); in ilb_icmp_v4()
1586 ILB_R_KSTAT(rule, icmp_2big_processed); in ilb_icmp_v4()
1589 ILB_R_KSTAT(rule, icmp_2big_dropped); in ilb_icmp_v4()
1592 ILB_RULE_REFRELE(rule); in ilb_icmp_v4()
1597 ILB_R_KSTAT(rule, icmp_dropped); in ilb_icmp_v4()
1598 ILB_RULE_REFRELE(rule); in ilb_icmp_v4()
1608 ilb_rule_t *rule; in ilb_icmp_v6() local
1610 if (!ilb_rule_match_vip_v6(ilbs, &ip6h->ip6_dst, &rule)) in ilb_icmp_v6()
1614 ILB_R_KSTAT(rule, icmp_dropped); in ilb_icmp_v6()
1615 ILB_RULE_REFRELE(rule); in ilb_icmp_v6()
1623 ILB_R_KSTAT(rule, icmp_echo_processed); in ilb_icmp_v6()
1624 ILB_RULE_REFRELE(rule); in ilb_icmp_v6()
1644 ILB_R_KSTAT(rule, icmp_2big_processed); in ilb_icmp_v6()
1647 ILB_R_KSTAT(rule, icmp_2big_dropped); in ilb_icmp_v6()
1650 ILB_RULE_REFRELE(rule); in ilb_icmp_v6()
1654 ILB_R_KSTAT(rule, icmp_dropped); in ilb_icmp_v6()
1655 ILB_RULE_REFRELE(rule); in ilb_icmp_v6()
1672 ilb_rule_t *rule; in ilb_check() local
1722 rule = ilb_rule_hash(ilbs, l3, l4, dst, dport, ill->ill_zoneid, in ilb_check()
1724 if (rule == NULL) { in ilb_check()
1736 balanced = rule->ir_alg->ilb_alg_lb(src, sport, dst, dport, in ilb_check()
1737 rule->ir_alg->ilb_alg_data, &server); in ilb_check()
1753 if (rule->ir_flags & ILB_RULE_STICKY) { in ilb_check()
1756 V6_MASK_COPY(*src, rule->ir_sticky_mask, addr); in ilb_check()
1757 if ((server = ilb_sticky_find_add(ilbs, rule, &addr, server, in ilb_check()
1759 ILB_R_KSTAT(rule, nomem_pkt_dropped); in ilb_check()
1760 ILB_R_KSTAT_UPDATE(rule, nomem_bytes_dropped, pkt_len); in ilb_check()
1773 switch (rule->ir_topo) { in ilb_check()
1799 ILB_R_KSTAT(rule, pkt_dropped); in ilb_check()
1800 ILB_R_KSTAT_UPDATE(rule, bytes_dropped, pkt_len); in ilb_check()
1801 ILB_R_KSTAT(rule, noport_pkt_dropped); in ilb_check()
1802 ILB_R_KSTAT_UPDATE(rule, noport_bytes_dropped, pkt_len); in ilb_check()
1808 if (rule->ir_port_range && server->iser_port_range) { in ilb_check()
1810 rule->ir_min_port + server->iser_min_port); in ilb_check()
1820 if (ilb_conn_add(ilbs, rule, server, src, sport, dst, in ilb_check()
1822 ILB_R_KSTAT(rule, pkt_dropped); in ilb_check()
1823 ILB_R_KSTAT_UPDATE(rule, bytes_dropped, pkt_len); in ilb_check()
1824 ILB_R_KSTAT(rule, nomem_pkt_dropped); in ilb_check()
1825 ILB_R_KSTAT_UPDATE(rule, nomem_bytes_dropped, pkt_len); in ilb_check()
1837 if (rule->ir_port_range && server->iser_port_range) { in ilb_check()
1839 rule->ir_min_port + server->iser_min_port); in ilb_check()
1844 if (ilb_conn_add(ilbs, rule, server, src, sport, dst, in ilb_check()
1846 ILB_R_KSTAT(rule, pkt_dropped); in ilb_check()
1847 ILB_R_KSTAT_UPDATE(rule, bytes_dropped, pkt_len); in ilb_check()
1848 ILB_R_KSTAT(rule, nomem_pkt_dropped); in ilb_check()
1849 ILB_R_KSTAT_UPDATE(rule, nomem_bytes_dropped, pkt_len); in ilb_check()
1869 (void *) rule); in ilb_check()
1872 ILB_RULE_REFRELE(rule); in ilb_check()
1877 ILB_R_KSTAT(rule, pkt_dropped); in ilb_check()
1878 ILB_R_KSTAT_UPDATE(rule, bytes_dropped, pkt_len); in ilb_check()
1879 ILB_RULE_REFRELE(rule); in ilb_check()
1943 ilb_rule_t *rule; in ilb_get_num_servers() local
1946 if ((rule = ilb_find_rule(ilbs, zoneid, name, &err)) == NULL) in ilb_get_num_servers()
1948 *num_servers = rule->ir_kstat.num_servers.value.ui64; in ilb_get_num_servers()
1949 ILB_RULE_REFRELE(rule); in ilb_get_num_servers()
1957 ilb_rule_t *rule; in ilb_get_servers() local
1962 if ((rule = ilb_find_rule(ilbs, zoneid, name, &err)) == NULL) in ilb_get_servers()
1964 for (server = rule->ir_servers, cnt = *num_servers; in ilb_get_servers()
1975 ILB_RULE_REFRELE(rule); in ilb_get_servers()
2009 ilb_rule_t *rule; in ilb_rule_list() local
2012 if ((rule = ilb_find_rule(ilbs, zoneid, cmd->name, &err)) == NULL) { in ilb_rule_list()
2021 cmd->ip_ver = rule->ir_ipver; in ilb_rule_list()
2022 cmd->proto = rule->ir_proto; in ilb_rule_list()
2023 cmd->min_port = htons(rule->ir_min_port); in ilb_rule_list()
2024 cmd->max_port = htons(rule->ir_max_port); in ilb_rule_list()
2026 cmd->vip = rule->ir_target_v6; in ilb_rule_list()
2027 cmd->algo = rule->ir_alg_type; in ilb_rule_list()
2028 cmd->topo = rule->ir_topo; in ilb_rule_list()
2030 cmd->nat_src_start = rule->ir_nat_src_start; in ilb_rule_list()
2031 cmd->nat_src_end = rule->ir_nat_src_end; in ilb_rule_list()
2033 cmd->conn_drain_timeout = rule->ir_conn_drain_timeout; in ilb_rule_list()
2034 cmd->nat_expiry = rule->ir_nat_expiry; in ilb_rule_list()
2035 cmd->sticky_expiry = rule->ir_sticky_expiry; in ilb_rule_list()
2038 if (rule->ir_flags & ILB_RULE_ENABLED) in ilb_rule_list()
2040 if (rule->ir_flags & ILB_RULE_STICKY) { in ilb_rule_list()
2042 cmd->sticky_mask = rule->ir_sticky_mask; in ilb_rule_list()
2045 ILB_RULE_REFRELE(rule); in ilb_rule_list()