version 1.32, 1996/08/14 03:46:44 |
version 1.33, 1996/09/06 05:07:44 |
Line 153 struct route ipforward_rt; |
|
Line 153 struct route ipforward_rt; |
|
void |
void |
ipintr() |
ipintr() |
{ |
{ |
register struct ip *ip; |
register struct ip *ip = NULL; |
register struct mbuf *m; |
register struct mbuf *m; |
register struct ipq *fp; |
register struct ipq *fp; |
register struct in_ifaddr *ia; |
register struct in_ifaddr *ia; |
struct ipqent *ipqe; |
struct ipqent *ipqe; |
int hlen, mff, s; |
int hlen = 0, mff, s; |
|
#ifdef PACKET_FILTER |
|
struct packet_filter_hook *pfh; |
|
struct mbuf *m0; |
|
#endif /* PACKET_FILTER */ |
|
|
next: |
next: |
/* |
/* |
|
|
m_adj(m, ip->ip_len - m->m_pkthdr.len); |
m_adj(m, ip->ip_len - m->m_pkthdr.len); |
} |
} |
|
|
|
#ifdef PACKET_FILTER |
|
/* |
|
* Run through list of hooks for input packets. |
|
*/ |
|
m0 = m; |
|
for (pfh = pfil_hook_get(PFIL_IN); pfh; pfh = pfh->pfil_link.le_next) |
|
if (pfh->pfil_func) { |
|
if (pfh->pfil_func(ip, hlen, m->m_pkthdr.rcvif, 0, &m0)) |
|
goto bad; |
|
ip = mtod(m = m0, struct ip *); |
|
} |
|
#endif /* PACKET_FILTER */ |
|
|
/* |
/* |
* Process options and, if not destined for us, |
* Process options and, if not destined for us, |
* ship it on. ip_dooptions returns 1 when an |
* ship it on. ip_dooptions returns 1 when an |
|
|
(*inetsw[ip_protox[ip->ip_p]].pr_input)(m, hlen); |
(*inetsw[ip_protox[ip->ip_p]].pr_input)(m, hlen); |
goto next; |
goto next; |
bad: |
bad: |
|
#ifdef PACKET_FILTER |
|
m0 = m; |
|
for (pfh = pfil_hook_get(PFIL_BAD); pfh; pfh = pfh->pfil_link.le_next) |
|
if (pfh->pfil_func) { |
|
(void)pfh->pfil_func(ip, hlen, m->m_pkthdr.rcvif, 2, &m0); |
|
ip = mtod(m = m0, struct ip *); |
|
} |
|
#endif /* PACKET_FILTER */ |
m_freem(m); |
m_freem(m); |
goto next; |
goto next; |
} |
} |