Lines Matching refs:connp
129 ilb_conn_remove_common(ilb_conn_t *connp, boolean_t c2s)
136 hash = connp->conn_c2s_hash;
138 next = &connp->conn_c2s_next;
139 prev = &connp->conn_c2s_prev;
145 hash = connp->conn_s2c_hash;
147 next = &connp->conn_s2c_next;
148 prev = &connp->conn_s2c_prev;
155 if (hash->ilb_connp == connp) {
173 ilb_conn_remove(ilb_conn_t *connp)
175 ASSERT(MUTEX_HELD(&connp->conn_c2s_hash->ilb_conn_hash_lock));
176 ilb_conn_remove_common(connp, B_TRUE);
177 ASSERT(MUTEX_HELD(&connp->conn_s2c_hash->ilb_conn_hash_lock));
178 ilb_conn_remove_common(connp, B_FALSE);
180 if (connp->conn_rule_cache.topo == ILB_TOPO_IMPL_NAT) {
183 port = ntohs(connp->conn_rule_cache.info.nat_sport);
184 vmem_free(connp->conn_rule_cache.info.src_ent->nse_port_arena,
188 if (connp->conn_sticky != NULL)
189 ILB_STICKY_REFRELE(connp->conn_sticky);
190 ILB_SERVER_REFRELE(connp->conn_server);
191 kmem_cache_free(ilb_conn_cache, connp);
207 ilb_conn_t *connp, *nxt_connp;
219 if ((connp = c2s_hash[i].ilb_connp) == NULL) {
226 ASSERT(connp->conn_c2s_hash == &c2s_hash[i]);
227 nxt_connp = connp->conn_c2s_next;
228 expiry = now - SEC_TO_TICK(connp->conn_expiry);
229 if (connp->conn_server->iser_die_time != 0 &&
230 connp->conn_server->iser_die_time < now)
234 s2c_hash = connp->conn_s2c_hash;
237 if (connp->conn_gc || die_now ||
238 (connp->conn_c2s_atime < expiry &&
239 connp->conn_s2c_atime < expiry)) {
241 if (connp == ilbs->ilbs_conn_list_connp) {
243 connp->conn_c2s_next;
245 ilb_conn_remove(connp);
249 if (connp->conn_l4 != IPPROTO_TCP)
253 if (connp->conn_c2s_tcp_fin_sent &&
254 SEQ_GT(connp->conn_s2c_tcp_ack,
255 connp->conn_c2s_tcp_fss)) {
256 connp->conn_c2s_tcp_fin_acked = B_TRUE;
258 if (connp->conn_s2c_tcp_fin_sent &&
259 SEQ_GT(connp->conn_c2s_tcp_ack,
260 connp->conn_s2c_tcp_fss)) {
261 connp->conn_s2c_tcp_fin_acked = B_TRUE;
263 if (connp->conn_c2s_tcp_fin_acked &&
264 connp->conn_s2c_tcp_fin_acked) {
265 ilb_conn_remove(connp);
269 connp = nxt_connp;
270 } while (connp != NULL);
368 ilb_conn_t *connp;
395 while ((connp = hash[i].ilb_connp) != NULL) {
396 hash[i].ilb_connp = connp->conn_s2c_next;
397 ILB_SERVER_REFRELE(connp->conn_server);
398 if (connp->conn_rule_cache.topo == ILB_TOPO_IMPL_NAT) {
406 connp->conn_rule_cache.info.nat_sport);
407 ent = connp->conn_rule_cache.info.src_ent;
411 kmem_cache_free(ilb_conn_cache, connp);
505 ilb_conn_t *connp;
509 connp = kmem_cache_alloc(ilb_conn_cache, KM_NOSLEEP);
510 if (connp == NULL) {
525 connp->conn_l4 = rule->ir_proto;
527 connp->conn_server = server;
529 connp->conn_sticky = s;
531 connp->conn_rule_cache.topo = rule->ir_topo;
532 connp->conn_rule_cache.info = *info;
534 connp->conn_gc = B_FALSE;
536 connp->conn_expiry = rule->ir_nat_expiry;
537 connp->conn_cr_time = ddi_get_lbolt64();
540 connp->conn_c2s_saddr = *src;
541 connp->conn_c2s_sport = sport;
542 connp->conn_c2s_daddr = *dst;
543 connp->conn_c2s_dport = dport;
545 connp->conn_c2s_atime = ddi_get_lbolt64();
547 connp->conn_c2s_pkt_cnt = 1;
548 connp->conn_c2s_tcp_fin_sent = B_FALSE;
549 connp->conn_c2s_tcp_fin_acked = B_FALSE;
554 connp->conn_s2c_saddr = info->nat_dst;
555 connp->conn_s2c_sport = info->nat_dport;
556 connp->conn_s2c_daddr = *src;
557 connp->conn_s2c_dport = sport;
563 &connp->conn_c2s_ip_sum);
566 info->nat_dport, &connp->conn_c2s_tp_sum);
567 *ip_sum = connp->conn_c2s_ip_sum;
568 *tp_sum = connp->conn_c2s_tp_sum;
573 &connp->conn_s2c_ip_sum);
578 &connp->conn_s2c_tp_sum);
580 connp->conn_c2s_ip_sum = 0;
583 info->nat_dport, &connp->conn_c2s_tp_sum);
585 *tp_sum = connp->conn_c2s_tp_sum;
587 connp->conn_s2c_ip_sum = 0;
590 &connp->conn_s2c_tp_sum);
594 connp->conn_s2c_saddr = info->nat_dst;
595 connp->conn_s2c_sport = info->nat_dport;
596 connp->conn_s2c_daddr = info->nat_src;
597 connp->conn_s2c_dport = info->nat_sport;
604 0, 0, 0, 0, &connp->conn_c2s_ip_sum);
610 info->nat_dport, &connp->conn_c2s_tp_sum);
611 *ip_sum = connp->conn_c2s_ip_sum;
612 *tp_sum = connp->conn_c2s_tp_sum;
619 0, 0, 0, 0, &connp->conn_s2c_ip_sum);
626 sport, dport, &connp->conn_s2c_tp_sum);
632 info->nat_dport, &connp->conn_c2s_tp_sum);
633 connp->conn_c2s_ip_sum = 0;
635 *tp_sum = connp->conn_c2s_tp_sum;
641 &connp->conn_s2c_tp_sum);
642 connp->conn_s2c_ip_sum = 0;
647 connp->conn_s2c_atime = ddi_get_lbolt64();
648 connp->conn_s2c_pkt_cnt = 1;
649 connp->conn_s2c_tcp_fin_sent = B_FALSE;
650 connp->conn_s2c_tcp_fin_acked = B_FALSE;
654 i = ILB_CONN_HASH((uint8_t *)&connp->conn_s2c_saddr.s6_addr32[3],
655 ntohs(connp->conn_s2c_sport),
656 (uint8_t *)&connp->conn_s2c_daddr.s6_addr32[3],
657 ntohs(connp->conn_s2c_dport), ilbs->ilbs_conn_hash_size);
658 connp->conn_s2c_hash = &hash[i];
659 DTRACE_PROBE2(ilb__conn__hash__add__s2c, ilb_conn_t *, connp, int, i);
663 connp->conn_s2c_next = hash[i].ilb_connp;
665 hash[i].ilb_connp->conn_s2c_prev = connp;
666 connp->conn_s2c_prev = NULL;
667 hash[i].ilb_connp = connp;
675 connp->conn_c2s_hash = &hash[i];
676 DTRACE_PROBE2(ilb__conn__hash__add__c2s, ilb_conn_t *, connp, int, i);
680 connp->conn_c2s_next = hash[i].ilb_connp;
682 hash[i].ilb_connp->conn_c2s_prev = connp;
683 connp->conn_c2s_prev = NULL;
684 hash[i].ilb_connp = connp;
695 update_conn_tcp(ilb_conn_t *connp, void *iph, tcpha_t *tcpha, int32_t pkt_len,
711 ASSERT(MUTEX_HELD(&connp->conn_c2s_hash->ilb_conn_hash_lock));
713 connp->conn_c2s_tcp_fss = seq + seg_len;
714 connp->conn_c2s_tcp_fin_sent = B_TRUE;
716 connp->conn_c2s_tcp_ack = ack;
719 if (connp->conn_c2s_tcp_fin_sent &&
720 SEQ_GT(seq, connp->conn_c2s_tcp_fss + 1)) {
721 connp->conn_c2s_tcp_fin_sent = B_FALSE;
722 connp->conn_c2s_tcp_fin_acked = B_FALSE;
725 ASSERT(MUTEX_HELD(&connp->conn_s2c_hash->ilb_conn_hash_lock));
727 connp->conn_s2c_tcp_fss = seq + seg_len;
728 connp->conn_s2c_tcp_fin_sent = B_TRUE;
730 connp->conn_s2c_tcp_ack = ack;
733 if (connp->conn_s2c_tcp_fin_sent &&
734 SEQ_GT(seq, connp->conn_s2c_tcp_fss + 1)) {
735 connp->conn_s2c_tcp_fin_sent = B_FALSE;
736 connp->conn_s2c_tcp_fin_acked = B_FALSE;
755 ilb_conn_t *connp;
765 for (connp = hash[i].ilb_connp; connp != NULL;
766 connp = connp->conn_c2s_next) {
767 if (connp->conn_l4 == l4 &&
768 connp->conn_c2s_dport == dport &&
769 connp->conn_c2s_sport == sport &&
770 IN6_ARE_ADDR_EQUAL(src, &connp->conn_c2s_saddr) &&
771 IN6_ARE_ADDR_EQUAL(dst, &connp->conn_c2s_daddr)) {
772 connp->conn_c2s_atime = ddi_get_lbolt64();
773 connp->conn_c2s_pkt_cnt++;
774 *rule_cache = connp->conn_rule_cache;
775 *ip_sum = connp->conn_c2s_ip_sum;
776 *tp_sum = connp->conn_c2s_tp_sum;
784 for (connp = hash[i].ilb_connp; connp != NULL;
785 connp = connp->conn_s2c_next) {
786 if (connp->conn_l4 == l4 &&
787 connp->conn_s2c_dport == dport &&
788 connp->conn_s2c_sport == sport &&
789 IN6_ARE_ADDR_EQUAL(src, &connp->conn_s2c_saddr) &&
790 IN6_ARE_ADDR_EQUAL(dst, &connp->conn_s2c_daddr)) {
791 connp->conn_s2c_atime = ddi_get_lbolt64();
792 connp->conn_s2c_pkt_cnt++;
793 *rule_cache = connp->conn_rule_cache;
794 *ip_sum = connp->conn_s2c_ip_sum;
795 *tp_sum = connp->conn_s2c_tp_sum;
802 ILB_S_KSTAT(connp->conn_server, pkt_processed);
803 ILB_S_KSTAT_UPDATE(connp->conn_server, bytes_processed,
808 tcp_alive = update_conn_tcp(connp, iph, tph, pkt_len,
811 connp->conn_gc = B_TRUE;
901 ilb_conn_t *connp;
965 for (connp = hash[i].ilb_connp; connp != NULL;
966 connp = connp->conn_c2s_next) {
967 if (connp->conn_l4 == l4 &&
968 connp->conn_c2s_dport == *sport &&
969 connp->conn_c2s_sport == *dport &&
970 IN6_ARE_ADDR_EQUAL(in_dst_p, &connp->conn_c2s_saddr) &&
971 IN6_ARE_ADDR_EQUAL(in_src_p, &connp->conn_c2s_daddr)) {
972 connp->conn_c2s_atime = ddi_get_lbolt64();
973 connp->conn_c2s_pkt_cnt++;
974 rule_cache = connp->conn_rule_cache;
975 adj_ip_sum = connp->conn_c2s_ip_sum;
981 if (connp == NULL) {