Index: sys/netinet/libalias/alias.c =================================================================== --- sys/netinet/libalias/alias.c +++ sys/netinet/libalias/alias.c @@ -359,79 +359,94 @@ tc = (struct tcphdr *)ip_next(ip); ic2 = (struct icmp *)ip_next(ip); - if (ip->ip_p == IPPROTO_UDP) - lnk = FindUdpTcpIn(la, ip->ip_dst, ip->ip_src, - ud->uh_dport, ud->uh_sport, - IPPROTO_UDP, 0); - else if (ip->ip_p == IPPROTO_TCP) - lnk = FindUdpTcpIn(la, ip->ip_dst, ip->ip_src, - tc->th_dport, tc->th_sport, - IPPROTO_TCP, 0); - else if (ip->ip_p == IPPROTO_ICMP) { - if (ic2->icmp_type == ICMP_ECHO || ic2->icmp_type == ICMP_TSTAMP) - lnk = FindIcmpIn(la, ip->ip_dst, ip->ip_src, ic2->icmp_id, 0); - else + switch (ip->ip_p) { + case IPPROTO_UDP: + lnk = FindUdpTcpIn(la, ip->ip_dst, ip->ip_src, + ud->uh_dport, ud->uh_sport, + IPPROTO_UDP, 0); + break; + case IPPROTO_TCP: + lnk = FindUdpTcpIn(la, ip->ip_dst, ip->ip_src, + tc->th_dport, tc->th_sport, + IPPROTO_TCP, 0); + break; + case IPPROTO_ICMP: + if (ic2->icmp_type == ICMP_ECHO || ic2->icmp_type == ICMP_TSTAMP) + lnk = FindIcmpIn(la, ip->ip_dst, ip->ip_src, ic2->icmp_id, 0); + else + lnk = NULL; + break; + default: lnk = NULL; - } else - lnk = NULL; + break; + } if (lnk != NULL) { - if (ip->ip_p == IPPROTO_UDP || ip->ip_p == IPPROTO_TCP) { - int accumulate, accumulate2; - struct in_addr original_address; - u_short original_port; + switch (ip->ip_p) { + case IPPROTO_UDP: + case IPPROTO_TCP: + { + int accumulate, accumulate2; + struct in_addr original_address; + u_short original_port; - original_address = GetOriginalAddress(lnk); - original_port = GetOriginalPort(lnk); + original_address = GetOriginalAddress(lnk); + original_port = GetOriginalPort(lnk); -/* Adjust ICMP checksum */ - accumulate = twowords(&ip->ip_src); - accumulate -= twowords(&original_address); - accumulate += ud->uh_sport; - accumulate -= original_port; - accumulate2 = accumulate; - accumulate2 += ip->ip_sum; - ADJUST_CHECKSUM(accumulate, ip->ip_sum); - accumulate2 -= ip->ip_sum; - ADJUST_CHECKSUM(accumulate2, ic->icmp_cksum); + /* Adjust ICMP checksum */ + accumulate = twowords(&ip->ip_src); + accumulate -= twowords(&original_address); + accumulate += ud->uh_sport; + accumulate -= original_port; + accumulate2 = accumulate; + accumulate2 += ip->ip_sum; + ADJUST_CHECKSUM(accumulate, ip->ip_sum); + accumulate2 -= ip->ip_sum; + ADJUST_CHECKSUM(accumulate2, ic->icmp_cksum); -/* Un-alias address in IP header */ - DifferentialChecksum(&pip->ip_sum, - &original_address, &pip->ip_dst, 2); - pip->ip_dst = original_address; + /* Un-alias address in IP header */ + DifferentialChecksum(&pip->ip_sum, + &original_address, &pip->ip_dst, 2); + pip->ip_dst = original_address; -/* Un-alias address and port number of original IP packet -fragment contained in ICMP data section */ - ip->ip_src = original_address; - ud->uh_sport = original_port; - } else if (ip->ip_p == IPPROTO_ICMP) { - int accumulate, accumulate2; - struct in_addr original_address; - u_short original_id; + /* Un-alias address and port number of original + * IP packet fragment contained in ICMP data + * section */ + ip->ip_src = original_address; + ud->uh_sport = original_port; + break; + } + case IPPROTO_ICMP: + { + int accumulate, accumulate2; + struct in_addr original_address; + u_short original_id; - original_address = GetOriginalAddress(lnk); - original_id = GetOriginalPort(lnk); + original_address = GetOriginalAddress(lnk); + original_id = GetOriginalPort(lnk); -/* Adjust ICMP checksum */ - accumulate = twowords(&ip->ip_src); - accumulate -= twowords(&original_address); - accumulate += ic2->icmp_id; - accumulate -= original_id; - accumulate2 = accumulate; - accumulate2 += ip->ip_sum; - ADJUST_CHECKSUM(accumulate, ip->ip_sum); - accumulate2 -= ip->ip_sum; - ADJUST_CHECKSUM(accumulate2, ic->icmp_cksum); + /* Adjust ICMP checksum */ + accumulate = twowords(&ip->ip_src); + accumulate -= twowords(&original_address); + accumulate += ic2->icmp_id; + accumulate -= original_id; + accumulate2 = accumulate; + accumulate2 += ip->ip_sum; + ADJUST_CHECKSUM(accumulate, ip->ip_sum); + accumulate2 -= ip->ip_sum; + ADJUST_CHECKSUM(accumulate2, ic->icmp_cksum); -/* Un-alias address in IP header */ - DifferentialChecksum(&pip->ip_sum, - &original_address, &pip->ip_dst, 2); - pip->ip_dst = original_address; + /* Un-alias address in IP header */ + DifferentialChecksum(&pip->ip_sum, + &original_address, &pip->ip_dst, 2); + pip->ip_dst = original_address; -/* Un-alias address of original IP packet and sequence number of - embedded ICMP datagram */ - ip->ip_src = original_address; - ic2->icmp_id = original_id; + /* Un-alias address of original IP packet and + * sequence number of embedded ICMP datagram */ + ip->ip_src = original_address; + ic2->icmp_id = original_id; + break; + } } return (PKT_ALIAS_OK); } @@ -549,79 +564,96 @@ tc = (struct tcphdr *)ip_next(ip); ic2 = (struct icmp *)ip_next(ip); - if (ip->ip_p == IPPROTO_UDP) - lnk = FindUdpTcpOut(la, ip->ip_dst, ip->ip_src, - ud->uh_dport, ud->uh_sport, - IPPROTO_UDP, 0); - else if (ip->ip_p == IPPROTO_TCP) - lnk = FindUdpTcpOut(la, ip->ip_dst, ip->ip_src, - tc->th_dport, tc->th_sport, - IPPROTO_TCP, 0); - else if (ip->ip_p == IPPROTO_ICMP) { - if (ic2->icmp_type == ICMP_ECHO || ic2->icmp_type == ICMP_TSTAMP) - lnk = FindIcmpOut(la, ip->ip_dst, ip->ip_src, ic2->icmp_id, 0); - else + switch (ip->ip_p) { + case IPPROTO_UDP: + lnk = FindUdpTcpOut(la, ip->ip_dst, ip->ip_src, + ud->uh_dport, ud->uh_sport, + IPPROTO_UDP, 0); + break; + case IPPROTO_TCP: + lnk = FindUdpTcpOut(la, ip->ip_dst, ip->ip_src, + tc->th_dport, tc->th_sport, + IPPROTO_TCP, 0); + break; + case IPPROTO_ICMP: + if (ic2->icmp_type == ICMP_ECHO || ic2->icmp_type == ICMP_TSTAMP) + lnk = FindIcmpOut(la, ip->ip_dst, ip->ip_src, ic2->icmp_id, 0); + else + lnk = NULL; + break; + default: lnk = NULL; - } else - lnk = NULL; + } if (lnk != NULL) { - if (ip->ip_p == IPPROTO_UDP || ip->ip_p == IPPROTO_TCP) { - int accumulate; - struct in_addr alias_address; - u_short alias_port; + switch (ip->ip_p) { + case IPPROTO_UDP: + case IPPROTO_TCP: + { + int accumulate; + struct in_addr alias_address; + u_short alias_port; - alias_address = GetAliasAddress(lnk); - alias_port = GetAliasPort(lnk); + alias_address = GetAliasAddress(lnk); + alias_port = GetAliasPort(lnk); -/* Adjust ICMP checksum */ - accumulate = twowords(&ip->ip_dst); - accumulate -= twowords(&alias_address); - accumulate += ud->uh_dport; - accumulate -= alias_port; - ADJUST_CHECKSUM(accumulate, ic->icmp_cksum); + /* Adjust ICMP checksum */ + accumulate = twowords(&ip->ip_dst); + accumulate -= twowords(&alias_address); + accumulate += ud->uh_dport; + accumulate -= alias_port; + ADJUST_CHECKSUM(accumulate, ic->icmp_cksum); -/* - * Alias address in IP header if it comes from the host - * the original TCP/UDP packet was destined for. - */ - if (pip->ip_src.s_addr == ip->ip_dst.s_addr) { - DifferentialChecksum(&pip->ip_sum, - &alias_address, &pip->ip_src, 2); - pip->ip_src = alias_address; - } -/* Alias address and port number of original IP packet -fragment contained in ICMP data section */ - ip->ip_dst = alias_address; - ud->uh_dport = alias_port; - } else if (ip->ip_p == IPPROTO_ICMP) { - int accumulate; - struct in_addr alias_address; - u_short alias_id; + /* + * Alias address in IP header if it comes from + * the host the original TCP/UDP packet was + * destined for. + */ + if (pip->ip_src.s_addr == ip->ip_dst.s_addr) { + DifferentialChecksum(&pip->ip_sum, + &alias_address, &pip->ip_src, 2); + pip->ip_src = alias_address; + } + /* + * Alias address and port number of original + * IP packet fragment contained in ICMP data + * section + */ + ip->ip_dst = alias_address; + ud->uh_dport = alias_port; + break; + } + case IPPROTO_ICMP: + { + int accumulate; + struct in_addr alias_address; + u_short alias_id; - alias_address = GetAliasAddress(lnk); - alias_id = GetAliasPort(lnk); + alias_address = GetAliasAddress(lnk); + alias_id = GetAliasPort(lnk); -/* Adjust ICMP checksum */ - accumulate = twowords(&ip->ip_dst); - accumulate -= twowords(&alias_address); - accumulate += ic2->icmp_id; - accumulate -= alias_id; - ADJUST_CHECKSUM(accumulate, ic->icmp_cksum); - -/* - * Alias address in IP header if it comes from the host - * the original ICMP message was destined for. - */ - if (pip->ip_src.s_addr == ip->ip_dst.s_addr) { - DifferentialChecksum(&pip->ip_sum, - &alias_address, &pip->ip_src, 2); - pip->ip_src = alias_address; - } -/* Alias address of original IP packet and sequence number of - embedded ICMP datagram */ - ip->ip_dst = alias_address; - ic2->icmp_id = alias_id; + /* Adjust ICMP checksum */ + accumulate = twowords(&ip->ip_dst); + accumulate -= twowords(&alias_address); + accumulate += ic2->icmp_id; + accumulate -= alias_id; + ADJUST_CHECKSUM(accumulate, ic->icmp_cksum); + /* + * Alias address in IP header if it comes + * from the host the original ICMP message + * was destined for. + */ + if (pip->ip_src.s_addr == ip->ip_dst.s_addr) { + DifferentialChecksum(&pip->ip_sum, + &alias_address, &pip->ip_src, 2); + pip->ip_src = alias_address; + } + /* Alias address of original IP packet and + * sequence number of embedded ICMP datagram */ + ip->ip_dst = alias_address; + ic2->icmp_id = alias_id; + break; + } } return (PKT_ALIAS_OK); } @@ -1599,81 +1631,93 @@ ic = (struct icmp *)ip_next(pip); /* Find a link */ - if (pip->ip_p == IPPROTO_UDP) - lnk = FindUdpTcpIn(la, pip->ip_dst, pip->ip_src, - ud->uh_dport, ud->uh_sport, - IPPROTO_UDP, 0); - else if (pip->ip_p == IPPROTO_TCP) - lnk = FindUdpTcpIn(la, pip->ip_dst, pip->ip_src, - tc->th_dport, tc->th_sport, - IPPROTO_TCP, 0); - else if (pip->ip_p == IPPROTO_ICMP) - lnk = FindIcmpIn(la, pip->ip_dst, pip->ip_src, ic->icmp_id, 0); - else - lnk = NULL; + switch (pip->ip_p) { + case IPPROTO_UDP: + lnk = FindUdpTcpIn(la, pip->ip_dst, pip->ip_src, + ud->uh_dport, ud->uh_sport, + IPPROTO_UDP, 0); + break; + case IPPROTO_TCP: + lnk = FindUdpTcpIn(la, pip->ip_dst, pip->ip_src, + tc->th_dport, tc->th_sport, + IPPROTO_TCP, 0); + break; + case IPPROTO_ICMP: + lnk = FindIcmpIn(la, pip->ip_dst, pip->ip_src, ic->icmp_id, 0); + break; + default: + lnk = NULL; + break; + } /* Change it from an aliased packet to an unaliased packet */ if (lnk != NULL) { - if (pip->ip_p == IPPROTO_UDP || pip->ip_p == IPPROTO_TCP) { - int accumulate; - struct in_addr original_address; - u_short original_port; + switch (pip->ip_p) { + case IPPROTO_UDP: + case IPPROTO_TCP: + { + int accumulate; + struct in_addr original_address; + u_short original_port; - original_address = GetOriginalAddress(lnk); - original_port = GetOriginalPort(lnk); + original_address = GetOriginalAddress(lnk); + original_port = GetOriginalPort(lnk); - /* Adjust TCP/UDP checksum */ - accumulate = twowords(&pip->ip_src); - accumulate -= twowords(&original_address); + /* Adjust TCP/UDP checksum */ + accumulate = twowords(&pip->ip_src); + accumulate -= twowords(&original_address); - if (pip->ip_p == IPPROTO_UDP) { - accumulate += ud->uh_sport; - accumulate -= original_port; - ADJUST_CHECKSUM(accumulate, ud->uh_sum); - } else { - accumulate += tc->th_sport; - accumulate -= original_port; - ADJUST_CHECKSUM(accumulate, tc->th_sum); - } + if (pip->ip_p == IPPROTO_UDP) { + accumulate += ud->uh_sport; + accumulate -= original_port; + ADJUST_CHECKSUM(accumulate, ud->uh_sum); + } else { + accumulate += tc->th_sport; + accumulate -= original_port; + ADJUST_CHECKSUM(accumulate, tc->th_sum); + } - /* Adjust IP checksum */ - DifferentialChecksum(&pip->ip_sum, - &original_address, &pip->ip_src, 2); + /* Adjust IP checksum */ + DifferentialChecksum(&pip->ip_sum, + &original_address, &pip->ip_src, 2); - /* Un-alias source address and port number */ - pip->ip_src = original_address; - if (pip->ip_p == IPPROTO_UDP) - ud->uh_sport = original_port; - else - tc->th_sport = original_port; + /* Un-alias source address and port number */ + pip->ip_src = original_address; + if (pip->ip_p == IPPROTO_UDP) + ud->uh_sport = original_port; + else + tc->th_sport = original_port; - iresult = PKT_ALIAS_OK; + iresult = PKT_ALIAS_OK; + break; + } + case IPPROTO_ICMP: + { + int accumulate; + struct in_addr original_address; + u_short original_id; - } else if (pip->ip_p == IPPROTO_ICMP) { + original_address = GetOriginalAddress(lnk); + original_id = GetOriginalPort(lnk); - int accumulate; - struct in_addr original_address; - u_short original_id; + /* Adjust ICMP checksum */ + accumulate = twowords(&pip->ip_src); + accumulate -= twowords(&original_address); + accumulate += ic->icmp_id; + accumulate -= original_id; + ADJUST_CHECKSUM(accumulate, ic->icmp_cksum); - original_address = GetOriginalAddress(lnk); - original_id = GetOriginalPort(lnk); + /* Adjust IP checksum */ + DifferentialChecksum(&pip->ip_sum, + &original_address, &pip->ip_src, 2); - /* Adjust ICMP checksum */ - accumulate = twowords(&pip->ip_src); - accumulate -= twowords(&original_address); - accumulate += ic->icmp_id; - accumulate -= original_id; - ADJUST_CHECKSUM(accumulate, ic->icmp_cksum); + /* Un-alias source address and port number */ + pip->ip_src = original_address; + ic->icmp_id = original_id; - /* Adjust IP checksum */ - DifferentialChecksum(&pip->ip_sum, - &original_address, &pip->ip_src, 2); - - /* Un-alias source address and port number */ - pip->ip_src = original_address; - ic->icmp_id = original_id; - - iresult = PKT_ALIAS_OK; + iresult = PKT_ALIAS_OK; + break; + } } } getout: Index: sys/netinet/libalias/alias_proxy.c =================================================================== --- sys/netinet/libalias/alias_proxy.c +++ sys/netinet/libalias/alias_proxy.c @@ -185,12 +185,17 @@ { struct servent *se; - if (proto == IPPROTO_TCP) - se = getservbyname(s, "tcp"); - else if (proto == IPPROTO_UDP) - se = getservbyname(s, "udp"); - else - return (-1); + switch (proto) { + case IPPROTO_TCP: + se = getservbyname(s, "tcp"); + break; + case IPPROTO_UDP: + se = getservbyname(s, "udp"); + break; + default: + return (-1); + break; + } if (se == NULL) return (-1);