Date: Sun, 30 Nov 2003 14:26:31 +0200 From: "Ivo Vachkov" <ivo@bsdmail.org> To: freebsd-ipfw@freebsd.org Cc: freebsd-net@freebsd.org Message-ID: <20031130122631.7868.qmail@bsdmail.com>
next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format... ------------=_1070195191-6845-0 Content-Type: text/plain; charset="iso-8859-1" Content-Disposition: inline Content-Transfer-Encoding: 7bit Hi all, I've been trying to write some code using divert(4) sockets, but i meet the following difficulties: - when i get diverted packet it has both source and destination IP addresses the same. The attached code shows: 192.168.0.2 -> 192.168.0.2 getting 84 bytes, real: 84 and the way I run it is (on 192.168.0.2): ipfw add 100 divert 8670 ip from any to 192.168.0.1 burstd then on 192.168.0.2 I issue "ping 192.168.0.1" - the manual says this happens with recvfrom()/sendto(), but recv() is mentioned to be same as recvfrom() and read()/write() sometimes fail. After digging some kernel code I've found that around line 167 in ip_divert.c we have: /* * Record receive interface address, if any. * But only for incoming packets. */ divsrc.sin_addr.s_addr = 0; if (incoming) { struct ifaddr *ifa; /* Sanity check */ KASSERT((m->m_flags & M_PKTHDR), ("%s: !PKTHDR", __FUNCTION__)); /* Find IP address for receive interface */ TAILQ_FOREACH(ifa, &m->m_pkthdr.rcvif->if_addrhead, ifa_link) { if (ifa->ifa_addr == NULL) continue; if (ifa->ifa_addr->sa_family != AF_INET) continue; divsrc.sin_addr = ((struct sockaddr_in *) ifa->ifa_addr)->sin_addr; break; } } which (as I think) changes the address of diverted packet. What is the reason for that and are there any workarounds to get real source and destination IP addresses from a diverted packet. I need both because I try to make connection tracking based on src<->dst . Any help with that is appretiated. Any divert code welcome. I've looked through natd.c and it was helpfull. Ivo Vachkov P.S. Excuse my: - English - long pastes - (sometimes) lack of kernel code understanding -- _______________________________________________ Get your free email from http://mymail.bsdmail.com Powered by Outblaze ------------=_1070195191-6845-0 Content-Type: application/octet-stream; name="Makefile" Content-Disposition: attachment; filename="Makefile" Content-Transfer-Encoding: base64 Q0MJPQljYwpDRkxBR1MJPQktZyAtV2FsbCAtV3BvaW50ZXItYXJpdGgKTElC Uwk9CgpTUkMJPQlidXJzdGQuYwpPQkoJPQkKUFJPRwk9CWJ1cnN0ZAoKYWxs OiQoU1JDKQoJJChDQykgJChDRkxBR1MpIC1jICouYwoJJChDQykgJChDRkxB R1MpIC1vICQoUFJPRykgJChTUkMpICQoT0JKKSAkKExJQlMpCgpjbGVhbjoK CXJtIC1mICQoUFJPRykgKi5jb3JlICoubyBldGMvKgo= ------------=_1070195191-6845-0 Content-Type: application/octet-stream; name="burstd.h" Content-Disposition: attachment; filename="burstd.h" Content-Transfer-Encoding: base64 I2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5jbHVkZSA8c3lzL3NvY2tldC5o PgojaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgojaW5jbHVkZSA8c3lzL3RpbWUu aD4KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KI2luY2x1ZGUgPG5ldGluZXQv aW5fc3lzdG0uaD4KI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4KI2luY2x1ZGUg PG1hY2hpbmUvaW5fY2tzdW0uaD4KI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+ CiNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgojaW5jbHVkZSA8bmV0aW5ldC9p cF9pY21wLmg+CiNpbmNsdWRlIDxuZXQvaWYuaD4KI2luY2x1ZGUgPG5ldC9p Zl9kbC5oPgojaW5jbHVkZSA8bmV0L3JvdXRlLmg+CiNpbmNsdWRlIDxhcnBh L2luZXQuaD4KI2luY2x1ZGUgPGFsaWFzLmg+CiNpbmNsdWRlIDxjdHlwZS5o PgojaW5jbHVkZSA8ZXJyLmg+CiNpbmNsdWRlIDxlcnJuby5oPgojaW5jbHVk ZSA8bmV0ZGIuaD4KI2luY2x1ZGUgPHNpZ25hbC5oPgojaW5jbHVkZSA8c3Rk aW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+ CiNpbmNsdWRlIDxzeXNsb2cuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgoKLy8g I2luY2x1ZGUgInF1ZXVlLmgiCgojZGVmaW5lIENPTkYJCSJidXJzdGQuY29u ZiIKCi8qIENvbm5lY3Rpb24gdHlwZTsgYnVyc3RpbmcgKi8KdHlwZWRlZiBz dHJ1Y3QgX2Zsb3cKewoJc3RydWN0IGluX2FkZHIgCXNyY19hZGRyOwoJc3Ry dWN0IGluX2FkZHIJZHN0X2FkZHI7Cglsb25nIGxvbmcJYnl0ZXM7Cglsb25n IGxvbmcJbGFzdDsKCWludAkJYWxpdmU7CglpbnQgCQl1c2VkOwp9Q09OTkVD VElPTjsKCnR5cGVkZWYgc3RydWN0IF9ub2RlCnsKCXN0cnVjdCBfbm9kZSAJ Km5leHQ7CglzdHJ1Y3QgX2Zsb3cJKmRhdGE7Cn1DT05OX0xJU1Q7Cgpsb25n IGxvbmcgCWxpbWl0LCByYXRlOwoKLyogU29tZSBmdW5jdGlvbnMgKi8KCi8q IHNpZ25hbC5jICovCnZvaWQgc2lnX2Fscm1faG5kKGludCBzaWcpOwovKiBp bml0LmMgKi8Kdm9pZCBzZXRfcmF0ZV9saW1pdCgpOwovKiBwYXJlbnQuYyAq LwppbnQgc2VhcmNoX2Nvbm4oQ09OTkVDVElPTiBjb25zW10sIHN0cnVjdCBp bl9hZGRyIHNhZGRyLCBzdHJ1Y3QgaW5fYWRkciBkYWRkcik7CmludCBhZGRf Y29ubihDT05ORUNUSU9OIGNvbnNbXSwgQ09OTkVDVElPTiBzX2Nvbm4pOwo= ------------=_1070195191-6845-0 Content-Type: application/octet-stream; name="burstd.c" Content-Disposition: attachment; filename="burstd.c" Content-Transfer-Encoding: base64 I2luY2x1ZGUgImJ1cnN0ZC5oIgoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQp7CglpbnQgCQkJZGl2SU87CglmZF9zZXQJCQlyZWFkbWFzazsK CXN0cnVjdCBzb2NrYWRkcl9pbiAJc2E7CglpbnQgCQkJYnl0ZXMsIG9sZGJ5 dGVzLCBhZGRyU2l6ZTsKCXN0cnVjdCBpcCoJCWlwOwoJdm9pZCoJCQlidWZm OwoJCgoJYnVmZiA9ICh2b2lkICopbWFsbG9jKElQX01BWFBBQ0tFVCk7Cglt ZW1zZXQoKHZvaWQgKilidWZmLCAwLCBJUF9NQVhQQUNLRVQpOwoJCglpZigo ZGl2SU8gPSBzb2NrZXQoUEZfSU5FVCwgU09DS19SQVcsIElQUFJPVE9fRElW RVJUKSkgPT0gLTEpCgl7CgkJcGVycm9yKCJzb2NrZXQiKTsKCQlleGl0KC0x KTsKCX0KCglzYS5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKCXNhLnNpbl9hZGRy LnNfYWRkciA9IElOQUREUl9BTlk7CglzYS5zaW5fcG9ydCA9IGh0b25zKDg2 NzApOwoJaWYoYmluZChkaXZJTywgKHN0cnVjdCBzb2NrYWRkciopJnNhLCBz aXplb2Yoc3RydWN0IHNvY2thZGRyKSkgPT0gLTEpCgl7CgkJcGVycm9yKCJi aW5kIik7CgkJZXhpdCgtMSk7Cgl9CgoJRkRfWkVSTygmcmVhZG1hc2spOwoJ RkRfU0VUKGRpdklPLCAmcmVhZG1hc2spOwoJCgl3aGlsZSgxKQoJewoJCWlm KHNlbGVjdChnZXRkdGFibGVzaXplKCkgKyAxLCAmcmVhZG1hc2ssIE5VTEws IE5VTEwsIE5VTEwpID09IC0xKQoJCXsKCQkJcGVycm9yKCJzZWxlY3QiKTsK CQkJZXhpdCgtMSk7CgkJfQoJCWlmKEZEX0lTU0VUKGRpdklPLCAmcmVhZG1h c2spKQoJCXsKCQkJYWRkclNpemUgPSBzaXplb2Yoc2EpOwoJCQlpZigob2xk Ynl0ZXMgPSByZWN2ZnJvbShkaXZJTywgYnVmZiwgSVBfTUFYUEFDS0VULCAw LCAoc3RydWN0IHNvY2thZGRyKikgJnNhLCAmYWRkclNpemUpKSA9PSAtMSkK CQkJewoJCQkJcGVycm9yKCJyZWN2ZnJvbSIpOwoJCQkJZXhpdCgtMSk7CgkJ CX0KCQkKCQkJaXAgPSAoc3RydWN0IGlwKikgYnVmZjsKCQkJcHJpbnRmKCIl cyAtPiAlc1xuIiwgaW5ldF9udG9hKGlwLT5pcF9zcmMpLCBpbmV0X250b2Eo aXAtPmlwX2RzdCkpOwoJCQlwcmludGYoImdldHRpbmcgJWQgYnl0ZXMsIHJl YWw6ICVkXG4iLCBvbGRieXRlcywgbnRvaHMoaXAtPmlwX2xlbikpOwoJCQlw cmludGYoInNhLnNpbl9hZGRyLnNfYWRkciA9ICVzXG4iLCBpbmV0X250b2Eo c2Euc2luX2FkZHIpKTsKCQkJCgkJCWlmKChieXRlcyA9IHNlbmR0byhkaXZJ TywgYnVmZiwgb2xkYnl0ZXMsIDAsIChzdHJ1Y3Qgc29ja2FkZHIqKSAmc2Es IGFkZHJTaXplKSkgIT0gb2xkYnl0ZXMpCgkJCXsKCQkJCXByaW50ZigiRGlm ZmVyZW50IHJlY2lldmVkL3NlbnQgdmFsdWVzOiAlZCA8LT4gJWRcbiIsIG9s ZGJ5dGVzLCBieXRlcyk7CgkJCQlwZXJyb3IoInNlbmR0byIpOwoJCQkJZXhp dCgtMSk7CgkJCX0KCQl9Cgl9CglyZXR1cm4gMDsKfQo= ------------=_1070195191-6845-0--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20031130122631.7868.qmail>