• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.5.8/xnu-1228.15.4/bsd/netinet/

Lines Matching defs:inp

192 	struct inpcb *inp;
207 inp = (struct inpcb *) zalloc(pcbinfo->ipi_zone);
208 if (inp == NULL)
210 bzero((caddr_t)inp, sizeof(*inp));
216 inp = (struct inpcb *) so->so_saved_pcb;
217 temp = inp->inp_saved_ppcb;
218 bzero((caddr_t) inp, sizeof(*inp));
219 inp->inp_saved_ppcb = temp;
222 inp->inp_gencnt = ++pcbinfo->ipi_gencnt;
223 inp->inp_pcbinfo = pcbinfo;
224 inp->inp_socket = so;
226 mac_error = mac_inpcb_label_init(inp, M_WAITOK);
229 zfree(pcbinfo->ipi_zone, inp);
232 mac_inpcb_label_associate(so, inp);
235 ip_edgehole_attach(inp);
237 so->so_pcb = (caddr_t)inp;
240 inp->inpcb_mtx = lck_mtx_alloc_init(pcbinfo->mtx_grp, pcbinfo->mtx_attr);
241 if (inp->inpcb_mtx == NULL) {
250 error = ipsec_init_policy(so, &inp->inp_sp);
252 zfree(pcbinfo->ipi_zone, inp);
260 inp->inp_flags |= IN6P_IPV6_V6ONLY;
265 inp->inp_flags |= IN6P_AUTOFLOWLABEL;
268 inp->inp_gencnt = ++pcbinfo->ipi_gencnt;
269 LIST_INSERT_HEAD(pcbinfo->listhead, inp, inp_list);
292 struct inpcb *inp;
295 inp = in_pcblookup_local(pcbinfo, laddr, lport_arg, wild_okay);
298 if (inp && inp->inp_wantcnt == WNT_STOPUSING) {
299 struct socket *so = inp->inp_socket;
301 lck_mtx_lock(inp->inpcb_mtx);
304 in_pcbdispose(inp);
305 inp = NULL;
308 lck_mtx_unlock(inp->inpcb_mtx);
312 return inp;
349 in_pcbbind(struct inpcb *inp, struct sockaddr *nam, struct proc *p)
351 struct socket *so = inp->inp_socket;
354 struct inpcbinfo *pcbinfo = inp->inp_pcbinfo;
361 if (inp->inp_lport || inp->inp_laddr.s_addr != INADDR_ANY)
420 t = in_pcblookup_local_and_cleanup(inp->inp_pcbinfo,
487 inp->inp_laddr = sin->sin_addr;
493 inp->inp_flags |= INP_ANONPORT;
495 if (inp->inp_flags & INP_HIGHPORT) {
499 } else if (inp->inp_flags & INP_LOWPORT) {
530 inp->inp_laddr.s_addr = INADDR_ANY;
538 inp->inp_laddr, lport, wild));
549 inp->inp_laddr.s_addr = INADDR_ANY;
557 inp->inp_laddr, lport, wild));
561 inp->inp_lport = lport;
562 if (in_pcbinshash(inp, 1) != 0) {
563 inp->inp_laddr.s_addr = INADDR_ANY;
564 inp->inp_lport = 0;
590 in_pcbladdr(struct inpcb *inp, struct sockaddr *nam,
622 if (inp->inp_laddr.s_addr == INADDR_ANY) {
627 ifscope = (inp->inp_flags & INP_BOUND_IF) ?
628 inp->inp_boundif : IFSCOPE_NONE;
635 ro = &inp->inp_route;
640 inp->inp_socket->so_options & SO_DONTROUTE ||
645 if ((inp->inp_socket->so_options & SO_DONTROUTE) == 0 && /*XXX*/
693 inp->inp_moptions != NULL) {
697 imo = inp->inp_moptions;
732 in_pcbconnect(struct inpcb *inp, struct sockaddr *nam, struct proc *p)
742 if ((error = in_pcbladdr(inp, nam, &ifaddr)) != 0)
745 socket_unlock(inp->inp_socket, 0);
746 pcb = in_pcblookup_hash(inp->inp_pcbinfo, sin->sin_addr, sin->sin_port,
747 inp->inp_laddr.s_addr ? inp->inp_laddr : ifaddr->sin_addr,
748 inp->inp_lport, 0, NULL);
749 socket_lock(inp->inp_socket, 0);
754 if (inp->inp_laddr.s_addr == INADDR_ANY) {
755 if (inp->inp_lport == 0) {
756 error = in_pcbbind(inp, (struct sockaddr *)0, p);
760 if (!lck_rw_try_lock_exclusive(inp->inp_pcbinfo->mtx)) {
762 socket_unlock(inp->inp_socket, 0);
763 lck_rw_lock_exclusive(inp->inp_pcbinfo->mtx);
764 socket_lock(inp->inp_socket, 0);
766 inp->inp_laddr = ifaddr->sin_addr;
767 inp->inp_flags |= INP_INADDR_ANY;
770 if (!lck_rw_try_lock_exclusive(inp->inp_pcbinfo->mtx)) {
772 socket_unlock(inp->inp_socket, 0);
773 lck_rw_lock_exclusive(inp->inp_pcbinfo->mtx);
774 socket_lock(inp->inp_socket, 0);
777 inp->inp_faddr = sin->sin_addr;
778 inp->inp_fport = sin->sin_port;
779 in_pcbrehash(inp);
780 lck_rw_done(inp->inp_pcbinfo->mtx);
785 in_pcbdisconnect(struct inpcb *inp)
788 inp->inp_faddr.s_addr = INADDR_ANY;
789 inp->inp_fport = 0;
791 if (!lck_rw_try_lock_exclusive(inp->inp_pcbinfo->mtx)) {
793 socket_unlock(inp->inp_socket, 0);
794 lck_rw_lock_exclusive(inp->inp_pcbinfo->mtx);
795 socket_lock(inp->inp_socket, 0);
798 in_pcbrehash(inp);
799 lck_rw_done(inp->inp_pcbinfo->mtx);
801 if (inp->inp_socket->so_state & SS_NOFDREF)
802 in_pcbdetach(inp);
806 in_pcbdetach(struct inpcb *inp)
808 struct socket *so = inp->inp_socket;
811 panic("in_pcbdetach: inp=%p so=%p proto=%d so_pcb is null!\n",
812 inp, so, so->so_proto->pr_protocol);
817 ipsec4_delete_pcbpolicy(inp);
822 if (in_pcb_checkstate(inp, WNT_STOPUSING, 1) != WNT_STOPUSING)
834 inp->inp_vflag = 0;
835 if (inp->inp_options)
836 (void)m_free(inp->inp_options);
838 if ((rt = inp->inp_route.ro_rt) != NULL) {
839 inp->inp_route.ro_rt = NULL;
843 ip_freemoptions(inp->inp_moptions);
844 inp->inp_moptions = NULL;
846 inp->inp_state = INPCB_STATE_DEAD;
853 in_pcbdispose(struct inpcb *inp)
855 struct socket *so = inp->inp_socket;
856 struct inpcbinfo *ipi = inp->inp_pcbinfo;
859 if (inp->inp_state != INPCB_STATE_DEAD) {
869 inp->inp_gencnt = ++ipi->ipi_gencnt;
871 in_pcbremlists(inp);
886 lck_mtx_unlock(inp->inpcb_mtx);
887 lck_mtx_free(inp->inpcb_mtx, ipi->mtx_grp);
890 so->so_saved_pcb = (caddr_t) inp;
892 inp->inp_socket = 0;
894 mac_inpcb_label_destroy(inp);
897 zfree(ipi->ipi_zone, inp);
903 printf("in_pcbdispose: no socket for inp=%p\n", inp);
924 struct inpcb *inp;
937 inp = sotoinpcb(so);
938 if (!inp) {
942 sin->sin_port = inp->inp_lport;
943 sin->sin_addr = inp->inp_laddr;
952 struct inpcb *inp;
965 inp = sotoinpcb(so);
966 if (!inp) {
970 sin->sin_port = inp->inp_fport;
971 sin->sin_addr = inp->inp_faddr;
981 struct inpcb *inp;
985 LIST_FOREACH(inp, pcbinfo->listhead, inp_list) {
987 if ((inp->inp_vflag & INP_IPV4) == 0)
990 if (inp->inp_faddr.s_addr != faddr.s_addr ||
991 inp->inp_socket == NULL)
993 if (in_pcb_checkstate(inp, WNT_ACQUIRE, 0) == WNT_STOPUSING)
995 socket_lock(inp->inp_socket, 1);
996 (*notify)(inp, errno);
997 (void)in_pcb_checkstate(inp, WNT_RELEASE, 1);
998 socket_unlock(inp->inp_socket, 1);
1008 struct inpcb *inp;
1012 for (inp = head; inp != NULL; inp = LIST_NEXT(inp, inp_list)) {
1013 imo = inp->inp_moptions;
1014 if ((inp->inp_vflag & INP_IPV4) &&
1048 in_losing(struct inpcb *inp)
1053 if ((rt = inp->inp_route.ro_rt)) {
1056 if ((rt = inp->inp_route.ro_rt) == NULL) {
1062 (struct sockaddr *)&inp->inp_route.ro_dst;
1071 if ((ifa_foraddr(inp->inp_laddr.s_addr)) != 0) {
1072 inp->inp_route.ro_rt = 0;
1088 in_rtchange(struct inpcb *inp, __unused int errno)
1092 if ((rt = inp->inp_route.ro_rt) != NULL) {
1093 if ((ifa_foraddr(inp->inp_laddr.s_addr)) == 0)
1097 if ((rt = inp->inp_route.ro_rt) == NULL) {
1102 inp->inp_route.ro_rt = NULL;
1118 struct inpcb *inp;
1131 LIST_FOREACH(inp, head, inp_hash) {
1133 if ((inp->inp_vflag & INP_IPV4) == 0)
1136 if (inp->inp_faddr.s_addr == INADDR_ANY &&
1137 inp->inp_laddr.s_addr == laddr.s_addr &&
1138 inp->inp_lport == lport) {
1142 return (inp);
1171 LIST_FOREACH(inp, &phd->phd_pcblist, inp_portlist) {
1174 if ((inp->inp_vflag & INP_IPV4) == 0)
1177 if (inp->inp_faddr.s_addr != INADDR_ANY)
1179 if (inp->inp_laddr.s_addr != INADDR_ANY) {
1182 else if (inp->inp_laddr.s_addr != laddr.s_addr)
1189 match = inp;
1216 struct inpcb *inp;
1229 LIST_FOREACH(inp, head, inp_hash) {
1231 if ((inp->inp_vflag & INP_IPV4) == 0)
1234 if (inp->inp_faddr.s_addr == faddr.s_addr &&
1235 inp->inp_laddr.s_addr == laddr.s_addr &&
1236 inp->inp_fport == fport &&
1237 inp->inp_lport == lport) {
1241 if (in_pcb_checkstate(inp, WNT_ACQUIRE, 0) != WNT_STOPUSING) {
1243 return (inp);
1258 LIST_FOREACH(inp, head, inp_hash) {
1260 if ((inp->inp_vflag & INP_IPV4) == 0)
1263 if (inp->inp_faddr.s_addr == INADDR_ANY &&
1264 inp->inp_lport == lport) {
1267 (inp->inp_flags & INP_FAITH) == 0)
1270 if (inp->inp_laddr.s_addr == laddr.s_addr) {
1271 if (in_pcb_checkstate(inp, WNT_ACQUIRE, 0) != WNT_STOPUSING) {
1273 return (inp);
1280 else if (inp->inp_laddr.s_addr == INADDR_ANY) {
1282 if (INP_CHECK_SOCKAF(inp->inp_socket,
1284 local_wild_mapped = inp;
1287 local_wild = inp;
1328 in_pcbinshash(struct inpcb *inp, int locked)
1332 struct inpcbinfo *pcbinfo = inp->inp_pcbinfo;
1337 if (inp->inp_vflag & INP_IPV6)
1338 hashkey_faddr = inp->in6p_faddr.s6_addr32[3] /* XXX */;
1341 hashkey_faddr = inp->inp_faddr.s_addr;
1343 inp->hash_element = INP_PCBHASH(hashkey_faddr, inp->inp_lport, inp->inp_fport, pcbinfo->hashmask);
1348 socket_unlock(inp->inp_socket, 0);
1350 socket_lock(inp->inp_socket, 0);
1354 pcbhash = &pcbinfo->hashbase[inp->hash_element];
1356 pcbporthash = &pcbinfo->porthashbase[INP_PCBPORTHASH(inp->inp_lport,
1363 if (phd->phd_port == inp->inp_lport)
1376 phd->phd_port = inp->inp_lport;
1380 inp->inp_phd = phd;
1381 LIST_INSERT_HEAD(&phd->phd_pcblist, inp, inp_portlist);
1382 LIST_INSERT_HEAD(pcbhash, inp, inp_hash);
1395 in_pcbrehash(struct inpcb *inp)
1401 if (inp->inp_vflag & INP_IPV6)
1402 hashkey_faddr = inp->in6p_faddr.s6_addr32[3] /* XXX */;
1405 hashkey_faddr = inp->inp_faddr.s_addr;
1406 inp->hash_element = INP_PCBHASH(hashkey_faddr, inp->inp_lport,
1407 inp->inp_fport, inp->inp_pcbinfo->hashmask);
1408 head = &inp->inp_pcbinfo->hashbase[inp->hash_element];
1410 LIST_REMOVE(inp, inp_hash);
1411 LIST_INSERT_HEAD(head, inp, inp_hash);
1419 in_pcbremlists(struct inpcb *inp)
1421 inp->inp_gencnt = ++inp->inp_pcbinfo->ipi_gencnt;
1423 if (inp->inp_lport) {
1424 struct inpcbport *phd = inp->inp_phd;
1426 LIST_REMOVE(inp, inp_hash);
1427 LIST_REMOVE(inp, inp_portlist);
1433 LIST_REMOVE(inp, inp_list);
1434 inp->inp_pcbinfo->ipi_count--;
1437 static void in_pcb_detach_port( struct inpcb *inp);
1448 struct inpcb *inp, *pcb;
1469 inp = in_pcblookup_hash(pcbinfo, faddr, fport, laddr, *lport, 0, NULL);
1470 if (inp) {
1472 in_pcb_checkstate(inp, WNT_RELEASE, 0);
1571 inp = in_pcblookup_hash(pcbinfo, faddr, fport,
1573 if (inp) {
1575 in_pcb_checkstate(inp, WNT_RELEASE, 0);
1616 struct inpcb *inp)
1618 struct socket *so = inp->inp_socket;
1619 struct inpcbinfo *pcbinfo = inp->inp_pcbinfo;
1622 panic("in_pcb_detach_port: not a dummy_sock: so=%p, inp=%p\n", so, inp);
1623 inp->inp_gencnt = ++pcbinfo->ipi_gencnt;
1625 in_pcbremlists(inp);
1627 inp->inp_socket = 0;
1628 zfree(pcbinfo->ipi_zone, inp);
1637 struct inpcb *inp;
1645 for (inp = head->lh_first; inp != NULL; inp = inp->inp_hash.le_next) {
1646 if (inp->inp_faddr.s_addr == faddr.s_addr &&
1647 inp->inp_laddr.s_addr == laddr.s_addr &&
1648 inp->inp_fport == fport &&
1649 inp->inp_lport == lport &&
1650 inp->nat_owner == owner_id) {
1654 in_pcb_detach_port(inp);
1671 struct inpcb *inp;
1697 for (inp = phd->phd_pcblist.lh_first; inp != NULL;
1698 inp = inp->inp_portlist.le_next) {
1700 if (inp->inp_laddr.s_addr == laddr.s_addr) {
1701 if (inp->nat_owner == 0)
1704 owner_id |= inp->nat_owner;
1712 inp = in_pcblookup_hash(pcbinfo, faddr, fport,
1714 if (inp) {
1717 if (in_pcb_checkstate(inp, WNT_RELEASE, 1) == WNT_STOPUSING)
1720 if (inp->nat_owner) {
1721 owner_id = inp->nat_owner;
1722 *cookie = inp->nat_cookie;
1756 struct inpcb *inp;
1762 for (inp = pcbinfo->listhead->lh_first; inp != NULL; inp = inp->inp_list.le_next) {
1763 if (inp->nat_owner & owner_id) {
1764 if (inp->nat_owner == owner_id)
1768 in_pcb_detach_port(inp);
1770 inp->nat_owner &= ~owner_id;
1908 struct inpcb *inp,
1912 inp_compat->inp_fport = inp->inp_fport;
1913 inp_compat->inp_lport = inp->inp_lport;
1914 inp_compat->inp_socket = inp->inp_socket;
1915 inp_compat->nat_owner = inp->nat_owner;
1916 inp_compat->nat_cookie = inp->nat_cookie;
1917 inp_compat->inp_gencnt = inp->inp_gencnt;
1918 inp_compat->inp_flags = inp->inp_flags;
1919 inp_compat->inp_flow = inp->inp_flow;
1920 inp_compat->inp_vflag = inp->inp_vflag;
1921 inp_compat->inp_ip_ttl = inp->inp_ip_ttl;
1922 inp_compat->inp_ip_p = inp->inp_ip_p;
1923 inp_compat->inp_dependfaddr.inp6_foreign = inp->inp_dependfaddr.inp6_foreign;
1924 inp_compat->inp_dependladdr.inp6_local = inp->inp_dependladdr.inp6_local;
1925 inp_compat->inp_depend4.inp4_ip_tos = inp->inp_depend4.inp4_ip_tos;
1926 inp_compat->inp_depend6.inp6_hlim = inp->inp_depend6.inp6_hlim;
1927 inp_compat->inp_depend6.inp6_cksum = inp->inp_depend6.inp6_cksum;
1928 inp_compat->inp6_ifindex = inp->inp6_ifindex;
1929 inp_compat->inp_depend6.inp6_hops = inp->inp_depend6.inp6_hops;