*** /sys/netinet/ip_output.c.orig Sat May 24 14:07:24 1997 --- /sys/netinet/ip_output.c Sat May 24 15:00:29 1997 *************** *** 67,72 **** --- 67,76 ---- #else #undef COMPAT_IPFW #endif + #if defined(IPFILTER_LKM) || defined(IPFILTER) + extern int (*fr_checkp) __P((struct ip *, int, struct ifnet *, int, struct mbuf **)); + #endif + u_short ip_id; *************** *** 75,81 **** __P((struct ifnet *, struct mbuf *, struct sockaddr_in *)); static int ip_getmoptions __P((int, struct ip_moptions *, struct mbuf **)); ! static int ip_optcopy __P((struct ip *, struct ip *)); static int ip_pcbopts __P((struct mbuf **, struct mbuf *)); static int ip_setmoptions __P((int, struct ip_moptions **, struct mbuf *)); --- 79,85 ---- __P((struct ifnet *, struct mbuf *, struct sockaddr_in *)); static int ip_getmoptions __P((int, struct ip_moptions *, struct mbuf **)); ! int ip_optcopy __P((struct ip *, struct ip *)); static int ip_pcbopts __P((struct mbuf **, struct mbuf *)); static int ip_setmoptions __P((int, struct ip_moptions **, struct mbuf *)); *************** *** 338,343 **** --- 342,356 ---- * - Wrap: fake packet's addr/port * - Encapsulate: put it in another IP and send out. */ + #if defined(IPFILTER_LKM) || defined(IPFILTER) + if (fr_checkp) { + struct mbuf *m1 = m; + + if ((error = (*fr_checkp)(ip, hlen, ifp, 1, &m1)) || !m1) + goto done; + ip = mtod(m = m1, struct ip *); + } + #endif #ifdef COMPAT_IPFW if (ip_nat_ptr && !(*ip_nat_ptr)(&ip, &m, ifp, IP_NAT_OUT)) { *************** *** 559,565 **** * Copy options from ip to jp, * omitting those not copied during fragmentation. */ ! static int ip_optcopy(ip, jp) struct ip *ip, *jp; { --- 574,580 ---- * Copy options from ip to jp, * omitting those not copied during fragmentation. */ ! int ip_optcopy(ip, jp) struct ip *ip, *jp; {