aboutgitcodebugslistschat
path: root/util.c
diff options
context:
space:
mode:
authorStefano Brivio <sbrivio@redhat.com>2022-03-15 01:07:02 +0100
committerStefano Brivio <sbrivio@redhat.com>2022-03-28 17:11:40 +0200
commite5eefe77435a8958681a92546c46e3c05b93ac7b (patch)
treed7aa652a67fdca4f2213471e33f66c8284ca9489 /util.c
parentde0961c01c2dc2983cdd90c7c26515cddfcc08d2 (diff)
downloadpasst-e5eefe77435a8958681a92546c46e3c05b93ac7b.tar
passt-e5eefe77435a8958681a92546c46e3c05b93ac7b.tar.gz
passt-e5eefe77435a8958681a92546c46e3c05b93ac7b.tar.bz2
passt-e5eefe77435a8958681a92546c46e3c05b93ac7b.tar.lz
passt-e5eefe77435a8958681a92546c46e3c05b93ac7b.tar.xz
passt-e5eefe77435a8958681a92546c46e3c05b93ac7b.tar.zst
passt-e5eefe77435a8958681a92546c46e3c05b93ac7b.zip
tcp: Refactor to use events instead of states, split out spliced implementation
Using events and flags instead of states makes the implementation much more straightforward: actions are mostly centered on events that occurred on the connection rather than states. An example is given by the ESTABLISHED_SOCK_FIN_SENT and FIN_WAIT_1_SOCK_FIN abominations: we don't actually care about which side started closing the connection to handle closing of connection halves. Split out the spliced implementation, as it has very little in common with the "regular" TCP path. Refactor things here and there to improve clarity. Add helpers to trace where resets and flag settings come from. No functional changes intended. Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'util.c')
-rw-r--r--util.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/util.c b/util.c
index 50b83db..2d8952a 100644
--- a/util.c
+++ b/util.c
@@ -589,3 +589,22 @@ int __daemon(int pidfile_fd, int devnull_fd)
return 0;
}
+
+/**
+ * fls() - Find last (most significant) bit set in word
+ * @x: Word
+ *
+ * Return: position of most significant bit set, starting from 0, -1 if none
+ */
+int fls(unsigned long x)
+{
+ int y = 0;
+
+ if (!x)
+ return -1;
+
+ while (x >>= 1)
+ y++;
+
+ return y;
+}