| version 1.19, 1995/06/04 05:07:03 |
version 1.20, 1995/06/04 05:58:26 |
|
|
| * Check our list of addresses, to see if the packet is for us. |
* Check our list of addresses, to see if the packet is for us. |
| */ |
*/ |
| for (ia = in_ifaddr; ia; ia = ia->ia_next) { |
for (ia = in_ifaddr; ia; ia = ia->ia_next) { |
| if (IA_SIN(ia)->sin_addr.s_addr == ip->ip_dst.s_addr) |
if (ip->ip_dst.s_addr == ia->ia_addr.sin_addr.s_addr) |
| goto ours; |
goto ours; |
| if ( |
if ( |
| #ifdef DIRECTED_BROADCAST |
#ifdef DIRECTED_BROADCAST |
| ia->ia_ifp == m->m_pkthdr.rcvif && |
ia->ia_ifp == m->m_pkthdr.rcvif && |
| #endif |
#endif |
| (ia->ia_ifp->if_flags & IFF_BROADCAST)) { |
(ia->ia_ifp->if_flags & IFF_BROADCAST)) { |
| if (ip->ip_dst.s_addr == |
if (ip->ip_dst.s_addr == ia->ia_broadaddr.sin_addr.s_addr || |
| satosin(&ia->ia_broadaddr)->sin_addr.s_addr) |
ip->ip_dst.s_addr == ia->ia_netbroadcast.s_addr || |
| goto ours; |
/* |
| if (ip->ip_dst.s_addr == ia->ia_netbroadcast.s_addr) |
* Look for all-0's host part (old broadcast addr), |
| goto ours; |
* either for subnet or net. |
| /* |
*/ |
| * Look for all-0's host part (old broadcast addr), |
ip->ip_dst.s_addr == ia->ia_subnet || |
| * either for subnet or net. |
|
| */ |
|
| if (ip->ip_dst.s_addr == ia->ia_subnet || |
|
| ip->ip_dst.s_addr == ia->ia_net) |
ip->ip_dst.s_addr == ia->ia_net) |
| goto ours; |
goto ours; |
| } |
} |
|
|
| goto bad; |
goto bad; |
| } |
} |
| ip->ip_dst = ipaddr.sin_addr; |
ip->ip_dst = ipaddr.sin_addr; |
| bcopy((caddr_t)&(IA_SIN(ia)->sin_addr), |
bcopy((caddr_t)&ia->ia_addr.sin_addr, |
| (caddr_t)(cp + off), sizeof(struct in_addr)); |
(caddr_t)(cp + off), sizeof(struct in_addr)); |
| cp[IPOPT_OFFSET] += sizeof(struct in_addr); |
cp[IPOPT_OFFSET] += sizeof(struct in_addr); |
| /* |
/* |
|
|
| code = ICMP_UNREACH_HOST; |
code = ICMP_UNREACH_HOST; |
| goto bad; |
goto bad; |
| } |
} |
| bcopy((caddr_t)&(IA_SIN(ia)->sin_addr), |
bcopy((caddr_t)&ia->ia_addr.sin_addr, |
| (caddr_t)(cp + off), sizeof(struct in_addr)); |
(caddr_t)(cp + off), sizeof(struct in_addr)); |
| cp[IPOPT_OFFSET] += sizeof(struct in_addr); |
cp[IPOPT_OFFSET] += sizeof(struct in_addr); |
| break; |
break; |
|
|
| m->m_pkthdr.rcvif); |
m->m_pkthdr.rcvif); |
| if (ia == 0) |
if (ia == 0) |
| continue; |
continue; |
| bcopy((caddr_t)&IA_SIN(ia)->sin_addr, |
bcopy((caddr_t)&ia->ia_addr.sin_addr, |
| (caddr_t)sin, sizeof(struct in_addr)); |
(caddr_t)sin, sizeof(struct in_addr)); |
| ipt->ipt_ptr += sizeof(struct in_addr); |
ipt->ipt_ptr += sizeof(struct in_addr); |
| break; |
break; |