From: Ian Jackson Date: Sun, 5 Jan 2014 15:30:09 +0000 (+0000) Subject: netlink: Break out netlink_client_deliver X-Git-Tag: debian/0.3.1_beta1~21 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=secnet.git;a=commitdiff_plain;h=7b6abafa4e46e77072dbd89f4ee4090268d6da51;ds=sidebyside netlink: Break out netlink_client_deliver Provide a helper function for calling client->deliver, and use it at the two call sites. We are going to fix a bug in this area and want to bring the implementations together so we have only one place to fix. A side effect is that packets via point-to-point links are properly counted. I have verified that I caught all of the call sites by experimentally changing the field name from "deliver" to "deliverx" in netlink.h, and inspecting the locations of the resulting compiler errors. Signed-off-by: Ian Jackson --- diff --git a/debian/changelog b/debian/changelog index 8f9c30c..5de3542 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,6 +2,7 @@ secnet (0.3.1~~unstable) unstable; urgency=low * Updates to release checklist in Makefile.in. * Fix formatting error in secnet.8 manpage. + * Internal code rearrangements and improvements. -- diff --git a/netlink.c b/netlink.c index af6434f..54ad76f 100644 --- a/netlink.c +++ b/netlink.c @@ -409,6 +409,17 @@ static bool_t netlink_check(struct netlink *st, struct buffer_if *buf, #undef BAD } +/* Deliver a packet _to_ client; used after we have decided + * what to do with it. */ +static void netlink_client_deliver(struct netlink *st, + struct netlink_client *client, + uint32_t source, uint32_t dest, + struct buffer_if *buf) +{ + client->deliver(client->dst, buf); + client->outcount++; +} + /* Deliver a packet. "client" is the _origin_ of the packet, not its destination, and is NULL for packets from the host and packets generated internally in secnet. */ @@ -521,9 +532,8 @@ static void netlink_packet_deliver(struct netlink *st, } else { if (best_quality>0) { /* XXX Fragment if required */ - st->routes[best_match]->deliver( - st->routes[best_match]->dst, buf); - st->routes[best_match]->outcount++; + netlink_client_deliver(st,st->routes[best_match], + source,dest,buf); BUF_ASSERT_FREE(buf); } else { /* Generate ICMP destination unreachable */ @@ -678,7 +688,7 @@ static void netlink_incoming(struct netlink *st, struct netlink_client *client, if (client) { st->deliver_to_host(st->dst,buf); } else { - st->clients->deliver(st->clients->dst,buf); + netlink_client_deliver(st,st->clients,source,dest,buf); } BUF_ASSERT_FREE(buf); return;