Lines Matching refs:inp

233 in_pcbgroup_byinpcb(struct inpcb *inp)
236 return (in_pcbgroup_bytuple(inp->inp_pcbinfo, inp->inp_laddr,
237 inp->inp_lport, inp->inp_faddr, inp->inp_fport));
241 in_pcbwild_add(struct inpcb *inp)
247 INP_WLOCK_ASSERT(inp);
248 KASSERT(!(inp->inp_flags2 & INP_PCBGROUPWILD),
251 pcbinfo = inp->inp_pcbinfo;
254 head = &pcbinfo->ipi_wildbase[INP_PCBHASH(INADDR_ANY, inp->inp_lport,
256 LIST_INSERT_HEAD(head, inp, inp_pcbgroup_wild);
257 inp->inp_flags2 |= INP_PCBGROUPWILD;
263 in_pcbwild_remove(struct inpcb *inp)
268 INP_WLOCK_ASSERT(inp);
269 KASSERT((inp->inp_flags2 & INP_PCBGROUPWILD),
272 pcbinfo = inp->inp_pcbinfo;
275 LIST_REMOVE(inp, inp_pcbgroup_wild);
278 inp->inp_flags2 &= ~INP_PCBGROUPWILD;
282 in_pcbwild_needed(struct inpcb *inp)
286 if (inp->inp_vflag & INP_IPV6)
287 return (IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_faddr));
290 return (inp->inp_faddr.s_addr == htonl(INADDR_ANY));
294 in_pcbwild_update_internal(struct inpcb *inp)
298 wildcard_needed = in_pcbwild_needed(inp);
299 if (wildcard_needed && !(inp->inp_flags2 & INP_PCBGROUPWILD))
300 in_pcbwild_add(inp);
301 else if (!wildcard_needed && (inp->inp_flags2 & INP_PCBGROUPWILD))
302 in_pcbwild_remove(inp);
313 struct inpcbgroup *newpcbgroup, struct inpcb *inp)
319 INP_WLOCK_ASSERT(inp);
321 oldpcbgroup = inp->inp_pcbgroup;
324 LIST_REMOVE(inp, inp_pcbgrouphash);
325 inp->inp_pcbgroup = NULL;
330 if (inp->inp_vflag & INP_IPV6)
331 hashkey_faddr = inp->in6p_faddr.s6_addr32[3]; /* XXX */
334 hashkey_faddr = inp->inp_faddr.s_addr;
337 INP_PCBHASH(hashkey_faddr, inp->inp_lport, inp->inp_fport,
339 LIST_INSERT_HEAD(pcbhash, inp, inp_pcbgrouphash);
340 inp->inp_pcbgroup = newpcbgroup;
344 KASSERT(!(newpcbgroup != NULL && in_pcbwild_needed(inp)),
361 in_pcbgroup_update(struct inpcb *inp)
366 INP_WLOCK_ASSERT(inp);
368 pcbinfo = inp->inp_pcbinfo;
372 in_pcbwild_update_internal(inp);
373 if (!(inp->inp_flags2 & INP_PCBGROUPWILD) &&
374 !(inp->inp_flags & INP_DROPPED)) {
376 if (inp->inp_vflag & INP_IPV6)
377 newpcbgroup = in6_pcbgroup_byinpcb(inp);
380 newpcbgroup = in_pcbgroup_byinpcb(inp);
383 in_pcbgroup_update_internal(pcbinfo, newpcbgroup, inp);
387 in_pcbgroup_update_mbuf(struct inpcb *inp, struct mbuf *m)
392 INP_WLOCK_ASSERT(inp);
394 pcbinfo = inp->inp_pcbinfo;
403 in_pcbwild_update_internal(inp);
404 if (!(inp->inp_flags2 & INP_PCBGROUPWILD) &&
405 !(inp->inp_flags & INP_DROPPED)) {
408 if (inp->inp_vflag & INP_IPV6) {
410 newpcbgroup = in6_pcbgroup_byinpcb(inp);
414 newpcbgroup = in_pcbgroup_byinpcb(inp);
420 in_pcbgroup_update_internal(pcbinfo, newpcbgroup, inp);
427 in_pcbgroup_remove(struct inpcb *inp)
431 INP_WLOCK_ASSERT(inp);
433 if (!in_pcbgroup_enabled(inp->inp_pcbinfo))
436 if (inp->inp_flags2 & INP_PCBGROUPWILD)
437 in_pcbwild_remove(inp);
439 pcbgroup = inp->inp_pcbgroup;
442 LIST_REMOVE(inp, inp_pcbgrouphash);
443 inp->inp_pcbgroup = NULL;