aboutsummaryrefslogtreecommitdiff
path: root/sys/netinet/ip_divert.h
diff options
context:
space:
mode:
authorLuigi Rizzo <luigi@FreeBSD.org>2010-01-04 19:01:22 +0000
committerLuigi Rizzo <luigi@FreeBSD.org>2010-01-04 19:01:22 +0000
commit7173b6e55475228fc29873667bfdb7561450642a (patch)
treee632a2ed87ca91743db2bb3ace9525de5d414d89 /sys/netinet/ip_divert.h
parent290dac20e61cccee6ac73284a3b181fe59e4473e (diff)
downloadsrc-7173b6e55475228fc29873667bfdb7561450642a.tar.gz
src-7173b6e55475228fc29873667bfdb7561450642a.zip
Various cleanup done in ipfw3-head branch including:
- use a uniform mtag format for all packets that exit and re-enter the firewall in the middle of a rulechain. On reentry, all tags containing reinject info are renamed to MTAG_IPFW_RULE so the processing is simpler. - make ipfw and dummynet use ip_len and ip_off in network format everywhere. Conversion is done only once instead of tracking the format in every place. - use a macro FREE_PKT to dispose of mbufs. This eases portability. On passing i also removed a few typos, staticise or localise variables, remove useless declarations and other minor things. Overall the code shrinks a bit and is hopefully more readable. I have tested functionality for all but ng_ipfw and if_bridge/if_ethersubr. For ng_ipfw i am actually waiting for feedback from glebius@ because we might have some small changes to make. For if_bridge and if_ethersubr feedback would be welcome (there are still some redundant parts in these two modules that I would like to remove, but first i need to check functionality).
Notes
Notes: svn path=/head/; revision=201527
Diffstat (limited to 'sys/netinet/ip_divert.h')
-rw-r--r--sys/netinet/ip_divert.h63
1 files changed, 15 insertions, 48 deletions
diff --git a/sys/netinet/ip_divert.h b/sys/netinet/ip_divert.h
index 503635549825..b8bcf4fb675f 100644
--- a/sys/netinet/ip_divert.h
+++ b/sys/netinet/ip_divert.h
@@ -36,53 +36,20 @@
#define _NETINET_IP_DIVERT_H_
/*
- * Sysctl declaration.
- */
-#ifdef SYSCTL_DECL
-SYSCTL_DECL(_net_inet_divert);
-#endif
-
-/*
- * Divert socket definitions.
- */
-struct divert_tag {
- u_int32_t info; /* port & flags */
- u_int16_t cookie; /* ipfw rule number */
-};
-
-/*
- * Return the divert cookie associated with the mbuf; if any.
- */
-static __inline u_int16_t
-divert_cookie(struct m_tag *mtag)
-{
- return ((struct divert_tag *)(mtag+1))->cookie;
-}
-static __inline u_int16_t
-divert_find_cookie(struct mbuf *m)
-{
- struct m_tag *mtag = m_tag_find(m, PACKET_TAG_DIVERT, NULL);
- return mtag ? divert_cookie(mtag) : 0;
-}
-
-/*
- * Return the divert info associated with the mbuf; if any.
+ * divert has no custom kernel-userland API.
+ *
+ * All communication occurs through a sockaddr_in socket where
+ *
+ * kernel-->userland
+ * sin_port = matching rule, host format;
+ * sin_addr = IN: first address of the incoming interface;
+ * OUT: INADDR_ANY
+ * sin_zero = if fits, the interface name (max 7 bytes + NUL)
+ *
+ * userland->kernel
+ * sin_port = restart-rule - 1, host order
+ * (we restart at sin_port + 1)
+ * sin_addr = IN: address of the incoming interface;
+ * OUT: INADDR_ANY
*/
-static __inline u_int32_t
-divert_info(struct m_tag *mtag)
-{
- return ((struct divert_tag *)(mtag+1))->info;
-}
-static __inline u_int32_t
-divert_find_info(struct mbuf *m)
-{
- struct m_tag *mtag = m_tag_find(m, PACKET_TAG_DIVERT, NULL);
- return mtag ? divert_info(mtag) : 0;
-}
-
-typedef void ip_divert_packet_t(struct mbuf *m, int incoming);
-extern ip_divert_packet_t *ip_divert_ptr;
-
-extern void div_input(struct mbuf *, int);
-extern void div_ctlinput(int, struct sockaddr *, void *);
#endif /* _NETINET_IP_DIVERT_H_ */