Date: Tue, 28 Mar 2000 14:39:00 +0930 From: Ian West <ian@niw.com.au> To: Ian West <freebsd-net@freebsd.org> Subject: Re: ipfw tee Message-ID: <20000328143900.L78585@rose.niw.com.au> In-Reply-To: <20000328123243.I78585@rose.niw.com.au>; from ian@niw.com.au on Tue, Mar 28, 2000 at 12:32:43PM %2B0930 References: <20000328123243.I78585@rose.niw.com.au>
next in thread | previous in thread | raw e-mail | index | archive | help
To add to previous, after a bit more testing, the following patch fixes an issue where the ipfw rule number was not passed through to recvfrom call in client. I now have a consumer of tee'd packets running, and it still seems to be working without any problems. I have not yet tried this in an environment with a real divert (say for nat) working yet. Index: ip_fw.c ========================================================================= RCS file: /cvs/freebsd/src/sys/netinet/ip_fw.c,v retrieving revision 1.132 diff -u -r1.132 ip_fw.c --- ip_fw.c 2000/03/14 14:11:53 1.132 +++ ip_fw.c 2000/03/28 05:05:35 @@ -1278,8 +1278,20 @@ *cookie = f->fw_number; return(f->fw_divert_port); case IP_FW_F_TEE: - *cookie = f->fw_number; - return(f->fw_divert_port | IP_FW_PORT_TEE_FLAG); + { + struct mbuf *clone; + struct ip *cip; + u_int16_t divert_cookie; + divert_cookie=ip_divert_cookie; + ip_divert_cookie = f->fw_number; + clone=m_dup(*m, M_DONTWAIT); + cip = mtod(clone, struct ip *); + HTONS(cip->ip_len); + HTONS(cip->ip_off); + divert_packet(clone,0,f->fw_divert_port); + ip_divert_cookie=divert_cookie; + } + continue; #endif case IP_FW_F_SKIPTO: /* XXX check */ if ( f->next_rule_ptr ) ========================================================================= On Tue, Mar 28, 2000 at 12:32:43PM +0930, Ian West wrote: > Hi, I have been looking at ipfw tee operation, specifically to see if I > can make it tee to a divert socket without terminating. I would like to > use this for logging traffic with more detail as to source and > destination addresses without running through and processing syslog > files :-). > > My though is to be able to tee traffic outbound prior to nat, and inbound > after nat so that I can see the real source and dest addresses. > > It seems from a couple of hours (minimal) looking at it that by 'teeing' > in the ip_fw_chk itself, we can just 'continue' as per count, and all > works well. I have tested this briefly, and it doesn;t seem to kill > anything. Can anyone point me at other important things to look at ? > > vmstat -m does not show any mbuf's going missing. netstat -m shows no > slow increase. Everything still seems to work :-) > > Output from ipfw -a l on the box I am testing with.. > > 01000 110270 149841377 tee 12345 ip from any to any > 65000 110270 149841377 allow ip from any to any > 65535 0 0 deny ip from any to any > > This suggests that it is doing roughly what I want, although I have not > hooked anything onto the divert socket so I cannot say for sure. > > Is what I am doing valid ? (close ?) > > The diff that I have been testing with is below.. > > Index: ip_fw.c > =================================================================== > RCS file: /cvs/freebsd/src/sys/netinet/ip_fw.c,v > retrieving revision 1.132 > diff -u -r1.132 ip_fw.c > --- ip_fw.c 2000/03/14 14:11:53 1.132 > +++ ip_fw.c 2000/03/28 02:39:16 > @@ -1278,8 +1278,17 @@ > *cookie = f->fw_number; > return(f->fw_divert_port); > case IP_FW_F_TEE: > - *cookie = f->fw_number; > - return(f->fw_divert_port | IP_FW_PORT_TEE_FLAG); > + { > + struct mbuf *clone; > + struct ip *cip; > + *cookie = f->fw_number; > + clone=m_dup(*m, M_DONTWAIT); > + cip = mtod(clone, struct ip *); > + HTONS(cip->ip_len); > + HTONS(cip->ip_off); > + divert_packet(clone,0,f->fw_divert_port); > + } > + continue; > #endif > case IP_FW_F_SKIPTO: /* XXX check */ > if ( f->next_rule_ptr ) > > > > To Unsubscribe: send mail to majordomo@FreeBSD.org > with "unsubscribe freebsd-net" in the body of the message To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20000328143900.L78585>