$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
 31, E1
 Acacian Application Architecture
 Acacian License
 Ad hoc Join handlers
 adding tasks for subsequent actions
 address map memory blocks
 Address map structures
 Address map type selection
 Address search structures
 Address sizes(combined from individual bits)
 Address specification bits-in header field
 Address specification types
 Address types(combined from individual bits)
 Algorithm for address search
 Avoiding compiler warnings
 BSD Sockets interface IPv4(including Windows)
static struct uuidtrk_s * _finduuid(struct uuidset_s *set,
const uint8_t *uuid)
Find the tree entry where uuid should go.
int _flushWrapper(struct txwrap_s *txwrap,
int32_t *Rseqp)
Each property in the “bar graph” is printed as a BAR_PLACES wide integer with a select indicator string either side.
the original ANSI ESTA E1.17-2006 version
the revised version ANSI ESTA E1.17-2010
This document outlines the top-level approach to application architecture in Acacian and says what the Acacian implementation handles and what is left to the application.
Acacian and the Source Code herein is subject to the terms of the Mozilla Public License, v.
#include “acn.h”
Length (in bytes) assigned for FCTN
Length (in bytes) assigned for UACN
a wrapper for malloc which allows overriding with custom functions.
Macros like ARRAYSIZE() and container_of() adhere to syntax and definitions encountered in many systems and are only defined here if there is not a definition already in force.
a wrapper for free which allows overriding with custom functions.
Miscellaneous routines and macros for IPv4 – and soon IPv6 – protocols
Generic handling for single and double linked lists.
generate an arbitrary message (depending on priority)
These macros loosely follow syslog syntax but the loglevel is tested at compile time and outputs compile to nothing if the loglevel is not high enough.
All logging is compiled out
Log to standard error
Log to standard output (default)
Log using POSIX Syslog
roughly equivalent to perror() library function
generate a “function, file, line” message before the log message
All code uses functions or macros defined here to allocate memory.
create a new variable of the given type, zero it and return a pointer to it.
call at start and end of program
These constants represent requirements defined in standard documents of ANSI E1.17
#include acnstdtypes.h
use to test whether a particular loglevel would generate code which is useful where logging requires aditional code or variable definitions.
These are special values for the joinRx argument to sdt_register.
both ACN-2006 and ACN-2010
both ACN-2006 and ACN-2010
void * add_devtask(struct dcxt_s *dcxp,
devtask_fn *task,
size_t size)
Add a task (during parsing) for execution once the entire tree has been constructed but before returning it to the caller.
Most behaviors can be processed immediately they are encountered in the parse.
static inline int addLcomponent(struct Lcomponent_s *Lcomp)
Add a local component to Lcomponents.
int addMember(struct Lchannel_s *Lchan,
struct Rcomponent_s *Rcomp)
Create a new member and add it to a channel and send a cold Join.
int addProtoMsg(struct txwrap_s **txwrapp,
struct member_s *memb,
protocolID_t proto,
uint16_t wflags,
const uint8_t *data,
int size)
Extract the address size (1,2 or 4) from the header field
static struct addrfind_s * addr_to_map(union addrmap_u *amap,
uint32_t addr)
Given an address, search the map for a property which might match.
const struct dmpprop_s * addr_to_prop(union addrmap_u *amap,
uint32_t addr)
Find a property given an address.
int addr2ofs(const struct dmpprop_s *dprop,
struct adspec_s *dmpads,
struct adspec_s *ofsads)
Convert a DMP address specifier to a property array offset.
static inline int addRcomponent(struct Rcomponent_s *Rcomp)
Add a remote component to Rcomponents.
An index map is a single linear array with one entry per address.
Address search maps may be of different types.
Individual bit-field definitions DMPAD_A0 - A1 A0 specify the address size DMPAD_A1 - A1 A0 specify the address size DMPAD_X0 - Must be zero DMPAD_X1 - Must be zero DMPAD_D0 - D1 D0 give the address format DMPAD_D1 - D1 D0 give the address format DMPAD_R - Address is relative to previous property DMPAD_Z - Must be zero DMPAD_ZMASK - Combined mask of bits which must be zero
From SDT spec Table 7
a single element of the srch_amap_s search table.
an address map, type specified by maptype_e.
extern int adduuid(struct uuidset_s *set,
const uint8_t *uuid)
Adds uuid to the set (storing the pointer uuid).
Accept all ‘cold’ Join requests.
Refuse all ‘cold’ Join requests.
increment to grow map when required
initial size of address map
increment used to grow addrfind.p when ntests > 1
The parser builds a single table (a 1 dimensional array) in which each each entry E defines a region within the space by a low address and a high address E_lo and E_hi (inclusive values).
MID value for PDUs addressed to all members
a direct lookup map; fast but only suitable for certain devices
no map or unspecified map.
a map optimized for binary search
dummy structure defining the fields common to all address map types.
The number of elements in array.
Functions to handle specific DDL behaviors.
void behaviorsetID_bva(struct dcxt_s *dcxp,
const struct bv_s *bv)
void binObject_bva(struct dcxt_s *dcxp,
const struct bv_s *bv)
Unfortunately the behavior of the sockets interface, particularly with regard to multicast reception is very inconsistent across implementations and it is very hard to find in documentation what a particular implementation does.
static void bset_start(struct dcxt_s *dcxp,
const ddlchar_t **atta)
Process a behaviorset.
Behavior has been created because it was referenced but has not yet been parsed.
No refinements and no action.