Mercurial > louis > mq > lightsd
changeset 220:f90c0783f654
finish sorting out leftovers
author | Louis Opter <kalessin@kalessin.fr> |
---|---|
date | Wed, 05 Aug 2015 00:52:01 -0700 |
parents | be1071f3a162 |
children | f5ad25edc077 |
files | add_command_pipe.patch add_tag_and_untag.patch fix_unused_unused_attribute.patch leftovers.patch properly_encode_packets_payload.patch relax_timings.patch series |
diffstat | 7 files changed, 1025 insertions(+), 239 deletions(-) [+] |
line wrap: on
line diff
--- a/add_command_pipe.patch Tue Aug 04 01:06:02 2015 -0700 +++ b/add_command_pipe.patch Wed Aug 05 00:52:01 2015 -0700 @@ -1,5 +1,5 @@ # HG changeset patch -# Parent 1d85084c9505a4fb4c935200696b5b2ca731cd7c +# Parent f937c717c75e9a3e60a327d5b641ada7a4589a07 diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt @@ -22,8 +22,8 @@ -The JSON-RPC interface works on top on IPv4/v6, over a command (named) pipe -(coming up) and Unix sockets (coming up). -+The JSON-RPC interface works on top on IPv4/v6, over a command (named) pipe and -+Unix sockets (coming up). ++The JSON-RPC interface works on top of TCP/IPv4/v6, Unix sockets (coming up) or ++over a command pipe (named pipe, see mkfifo(1)). lightsd can target single or multiple bulbs at once: @@ -1972,10 +1972,44 @@ ${LIGHTSD_SOURCE_DIR}/lifx/timer.c ${LIGHTSD_SOURCE_DIR}/lifx/wire_proto.c ${CMAKE_CURRENT_SOURCE_DIR}/../tests_shims.c +@@ -15,11 +16,11 @@ + ) + TARGET_LINK_LIBRARIES(test_core_proto ${TIME_MONOTONIC_LIBRARY}) + +-FUNCTION(ADD_ROUTER_TEST TEST_SOURCE) ++FUNCTION(ADD_PROTO_TEST TEST_SOURCE) + ADD_TEST_FROM_C_SOURCES(${TEST_SOURCE} test_core_proto) + ENDFUNCTION() + + FILE(GLOB TESTS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "test_*.c") + FOREACH(TEST ${TESTS}) +- ADD_ROUTER_TEST(${TEST}) ++ ADD_PROTO_TEST(${TEST}) + ENDFOREACH() diff --git a/tests/core/proto/test_proto_get_light_state.c b/tests/core/proto/test_proto_get_light_state.c --- a/tests/core/proto/test_proto_get_light_state.c +++ b/tests/core/proto/test_proto_get_light_state.c -@@ -76,7 +76,7 @@ +@@ -29,6 +29,9 @@ + static struct lgtd_router_device_list devices = + SLIST_HEAD_INITIALIZER(&devices); + ++ static struct lgtd_lifx_gateway gw_bulb_1 = { ++ .bulbs = LIST_HEAD_INITIALIZER(&gw_bulb_1.bulbs) ++ }; + static struct lgtd_lifx_bulb bulb_1 = { + .addr = { 1, 2, 3, 4, 5 }, + .state = { +@@ -39,7 +42,8 @@ + .label = "wave", + .power = LGTD_LIFX_POWER_ON, + .tags = 0 +- } ++ }, ++ .gw = &gw_bulb_1 + }; + static struct lgtd_router_device device_1 = { .device = &bulb_1 }; + SLIST_INSERT_HEAD(&devices, &device_1, link); +@@ -76,7 +80,7 @@ int main(void) { @@ -1984,6 +2018,15 @@ struct lgtd_proto_target_list *targets = (void *)0x2a; lgtd_proto_get_light_state(&client, targets); +@@ -103,7 +107,7 @@ + 1, + "%d bytes written, expected %lu " + "(got %.*s instead of %s)", +- client_write_buf_idx, sizeof(expected) - 1, ++ client_write_buf_idx, sizeof(expected) - 1UL, + client_write_buf_idx, client_write_buf, expected + ); + } diff --git a/tests/core/proto/test_proto_get_light_state_empty_device_list.c b/tests/core/proto/test_proto_get_light_state_empty_device_list.c --- a/tests/core/proto/test_proto_get_light_state_empty_device_list.c +++ b/tests/core/proto/test_proto_get_light_state_empty_device_list.c @@ -1996,6 +2039,15 @@ struct lgtd_proto_target_list *targets = (void *)0x2a; lgtd_proto_get_light_state(&client, targets); +@@ -45,7 +45,7 @@ + if (client_write_buf_idx != sizeof(expected) - 1) { + lgtd_errx( + 1, "%d bytes written, expected %lu", +- client_write_buf_idx, sizeof(expected) - 1 ++ client_write_buf_idx, sizeof(expected) - 1UL + ); + } + diff --git a/tests/core/proto/test_proto_get_light_state_null_device_list.c b/tests/core/proto/test_proto_get_light_state_null_device_list.c --- a/tests/core/proto/test_proto_get_light_state_null_device_list.c +++ b/tests/core/proto/test_proto_get_light_state_null_device_list.c
--- a/add_tag_and_untag.patch Tue Aug 04 01:06:02 2015 -0700 +++ b/add_tag_and_untag.patch Wed Aug 05 00:52:01 2015 -0700 @@ -1,5 +1,5 @@ # HG changeset patch -# Parent 6993c9dfa358da1cc5ec3b68c0395b4ae22daee0 +# Parent d31deced4d0b4228c4215069ee40febb19b71c15 diff --git a/README.rst b/README.rst --- a/README.rst @@ -13,7 +13,7 @@ +- tag/untag (group/ungroup bulbs together); - toggle (power on if off and vice-versa, coming up). - The JSON-RPC interface works on top on IPv4/v6, over a command (named) pipe and + The JSON-RPC interface works on top of TCP/IPv4/v6, Unix sockets (coming up) or diff --git a/core/jsonrpc.c b/core/jsonrpc.c --- a/core/jsonrpc.c +++ b/core/jsonrpc.c @@ -281,6 +281,22 @@ void lgtd_proto_get_light_state(struct lgtd_client *, const struct lgtd_proto_target_list *); +void lgtd_proto_tag(struct lgtd_client *, const struct lgtd_proto_target_list *, const char *); +void lgtd_proto_untag(struct lgtd_client *, const struct lgtd_proto_target_list *, const char *); +diff --git a/core/router.c b/core/router.c +--- a/core/router.c ++++ b/core/router.c +@@ -372,8 +372,8 @@ + void + lgtd_router_device_list_free(struct lgtd_router_device_list *devices) + { +- assert(devices); +- +- lgtd_router_clear_device_list(devices); +- free(devices); ++ if (devices) { ++ lgtd_router_clear_device_list(devices); ++ free(devices); ++ } + } diff --git a/lifx/bulb.c b/lifx/bulb.c --- a/lifx/bulb.c +++ b/lifx/bulb.c @@ -386,7 +402,21 @@ static void lgtd_lifx_gateway_write_callback(evutil_socket_t socket, short events, void *ctx) -@@ -151,36 +168,77 @@ +@@ -133,13 +150,6 @@ + if (type == LGTD_LIFX_GET_TAG_LABELS) { + gw->pending_refresh_req = false; + } +- if (lgtd_opts.verbosity <= LGTD_DEBUG) { +- const struct lgtd_lifx_packet_infos *pkt_infos = +- lgtd_lifx_wire_get_packet_infos(type); +- lgtd_debug( +- "%s --> [%s]:%hu", pkt_infos->name, gw->ip_addr, gw->port +- ); +- } + gw->pkt_ring[gw->pkt_ring_tail].type = 0; + LGTD_LIFX_GATEWAY_INC_MESSAGE_RING_INDEX(gw->pkt_ring_tail); + gw->pkt_ring_full = false; +@@ -151,36 +161,77 @@ } } @@ -488,7 +518,7 @@ gw->pending_refresh_req = true; } -@@ -371,19 +429,55 @@ +@@ -371,19 +422,55 @@ } void @@ -550,7 +580,7 @@ ); } -@@ -485,16 +579,44 @@ +@@ -485,16 +572,44 @@ } int @@ -597,7 +627,7 @@ if (!(gw->tag_ids & LGTD_LIFX_WIRE_TAG_ID_TO_VALUE(tag_id))) { struct lgtd_lifx_tag *tag; tag = lgtd_lifx_tagging_incref(tag_label, gw, tag_id); -@@ -545,9 +667,9 @@ +@@ -545,9 +660,9 @@ assert(gw && hdr && pkt); lgtd_debug( @@ -609,7 +639,7 @@ ); int tag_id; -@@ -559,3 +681,38 @@ +@@ -559,3 +674,38 @@ } } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fix_unused_unused_attribute.patch Wed Aug 05 00:52:01 2015 -0700 @@ -0,0 +1,16 @@ +# HG changeset patch +# Parent 77e68f94c2d022c1ca8a62bc3e6c5305867b2709 +Remove unused __attribute__((unused)) + +diff --git a/core/jsonrpc.c b/core/jsonrpc.c +--- a/core/jsonrpc.c ++++ b/core/jsonrpc.c +@@ -129,7 +129,7 @@ + return c == '-' || (c >= '0' && c <= '9'); + } + +-static bool __attribute__((unused)) ++static bool + lgtd_jsonrpc_type_bool(const jsmntok_t *t, const char *json) + { + if (t->type != JSMN_PRIMITIVE) {
--- a/leftovers.patch Tue Aug 04 01:06:02 2015 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,227 +0,0 @@ -# HG changeset patch -# Parent 2be7ea678eaadacc07b4e7b04af720409b5d2fca - -diff --git a/README.rst b/README.rst ---- a/README.rst -+++ b/README.rst -@@ -32,8 +32,8 @@ - - tag/untag (group/ungroup bulbs together); - - toggle (power on if off and vice-versa, coming up). - --The JSON-RPC interface works on top on IPv4/v6, over a command (named) pipe and --Unix sockets (coming up). -+The JSON-RPC interface works on top of IPv4/v6 Unix sockets (coming up) or over -+a command pipe (named pipe, see mkfifo(1)). - - lightsd can target single or multiple bulbs at once: - -diff --git a/core/jsonrpc.c b/core/jsonrpc.c ---- a/core/jsonrpc.c -+++ b/core/jsonrpc.c -@@ -129,7 +129,7 @@ - return c == '-' || (c >= '0' && c <= '9'); - } - --static bool __attribute__((unused)) -+static bool - lgtd_jsonrpc_type_bool(const jsmntok_t *t, const char *json) - { - if (t->type != JSMN_PRIMITIVE) { -diff --git a/core/lightsd.h b/core/lightsd.h ---- a/core/lightsd.h -+++ b/core/lightsd.h -@@ -17,6 +17,8 @@ - - #pragma once - -+struct sockaddr_storage; -+ - #ifndef __attribute__ - # define __atttribute__(e) - #endif -diff --git a/core/log.c b/core/log.c ---- a/core/log.c -+++ b/core/log.c -@@ -17,6 +17,7 @@ - - #include <sys/tree.h> - #include <sys/time.h> -+#include <sys/types.h> - #include <arpa/inet.h> - #include <assert.h> - #include <endian.h> -@@ -26,6 +27,7 @@ - #include <stdbool.h> - #include <stdint.h> - #include <stdio.h> -+#include <stdlib.h> - #include <time.h> - - #if LGTD_HAVE_LIBBSD -@@ -175,6 +177,6 @@ - case EVENT_LOG_MSG: lgtd_info("%s", msg); break; - case EVENT_LOG_WARN: lgtd_warnx("%s", msg) break; - case EVENT_LOG_ERR: lgtd_warnx("%s", msg); break; -- default: break; -+ default: break; - } - } -diff --git a/core/router.c b/core/router.c ---- a/core/router.c -+++ b/core/router.c -@@ -61,6 +61,8 @@ - ); - assert(pkt_infos); - -+ pkt_infos->encode(pkt); -+ - lgtd_lifx_gateway_enqueue_packet( - gw, &hdr, pkt_type, pkt, pkt_infos->size - ); -@@ -372,8 +374,8 @@ - void - lgtd_router_device_list_free(struct lgtd_router_device_list *devices) - { -- assert(devices); -- -- lgtd_router_clear_device_list(devices); -- free(devices); -+ if (devices) { -+ lgtd_router_clear_device_list(devices); -+ free(devices); -+ } - } -diff --git a/lifx/gateway.c b/lifx/gateway.c ---- a/lifx/gateway.c -+++ b/lifx/gateway.c -@@ -150,13 +150,6 @@ - if (type == LGTD_LIFX_GET_TAG_LABELS) { - gw->pending_refresh_req = false; - } -- if (lgtd_opts.verbosity <= LGTD_DEBUG) { -- const struct lgtd_lifx_packet_infos *pkt_infos = -- lgtd_lifx_wire_get_packet_infos(type); -- lgtd_debug( -- "%s --> [%s]:%hu", pkt_infos->name, gw->ip_addr, gw->port -- ); -- } - gw->pkt_ring[gw->pkt_ring_tail].type = 0; - LGTD_LIFX_GATEWAY_INC_MESSAGE_RING_INDEX(gw->pkt_ring_tail); - gw->pkt_ring_full = false; -diff --git a/lifx/gateway.h b/lifx/gateway.h ---- a/lifx/gateway.h -+++ b/lifx/gateway.h -@@ -21,7 +21,7 @@ - // according to my own tests, aggressively polling a bulb doesn't raise its - // consumption at all (and it's interesting to note that a turned off bulb - // still draw about 2W in ZigBee and about 3W in WiFi). --enum { LGTD_LIFX_GATEWAY_MIN_REFRESH_INTERVAL_MSECS = 200 }; -+enum { LGTD_LIFX_GATEWAY_MIN_REFRESH_INTERVAL_MSECS = 1000 }; - - // You can't send more than one lifx packet per UDP datagram. - enum { LGTD_LIFX_GATEWAY_PACKET_RING_SIZE = 16 }; -diff --git a/lifx/timer.h b/lifx/timer.h ---- a/lifx/timer.h -+++ b/lifx/timer.h -@@ -17,11 +17,11 @@ - - #pragma once - --enum { LGTD_LIFX_TIMER_WATCHDOG_INTERVAL_MSECS = 200 }; -+enum { LGTD_LIFX_TIMER_WATCHDOG_INTERVAL_MSECS = 500 }; - enum { LGTD_LIFX_TIMER_ACTIVE_DISCOVERY_INTERVAL_MSECS = 2000 }; - enum { LGTD_LIFX_TIMER_PASSIVE_DISCOVERY_INTERVAL_MSECS = 10000 }; --enum { LGTD_LIFX_TIMER_DEVICE_TIMEOUT_MSECS = 2000 }; --enum { LGTD_LIFX_TIMER_DEVICE_FORCE_REFRESH_MSECS = 600 }; -+enum { LGTD_LIFX_TIMER_DEVICE_TIMEOUT_MSECS = 4000 }; -+enum { LGTD_LIFX_TIMER_DEVICE_FORCE_REFRESH_MSECS = 2000 }; - - bool lgtd_lifx_timer_setup(void); - void lgtd_lifx_timer_close(void); -diff --git a/tests/core/proto/CMakeLists.txt b/tests/core/proto/CMakeLists.txt ---- a/tests/core/proto/CMakeLists.txt -+++ b/tests/core/proto/CMakeLists.txt -@@ -16,11 +16,11 @@ - ${CMAKE_CURRENT_SOURCE_DIR}/../tests_utils.c - ) - --FUNCTION(ADD_ROUTER_TEST TEST_SOURCE) -+FUNCTION(ADD_PROTO_TEST TEST_SOURCE) - ADD_TEST_FROM_C_SOURCES(${TEST_SOURCE} test_core_proto) - ENDFUNCTION() - - FILE(GLOB TESTS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "test_*.c") - FOREACH(TEST ${TESTS}) -- ADD_ROUTER_TEST(${TEST}) -+ ADD_PROTO_TEST(${TEST}) - ENDFOREACH() -diff --git a/tests/core/proto/test_proto_get_light_state.c b/tests/core/proto/test_proto_get_light_state.c ---- a/tests/core/proto/test_proto_get_light_state.c -+++ b/tests/core/proto/test_proto_get_light_state.c -@@ -31,6 +31,9 @@ - static struct lgtd_router_device_list devices = - SLIST_HEAD_INITIALIZER(&devices); - -+ static struct lgtd_lifx_gateway gw_bulb_1 = { -+ .bulbs = LIST_HEAD_INITIALIZER(&gw_bulb_1.bulbs) -+ }; - static struct lgtd_lifx_bulb bulb_1 = { - .addr = { 1, 2, 3, 4, 5 }, - .state = { -@@ -41,7 +44,8 @@ - .label = "wave", - .power = LGTD_LIFX_POWER_ON, - .tags = 0 -- } -+ }, -+ .gw = &gw_bulb_1 - }; - static struct lgtd_router_device device_1 = { .device = &bulb_1 }; - SLIST_INSERT_HEAD(&devices, &device_1, link); -@@ -105,7 +109,7 @@ - 1, - "%d bytes written, expected %lu " - "(got %.*s instead of %s)", -- client_write_buf_idx, sizeof(expected) - 1, -+ client_write_buf_idx, sizeof(expected) - 1UL, - client_write_buf_idx, client_write_buf, expected - ); - } -diff --git a/tests/core/proto/test_proto_get_light_state_empty_device_list.c b/tests/core/proto/test_proto_get_light_state_empty_device_list.c ---- a/tests/core/proto/test_proto_get_light_state_empty_device_list.c -+++ b/tests/core/proto/test_proto_get_light_state_empty_device_list.c -@@ -47,7 +47,7 @@ - if (client_write_buf_idx != sizeof(expected) - 1) { - lgtd_errx( - 1, "%d bytes written, expected %lu", -- client_write_buf_idx, sizeof(expected) - 1 -+ client_write_buf_idx, sizeof(expected) - 1UL - ); - } - -diff --git a/tests/core/tests_shims.c b/tests/core/tests_shims.c ---- a/tests/core/tests_shims.c -+++ b/tests/core/tests_shims.c -@@ -24,7 +24,9 @@ - .verbosity = LGTD_DEBUG - }; - --struct event_base *lgtd_ev_base = NULL; -+struct event_base *lgtd_ev_base = (void *)0x1234; -+ -+const char *lgtd_binds = NULL; - - void - lgtd_cleanup(void) -diff --git a/tests/lifx/tests_shims.c b/tests/lifx/tests_shims.c ---- a/tests/lifx/tests_shims.c -+++ b/tests/lifx/tests_shims.c -@@ -15,6 +15,8 @@ - - struct event_base *lgtd_ev_base = NULL; - -+const char *lgtd_binds = NULL; -+ - void - lgtd_cleanup(void) - {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/properly_encode_packets_payload.patch Wed Aug 05 00:52:01 2015 -0700 @@ -0,0 +1,880 @@ +# HG changeset patch +# Parent 339e9ea6909d7cac4f6a9f8a13ce46d23495b3ec +Convert LIFX packets to the right endianess before sending them + +And refactor the code a bit to pass pkt_info (also now spelled correctly) +around instead of looking it up twice. + +diff --git a/core/lightsd.c b/core/lightsd.c +--- a/core/lightsd.c ++++ b/core/lightsd.c +@@ -220,7 +220,7 @@ + argc -= optind; + argv += optind; + +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + if (!lgtd_lifx_timer_setup() || !lgtd_lifx_broadcast_setup()) { + lgtd_err(1, "can't setup lightsd"); + } +diff --git a/core/router.c b/core/router.c +--- a/core/router.c ++++ b/core/router.c +@@ -49,21 +49,19 @@ + struct lgtd_lifx_packet_header hdr; + union lgtd_lifx_target target = { .tags = 0 }; + +- const struct lgtd_lifx_packet_infos *pkt_infos = NULL; ++ const struct lgtd_lifx_packet_info *pkt_info = NULL; + struct lgtd_lifx_gateway *gw; + LIST_FOREACH(gw, &lgtd_lifx_gateways, link) { +- pkt_infos = lgtd_lifx_wire_setup_header( ++ pkt_info = lgtd_lifx_wire_setup_header( + &hdr, + LGTD_LIFX_TARGET_ALL_DEVICES, + target, + gw->site.as_array, + pkt_type + ); +- assert(pkt_infos); ++ assert(pkt_info); + +- lgtd_lifx_gateway_enqueue_packet( +- gw, &hdr, pkt_type, pkt, pkt_infos->size +- ); ++ lgtd_lifx_gateway_enqueue_packet(gw, &hdr, pkt_info, pkt); + + if (pkt_type == LGTD_LIFX_SET_POWER_STATE) { + struct lgtd_lifx_bulb *bulb; +@@ -76,8 +74,8 @@ + } + } + +- if (pkt_infos) { +- lgtd_info("broadcasting %s", pkt_infos->name); ++ if (pkt_info) { ++ lgtd_info("broadcasting %s", pkt_info->name); + } + } + +@@ -91,19 +89,16 @@ + struct lgtd_lifx_packet_header hdr; + union lgtd_lifx_target target = { .addr = bulb->addr }; + +- const struct lgtd_lifx_packet_infos *pkt_infos; +- pkt_infos = lgtd_lifx_wire_setup_header( ++ const struct lgtd_lifx_packet_info *pkt_info = lgtd_lifx_wire_setup_header( + &hdr, + LGTD_LIFX_TARGET_DEVICE, + target, + bulb->gw->site.as_array, + pkt_type + ); +- assert(pkt_infos); ++ assert(pkt_info); + +- lgtd_lifx_gateway_enqueue_packet( +- bulb->gw, &hdr, pkt_type, pkt, pkt_infos->size +- ); ++ lgtd_lifx_gateway_enqueue_packet(bulb->gw, &hdr, pkt_info, pkt); + + if (pkt_type == LGTD_LIFX_SET_POWER_STATE) { + bulb->dirty_at = lgtd_time_monotonic_msecs(); +@@ -111,7 +106,7 @@ + bulb->expected_power_on = payload->power; + } + +- lgtd_info("sending %s to %s", pkt_infos->name, lgtd_addrtoa(bulb->addr)); ++ lgtd_info("sending %s to %s", pkt_info->name, lgtd_addrtoa(bulb->addr)); + } + + void +@@ -119,7 +114,7 @@ + enum lgtd_lifx_packet_type pkt_type, + void *pkt) + { +- const struct lgtd_lifx_packet_infos *pkt_infos = NULL; ++ const struct lgtd_lifx_packet_info *pkt_info = NULL; + + struct lgtd_lifx_site *site; + LIST_FOREACH(site, &tag->sites, link) { +@@ -130,18 +125,16 @@ + union lgtd_lifx_target target; + assert(tag == gw->tags[tag_id]); + target.tags = LGTD_LIFX_WIRE_TAG_ID_TO_VALUE(tag_id); +- pkt_infos = lgtd_lifx_wire_setup_header( ++ pkt_info = lgtd_lifx_wire_setup_header( + &hdr, + LGTD_LIFX_TARGET_TAGS, + target, + gw->site.as_array, + pkt_type + ); +- assert(pkt_infos); ++ assert(pkt_info); + +- lgtd_lifx_gateway_enqueue_packet( +- gw, &hdr, pkt_type, pkt, pkt_infos->size +- ); ++ lgtd_lifx_gateway_enqueue_packet(gw, &hdr, pkt_info, pkt); + + if (pkt_type == LGTD_LIFX_SET_POWER_STATE) { + struct lgtd_lifx_bulb *bulb; +@@ -156,8 +149,8 @@ + } + } + +- if (pkt_infos) { +- lgtd_info("sending %s to #%s", pkt_infos->name, tag->label); ++ if (pkt_info) { ++ lgtd_info("sending %s to #%s", pkt_info->name, tag->label); + } + } + +@@ -166,25 +159,23 @@ + enum lgtd_lifx_packet_type pkt_type, + void *pkt) + { +- const struct lgtd_lifx_packet_infos *pkt_infos = NULL; ++ const struct lgtd_lifx_packet_info *pkt_info = NULL; + + struct lgtd_lifx_bulb *bulb; + RB_FOREACH(bulb, lgtd_lifx_bulb_map, &lgtd_lifx_bulbs_table) { + if (!strcmp(bulb->state.label, label)) { + struct lgtd_lifx_packet_header hdr; + union lgtd_lifx_target target = { .addr = bulb->addr }; +- pkt_infos = lgtd_lifx_wire_setup_header( ++ pkt_info = lgtd_lifx_wire_setup_header( + &hdr, + LGTD_LIFX_TARGET_DEVICE, + target, + bulb->gw->site.as_array, + pkt_type + ); +- assert(pkt_infos); ++ assert(pkt_info); + +- lgtd_lifx_gateway_enqueue_packet( +- bulb->gw, &hdr, pkt_type, pkt, pkt_infos->size +- ); ++ lgtd_lifx_gateway_enqueue_packet(bulb->gw, &hdr, pkt_info, pkt); + + if (pkt_type == LGTD_LIFX_SET_POWER_STATE) { + bulb->dirty_at = lgtd_time_monotonic_msecs(); +@@ -194,8 +185,8 @@ + } + } + +- if (pkt_infos) { +- lgtd_info("sending %s to %s", pkt_infos->name, label); ++ if (pkt_info) { ++ lgtd_info("sending %s to %s", pkt_info->name, label); + } + } + +diff --git a/lifx/broadcast.c b/lifx/broadcast.c +--- a/lifx/broadcast.c ++++ b/lifx/broadcast.c +@@ -117,9 +117,9 @@ + continue; + } + +- const struct lgtd_lifx_packet_infos *pkt_infos = +- lgtd_lifx_wire_get_packet_infos(read.hdr.packet_type); +- if (!pkt_infos) { ++ const struct lgtd_lifx_packet_info *pkt_info = ++ lgtd_lifx_wire_get_packet_info(read.hdr.packet_type); ++ if (!pkt_info) { + lgtd_warnx( + "received unknown packet %#x from [%s]:%hu", + read.hdr.packet_type, peer_addr, peer_port +@@ -129,7 +129,7 @@ + if (!(read.hdr.protocol & LGTD_LIFX_PROTOCOL_ADDRESSABLE)) { + lgtd_warnx( + "received non-addressable packet %s from [%s]:%hu", +- pkt_infos->name, peer_addr, peer_port ++ pkt_info->name, peer_addr, peer_port + ); + continue; + } +@@ -145,8 +145,8 @@ + if (gw) { + void *pkt = &read.buf[LGTD_LIFX_PACKET_HEADER_SIZE]; + gw->last_pkt_at = received_at; +- pkt_infos->decode(pkt); +- pkt_infos->handle(gw, &read.hdr, pkt); ++ pkt_info->decode(pkt); ++ pkt_info->handle(gw, &read.hdr, pkt); + } else { + lgtd_warnx( + "got packet from unknown gateway [%s]:%hu", peer_addr, peer_port +diff --git a/lifx/gateway.c b/lifx/gateway.c +--- a/lifx/gateway.c ++++ b/lifx/gateway.c +@@ -164,24 +164,24 @@ + static bool + lgtd_lifx_gateway_send_to_site_impl(struct lgtd_lifx_gateway *gw, + enum lgtd_lifx_packet_type pkt_type, +- const void *pkt, +- const struct lgtd_lifx_packet_infos **pkt_infos) ++ void *pkt, ++ const struct lgtd_lifx_packet_info **pkt_info) + { + assert(gw); +- assert(pkt_infos); ++ assert(pkt_info); + + struct lgtd_lifx_packet_header hdr; + union lgtd_lifx_target target = { .addr = gw->site.as_array }; +- *pkt_infos = lgtd_lifx_wire_setup_header( ++ *pkt_info = lgtd_lifx_wire_setup_header( + &hdr, + LGTD_LIFX_TARGET_SITE, + target, + gw->site.as_array, + pkt_type + ); +- assert(*pkt_infos); ++ assert(*pkt_info); + +- lgtd_lifx_gateway_enqueue_packet(gw, &hdr, pkt_type, pkt, (*pkt_infos)->size); ++ lgtd_lifx_gateway_enqueue_packet(gw, &hdr, *pkt_info, pkt); + + return true; // FIXME, have real return values on the send paths... + } +@@ -189,17 +189,17 @@ + static bool + lgtd_lifx_gateway_send_to_site_quiet(struct lgtd_lifx_gateway *gw, + enum lgtd_lifx_packet_type pkt_type, +- const void *pkt) ++ void *pkt) + { + +- const struct lgtd_lifx_packet_infos *pkt_infos; ++ const struct lgtd_lifx_packet_info *pkt_info; + bool rv = lgtd_lifx_gateway_send_to_site_impl( +- gw, pkt_type, pkt, &pkt_infos ++ gw, pkt_type, pkt, &pkt_info + ); + + lgtd_debug( + "sending %s to site %s", +- pkt_infos->name, lgtd_addrtoa(gw->site.as_array) ++ pkt_info->name, lgtd_addrtoa(gw->site.as_array) + ); + + return rv; // FIXME, have real return values on the send paths... +@@ -208,16 +208,16 @@ + bool + lgtd_lifx_gateway_send_to_site(struct lgtd_lifx_gateway *gw, + enum lgtd_lifx_packet_type pkt_type, +- const void *pkt) ++ void *pkt) + { +- const struct lgtd_lifx_packet_infos *pkt_infos; ++ const struct lgtd_lifx_packet_info *pkt_info; + bool rv = lgtd_lifx_gateway_send_to_site_impl( +- gw, pkt_type, pkt, &pkt_infos ++ gw, pkt_type, pkt, &pkt_info + ); + + lgtd_info( + "sending %s to site %s", +- pkt_infos->name, lgtd_addrtoa(gw->site.as_array) ++ pkt_info->name, lgtd_addrtoa(gw->site.as_array) + ); + + return rv; // FIXME, have real return values on the send paths... +@@ -387,13 +387,12 @@ + void + lgtd_lifx_gateway_enqueue_packet(struct lgtd_lifx_gateway *gw, + const struct lgtd_lifx_packet_header *hdr, +- enum lgtd_lifx_packet_type pkt_type, +- const void *pkt, +- int pkt_size) ++ const struct lgtd_lifx_packet_info *pkt_info, ++ void *pkt) + { + assert(gw); + assert(hdr); +- assert(pkt_size >= 0 && pkt_size < LGTD_LIFX_MAX_PACKET_SIZE); ++ assert(pkt_info); + assert(!memcmp(hdr->site, gw->site.as_array, LGTD_LIFX_ADDR_LENGTH)); + assert(gw->pkt_ring_head >= 0); + assert(gw->pkt_ring_head < (int)LGTD_ARRAY_SIZE(gw->pkt_ring)); +@@ -401,19 +400,19 @@ + if (gw->pkt_ring_full) { + lgtd_warnx( + "dropping packet type %s: packet queue on [%s]:%hu is full", +- lgtd_lifx_wire_get_packet_infos(pkt_type)->name, +- gw->ip_addr, gw->port ++ pkt_info->name, gw->ip_addr, gw->port + ); + return; + } + + evbuffer_add(gw->write_buf, hdr, sizeof(*hdr)); + if (pkt) { +- assert((unsigned)pkt_size == le16toh(hdr->size) - sizeof(*hdr)); +- evbuffer_add(gw->write_buf, pkt, pkt_size); ++ assert(pkt_info->size == le16toh(hdr->size) - sizeof(*hdr)); ++ pkt_info->encode(pkt); ++ evbuffer_add(gw->write_buf, pkt, pkt_info->size); + } +- gw->pkt_ring[gw->pkt_ring_head].size = sizeof(*hdr) + pkt_size; +- gw->pkt_ring[gw->pkt_ring_head].type = pkt_type; ++ gw->pkt_ring[gw->pkt_ring_head].size = sizeof(*hdr) + pkt_info->size; ++ gw->pkt_ring[gw->pkt_ring_head].type = pkt_info->type; + LGTD_LIFX_GATEWAY_INC_MESSAGE_RING_INDEX(gw->pkt_ring_head); + if (gw->pkt_ring_head == gw->pkt_ring_tail) { + gw->pkt_ring_full = true; +diff --git a/lifx/gateway.h b/lifx/gateway.h +--- a/lifx/gateway.h ++++ b/lifx/gateway.h +@@ -91,13 +91,12 @@ + + void lgtd_lifx_gateway_enqueue_packet(struct lgtd_lifx_gateway *, + const struct lgtd_lifx_packet_header *, +- enum lgtd_lifx_packet_type, +- const void *, +- int); ++ const struct lgtd_lifx_packet_info *, ++ void *); + // This could be on router but it's LIFX specific so I'd rather keep it here: + bool lgtd_lifx_gateway_send_to_site(struct lgtd_lifx_gateway *, + enum lgtd_lifx_packet_type, +- const void *); ++ void *); + + void lgtd_lifx_gateway_update_tag_refcounts(struct lgtd_lifx_gateway *, uint64_t, uint64_t); + +diff --git a/lifx/wire_proto.c b/lifx/wire_proto.c +--- a/lifx/wire_proto.c ++++ b/lifx/wire_proto.c +@@ -48,14 +48,14 @@ + 13, 18, 8, 12, 7, 6, 5, 63 + }; + +-static struct lgtd_lifx_packet_infos_map lgtd_lifx_packet_infos = ++static struct lgtd_lifx_packet_info_map lgtd_lifx_packet_info = + RB_INITIALIZER(&lgtd_lifx_packets_infos); + + RB_GENERATE_STATIC( +- lgtd_lifx_packet_infos_map, +- lgtd_lifx_packet_infos, ++ lgtd_lifx_packet_info_map, ++ lgtd_lifx_packet_info, + link, +- lgtd_lifx_packet_infos_cmp ++ lgtd_lifx_packet_info_cmp + ); + + static void +@@ -75,7 +75,7 @@ + } + + void +-lgtd_lifx_wire_load_packet_infos_map(void) ++lgtd_lifx_wire_load_packet_info_map(void) + { + #define DECODER(x) ((void (*)(void *))(x)) + #define ENCODER(x) ((void (*)(void *))(x)) +@@ -91,7 +91,7 @@ + .decode = lgtd_lifx_wire_null_packet_encoder_decoder, \ + .handle = lgtd_lifx_wire_null_packet_handler + +- static struct lgtd_lifx_packet_infos packet_table[] = { ++ static struct lgtd_lifx_packet_info packet_table[] = { + // Gateway packets: + { + REQUEST_ONLY, +@@ -192,18 +192,18 @@ + + for (int i = 0; i != LGTD_ARRAY_SIZE(packet_table); ++i) { + RB_INSERT( +- lgtd_lifx_packet_infos_map, +- &lgtd_lifx_packet_infos, ++ lgtd_lifx_packet_info_map, ++ &lgtd_lifx_packet_info, + &packet_table[i] + ); + } + } + +-const struct lgtd_lifx_packet_infos * +-lgtd_lifx_wire_get_packet_infos(enum lgtd_lifx_packet_type packet_type) ++const struct lgtd_lifx_packet_info * ++lgtd_lifx_wire_get_packet_info(enum lgtd_lifx_packet_type packet_type) + { +- struct lgtd_lifx_packet_infos pkt_infos = { .type = packet_type }; +- return RB_FIND(lgtd_lifx_packet_infos_map, &lgtd_lifx_packet_infos, &pkt_infos); ++ struct lgtd_lifx_packet_info pkt_info = { .type = packet_type }; ++ return RB_FIND(lgtd_lifx_packet_info_map, &lgtd_lifx_packet_info, &pkt_info); + } + + +@@ -273,7 +273,7 @@ + hdr->packet_type = le16toh(hdr->packet_type); + } + +-const struct lgtd_lifx_packet_infos * ++const struct lgtd_lifx_packet_info * + lgtd_lifx_wire_setup_header(struct lgtd_lifx_packet_header *hdr, + enum lgtd_lifx_target_type target_type, + union lgtd_lifx_target target, +@@ -282,13 +282,13 @@ + { + assert(hdr); + +- const struct lgtd_lifx_packet_infos *pkt_infos = +- lgtd_lifx_wire_get_packet_infos(packet_type); ++ const struct lgtd_lifx_packet_info *pkt_info = ++ lgtd_lifx_wire_get_packet_info(packet_type); + +- assert(pkt_infos); ++ assert(pkt_info); + + memset(hdr, 0, sizeof(*hdr)); +- hdr->size = pkt_infos->size + sizeof(*hdr); ++ hdr->size = pkt_info->size + sizeof(*hdr); + hdr->packet_type = packet_type; + if (site) { + memcpy(hdr->site, site, sizeof(hdr->site)); +@@ -313,7 +313,7 @@ + + lgtd_lifx_wire_encode_header(hdr, flags); + +- return pkt_infos; ++ return pkt_info; + } + + void +diff --git a/lifx/wire_proto.h b/lifx/wire_proto.h +--- a/lifx/wire_proto.h ++++ b/lifx/wire_proto.h +@@ -265,8 +265,8 @@ + + struct lgtd_lifx_gateway; + +-struct lgtd_lifx_packet_infos { +- RB_ENTRY(lgtd_lifx_packet_infos) link; ++struct lgtd_lifx_packet_info { ++ RB_ENTRY(lgtd_lifx_packet_info) link; + const char *name; + enum lgtd_lifx_packet_type type; + unsigned size; +@@ -276,11 +276,11 @@ + const struct lgtd_lifx_packet_header *, + const void *); + }; +-RB_HEAD(lgtd_lifx_packet_infos_map, lgtd_lifx_packet_infos); ++RB_HEAD(lgtd_lifx_packet_info_map, lgtd_lifx_packet_info); + + static inline int +-lgtd_lifx_packet_infos_cmp(struct lgtd_lifx_packet_infos *a, +- struct lgtd_lifx_packet_infos *b) ++lgtd_lifx_packet_info_cmp(struct lgtd_lifx_packet_info *a, ++ struct lgtd_lifx_packet_info *b) + { + return a->type - b->type; + } +@@ -331,10 +331,10 @@ + + enum lgtd_lifx_waveform_type lgtd_lifx_wire_waveform_string_id_to_type(const char *, int); + +-const struct lgtd_lifx_packet_infos *lgtd_lifx_wire_get_packet_infos(enum lgtd_lifx_packet_type); +-void lgtd_lifx_wire_load_packet_infos_map(void); ++const struct lgtd_lifx_packet_info *lgtd_lifx_wire_get_packet_info(enum lgtd_lifx_packet_type); ++void lgtd_lifx_wire_load_packet_info_map(void); + +-const struct lgtd_lifx_packet_infos *lgtd_lifx_wire_setup_header(struct lgtd_lifx_packet_header *, ++const struct lgtd_lifx_packet_info *lgtd_lifx_wire_setup_header(struct lgtd_lifx_packet_header *, + enum lgtd_lifx_target_type, + union lgtd_lifx_target, + const uint8_t *, +diff --git a/tests/core/proto/test_proto_tag_create.c b/tests/core/proto/test_proto_tag_create.c +--- a/tests/core/proto/test_proto_tag_create.c ++++ b/tests/core/proto/test_proto_tag_create.c +@@ -65,7 +65,7 @@ + bool + lgtd_lifx_gateway_send_to_site(struct lgtd_lifx_gateway *gw, + enum lgtd_lifx_packet_type pkt_type, +- const void *pkt) ++ void *pkt) + { + if (!gw) { + errx(1, "missing gateway"); +diff --git a/tests/core/proto/test_proto_tag_create_lifx_gw_tag_ids_full.c b/tests/core/proto/test_proto_tag_create_lifx_gw_tag_ids_full.c +--- a/tests/core/proto/test_proto_tag_create_lifx_gw_tag_ids_full.c ++++ b/tests/core/proto/test_proto_tag_create_lifx_gw_tag_ids_full.c +@@ -61,7 +61,7 @@ + bool + lgtd_lifx_gateway_send_to_site(struct lgtd_lifx_gateway *gw, + enum lgtd_lifx_packet_type pkt_type, +- const void *pkt) ++ void *pkt) + { + (void)gw; + (void)pkt_type; +diff --git a/tests/core/proto/test_proto_tag_update.c b/tests/core/proto/test_proto_tag_update.c +--- a/tests/core/proto/test_proto_tag_update.c ++++ b/tests/core/proto/test_proto_tag_update.c +@@ -69,7 +69,7 @@ + bool + lgtd_lifx_gateway_send_to_site(struct lgtd_lifx_gateway *gw, + enum lgtd_lifx_packet_type pkt_type, +- const void *pkt) ++ void *pkt) + { + if (!gw) { + errx(1, "missing gateway"); +diff --git a/tests/core/router/test_router_send_to_broadcast.c b/tests/core/router/test_router_send_to_broadcast.c +--- a/tests/core/router/test_router_send_to_broadcast.c ++++ b/tests/core/router/test_router_send_to_broadcast.c +@@ -8,7 +8,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + lgtd_tests_insert_mock_gateway(2); + lgtd_tests_insert_mock_gateway(1); +diff --git a/tests/core/router/test_router_send_to_device.c b/tests/core/router/test_router_send_to_device.c +--- a/tests/core/router/test_router_send_to_device.c ++++ b/tests/core/router/test_router_send_to_device.c +@@ -7,7 +7,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway *gw_1 = lgtd_tests_insert_mock_gateway(1); + struct lgtd_lifx_bulb *bulb_1 = lgtd_tests_insert_mock_bulb(gw_1, 1); +diff --git a/tests/core/router/test_router_send_to_invalid_targets.c b/tests/core/router/test_router_send_to_invalid_targets.c +--- a/tests/core/router/test_router_send_to_invalid_targets.c ++++ b/tests/core/router/test_router_send_to_invalid_targets.c +@@ -31,7 +31,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway *gw_1 = lgtd_tests_insert_mock_gateway(1); + lgtd_tests_insert_mock_bulb(gw_1, 1); +diff --git a/tests/core/router/test_router_send_to_label.c b/tests/core/router/test_router_send_to_label.c +--- a/tests/core/router/test_router_send_to_label.c ++++ b/tests/core/router/test_router_send_to_label.c +@@ -7,7 +7,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway *gw_1 = lgtd_tests_insert_mock_gateway(1); + struct lgtd_lifx_bulb *bulb_1 = lgtd_tests_insert_mock_bulb(gw_1, 1); +diff --git a/tests/core/router/test_router_send_to_tag.c b/tests/core/router/test_router_send_to_tag.c +--- a/tests/core/router/test_router_send_to_tag.c ++++ b/tests/core/router/test_router_send_to_tag.c +@@ -7,7 +7,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway *gw_1 = lgtd_tests_insert_mock_gateway(1); + struct lgtd_lifx_gateway *gw_2 = lgtd_tests_insert_mock_gateway(2); +diff --git a/tests/core/router/test_router_targets_to_devices.c b/tests/core/router/test_router_targets_to_devices.c +--- a/tests/core/router/test_router_targets_to_devices.c ++++ b/tests/core/router/test_router_targets_to_devices.c +@@ -41,7 +41,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway *gw_1 = lgtd_tests_insert_mock_gateway(1); + struct lgtd_lifx_gateway *gw_2 = lgtd_tests_insert_mock_gateway(2); +diff --git a/tests/core/router/tests_router_utils.h b/tests/core/router/tests_router_utils.h +--- a/tests/core/router/tests_router_utils.h ++++ b/tests/core/router/tests_router_utils.h +@@ -13,12 +13,9 @@ + void + lgtd_lifx_gateway_enqueue_packet(struct lgtd_lifx_gateway *gw, + const struct lgtd_lifx_packet_header *hdr, +- enum lgtd_lifx_packet_type pkt_type, +- const void *pkt, +- int pkt_size) ++ const struct lgtd_lifx_packet_info *pkt_info, ++ void *pkt) + { +- (void)pkt_type; +- + lgtd_tests_gw_pkt_queue[lgtd_tests_gw_pkt_queue_size].gw = gw; + // headers are created on the stack so we need to dup them: + lgtd_tests_gw_pkt_queue[lgtd_tests_gw_pkt_queue_size].hdr = malloc( +@@ -30,7 +27,7 @@ + sizeof(*hdr) + ); + lgtd_tests_gw_pkt_queue[lgtd_tests_gw_pkt_queue_size].pkt = pkt; +- lgtd_tests_gw_pkt_queue[lgtd_tests_gw_pkt_queue_size].pkt_size = pkt_size; ++ lgtd_tests_gw_pkt_queue[lgtd_tests_gw_pkt_queue_size].pkt_size = pkt_info->size; + lgtd_tests_gw_pkt_queue_size++; + } + +diff --git a/tests/lifx/gateway/test_gateway_allocate_tag_id.c b/tests/lifx/gateway/test_gateway_allocate_tag_id.c +--- a/tests/lifx/gateway/test_gateway_allocate_tag_id.c ++++ b/tests/lifx/gateway/test_gateway_allocate_tag_id.c +@@ -40,7 +40,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +diff --git a/tests/lifx/gateway/test_gateway_allocate_tag_id_from_lifx_network.c b/tests/lifx/gateway/test_gateway_allocate_tag_id_from_lifx_network.c +--- a/tests/lifx/gateway/test_gateway_allocate_tag_id_from_lifx_network.c ++++ b/tests/lifx/gateway/test_gateway_allocate_tag_id_from_lifx_network.c +@@ -41,7 +41,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +diff --git a/tests/lifx/gateway/test_gateway_allocate_tag_id_no_tag_id_left.c b/tests/lifx/gateway/test_gateway_allocate_tag_id_no_tag_id_left.c +--- a/tests/lifx/gateway/test_gateway_allocate_tag_id_no_tag_id_left.c ++++ b/tests/lifx/gateway/test_gateway_allocate_tag_id_no_tag_id_left.c +@@ -41,7 +41,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +diff --git a/tests/lifx/gateway/test_gateway_deallocate_tag_id_from_lifx_network.c b/tests/lifx/gateway/test_gateway_deallocate_tag_id_from_lifx_network.c +--- a/tests/lifx/gateway/test_gateway_deallocate_tag_id_from_lifx_network.c ++++ b/tests/lifx/gateway/test_gateway_deallocate_tag_id_from_lifx_network.c +@@ -23,7 +23,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +diff --git a/tests/lifx/gateway/test_gateway_enqueue_packet.c b/tests/lifx/gateway/test_gateway_enqueue_packet.c +--- a/tests/lifx/gateway/test_gateway_enqueue_packet.c ++++ b/tests/lifx/gateway/test_gateway_enqueue_packet.c +@@ -5,7 +5,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +@@ -17,7 +17,7 @@ + union lgtd_lifx_target target = { .tags = 0 }; + + struct lgtd_lifx_packet_header hdr; +- lgtd_lifx_wire_setup_header( ++ const struct lgtd_lifx_packet_info *pkt_info = lgtd_lifx_wire_setup_header( + &hdr, + LGTD_LIFX_TARGET_ALL_DEVICES, + target, +@@ -25,9 +25,7 @@ + LGTD_LIFX_SET_POWER_STATE + ); + +- lgtd_lifx_gateway_enqueue_packet( +- &gw, &hdr, LGTD_LIFX_SET_POWER_STATE, &pkt, sizeof(pkt) +- ); ++ lgtd_lifx_gateway_enqueue_packet(&gw, &hdr, pkt_info, &pkt); + + if (memcmp(gw_write_buf, &hdr, sizeof(hdr))) { + errx(1, "header incorrectly buffered"); +diff --git a/tests/lifx/gateway/test_gateway_enqueue_packet_ring_full.c b/tests/lifx/gateway/test_gateway_enqueue_packet_ring_full.c +--- a/tests/lifx/gateway/test_gateway_enqueue_packet_ring_full.c ++++ b/tests/lifx/gateway/test_gateway_enqueue_packet_ring_full.c +@@ -5,7 +5,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +@@ -17,7 +17,7 @@ + union lgtd_lifx_target target = { .tags = 0 }; + + struct lgtd_lifx_packet_header hdr; +- lgtd_lifx_wire_setup_header( ++ const struct lgtd_lifx_packet_info *pkt_info = lgtd_lifx_wire_setup_header( + &hdr, + LGTD_LIFX_TARGET_ALL_DEVICES, + target, +@@ -29,9 +29,7 @@ + gw.pkt_ring_head = 1; + gw.pkt_ring_tail = 2; + +- lgtd_lifx_gateway_enqueue_packet( +- &gw, &hdr, LGTD_LIFX_SET_POWER_STATE, &pkt, sizeof(pkt) +- ); ++ lgtd_lifx_gateway_enqueue_packet(&gw, &hdr, pkt_info, &pkt); + + if (memcmp(gw_write_buf, &hdr, sizeof(hdr))) { + errx(1, "header incorrectly buffered"); +@@ -65,9 +63,7 @@ + errx(1, "event_add should have been called with gw.write_ev"); + } + +- lgtd_lifx_gateway_enqueue_packet( +- &gw, &hdr, LGTD_LIFX_SET_POWER_STATE, &pkt, sizeof(pkt) +- ); ++ lgtd_lifx_gateway_enqueue_packet(&gw, &hdr, pkt_info, &pkt); + + if (gw_write_buf_idx != sizeof(pkt) + sizeof(hdr)) { + errx(1, "nothing should have been buffered"); +diff --git a/tests/lifx/gateway/test_gateway_enqueue_packet_ring_wraparound.c b/tests/lifx/gateway/test_gateway_enqueue_packet_ring_wraparound.c +--- a/tests/lifx/gateway/test_gateway_enqueue_packet_ring_wraparound.c ++++ b/tests/lifx/gateway/test_gateway_enqueue_packet_ring_wraparound.c +@@ -5,7 +5,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +@@ -17,7 +17,7 @@ + union lgtd_lifx_target target = { .tags = 0 }; + + struct lgtd_lifx_packet_header hdr; +- lgtd_lifx_wire_setup_header( ++ const struct lgtd_lifx_packet_info *pkt_info = lgtd_lifx_wire_setup_header( + &hdr, + LGTD_LIFX_TARGET_ALL_DEVICES, + target, +@@ -31,9 +31,7 @@ + gw.pkt_ring_head = pkt_ring_last_idx; + gw.pkt_ring_tail = 2; + +- lgtd_lifx_gateway_enqueue_packet( +- &gw, &hdr, LGTD_LIFX_SET_POWER_STATE, &pkt, sizeof(pkt) +- ); ++ lgtd_lifx_gateway_enqueue_packet(&gw, &hdr, pkt_info, &pkt); + + if (memcmp(gw_write_buf, &hdr, sizeof(hdr))) { + errx(1, "header incorrectly buffered"); +diff --git a/tests/lifx/gateway/test_gateway_handle_tag_labels.c b/tests/lifx/gateway/test_gateway_handle_tag_labels.c +--- a/tests/lifx/gateway/test_gateway_handle_tag_labels.c ++++ b/tests/lifx/gateway/test_gateway_handle_tag_labels.c +@@ -7,7 +7,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +diff --git a/tests/lifx/gateway/test_gateway_update_tag_refcounts.c b/tests/lifx/gateway/test_gateway_update_tag_refcounts.c +--- a/tests/lifx/gateway/test_gateway_update_tag_refcounts.c ++++ b/tests/lifx/gateway/test_gateway_update_tag_refcounts.c +@@ -5,7 +5,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +diff --git a/tests/lifx/gateway/test_gateway_write_callback.c b/tests/lifx/gateway/test_gateway_write_callback.c +--- a/tests/lifx/gateway/test_gateway_write_callback.c ++++ b/tests/lifx/gateway/test_gateway_write_callback.c +@@ -43,7 +43,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +diff --git a/tests/lifx/gateway/test_gateway_write_callback_clears_ring_full_flag.c b/tests/lifx/gateway/test_gateway_write_callback_clears_ring_full_flag.c +--- a/tests/lifx/gateway/test_gateway_write_callback_clears_ring_full_flag.c ++++ b/tests/lifx/gateway/test_gateway_write_callback_clears_ring_full_flag.c +@@ -43,7 +43,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +diff --git a/tests/lifx/gateway/test_gateway_write_callback_last_packet_on_ring.c b/tests/lifx/gateway/test_gateway_write_callback_last_packet_on_ring.c +--- a/tests/lifx/gateway/test_gateway_write_callback_last_packet_on_ring.c ++++ b/tests/lifx/gateway/test_gateway_write_callback_last_packet_on_ring.c +@@ -42,7 +42,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +diff --git a/tests/lifx/gateway/test_gateway_write_callback_partial_write.c b/tests/lifx/gateway/test_gateway_write_callback_partial_write.c +--- a/tests/lifx/gateway/test_gateway_write_callback_partial_write.c ++++ b/tests/lifx/gateway/test_gateway_write_callback_partial_write.c +@@ -50,7 +50,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +diff --git a/tests/lifx/gateway/test_gateway_write_callback_ring_wraparound.c b/tests/lifx/gateway/test_gateway_write_callback_ring_wraparound.c +--- a/tests/lifx/gateway/test_gateway_write_callback_ring_wraparound.c ++++ b/tests/lifx/gateway/test_gateway_write_callback_ring_wraparound.c +@@ -43,7 +43,7 @@ + int + main(void) + { +- lgtd_lifx_wire_load_packet_infos_map(); ++ lgtd_lifx_wire_load_packet_info_map(); + + struct lgtd_lifx_gateway gw; + memset(&gw, 0, sizeof(gw)); +diff --git a/tests/lifx/mock_gateway.h b/tests/lifx/mock_gateway.h +--- a/tests/lifx/mock_gateway.h ++++ b/tests/lifx/mock_gateway.h +@@ -11,7 +11,7 @@ + bool + lgtd_lifx_gateway_send_to_site(struct lgtd_lifx_gateway *gw, + enum lgtd_lifx_packet_type pkt_type, +- const void *pkt) ++ void *pkt) + { + (void)gw; + (void)pkt_type;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/relax_timings.patch Wed Aug 05 00:52:01 2015 -0700 @@ -0,0 +1,33 @@ +# HG changeset patch +# Parent 53fb61e971ca76d1222c16512bd7fe7defc79844 + +diff --git a/lifx/gateway.h b/lifx/gateway.h +--- a/lifx/gateway.h ++++ b/lifx/gateway.h +@@ -21,7 +21,7 @@ + // according to my own tests, aggressively polling a bulb doesn't raise its + // consumption at all (and it's interesting to note that a turned off bulb + // still draw about 2W in ZigBee and about 3W in WiFi). +-enum { LGTD_LIFX_GATEWAY_MIN_REFRESH_INTERVAL_MSECS = 200 }; ++enum { LGTD_LIFX_GATEWAY_MIN_REFRESH_INTERVAL_MSECS = 1000 }; + + // You can't send more than one lifx packet per UDP datagram. + enum { LGTD_LIFX_GATEWAY_PACKET_RING_SIZE = 16 }; +diff --git a/lifx/timer.h b/lifx/timer.h +--- a/lifx/timer.h ++++ b/lifx/timer.h +@@ -17,11 +17,11 @@ + + #pragma once + +-enum { LGTD_LIFX_TIMER_WATCHDOG_INTERVAL_MSECS = 200 }; ++enum { LGTD_LIFX_TIMER_WATCHDOG_INTERVAL_MSECS = 500 }; + enum { LGTD_LIFX_TIMER_ACTIVE_DISCOVERY_INTERVAL_MSECS = 2000 }; + enum { LGTD_LIFX_TIMER_PASSIVE_DISCOVERY_INTERVAL_MSECS = 10000 }; +-enum { LGTD_LIFX_TIMER_DEVICE_TIMEOUT_MSECS = 2000 }; +-enum { LGTD_LIFX_TIMER_DEVICE_FORCE_REFRESH_MSECS = 600 }; ++enum { LGTD_LIFX_TIMER_DEVICE_TIMEOUT_MSECS = 4000 }; ++enum { LGTD_LIFX_TIMER_DEVICE_FORCE_REFRESH_MSECS = 2000 }; + + bool lgtd_lifx_timer_setup(void); + void lgtd_lifx_timer_close(void);
--- a/series Tue Aug 04 01:06:02 2015 -0700 +++ b/series Wed Aug 05 00:52:01 2015 -0700 @@ -8,4 +8,6 @@ fix_crash_in_get_light_state_when_tag_does_not_exist.patch fix_lifx_wire_float_endian_functions_naming.patch ignore_pcaps.patch -leftovers.patch +fix_unused_unused_attribute.patch +properly_encode_packets_payload.patch +relax_timings.patch