Lines Matching refs:inp
141 * Bind address from sin6 to inp.
144 in6pcb_bind_addr(struct inpcb *inp, struct sockaddr_in6 *sin6, struct lwp *l)
166 if ((inp->inp_flags & IN6P_IPV6_V6ONLY) != 0) {
182 (inp->inp_flags & IN6P_BINDANY) == 0) {
193 if ((inp->inp_flags & IN6P_FAITH) == 0) {
196 (inp->inp_flags & IN6P_BINDANY) == 0) {
222 in6p_laddr(inp) = sin6->sin6_addr;
230 * Bind port from sin6 to inp.
233 in6pcb_bind_port(struct inpcb *inp, struct sockaddr_in6 *sin6, struct lwp *l)
235 struct inpcbtable *table = inp->inp_table;
236 struct socket *so = inp->inp_socket;
310 e = in6pcb_set_port(sin6, inp, l);
314 inp->inp_lport = sin6->sin6_port;
315 inpcb_set_state(inp, INP_BOUND);
318 LIST_REMOVE(inp, inp_lhash);
319 LIST_INSERT_HEAD(IN6PCBHASH_PORT(table, inp->inp_lport),
320 inp, inp_lhash);
328 struct inpcb *inp = v;
332 if (inp->inp_af != AF_INET6)
339 if (inp->inp_lport || !(IN6_IS_ADDR_UNSPECIFIED(&in6p_laddr(inp)) ||
340 (IN6_IS_ADDR_V4MAPPED(&in6p_laddr(inp)) &&
341 in6p_laddr(inp).s6_addr32[3] == 0)))
351 inp->inp_socket->so_proto->pr_domain->dom_sa_any);
356 error = in6pcb_bind_addr(inp, sin6, l);
361 error = in6pcb_bind_port(inp, sin6, l);
367 in6p_laddr(inp) = in6addr_any;
374 in6p_flowinfo(inp) = 0; /* XXX */
388 struct inpcb *inp = v;
404 if (inp->inp_af != AF_INET6)
415 inp->inp_socket->so_type == SOCK_STREAM)
425 if ((inp->inp_flags & IN6P_IPV6_V6ONLY) != 0)
427 if (IN6_IS_ADDR_UNSPECIFIED(&in6p_laddr(inp)))
428 in6p_laddr(inp).s6_addr16[5] = htons(0xffff);
429 if (!IN6_IS_ADDR_V4MAPPED(&in6p_laddr(inp)))
433 if (IN6_IS_ADDR_V4MAPPED(&in6p_laddr(inp)))
443 if (IN6_IS_ADDR_V4MAPPED(&in6p_laddr(inp)) &&
444 in6p_laddr(inp).s6_addr32[3] == 0) {
455 ia4 = in_selectsrc(&sin, &inp->inp_route,
456 inp->inp_socket->so_options, NULL, &error, &_psref);
479 error = in6_selectsrc(sin6, in6p_outputopts(inp),
480 in6p_moptions(inp), &inp->inp_route, &in6p_laddr(inp),
501 in6p_ip6(inp).ip6_hlim = (u_int8_t)in6pcb_selecthlim(inp, ifp);
504 in6p_ip6(inp).ip6_hlim = (u_int8_t)in6pcb_selecthlim_rt(inp);
507 if (in6pcb_lookup(inp->inp_table, &sin6->sin6_addr,
509 IN6_IS_ADDR_UNSPECIFIED(&in6p_laddr(inp)) ? in6a : &in6p_laddr(inp),
510 inp->inp_lport, 0, &vestige)
513 if (IN6_IS_ADDR_UNSPECIFIED(&in6p_laddr(inp)) ||
514 (IN6_IS_ADDR_V4MAPPED(&in6p_laddr(inp)) &&
515 in6p_laddr(inp).s6_addr32[3] == 0))
517 if (inp->inp_lport == 0) {
518 error = in6pcb_bind(inp, NULL, l);
522 in6p_laddr(inp) = *in6a;
524 in6p_faddr(inp) = sin6->sin6_addr;
525 inp->inp_fport = sin6->sin6_port;
528 if (inp->inp_bindportonsend) {
530 inp->inp_socket->so_proto->pr_domain->dom_sa_any);
531 lsin.sin6_addr = in6p_laddr(inp);
534 if ((error = in6pcb_bind_port(inp, &lsin, l)) != 0)
538 inpcb_set_state(inp, INP_CONNECTED);
539 in6p_flowinfo(inp) &= ~IPV6_FLOWLABEL_MASK;
541 in6p_flowinfo(inp) |=
544 if (ipsec_enabled && inp->inp_socket->so_type == SOCK_STREAM)
545 ipsec_pcbconn(inp->inp_sp);
551 in6pcb_disconnect(struct inpcb *inp)
553 memset((void *)&in6p_faddr(inp), 0, sizeof(in6p_faddr(inp)));
554 inp->inp_fport = 0;
555 inpcb_set_state(inp, INP_BOUND);
556 in6p_flowinfo(inp) &= ~IPV6_FLOWLABEL_MASK;
559 ipsec_pcbdisconn(inp->inp_sp);
561 if (inp->inp_socket->so_state & SS_NOFDREF)
562 inpcb_destroy(inp);
566 in6pcb_fetch_sockaddr(struct inpcb *inp, struct sockaddr_in6 *sin6)
569 if (inp->inp_af != AF_INET6)
572 sockaddr_in6_init(sin6, &in6p_laddr(inp), inp->inp_lport, 0, 0);
577 in6pcb_fetch_peeraddr(struct inpcb *inp, struct sockaddr_in6 *sin6)
580 if (inp->inp_af != AF_INET6)
583 sockaddr_in6_init(sin6, &in6p_faddr(inp), inp->inp_fport, 0, 0);
606 struct inpcb *inp;
645 TAILQ_FOREACH(inp, &table->inpt_queue, inp_queue) {
648 if (inp->inp_af != AF_INET6)
683 IN6_IS_ADDR_UNSPECIFIED(&in6p_laddr(inp)) &&
684 (rt = rtcache_validate(&inp->inp_route)) != NULL &&
689 rtcache_getdst(&inp->inp_route);
694 rtcache_unref(rt, &inp->inp_route);
698 rtcache_unref(rt, &inp->inp_route);
709 if (cmd == PRC_MSGSIZE && (inp->inp_flags & IN6P_MTU) != 0 &&
710 (IN6_IS_ADDR_UNSPECIFIED(&in6p_faddr(inp)) ||
711 IN6_ARE_ADDR_EQUAL(&in6p_faddr(inp), &sa6_dst->sin6_addr))) {
712 ip6_notify_pmtu(inp, (const struct sockaddr_in6 *)dst,
725 inp->inp_socket != NULL &&
726 flowinfo == (in6p_flowinfo(inp) & IPV6_FLOWLABEL_MASK) &&
727 IN6_ARE_ADDR_EQUAL(&in6p_laddr(inp), &sa6_src.sin6_addr))
729 else if (!IN6_ARE_ADDR_EQUAL(&in6p_faddr(inp),
731 inp->inp_socket == NULL ||
732 (lport && inp->inp_lport != lport) ||
734 !IN6_ARE_ADDR_EQUAL(&in6p_laddr(inp),
736 (fport && inp->inp_fport != fport))
741 (*notify)(inp, errno);
750 struct inpcb *inp;
756 TAILQ_FOREACH(inp, &table->inpt_queue, inp_queue) {
758 if (inp->inp_af != AF_INET6)
762 if (!inp_locked(inp)) {
763 inp_lock(inp);
766 im6o = in6p_moptions(inp);
790 in_purgeifmcast(inp->inp_moptions, ifp);
793 inp_unlock(inp);
801 struct inpcb *inp;
803 TAILQ_FOREACH(inp, &table->inpt_queue, inp_queue) {
804 if (inp->inp_af != AF_INET6)
806 if ((rt = rtcache_validate(&inp->inp_route)) != NULL &&
808 rtcache_unref(rt, &inp->inp_route);
809 in6pcb_rtchange(inp, 0);
811 rtcache_unref(rt, &inp->inp_route);
820 in6pcb_rtchange(struct inpcb *inp, int errno)
822 if (inp->inp_af != AF_INET6)
825 rtcache_free(&inp->inp_route);
837 struct inpcb *inp, *match = NULL;
845 LIST_FOREACH(inp, head, inp_lhash) {
846 if (inp->inp_af != AF_INET6)
849 if (inp->inp_lport != lport)
852 if (IN6_IS_ADDR_V4MAPPED(&in6p_faddr(inp))) {
853 if ((inp->inp_flags & IN6P_IPV6_V6ONLY) != 0)
856 if (!IN6_IS_ADDR_UNSPECIFIED(&in6p_faddr(inp)))
858 if (IN6_IS_ADDR_V4MAPPED(&in6p_laddr(inp))) {
859 if ((inp->inp_flags & IN6P_IPV6_V6ONLY) != 0)
866 if (IN6_IS_ADDR_V4MAPPED(&in6p_faddr(inp)) &&
867 in6p_faddr(inp).s6_addr32[3])
869 if (!in6p_laddr(inp).s6_addr32[3]) {
876 if (in6p_laddr(inp).s6_addr32[3] !=
881 } else if (IN6_IS_ADDR_UNSPECIFIED(&in6p_laddr(inp))) {
883 if ((inp->inp_flags & IN6P_IPV6_V6ONLY) != 0)
890 if ((inp->inp_flags & IN6P_IPV6_V6ONLY) != 0)
896 if (!IN6_ARE_ADDR_EQUAL(&in6p_laddr(inp),
904 match = inp;
969 in6pcb_rtentry(struct inpcb *inp)
981 ro = &inp->inp_route;
983 if (inp->inp_af != AF_INET6)
991 KASSERT(IN6_IS_ADDR_V4MAPPED(&in6p_faddr(inp)));
992 if (cdst.sa4->sin_addr.s_addr != in6p_faddr(inp).s6_addr32[3])
998 &in6p_faddr(inp)))
1004 if (rt == NULL && IN6_IS_ADDR_V4MAPPED(&in6p_faddr(inp))) {
1011 addr.s_addr = in6p_faddr(inp).s6_addr32[3];
1020 if (rt == NULL && !IN6_IS_ADDR_UNSPECIFIED(&in6p_faddr(inp))) {
1026 sockaddr_in6_init(&u.dst6, &in6p_faddr(inp), 0, 0, 0);
1036 in6pcb_rtentry_unref(struct rtentry *rt, struct inpcb *inp)
1039 rtcache_unref(rt, &inp->inp_route);
1049 struct inpcb *inp;
1056 LIST_FOREACH(inp, head, inp_hash) {
1057 if (inp->inp_af != AF_INET6)
1061 if (inp->inp_fport != fport)
1063 if (inp->inp_lport != lport)
1065 if (IN6_IS_ADDR_UNSPECIFIED(&in6p_faddr(inp)))
1067 if (!IN6_ARE_ADDR_EQUAL(&in6p_faddr(inp), faddr6))
1069 if (IN6_IS_ADDR_UNSPECIFIED(&in6p_laddr(inp)))
1071 if (!IN6_ARE_ADDR_EQUAL(&in6p_laddr(inp), laddr6))
1075 (inp->inp_flags & IN6P_IPV6_V6ONLY))
1077 return inp;
1093 struct inpcb *inp;
1100 LIST_FOREACH(inp, head, inp_hash) {
1101 if (inp->inp_af != AF_INET6)
1104 if (faith && (inp->inp_flags & IN6P_FAITH) == 0)
1106 if (inp->inp_fport != 0)
1108 if (inp->inp_lport != lport)
1111 (inp->inp_flags & IN6P_IPV6_V6ONLY) != 0)
1113 if (IN6_ARE_ADDR_EQUAL(&in6p_laddr(inp), laddr6))
1121 LIST_FOREACH(inp, head, inp_hash) {
1122 if (inp->inp_af != AF_INET6)
1125 if (faith && (inp->inp_flags & IN6P_FAITH) == 0)
1127 if (inp->inp_fport != 0)
1129 if (inp->inp_lport != lport)
1131 if ((inp->inp_flags & IN6P_IPV6_V6ONLY) != 0)
1133 if (IN6_ARE_ADDR_EQUAL(&in6p_laddr(inp), &zero_mapped))
1139 LIST_FOREACH(inp, head, inp_hash) {
1140 if (inp->inp_af != AF_INET6)
1143 if (faith && (inp->inp_flags & IN6P_FAITH) == 0)
1145 if (inp->inp_fport != 0)
1147 if (inp->inp_lport != lport)
1150 (inp->inp_flags & IN6P_IPV6_V6ONLY) != 0)
1152 if (IN6_ARE_ADDR_EQUAL(&in6p_laddr(inp), &zeroin6_addr))
1158 if (inp != LIST_FIRST(head)) {
1159 LIST_REMOVE(inp, inp_hash);
1160 LIST_INSERT_HEAD(head, inp, inp_hash);
1162 return inp;
1166 in6pcb_set_state(struct inpcb *inp, int state)
1169 if (inp->inp_af != AF_INET6)
1172 if (inp->inp_state > INP_ATTACHED)
1173 LIST_REMOVE(inp, inp_hash);
1177 LIST_INSERT_HEAD(IN6PCBHASH_BIND(inp->inp_table,
1178 &in6p_laddr(inp), inp->inp_lport), inp,
1182 LIST_INSERT_HEAD(IN6PCBHASH_CONNECT(inp->inp_table,
1183 &in6p_faddr(inp), inp->inp_fport,
1184 &in6p_laddr(inp), inp->inp_lport), inp,
1189 inp->inp_state = state;