diff options
Diffstat (limited to 'contrib/ipfilter/mli_ipl.c')
-rw-r--r-- | contrib/ipfilter/mli_ipl.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/contrib/ipfilter/mli_ipl.c b/contrib/ipfilter/mli_ipl.c index 24120296070a..94b1bc2ab83e 100644 --- a/contrib/ipfilter/mli_ipl.c +++ b/contrib/ipfilter/mli_ipl.c @@ -62,7 +62,12 @@ static __psunsigned_t ipfk_code[4]; typedef struct nif { struct nif *nf_next; struct ifnet *nf_ifp; +#if IRIX < 605 int (*nf_output)(struct ifnet *, struct mbuf *, struct sockaddr *); +#else + int (*nf_output)(struct ifnet *, struct mbuf *, struct sockaddr *, + struct rtentry *); +#endif char nf_name[IFNAMSIZ]; int nf_unit; } nif_t; @@ -74,7 +79,12 @@ extern int in_interfaces; extern ipnat_t *nat_list; static int +#if IRIX < 605 ipl_if_output(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst) +#else +ipl_if_output(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst, + struct rtentry *rt) +#endif { nif_t *nif; @@ -112,19 +122,19 @@ ipl_if_output(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst) #if IPFDEBUG >= 4 if (!MBUF_IS_CLUSTER(m) && ((m->m_off < MMINOFF) || (m->m_off > MMAXOFF))) { printf("IP Filter: ipl_if_output: bad m_off m_type=%d m_flags=0x%lx m_off=0x%lx\n", m->m_type, (unsigned long)(m->m_flags), m->m_off); - return (*nif->nf_output)(ifp, m, dst); + goto done; } #endif if (m->m_len < sizeof(char)) { printf("IP Filter: ipl_if_output: mbuf block too small (m_len=%d) for IP vers+hlen, m_type=%d m_flags=0x%lx\n", m->m_len, m->m_type, (unsigned long)(m->m_flags)); - return (*nif->nf_output)(ifp, m, dst); + goto done; } ip = mtod(m, struct ip *); if (ip->ip_v != IPVERSION) { #if IPFDEBUG >= 4 printf("IP Filter: ipl_if_output: bad ip_v m_type=%d m_flags=0x%lx m_off=0x%lx\n", m->m_type, (unsigned long)(m->m_flags), m->m_off); #endif - return (*nif->nf_output)(ifp, m, dst); + goto done; } hlen = ip->ip_hl << 2; @@ -142,7 +152,12 @@ ipl_if_output(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst) break; } } +done: +#if IRIX < 605 return (*nif->nf_output)(ifp, m, dst); +#else + return (*nif->nf_output)(ifp, m, dst, rt); +#endif } int |