Lines Matching full:pip
273 struct ip *pip, u_char ip_p, u_short *ip_sum);
274 static int ProtoAliasOut(struct libalias *la, struct ip *pip,
289 IcmpAliasIn1(struct libalias *la, struct ip *pip) in IcmpAliasIn1() argument
296 ic = (struct icmp *)ip_next(pip); in IcmpAliasIn1()
299 ret = FindIcmpIn(la, pip->ip_src, pip->ip_dst, ic->icmp_id, 1, &lnk); in IcmpAliasIn1()
319 DifferentialChecksum(&pip->ip_sum, in IcmpAliasIn1()
320 &original_address, &pip->ip_dst, 2); in IcmpAliasIn1()
321 pip->ip_dst = original_address; in IcmpAliasIn1()
332 IcmpAliasIn2(struct libalias *la, struct ip *pip) in IcmpAliasIn2() argument
342 ic = (struct icmp *)ip_next(pip); in IcmpAliasIn2()
394 DifferentialChecksum(&pip->ip_sum, in IcmpAliasIn2()
395 &original_address, &pip->ip_dst, 2); in IcmpAliasIn2()
396 pip->ip_dst = original_address; in IcmpAliasIn2()
423 DifferentialChecksum(&pip->ip_sum, in IcmpAliasIn2()
424 &original_address, &pip->ip_dst, 2); in IcmpAliasIn2()
425 pip->ip_dst = original_address; in IcmpAliasIn2()
438 IcmpAliasIn(struct libalias *la, struct ip *pip) in IcmpAliasIn() argument
446 dlen = ntohs(pip->ip_len) - (pip->ip_hl << 2); in IcmpAliasIn()
454 ic = (struct icmp *)ip_next(pip); in IcmpAliasIn()
461 iresult = IcmpAliasIn1(la, pip); in IcmpAliasIn()
471 iresult = IcmpAliasIn2(la, pip); in IcmpAliasIn()
475 iresult = IcmpAliasIn1(la, pip); in IcmpAliasIn()
486 IcmpAliasOut1(struct libalias *la, struct ip *pip, int create) in IcmpAliasOut1() argument
493 ic = (struct icmp *)ip_next(pip); in IcmpAliasOut1()
496 ret = FindIcmpOut(la, pip->ip_src, pip->ip_dst, ic->icmp_id, create, in IcmpAliasOut1()
517 DifferentialChecksum(&pip->ip_sum, in IcmpAliasOut1()
518 &alias_address, &pip->ip_src, 2); in IcmpAliasOut1()
519 pip->ip_src = alias_address; in IcmpAliasOut1()
530 IcmpAliasOut2(struct libalias *la, struct ip *pip) in IcmpAliasOut2() argument
540 ic = (struct icmp *)ip_next(pip); in IcmpAliasOut2()
591 if (pip->ip_src.s_addr == ip->ip_dst.s_addr) { in IcmpAliasOut2()
592 DifferentialChecksum(&pip->ip_sum, in IcmpAliasOut2()
593 &alias_address, &pip->ip_src, 2); in IcmpAliasOut2()
594 pip->ip_src = alias_address; in IcmpAliasOut2()
619 if (pip->ip_src.s_addr == ip->ip_dst.s_addr) { in IcmpAliasOut2()
620 DifferentialChecksum(&pip->ip_sum, in IcmpAliasOut2()
621 &alias_address, &pip->ip_src, 2); in IcmpAliasOut2()
622 pip->ip_src = alias_address; in IcmpAliasOut2()
635 IcmpAliasOut(struct libalias *la, struct ip *pip, int create) in IcmpAliasOut() argument
647 ic = (struct icmp *)ip_next(pip); in IcmpAliasOut()
654 iresult = IcmpAliasOut1(la, pip, create); in IcmpAliasOut()
661 iresult = IcmpAliasOut2(la, pip); in IcmpAliasOut()
665 iresult = IcmpAliasOut1(la, pip, create); in IcmpAliasOut()
678 struct ip *pip, u_char ip_p, u_short *ip_sum) in ProtoAliasIn() argument
688 ret = FindProtoIn(la, ip_src, pip->ip_dst, ip_p, &lnk); in ProtoAliasIn()
696 &original_address, &pip->ip_dst, 2); in ProtoAliasIn()
697 pip->ip_dst = original_address; in ProtoAliasIn()
708 ProtoAliasOut(struct libalias *la, struct ip *pip, in ProtoAliasOut() argument
723 ret = FindProtoOut(la, pip->ip_src, ip_dst, ip_p, &lnk); in ProtoAliasOut()
731 &alias_address, &pip->ip_src, 2); in ProtoAliasOut()
732 pip->ip_src = alias_address; in ProtoAliasOut()
741 ValidateUdpLength(struct ip *pip) in ValidateUdpLength() argument
747 KASSERT(!FRAG_NO_HDR(pip), ("header-less fragment isn't expected here")); in ValidateUdpLength()
749 dlen = ntohs(pip->ip_len) - (pip->ip_hl << 2); in ValidateUdpLength()
752 ud = (struct udphdr *)ip_next(pip); in ValidateUdpLength()
753 if (!MF_ISSET(pip) && dlen < ntohs(ud->uh_ulen)) in ValidateUdpLength()
759 UdpAliasIn(struct libalias *la, struct ip *pip) in UdpAliasIn() argument
767 ud = ValidateUdpLength(pip); in UdpAliasIn()
771 ret = FindUdpTcpIn(la, pip->ip_src, pip->ip_dst, in UdpAliasIn()
802 error = find_handler(IN, UDP, la, pip, &ad); in UdpAliasIn()
824 accumulate += twowords(&pip->ip_src); in UdpAliasIn()
837 DifferentialChecksum(&pip->ip_sum, in UdpAliasIn()
838 &proxy_address, &pip->ip_src, 2); in UdpAliasIn()
839 pip->ip_src = proxy_address; in UdpAliasIn()
843 DifferentialChecksum(&pip->ip_sum, in UdpAliasIn()
844 &original_address, &pip->ip_dst, 2); in UdpAliasIn()
845 pip->ip_dst = original_address; in UdpAliasIn()
852 UdpAliasOut(struct libalias *la, struct ip *pip, int maxpacketsize, int create) in UdpAliasOut() argument
864 ud = ValidateUdpLength(pip); in UdpAliasOut()
870 pip->ip_src, pip->ip_dst, ud->uh_dport, pip->ip_p); in UdpAliasOut()
877 dest_address = pip->ip_dst; in UdpAliasOut()
882 accumulate = twowords(&pip->ip_dst); in UdpAliasOut()
885 ADJUST_CHECKSUM(accumulate, pip->ip_sum); in UdpAliasOut()
888 accumulate = twowords(&pip->ip_dst); in UdpAliasOut()
894 pip->ip_dst = proxy_server_address; in UdpAliasOut()
897 ret = FindUdpTcpOut(la, pip->ip_src, pip->ip_dst, in UdpAliasOut()
921 ProxyModify(la, lnk, pip, maxpacketsize, proxy_type); in UdpAliasOut()
922 ud = (struct udphdr *)ip_next(pip); in UdpAliasOut()
929 find_handler(OUT, UDP, la, pip, &ad); in UdpAliasOut()
938 accumulate += twowords(&pip->ip_src); in UdpAliasOut()
946 DifferentialChecksum(&pip->ip_sum, in UdpAliasOut()
947 &alias_address, &pip->ip_src, 2); in UdpAliasOut()
948 pip->ip_src = alias_address; in UdpAliasOut()
955 TcpAliasIn(struct libalias *la, struct ip *pip) in TcpAliasIn() argument
964 dlen = ntohs(pip->ip_len) - (pip->ip_hl << 2); in TcpAliasIn()
967 tc = (struct tcphdr *)ip_next(pip); in TcpAliasIn()
969 ret = FindUdpTcpIn(la, pip->ip_src, pip->ip_dst, in TcpAliasIn()
999 find_handler(IN, TCP, la, pip, &ad); in TcpAliasIn()
1025 error = find_handler(la, pip, &ad); in TcpAliasIn()
1043 accumulate += twowords(&pip->ip_src); in TcpAliasIn()
1050 tc = (struct tcphdr *)ip_next(pip); in TcpAliasIn()
1061 accumulate = twowords(&pip->ip_dst); in TcpAliasIn()
1062 pip->ip_dst = original_address; in TcpAliasIn()
1063 accumulate -= twowords(&pip->ip_dst); in TcpAliasIn()
1068 accumulate += twowords(&pip->ip_src); in TcpAliasIn()
1069 pip->ip_src = proxy_address; in TcpAliasIn()
1070 accumulate -= twowords(&pip->ip_src); in TcpAliasIn()
1072 ADJUST_CHECKSUM(accumulate, pip->ip_sum); in TcpAliasIn()
1075 tc = (struct tcphdr *)ip_next(pip); in TcpAliasIn()
1084 TcpAliasOut(struct libalias *la, struct ip *pip, int maxpacketsize, int create) in TcpAliasOut() argument
1097 dlen = ntohs(pip->ip_len) - (pip->ip_hl << 2); in TcpAliasOut()
1100 tc = (struct tcphdr *)ip_next(pip); in TcpAliasOut()
1104 &proxy_server_port, pip->ip_src, pip->ip_dst, in TcpAliasOut()
1105 tc->th_dport, pip->ip_p); in TcpAliasOut()
1115 dest_address = pip->ip_dst; in TcpAliasOut()
1122 accumulate += twowords(&pip->ip_dst); in TcpAliasOut()
1126 accumulate = twowords(&pip->ip_dst); in TcpAliasOut()
1127 pip->ip_dst = proxy_server_address; in TcpAliasOut()
1128 accumulate -= twowords(&pip->ip_dst); in TcpAliasOut()
1129 ADJUST_CHECKSUM(accumulate, pip->ip_sum); in TcpAliasOut()
1131 ret = FindUdpTcpOut(la, pip->ip_src, pip->ip_dst, in TcpAliasOut()
1156 ProxyModify(la, lnk, pip, maxpacketsize, proxy_type); in TcpAliasOut()
1157 tc = (struct tcphdr *)ip_next(pip); in TcpAliasOut()
1164 tc = (struct tcphdr *)ip_next(pip); in TcpAliasOut()
1168 find_handler(OUT, TCP, la, pip, &ad); in TcpAliasOut()
1175 accumulate += twowords(&pip->ip_src); in TcpAliasOut()
1182 tc = (struct tcphdr *)ip_next(pip); in TcpAliasOut()
1193 accumulate = twowords(&pip->ip_src); in TcpAliasOut()
1194 pip->ip_src = alias_address; in TcpAliasOut()
1195 accumulate -= twowords(&pip->ip_src); in TcpAliasOut()
1196 ADJUST_CHECKSUM(accumulate, pip->ip_sum); in TcpAliasOut()
1217 struct ip *pip, u_short ip_id, u_short *ip_sum);
1218 static int FragmentOut(struct libalias *, struct ip *pip,
1222 FragmentIn(struct libalias *la, struct in_addr ip_src, struct ip *pip, in FragmentIn() argument
1228 lnk = FindFragmentIn2(la, ip_src, pip->ip_dst, ip_id); in FragmentIn()
1234 &original_address, &pip->ip_dst, 2); in FragmentIn()
1235 pip->ip_dst = original_address; in FragmentIn()
1243 FragmentOut(struct libalias *la, struct ip *pip, u_short *ip_sum) in FragmentOut() argument
1248 alias_address = FindAliasAddress(la, pip->ip_src); in FragmentOut()
1250 &alias_address, &pip->ip_src, 2); in FragmentOut()
1251 pip->ip_src = alias_address; in FragmentOut()
1273 struct ip *pip; in LibAliasSaveFragment() local
1276 pip = (struct ip *)ptr; in LibAliasSaveFragment()
1277 lnk = AddFragmentPtrLink(la, pip->ip_src, pip->ip_id); in LibAliasSaveFragment()
1292 struct ip *pip; in LibAliasGetFragment() local
1295 pip = (struct ip *)ptr; in LibAliasGetFragment()
1296 lnk = FindFragmentPtr(la, pip->ip_src, pip->ip_id); in LibAliasGetFragment()
1314 struct ip *pip; in LibAliasFragmentIn() local
1319 pip = (struct ip *)ptr; in LibAliasFragmentIn()
1323 &pip->ip_dst, &fpip->ip_dst, 2); in LibAliasFragmentIn()
1324 fpip->ip_dst = pip->ip_dst; in LibAliasFragmentIn()
1330 LibAliasOutLocked(struct libalias *la, struct ip *pip,
1333 LibAliasInLocked(struct libalias *la, struct ip *pip,
1348 LibAliasInLocked(struct libalias *la, struct ip *pip, int maxpacketsize) in LibAliasInLocked() argument
1355 iresult = LibAliasOutLocked(la, pip, maxpacketsize, 1); in LibAliasInLocked()
1360 alias_addr = pip->ip_dst; in LibAliasInLocked()
1363 if (ntohs(pip->ip_len) > maxpacketsize in LibAliasInLocked()
1364 || (pip->ip_hl << 2) > maxpacketsize) { in LibAliasInLocked()
1369 if (FRAG_NO_HDR(pip)) { in LibAliasInLocked()
1370 iresult = FragmentIn(la, pip->ip_src, pip, pip->ip_id, in LibAliasInLocked()
1371 &pip->ip_sum); in LibAliasInLocked()
1376 switch (pip->ip_p) { in LibAliasInLocked()
1378 iresult = IcmpAliasIn(la, pip); in LibAliasInLocked()
1381 iresult = UdpAliasIn(la, pip); in LibAliasInLocked()
1384 iresult = TcpAliasIn(la, pip); in LibAliasInLocked()
1388 iresult = SctpAlias(la, pip, SN_TO_LOCAL); in LibAliasInLocked()
1404 error = find_handler(IN, IP, la, pip, &ad); in LibAliasInLocked()
1408 iresult = ProtoAliasIn(la, pip->ip_src, in LibAliasInLocked()
1409 pip, pip->ip_p, &pip->ip_sum); in LibAliasInLocked()
1413 iresult = ProtoAliasIn(la, pip->ip_src, pip, in LibAliasInLocked()
1414 pip->ip_p, &pip->ip_sum); in LibAliasInLocked()
1418 if (MF_ISSET(pip)) { in LibAliasInLocked()
1421 lnk = FindFragmentIn1(la, pip->ip_src, alias_addr, pip->ip_id); in LibAliasInLocked()
1424 SetFragmentAddr(lnk, pip->ip_dst); in LibAliasInLocked()
1476 struct ip *pip, /* valid IP packet */ in LibAliasOutLocked() argument
1486 iresult = LibAliasInLocked(la, pip, maxpacketsize); in LibAliasOutLocked()
1493 if (ntohs(pip->ip_len) > maxpacketsize in LibAliasOutLocked()
1494 || (pip->ip_hl << 2) > maxpacketsize) { in LibAliasOutLocked()
1506 addr = ntohl(pip->ip_src.s_addr); in LibAliasOutLocked()
1518 SetDefaultAliasAddress(la, pip->ip_src); in LibAliasOutLocked()
1521 SetDefaultAliasAddress(la, pip->ip_src); in LibAliasOutLocked()
1524 if (FRAG_NO_HDR(pip)) { in LibAliasOutLocked()
1525 iresult = FragmentOut(la, pip, &pip->ip_sum); in LibAliasOutLocked()
1530 switch (pip->ip_p) { in LibAliasOutLocked()
1532 iresult = IcmpAliasOut(la, pip, create); in LibAliasOutLocked()
1535 iresult = UdpAliasOut(la, pip, maxpacketsize, create); in LibAliasOutLocked()
1538 iresult = TcpAliasOut(la, pip, maxpacketsize, create); in LibAliasOutLocked()
1542 iresult = SctpAlias(la, pip, SN_TO_GLOBAL); in LibAliasOutLocked()
1557 error = find_handler(OUT, IP, la, pip, &ad); in LibAliasOutLocked()
1561 iresult = ProtoAliasOut(la, pip, in LibAliasOutLocked()
1562 pip->ip_dst, pip->ip_p, &pip->ip_sum, create); in LibAliasOutLocked()
1566 iresult = ProtoAliasOut(la, pip, in LibAliasOutLocked()
1567 pip->ip_dst, pip->ip_p, &pip->ip_sum, create); in LibAliasOutLocked()
1583 struct ip *pip; in LibAliasUnaliasOut() local
1591 pip = (struct ip *)ptr; in LibAliasUnaliasOut()
1594 if (ntohs(pip->ip_len) > maxpacketsize in LibAliasUnaliasOut()
1595 || (pip->ip_hl << 2) > maxpacketsize) in LibAliasUnaliasOut()
1598 ud = (struct udphdr *)ip_next(pip); in LibAliasUnaliasOut()
1599 tc = (struct tcphdr *)ip_next(pip); in LibAliasUnaliasOut()
1600 ic = (struct icmp *)ip_next(pip); in LibAliasUnaliasOut()
1603 if (pip->ip_p == IPPROTO_UDP) { in LibAliasUnaliasOut()
1604 iresult = FindUdpTcpIn(la, pip->ip_dst, pip->ip_src, in LibAliasUnaliasOut()
1609 } else if (pip->ip_p == IPPROTO_TCP) { in LibAliasUnaliasOut()
1610 iresult = FindUdpTcpIn(la, pip->ip_dst, pip->ip_src, in LibAliasUnaliasOut()
1615 } else if (pip->ip_p == IPPROTO_ICMP) { in LibAliasUnaliasOut()
1616 iresult = FindIcmpIn(la, pip->ip_dst, pip->ip_src, in LibAliasUnaliasOut()
1625 if (pip->ip_p == IPPROTO_UDP || pip->ip_p == IPPROTO_TCP) { in LibAliasUnaliasOut()
1634 accumulate = twowords(&pip->ip_src); in LibAliasUnaliasOut()
1637 if (pip->ip_p == IPPROTO_UDP) { in LibAliasUnaliasOut()
1648 DifferentialChecksum(&pip->ip_sum, in LibAliasUnaliasOut()
1649 &original_address, &pip->ip_src, 2); in LibAliasUnaliasOut()
1652 pip->ip_src = original_address; in LibAliasUnaliasOut()
1653 if (pip->ip_p == IPPROTO_UDP) in LibAliasUnaliasOut()
1659 } else if (pip->ip_p == IPPROTO_ICMP) { in LibAliasUnaliasOut()
1668 accumulate = twowords(&pip->ip_src); in LibAliasUnaliasOut()
1675 DifferentialChecksum(&pip->ip_sum, in LibAliasUnaliasOut()
1676 &original_address, &pip->ip_src, 2); in LibAliasUnaliasOut()
1679 pip->ip_src = original_address; in LibAliasUnaliasOut()