Date: Tue, 28 Mar 2000 12:32:43 +0930 From: Ian West <ian@niw.com.au> To: freebsd-net@freebsd.org Subject: ipfw tee Message-ID: <20000328123243.I78585@rose.niw.com.au>
next in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20000328123243.I78585>