Lines Matching refs:si

340 static int convert_in_un_remote(struct socket_info *si, const struct sockaddr *inaddr, struct sockaddr_un *un,
350 switch (si->family) {
359 switch (si->type) {
398 switch (si->type) {
438 static int convert_in_un_alloc(struct socket_info *si, const struct sockaddr *inaddr, struct sockaddr_un *un,
449 switch (si->family) {
461 switch (si->type) {
505 switch (si->type) {
537 set_port(si->family, prt, si->myname);
557 static int sockaddr_convert_to_un(struct socket_info *si, const struct sockaddr *in_addr, socklen_t in_len,
570 switch (si->type) {
579 return convert_in_un_alloc(si, in_addr, out_addr, bcast);
581 return convert_in_un_remote(si, in_addr, out_addr, bcast);
591 static int sockaddr_convert_from_un(const struct socket_info *si,
611 switch (si->type) {
930 static void swrap_dump_packet(struct socket_info *si, const struct sockaddr *addr,
951 switch (si->family) {
963 if (si->type != SOCK_STREAM) return;
965 src_addr = (const struct sockaddr_in *)si->myname;
968 tcp_seq = si->io.pck_snd;
969 tcp_ack = si->io.pck_rcv;
972 si->io.pck_snd += 1;
977 if (si->type != SOCK_STREAM) return;
979 dest_addr = (const struct sockaddr_in *)si->myname;
982 tcp_seq = si->io.pck_rcv;
983 tcp_ack = si->io.pck_snd;
986 si->io.pck_rcv += 1;
991 if (si->type != SOCK_STREAM) return;
993 dest_addr = (const struct sockaddr_in *)si->myname;
997 tcp_seq = si->io.pck_snd - 1;
998 tcp_ack = si->io.pck_rcv;
1005 if (si->type != SOCK_STREAM) return;
1007 src_addr = (const struct sockaddr_in *)si->myname;
1010 tcp_seq = si->io.pck_snd;
1011 tcp_ack = si->io.pck_rcv;
1017 if (si->type != SOCK_STREAM) return;
1019 dest_addr = (const struct sockaddr_in *)si->myname;
1022 tcp_seq = si->io.pck_rcv;
1023 tcp_ack = si->io.pck_snd;
1026 si->io.pck_rcv += 1;
1031 if (si->type != SOCK_STREAM) return;
1033 src_addr = (const struct sockaddr_in *)si->myname;
1036 tcp_seq = si->io.pck_snd;
1037 tcp_ack = si->io.pck_rcv;
1040 si->io.pck_snd += 1;
1045 if (si->type != SOCK_STREAM) return;
1047 dest_addr = (const struct sockaddr_in *)si->myname;
1050 tcp_seq = si->io.pck_rcv;
1051 tcp_ack = si->io.pck_snd;
1057 src_addr = (const struct sockaddr_in *)si->myname;
1058 dest_addr = (const struct sockaddr_in *)si->peername;
1060 tcp_seq = si->io.pck_snd;
1061 tcp_ack = si->io.pck_rcv;
1064 si->io.pck_snd += len;
1069 dest_addr = (const struct sockaddr_in *)si->myname;
1070 src_addr = (const struct sockaddr_in *)si->peername;
1072 if (si->type == SOCK_DGRAM) {
1073 swrap_dump_packet(si, si->peername,
1079 tcp_seq = si->io.pck_rcv;
1080 tcp_ack = si->io.pck_snd;
1086 dest_addr = (const struct sockaddr_in *)si->myname;
1087 src_addr = (const struct sockaddr_in *)si->peername;
1089 if (si->type == SOCK_DGRAM) {
1093 tcp_seq = si->io.pck_rcv;
1094 tcp_ack = si->io.pck_snd;
1100 dest_addr = (const struct sockaddr_in *)si->myname;
1101 src_addr = (const struct sockaddr_in *)si->peername;
1103 tcp_seq = si->io.pck_rcv;
1104 tcp_ack = si->io.pck_snd;
1107 si->io.pck_rcv += len;
1112 dest_addr = (const struct sockaddr_in *)si->myname;
1113 src_addr = (const struct sockaddr_in *)si->peername;
1115 if (si->type == SOCK_DGRAM) {
1119 tcp_seq = si->io.pck_rcv;
1120 tcp_ack = si->io.pck_snd;
1126 src_addr = (const struct sockaddr_in *)si->myname;
1129 si->io.pck_snd += len;
1134 dest_addr = (const struct sockaddr_in *)si->myname;
1142 dest_addr = (const struct sockaddr_in *)si->myname;
1145 si->io.pck_rcv += len;
1150 if (si->type != SOCK_STREAM) return;
1152 src_addr = (const struct sockaddr_in *)si->myname;
1153 dest_addr = (const struct sockaddr_in *)si->peername;
1155 tcp_seq = si->io.pck_snd;
1156 tcp_ack = si->io.pck_rcv;
1159 si->io.pck_snd += 1;
1164 if (si->type != SOCK_STREAM) return;
1166 dest_addr = (const struct sockaddr_in *)si->myname;
1167 src_addr = (const struct sockaddr_in *)si->peername;
1169 tcp_seq = si->io.pck_rcv;
1170 tcp_ack = si->io.pck_snd;
1173 si->io.pck_rcv += 1;
1178 if (si->type != SOCK_STREAM) return;
1180 src_addr = (const struct sockaddr_in *)si->myname;
1181 dest_addr = (const struct sockaddr_in *)si->peername;
1183 tcp_seq = si->io.pck_snd;
1184 tcp_ack = si->io.pck_rcv;
1194 packet = swrap_packet_init(&tv, src_addr, dest_addr, si->type,
1212 struct socket_info *si;
1256 si = (struct socket_info *)calloc(1, sizeof(struct socket_info));
1258 si->family = family;
1259 si->type = type;
1260 si->protocol = protocol;
1261 si->fd = fd;
1263 SWRAP_DLIST_ADD(sockets, si);
1265 return si->fd;
1377 static int swrap_auto_bind(struct socket_info *si)
1395 switch (si->family) {
1399 switch (si->type) {
1416 si->myname_len = sizeof(in);
1417 si->myname = sockaddr_dup(&in, si->myname_len);
1424 switch (si->type) {
1439 si->myname_len = sizeof(in6);
1440 si->myname = sockaddr_dup(&in6, si->myname_len);
1460 ret = real_bind(si->fd, (struct sockaddr *)&un_addr, sizeof(un_addr));
1463 si->tmp_path = strdup(un_addr.sun_path);
1464 si->bound = 1;
1473 set_port(si->family, port, si->myname);
1483 struct socket_info *si = find_socket_info(s);
1485 if (!si) {
1489 if (si->bound == 0) {
1490 ret = swrap_auto_bind(si);
1494 if (si->family != serv_addr->sa_family) {
1499 ret = sockaddr_convert_to_un(si, (const struct sockaddr *)serv_addr, addrlen, &un_addr, 0, NULL);
1502 swrap_dump_packet(si, serv_addr, SWRAP_CONNECT_SEND, NULL, 0);
1513 si->peername_len = addrlen;
1514 si->peername = sockaddr_dup(serv_addr, addrlen);
1516 swrap_dump_packet(si, serv_addr, SWRAP_CONNECT_RECV, NULL, 0);
1517 swrap_dump_packet(si, serv_addr, SWRAP_CONNECT_ACK, NULL, 0);
1519 swrap_dump_packet(si, serv_addr, SWRAP_CONNECT_UNREACH, NULL, 0);
1529 struct socket_info *si = find_socket_info(s);
1531 if (!si) {
1535 si->myname_len = addrlen;
1536 si->myname = sockaddr_dup(myaddr, addrlen);
1538 ret = sockaddr_convert_to_un(si, (const struct sockaddr *)myaddr, addrlen, &un_addr, 1, &si->bcast);
1547 si->bound = 1;
1556 struct socket_info *si = find_socket_info(s);
1558 if (!si) {
1569 struct socket_info *si = find_socket_info(s);
1571 if (!si) {
1575 if (!si->peername)
1581 memcpy(name, si->peername, si->peername_len);
1582 *addrlen = si->peername_len;
1589 struct socket_info *si = find_socket_info(s);
1591 if (!si) {
1595 memcpy(name, si->myname, si->myname_len);
1596 *addrlen = si->myname_len;
1603 struct socket_info *si = find_socket_info(s);
1605 if (!si) {
1619 struct socket_info *si = find_socket_info(s);
1621 if (!si) {
1629 switch (si->family) {
1643 struct socket_info *si = find_socket_info(s);
1645 if (!si) {
1655 if (sockaddr_convert_from_un(si, &un_addr, un_addrlen,
1656 si->family, from, fromlen) == -1) {
1660 swrap_dump_packet(si, from, SWRAP_RECVFROM, buf, ret);
1670 struct socket_info *si = find_socket_info(s);
1673 if (!si) {
1677 switch (si->type) {
1682 if (si->bound == 0) {
1683 ret = swrap_auto_bind(si);
1687 ret = sockaddr_convert_to_un(si, to, tolen, &un_addr, 0, &bcast);
1707 swrap_dump_packet(si, to, SWRAP_SENDTO, buf, len);
1726 swrap_dump_packet(si, to, SWRAP_SENDTO, buf, len);
1727 swrap_dump_packet(si, to, SWRAP_SENDTO_UNREACH, buf, len);
1729 swrap_dump_packet(si, to, SWRAP_SENDTO, buf, ret);
1738 struct socket_info *si = find_socket_info(s);
1741 if (!si) {
1751 swrap_dump_packet(si, NULL, SWRAP_PENDING_RST, NULL, 0);
1753 swrap_dump_packet(si, NULL, SWRAP_PENDING_RST, NULL, 0);
1764 struct socket_info *si = find_socket_info(s);
1766 if (!si) {
1772 swrap_dump_packet(si, NULL, SWRAP_RECV_RST, NULL, 0);
1774 swrap_dump_packet(si, NULL, SWRAP_RECV_RST, NULL, 0);
1776 swrap_dump_packet(si, NULL, SWRAP_RECV, buf, ret);
1786 struct socket_info *si = find_socket_info(s);
1788 if (!si) {
1795 swrap_dump_packet(si, NULL, SWRAP_SEND, buf, len);
1796 swrap_dump_packet(si, NULL, SWRAP_SEND_RST, NULL, 0);
1798 swrap_dump_packet(si, NULL, SWRAP_SEND, buf, ret);
1806 struct socket_info *si = find_socket_info(fd);
1809 if (!si) {
1813 SWRAP_DLIST_REMOVE(sockets, si);
1815 if (si->myname && si->peername) {
1816 swrap_dump_packet(si, NULL, SWRAP_CLOSE_SEND, NULL, 0);
1821 if (si->myname && si->peername) {
1822 swrap_dump_packet(si, NULL, SWRAP_CLOSE_RECV, NULL, 0);
1823 swrap_dump_packet(si, NULL, SWRAP_CLOSE_ACK, NULL, 0);
1826 if (si->path) free(si->path);
1827 if (si->myname) free(si->myname);
1828 if (si->peername) free(si->peername);
1829 if (si->tmp_path) {
1830 unlink(si->tmp_path);
1831 free(si->tmp_path);
1833 free(si);
1873 struct socket_info *si;
1876 si = find_socket_info(oldd);
1877 if (si == NULL)
1880 fd = real_dup(si->fd);
1884 return dup_internal(si, fd);