aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjoern A. Zeeb <bz@FreeBSD.org>2019-10-23 23:10:12 +0000
committerBjoern A. Zeeb <bz@FreeBSD.org>2019-10-23 23:10:12 +0000
commitf1664f32582ea3e30094498879c067eed428b3b2 (patch)
tree4353a5d6414aec6248a25a4c4cc88f1dea35fc69
parent21f08a074d6589ed1212289811a109c156ecc027 (diff)
downloadsrc-f1664f32582ea3e30094498879c067eed428b3b2.tar.gz
src-f1664f32582ea3e30094498879c067eed428b3b2.zip
frag6: add "big picture"
Add some ASCII relation of how the bits plug together. The terminology difference of "fragmented packets" and "fragment packets" is subtle. While here clear up more whitespace and comments. No functional change. MFC after: 3 weeks Sponsored by: Netflix
Notes
Notes: svn path=/head/; revision=353966
-rw-r--r--sys/netinet6/frag6.c27
1 files changed, 22 insertions, 5 deletions
diff --git a/sys/netinet6/frag6.c b/sys/netinet6/frag6.c
index 936fa959b742..b1b24260231b 100644
--- a/sys/netinet6/frag6.c
+++ b/sys/netinet6/frag6.c
@@ -69,6 +69,22 @@ __FBSDID("$FreeBSD$");
#include <security/mac/mac_framework.h>
#endif
+/*
+ * A "big picture" of how IPv6 fragment queues are all linked together.
+ *
+ * struct ip6qbucket ip6qb[...]; hashed buckets
+ * ||||||||
+ * |
+ * +--- TAILQ(struct ip6q, packets) *q6; tailq entries holding
+ * |||||||| fragmented packets
+ * | (1 per original packet)
+ * |
+ * +--- TAILQ(struct ip6asfrag, ip6q_frags) *af6; tailq entries of IPv6
+ * | *ip6af;fragment packets
+ * | for one original packet
+ * + *mbuf
+ */
+
/* Reassembly headers are stored in hash buckets. */
#define IP6REASS_NHASH_LOG2 10
#define IP6REASS_NHASH (1 << IP6REASS_NHASH_LOG2)
@@ -84,10 +100,10 @@ struct ip6qbucket {
struct ip6asfrag {
TAILQ_ENTRY(ip6asfrag) ip6af_tq;
struct mbuf *ip6af_m;
- int ip6af_offset; /* offset in ip6af_m to next header */
- int ip6af_frglen; /* fragmentable part length */
- int ip6af_off; /* fragment offset */
- bool ip6af_mff; /* more fragment bit in frag off */
+ int ip6af_offset; /* Offset in ip6af_m to next header. */
+ int ip6af_frglen; /* Fragmentable part length. */
+ int ip6af_off; /* Fragment offset. */
+ bool ip6af_mff; /* More fragment bit in frag off. */
};
#define IP6_REASS_MBUF(ip6af) (*(struct mbuf **)&((ip6af)->ip6af_m))
@@ -309,7 +325,7 @@ frag6_cleanup(void *arg __unused, struct ifnet *ifp)
m = IP6_REASS_MBUF(af6);
- /* clear no longer valid rcvif pointer */
+ /* Clear no longer valid rcvif pointer. */
if (m->m_pkthdr.rcvif == ifp)
m->m_pkthdr.rcvif = NULL;
}
@@ -563,6 +579,7 @@ frag6_input(struct mbuf **mp, int *offp, int proto)
IP6QB_UNLOCK(bucket);
return (IPPROTO_DONE);
}
+
/*
* If it is the first fragment, do the above check for each
* fragment already stored in the reassembly queue.