|  | *** ip6_input.c.orig	Sun Sep  2 12:51:02 2001 | 
|  | --- ip6_input.c	Mon Sep  3 22:25:23 2001 | 
|  | *************** | 
|  | *** 130,135 **** | 
|  | --- 130,138 ---- | 
|  | #ifdef PULLDOWN_TEST | 
|  | static struct mbuf *ip6_pullexthdr __P((struct mbuf *, size_t, int)); | 
|  | #endif | 
|  | + #if defined(IPFILTER) || defined(IPFILTER_LKM) | 
|  | + extern int (*fr_checkp) __P((struct ip *, int, struct ifnet *, int, struct mbuf **)); | 
|  | + #endif | 
|  |  | 
|  | /* | 
|  | * IP6 initialization: fill in IP6 protocol switch table. | 
|  | *************** | 
|  | *** 274,279 **** | 
|  | --- 277,302 ---- | 
|  | in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_hdrerr); | 
|  | goto bad; | 
|  | } | 
|  | + | 
|  | + #if defined(IPFILTER) || defined(IPFILTER_LKM) | 
|  | + 	/* | 
|  | + 	 * Check if we want to allow this packet to be processed. | 
|  | + 	 * Consider it to be bad if not. | 
|  | + 	 */ | 
|  | + 	if (fr_checkp != NULL) { | 
|  | + 		struct mbuf *m0 = m; | 
|  | + | 
|  | + 		if ((*fr_checkp)((struct ip *)ip6, sizeof(*ip6), | 
|  | + 				 m->m_pkthdr.rcvif, 0, &m0)) { | 
|  | + 			return; | 
|  | + 		} | 
|  | + 		m = m0; | 
|  | + 		if (m == 0) {  /* in case of 'fastroute' */ | 
|  | + 			return; | 
|  | + 		} | 
|  | + 		ip6 = mtod(m, struct ip6_hdr *); | 
|  | + 	} | 
|  | + #endif | 
|  |  | 
|  | ip6stat.ip6s_nxthist[ip6->ip6_nxt]++; | 
|  |  | 
|  | *** ip6_output.c.orig	Sun Sep  2 12:51:21 2001 | 
|  | --- ip6_output.c	Mon Sep  3 22:27:46 2001 | 
|  | *************** | 
|  | *** 113,118 **** | 
|  | --- 113,122 ---- | 
|  | struct mbuf *ip6e_dest2; | 
|  | }; | 
|  |  | 
|  | + #if defined(IPFILTER) || defined(IPFILTER_LKM) | 
|  | + extern int (*fr_checkp) __P((struct ip *, int, struct ifnet *, int, struct mbuf **)); | 
|  | + #endif | 
|  | + | 
|  | static int ip6_pcbopts __P((struct ip6_pktopts **, struct mbuf *, | 
|  | struct socket *)); | 
|  | static int ip6_setmoptions __P((int, struct ip6_moptions **, struct mbuf *)); | 
|  | *************** | 
|  | *** 910,915 **** | 
|  | --- 914,938 ---- | 
|  | m->m_pkthdr.rcvif = NULL; | 
|  | } | 
|  |  | 
|  | + | 
|  | + #if defined(IPFILTER) || defined(IPFILTER_LKM) | 
|  | + 	/* | 
|  | + 	 * looks like most checking has been done now...do a filter check | 
|  | + 	 */ | 
|  | + 	if (fr_checkp != NULL) { | 
|  | + 		struct mbuf *m1 = m; | 
|  | + 		if ((*fr_checkp)((struct ip *)ip6, sizeof(*ip6), ifp, 1, &m1)) { | 
|  | + 			error = EHOSTUNREACH; | 
|  | + 			goto done; | 
|  | + 		} | 
|  | + 		m = m1; | 
|  | + 		if (m1 == 0) { /* in case of 'fastroute' */ | 
|  | + 			error = 0; | 
|  | + 			goto done; | 
|  | + 		} | 
|  | + 		ip6 = mtod(m, struct ip6_hdr *); | 
|  | + 	} | 
|  | + #endif | 
|  | /* | 
|  | * Send the packet to the outgoing interface. | 
|  | * If necessary, do IPv6 fragmentation before sending. |