Changeset 66522 in vbox for trunk/src/VBox/Devices/Network/slirp
- Timestamp:
- Apr 12, 2017 8:48:26 AM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 114530
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Network/slirp/ip_input.c
r65455 r66522 95 95 int hlen = 0; 96 96 int mlen = 0; 97 int iplen = 0; 97 98 98 99 STAM_PROFILE_START(&pData->StatIP_input, a); … … 103 104 104 105 ipstat.ips_total++; 105 {106 int rc;107 if (!(m->m_flags & M_SKIP_FIREWALL))108 {109 STAM_PROFILE_START(&pData->StatALIAS_input, b);110 rc = LibAliasIn(pData->proxy_alias, mtod(m, char *), m_length(m, NULL));111 STAM_PROFILE_STOP(&pData->StatALIAS_input, b);112 Log2(("NAT: LibAlias return %d\n", rc));113 }114 else115 m->m_flags &= ~M_SKIP_FIREWALL;116 117 /*118 * XXX: TODO: this is most likely a leftover spooky action at119 * a distance from alias_dns.c host resolver code and can be120 * g/c'ed.121 */122 if (m->m_len != RT_N2H_U16(ip->ip_len))123 m->m_len = RT_N2H_U16(ip->ip_len);124 }125 106 126 107 mlen = m->m_len; … … 158 139 } 159 140 160 /* 161 * Convert fields to host representation. 162 */ 163 NTOHS(ip->ip_len); 164 if (ip->ip_len < hlen) 141 iplen = RT_N2H_U16(ip->ip_len); 142 if (iplen < hlen) 165 143 { 166 144 ipstat.ips_badlen++; 167 145 goto bad_free_m; 168 146 } 169 170 NTOHS(ip->ip_id);171 NTOHS(ip->ip_off);172 147 173 148 /* … … 177 152 * Drop packet if shorter than we expect. 178 153 */ 179 if (mlen < ip ->ip_len)154 if (mlen < iplen) 180 155 { 181 156 ipstat.ips_tooshort++; … … 184 159 185 160 /* Should drop packet if mbuf too long? hmmm... */ 186 if (mlen > ip->ip_len) 187 m_adj(m, ip->ip_len - mlen); 161 if (mlen > iplen) 162 { 163 m_adj(m, iplen - mlen); 164 mlen = m->m_len; 165 } 188 166 189 167 /* source must be unicast */ … … 208 186 if (ip->ip_ttl <= 1) 209 187 { 188 /* icmp_error expects these in host order */ 189 NTOHS(ip->ip_len); 190 NTOHS(ip->ip_id); 191 NTOHS(ip->ip_off); 192 210 193 icmp_error(pData, m, ICMP_TIMXCEED, ICMP_TIMXCEED_INTRANS, 0, "ttl"); 211 194 goto no_free_m; … … 227 210 } 228 211 212 /* run it through libalias */ 213 { 214 int rc; 215 if (!(m->m_flags & M_SKIP_FIREWALL)) 216 { 217 STAM_PROFILE_START(&pData->StatALIAS_input, b); 218 rc = LibAliasIn(pData->proxy_alias, mtod(m, char *), mlen); 219 STAM_PROFILE_STOP(&pData->StatALIAS_input, b); 220 Log2(("NAT: LibAlias return %d\n", rc)); 221 } 222 else 223 m->m_flags &= ~M_SKIP_FIREWALL; 224 225 #if 0 /* disabled: no module we use does it in this direction */ 226 /* 227 * XXX: spooky action at a distance - libalias may modify the 228 * packet and will update ip_len to reflect the new length. 229 */ 230 if (iplen != RT_N2H_U16(ip->ip_len)) 231 { 232 iplen = RT_N2H_U16(ip->ip_len); 233 m->m_len = iplen; 234 mlen = m->m_len; 235 } 236 #endif 237 } 238 239 /* 240 * Convert fields to host representation. 241 */ 242 NTOHS(ip->ip_len); 243 NTOHS(ip->ip_id); 244 NTOHS(ip->ip_off); 229 245 230 246 /*
Note:
See TracChangeset
for help on using the changeset viewer.