Lines Matching defs:soltgt

1140 	struct nd6_prproxy_soltgt *soltgt, *tmp;
1146 RB_FOREACH_SAFE(soltgt, prproxy_sols_tree,
1149 if (expire == 0 || soltgt->soltgt_expire <= expire ||
1150 soltgt->soltgt_cnt == 0) {
1153 &pr->ndpr_prproxy_sols, soltgt);
1154 nd6_soltgt_free(soltgt);
1165 RB_FOREACH_SAFE(soltgt, prproxy_sols_tree,
1169 RB_REMOVE(prproxy_sols_tree, &pr->ndpr_prproxy_sols, soltgt);
1170 nd6_soltgt_free(soltgt);
1203 struct nd6_prproxy_soltgt find, *soltgt;
1223 soltgt = RB_FIND(prproxy_sols_tree, &pr->ndpr_prproxy_sols, &find);
1224 if (soltgt == NULL) {
1231 soltgt = nd6_soltgt_alloc(M_WAITOK);
1232 if (soltgt == NULL) {
1237 soltgt->soltgt_key.taddr = *taddr;
1238 VERIFY(soltgt->soltgt_cnt == 0);
1239 VERIFY(TAILQ_EMPTY(&soltgt->soltgt_q));
1243 RB_INSERT(prproxy_sols_tree, &pr->ndpr_prproxy_sols, soltgt);
1246 if (max_ssrc != 0 && soltgt->soltgt_cnt >= max_ssrc) {
1247 VERIFY(!TAILQ_EMPTY(&soltgt->soltgt_q));
1248 nd6_soltgt_prune(soltgt, max_ssrc);
1249 VERIFY(soltgt->soltgt_cnt < max_ssrc);
1252 soltgt->soltgt_cnt++;
1253 VERIFY(soltgt->soltgt_cnt != 0);
1254 TAILQ_INSERT_TAIL(&soltgt->soltgt_q, ssrc, solsrc_tqe);
1255 if (soltgt->soltgt_cnt == 1)
1256 soltgt->soltgt_expire = net_uptime() + ND6_TGT_SOLS_EXPIRE;
1268 struct nd6_prproxy_soltgt find, *soltgt;
1281 soltgt = RB_FIND(prproxy_sols_tree, &pr->ndpr_prproxy_sols, &find);
1282 if (soltgt == NULL || soltgt->soltgt_cnt == 0) {
1283 VERIFY(soltgt == NULL || TAILQ_EMPTY(&soltgt->soltgt_q));
1287 VERIFY(soltgt->soltgt_cnt != 0);
1288 --soltgt->soltgt_cnt;
1289 ssrc = TAILQ_FIRST(&soltgt->soltgt_q);
1291 TAILQ_REMOVE(&soltgt->soltgt_q, ssrc, solsrc_tqe);
1302 struct nd6_prproxy_soltgt *soltgt;
1304 soltgt = (how == M_WAITOK) ? zalloc(soltgt_zone) :
1306 if (soltgt != NULL) {
1307 bzero(soltgt, soltgt_size);
1308 TAILQ_INIT(&soltgt->soltgt_q);
1310 return (soltgt);
1314 nd6_soltgt_free(struct nd6_prproxy_soltgt *soltgt)
1318 TAILQ_FOREACH_SAFE(ssrc, &soltgt->soltgt_q, solsrc_tqe, tssrc) {
1319 VERIFY(soltgt->soltgt_cnt > 0);
1320 soltgt->soltgt_cnt--;
1321 TAILQ_REMOVE(&soltgt->soltgt_q, ssrc, solsrc_tqe);
1325 VERIFY(soltgt->soltgt_cnt == 0);
1326 VERIFY(TAILQ_EMPTY(&soltgt->soltgt_q));
1328 zfree(soltgt_zone, soltgt);
1332 nd6_soltgt_prune(struct nd6_prproxy_soltgt *soltgt, u_int32_t max_ssrc)
1334 while (soltgt->soltgt_cnt >= max_ssrc) {
1337 VERIFY(soltgt->soltgt_cnt != 0);
1338 --soltgt->soltgt_cnt;
1339 ssrc = TAILQ_FIRST(&soltgt->soltgt_q);
1341 TAILQ_REMOVE(&soltgt->soltgt_q, ssrc, solsrc_tqe);