summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2008-12-13 17:24:47 +0100
committerPablo Neira Ayuso <pablo@netfilter.org>2008-12-13 17:24:47 +0100
commit08f59121eb907802d490601f5e54dcd0fbc1d695 (patch)
treedcad67050eb09c141feb1429362be02cb1bcd71d /src
parent74455dae1d095178b09ea3f1b1e8b005076e7a94 (diff)
ftfw: shrink alive message size
This patch reduces the size of alive messages by removing the "from" and "to" fields which are not of any help. This patch also removes the IS_CTL() macro since it does not return true for the control messages anymore but only for IS_ACK(), IS_NACK() and IS_RESYNC(). Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src')
-rw-r--r--src/network.c5
-rw-r--r--src/sync-ftfw.c36
-rw-r--r--src/sync-mode.c2
3 files changed, 40 insertions, 3 deletions
diff --git a/src/network.c b/src/network.c
index 98df5ea..090dec8 100644
--- a/src/network.c
+++ b/src/network.c
@@ -61,6 +61,11 @@ void nethdr_set_ack(struct nethdr *net)
__nethdr_set(net, NETHDR_ACK_SIZ, NET_T_CTL);
}
+void nethdr_set_ctl(struct nethdr *net)
+{
+ __nethdr_set(net, NETHDR_SIZ, NET_T_CTL);
+}
+
static size_t tx_buflenmax;
static size_t tx_buflen = 0;
static char *tx_buf;
diff --git a/src/sync-ftfw.c b/src/sync-ftfw.c
index 014cebd..4758710 100644
--- a/src/sync-ftfw.c
+++ b/src/sync-ftfw.c
@@ -121,6 +121,31 @@ static void tx_queue_add_ctlmsg(uint32_t flags, uint32_t from, uint32_t to)
write_evfd(STATE_SYNC(evfd));
}
+static void tx_queue_add_ctlmsg2(uint32_t flags)
+{
+ struct nethdr ctl = {
+ .type = NET_T_CTL,
+ .flags = flags,
+ };
+
+ switch(hello_state) {
+ case HELLO_INIT:
+ hello_state = HELLO_SAY;
+ /* fall through */
+ case HELLO_SAY:
+ ctl.flags |= NET_F_HELLO;
+ break;
+ }
+
+ if (say_hello_back) {
+ ctl.flags |= NET_F_HELLO_BACK;
+ say_hello_back = 0;
+ }
+
+ queue_add(tx_queue, &ctl, NETHDR_SIZ);
+ write_evfd(STATE_SYNC(evfd));
+}
+
/* this function is called from the alarm framework */
static void do_alive_alarm(struct alarm_block *a, void *data)
{
@@ -131,7 +156,7 @@ static void do_alive_alarm(struct alarm_block *a, void *data)
STATE_SYNC(last_seq_recv));
ack_from_set = 0;
} else
- tx_queue_add_ctlmsg(NET_F_ALIVE, 0, 0);
+ tx_queue_add_ctlmsg2(NET_F_ALIVE);
}
static int ftfw_init(void)
@@ -491,7 +516,14 @@ static int tx_queue_xmit(void *data1, const void *data2)
{
struct nethdr *net = data1;
- nethdr_set_ack(net);
+ if (IS_ACK(net) || IS_NACK(net) || IS_RESYNC(net)) {
+ nethdr_set_ack(net);
+ } else if (IS_ALIVE(net)) {
+ nethdr_set_ctl(net);
+ } else {
+ dlog(LOG_ERR, "sending unknown control message?");
+ return 0;
+ }
HDR_HOST2NETWORK(net);
dp("tx_queue sq: %u fl:%u len:%u\n",
diff --git a/src/sync-mode.c b/src/sync-mode.c
index d5355a7..b2b78ad 100644
--- a/src/sync-mode.c
+++ b/src/sync-mode.c
@@ -131,7 +131,7 @@ static void mcast_handler(void)
break;
}
- if (IS_CTL(net)) {
+ if (IS_ACK(net) || IS_NACK(net) || IS_RESYNC(net)) {
if (remain < NETHDR_ACK_SIZ) {
STATE(malformed)++;
dlog(LOG_WARNING, "no room for ctl message");