| version 1.249, 2007/05/02 20:40:25 |
version 1.249.2.1, 2007/08/15 13:49:45 |
|
|
| */ |
*/ |
| IPQ_LOCK(); |
IPQ_LOCK(); |
| hash = IPREASS_HASH(ip->ip_src.s_addr, ip->ip_id); |
hash = IPREASS_HASH(ip->ip_src.s_addr, ip->ip_id); |
| /* XXX LIST_FOREACH(fp, &ipq[hash], ipq_q) */ |
LIST_FOREACH(fp, &ipq[hash], ipq_q) { |
| for (fp = LIST_FIRST(&ipq[hash]); fp != NULL; |
|
| fp = LIST_NEXT(fp, ipq_q)) { |
|
| if (ip->ip_id == fp->ipq_id && |
if (ip->ip_id == fp->ipq_id && |
| in_hosteq(ip->ip_src, fp->ipq_src) && |
in_hosteq(ip->ip_src, fp->ipq_src) && |
| in_hosteq(ip->ip_dst, fp->ipq_dst) && |
in_hosteq(ip->ip_dst, fp->ipq_dst) && |
| Line 1895 ip_forward(struct mbuf *m, int srcrt) |
|
| Line 1893 ip_forward(struct mbuf *m, int srcrt) |
|
| */ |
*/ |
| if (rt->rt_ifp == m->m_pkthdr.rcvif && |
if (rt->rt_ifp == m->m_pkthdr.rcvif && |
| (rt->rt_flags & (RTF_DYNAMIC|RTF_MODIFIED)) == 0 && |
(rt->rt_flags & (RTF_DYNAMIC|RTF_MODIFIED)) == 0 && |
| !in_nullhost(satosin(rt_key(rt))->sin_addr) && |
!in_nullhost(satocsin(rt_getkey(rt))->sin_addr) && |
| ipsendredirects && !srcrt) { |
ipsendredirects && !srcrt) { |
| if (rt->rt_ifa && |
if (rt->rt_ifa && |
| (ip->ip_src.s_addr & ifatoia(rt->rt_ifa)->ia_subnetmask) == |
(ip->ip_src.s_addr & ifatoia(rt->rt_ifa)->ia_subnetmask) == |
| Line 2081 ip_savecontrol(struct inpcb *inp, struct |
|
| Line 2079 ip_savecontrol(struct inpcb *inp, struct |
|
| if (inp->inp_flags & INP_RECVIF) { |
if (inp->inp_flags & INP_RECVIF) { |
| struct sockaddr_dl sdl; |
struct sockaddr_dl sdl; |
| |
|
| sdl.sdl_len = offsetof(struct sockaddr_dl, sdl_data[0]); |
sockaddr_dl_init(&sdl, (m->m_pkthdr.rcvif != NULL) ? |
| sdl.sdl_family = AF_LINK; |
m->m_pkthdr.rcvif->if_index : 0, 0, NULL, 0, NULL, 0); |
| sdl.sdl_index = m->m_pkthdr.rcvif ? |
*mp = sbcreatecontrol(&sdl, sdl.sdl_len, IP_RECVIF, IPPROTO_IP); |
| m->m_pkthdr.rcvif->if_index : 0; |
|
| sdl.sdl_nlen = sdl.sdl_alen = sdl.sdl_slen = 0; |
|
| *mp = sbcreatecontrol((void *) &sdl, sdl.sdl_len, |
|
| IP_RECVIF, IPPROTO_IP); |
|
| if (*mp) |
if (*mp) |
| mp = &(*mp)->m_next; |
mp = &(*mp)->m_next; |
| } |
} |