Home | History | Annotate | Download | only in netinet

Lines Matching refs:ep

126  * In encap[46]_lookup(), ep->func can sleep(e.g. rtalloc1) while walking
199 struct encaptab *ep, *match;
227 while ((ep = thmap_get(emap, &key, sizeof(key))) != NULL) {
230 KASSERT(ep->af == AF_INET);
232 if (ep->proto >= 0 && ep->proto != proto) {
237 psref_acquire(&elem_psref, &ep->psref,
239 if (ep->func) {
241 prio = (*ep->func)(m, off, proto, ep->arg);
248 psref_release(&elem_psref, &ep->psref,
254 /* release last matched ep */
262 match = ep;
265 psref_release(&elem_psref, &ep->psref,
270 PSLIST_READER_FOREACH(ep, &encap_table, struct encaptab, chain) {
273 if (ep->af != AF_INET)
275 if (ep->proto >= 0 && ep->proto != proto)
278 psref_acquire(&elem_psref, &ep->psref,
281 /* ep->func is sleepable. e.g. rtalloc1 */
282 prio = (*ep->func)(m, off, proto, ep->arg);
297 psref_release(&elem_psref, &ep->psref,
302 /* release last matched ep */
310 match = ep;
316 psref_release(&elem_psref, &ep->psref,
363 struct encaptab *ep, *match;
389 while ((ep = thmap_get(emap, &key, sizeof(key))) != NULL) {
392 KASSERT(ep->af == AF_INET6);
394 if (ep->proto >= 0 && ep->proto != proto) {
399 psref_acquire(&elem_psref, &ep->psref,
401 if (ep->func) {
403 prio = (*ep->func)(m, off, proto, ep->arg);
410 psref_release(&elem_psref, &ep->psref,
416 /* release last matched ep */
424 match = ep;
426 psref_release(&elem_psref, &ep->psref,
431 PSLIST_READER_FOREACH(ep, &encap_table, struct encaptab, chain) {
434 if (ep->af != AF_INET6)
436 if (ep->proto >= 0 && ep->proto != proto)
439 psref_acquire(&elem_psref, &ep->psref,
443 /* ep->func is sleepable. e.g. rtalloc1 */
444 prio = (*ep->func)(m, off, proto, ep->arg);
449 psref_release(&elem_psref, &ep->psref,
454 /* release last matched ep */
462 match = ep;
468 psref_release(&elem_psref, &ep->psref,
514 encap_add(struct encaptab *ep)
519 PSLIST_WRITER_INSERT_HEAD(&encap_table, ep, chain);
525 encap_remove(struct encaptab *ep)
531 PSLIST_WRITER_REMOVE(ep, chain);
553 struct encaptab *ep;
571 ep = kmem_alloc(sizeof(*ep), KM_SLEEP);
572 memset(ep, 0, sizeof(*ep));
574 ep->af = af;
575 ep->proto = proto;
576 ep->func = func;
577 ep->esw = esw;
578 ep->arg = arg;
579 psref_target_init(&ep->psref, encaptab.elem_class);
581 error = encap_add(ep);
589 return ep;
592 kmem_free(ep, sizeof(*ep));
642 struct encaptab *ep;
670 ep = kmem_zalloc(sizeof(*ep), KM_SLEEP);
671 ep->addrpack = kmem_zalloc(l, KM_SLEEP);
672 ep->addrpack->sa_len = l & 0xff;
673 ep->af = af;
674 ep->proto = proto;
675 ep->flag = IP_ENCAP_ADDR_ENABLE;
678 pack4 = (struct ip_pack4 *)ep->addrpack;
679 ep->src = (struct sockaddr *)&pack4->mine;
680 ep->dst = (struct sockaddr *)&pack4->yours;
684 pack6 = (struct ip_pack6 *)ep->addrpack;
685 ep->src = (struct sockaddr *)&pack6->mine;
686 ep->dst = (struct sockaddr *)&pack6->yours;
690 memcpy(ep->src, src, src->sa_len);
691 memcpy(ep->dst, dst, dst->sa_len);
692 ep->esw = esw;
693 ep->arg = arg;
694 ep->func = func;
695 psref_target_init(&ep->psref, encaptab.elem_class);
697 encap_key_init(&ep->key, src, dst);
698 while ((retep = thmap_put(emap, &ep->key, sizeof(ep->key), ep)) != ep)
699 encap_key_inc(&ep->key);
700 return ep;
717 struct encaptab *ep;
775 PSLIST_READER_FOREACH(ep, &encap_table, struct encaptab, chain) {
778 if (ep->af != AF_INET6)
780 if (ep->proto >= 0 && ep->proto != nxt)
785 /* XXX need to pass ep->arg or ep itself to listeners */
786 psref_acquire(&elem_psref, &ep->psref,
788 esw = ep->esw;
792 (*esw->encapsw6.pr_ctlinput)(cmd, sa, d, ep->arg);
795 psref_release(&elem_psref, &ep->psref,
806 encap_detach_addr(const struct encaptab *ep)
815 KASSERT(ep->flag & IP_ENCAP_ADDR_ENABLE);
817 switch (ep->af) {
830 retep = thmap_del(emap, &ep->key, sizeof(ep->key));
831 if (retep != ep) {
839 encap_key_copy(&key, &ep->key);
864 const struct encaptab *ep = cookie;
870 if (ep->flag & IP_ENCAP_ADDR_ENABLE)
871 return encap_detach_addr(ep);
874 if (p == ep) {