aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorcbdev <cb@cbcdn.com>2020-09-06 22:45:20 +0200
committercbdev <cb@cbcdn.com>2020-09-06 22:45:20 +0200
commitfec26ba3f193f3e31e08b55dfb3c60aa30eed63f (patch)
tree5d2b843cc088f76f5e1fdbb5315cccea824855b7
parentdc7303cc07565a725eec19aeff46f64ad4275c21 (diff)
downloadmidimonster-fec26ba3f193f3e31e08b55dfb3c60aa30eed63f.tar.gz
midimonster-fec26ba3f193f3e31e08b55dfb3c60aa30eed63f.tar.bz2
midimonster-fec26ba3f193f3e31e08b55dfb3c60aa30eed63f.zip
Add rate limiting notice to sACN and ArtNet
-rw-r--r--TODO1
-rw-r--r--backend.c6
-rw-r--r--backends/artnet.md3
-rw-r--r--backends/sacn.md6
4 files changed, 13 insertions, 3 deletions
diff --git a/TODO b/TODO
index befa5e6..44336d4 100644
--- a/TODO
+++ b/TODO
@@ -4,3 +4,4 @@ udp backends may ignore MTU
make event collectors threadsafe to stop marshalling data...
collect & check backend API version
move all connection establishment to _start to be able to hot-stop/start all backends
+event deduplication in core?
diff --git a/backend.c b/backend.c
index 0fb6679..16e095c 100644
--- a/backend.c
+++ b/backend.c
@@ -94,16 +94,18 @@ int backends_notify(size_t nev, channel** c, channel_value* v){
MM_API channel* mm_channel(instance* inst, uint64_t ident, uint8_t create){
size_t u, bucket = channelstore_hash(inst, ident);
+ DBGPF("\tSearching for inst %" PRIu64 " ident %" PRIu64, inst, ident);
for(u = 0; u < channels.n[bucket]; u++){
+ DBGPF("\tBucket %" PRIsize_t " entry %" PRIsize_t " inst %" PRIu64 " ident %" PRIu64, bucket, u, channels.entry[bucket][u]->instance, channels.entry[bucket][u]->ident);
if(channels.entry[bucket][u]->instance == inst
&& channels.entry[bucket][u]->ident == ident){
- DBGPF("Requested channel %" PRIu64 " on instance %s already exists, reusing (%" PRIsize_t " search steps)\n", ident, inst->name, u);
+ DBGPF("Requested channel %" PRIu64 " on instance %s already exists, reusing (bucket %" PRIsize_t ", %" PRIsize_t " search steps)\n", ident, inst->name, bucket, u);
return channels.entry[bucket][u];
}
}
if(!create){
- DBGPF("Requested unknown channel %" PRIu64 " on instance %s\n", ident, inst->name);
+ DBGPF("Requested unknown channel %" PRIu64 " (bucket %" PRIsize_t ") on instance %s\n", ident, bucket, inst->name);
return NULL;
}
diff --git a/backends/artnet.md b/backends/artnet.md
index 73f598a..bd26014 100644
--- a/backends/artnet.md
+++ b/backends/artnet.md
@@ -39,3 +39,6 @@ net1.1+2 > net2.5+123
A normal channel that is part of a wide channel can not be mapped individually.
#### Known bugs / problems
+
+When using this backend for output with a fast event source, some events may appear to be lost due to the packet output rate limiting
+mandated by the [ArtNet specification](https://artisticlicence.com/WebSiteMaster/User%20Guides/art-net.pdf) (Section `Refresh rate`).
diff --git a/backends/sacn.md b/backends/sacn.md
index b7686e0..244b4c4 100644
--- a/backends/sacn.md
+++ b/backends/sacn.md
@@ -11,7 +11,7 @@ containing all write-enabled universes.
| `name` | `sACN source` | `MIDIMonster` | sACN source name |
| `cid` | `0xAA 0xBB 0xCC` ... | `MIDIMonster` | Source CID (16 bytes) |
| `bind` | `0.0.0.0 5568` | none | Binds a network address to listen for data. This option may be set multiple times, with each descriptor being assigned an index starting from 0 to be used with the `interface` instance configuration option. At least one descriptor is required for operation. |
-| `detect` | `on`, `verbose` | `off` | Output additional information on received data packets to help with configuring complex scenarios. |
+| `detect` | `on`, `verbose` | `off` | Output additional information on received data packets to help with configuring complex scenarios |
The `bind` configuration value can be extended by the keyword `local` to allow software on the
local host to process the sACN output frames from the MIDIMonster (e.g. `bind = 0.0.0.0 5568 local`).
@@ -59,3 +59,7 @@ To use multicast input, all networking hardware in the path must support the IGM
The Linux kernel limits the number of multicast groups an interface may join to 20. An instance configured
for input automatically joins the multicast group for its universe, unless configured in `unicast` mode.
This limit can be raised by changing the kernel option in `/proc/sys/net/ipv4/igmp_max_memberships`.
+
+When using this backend for output with a fast event source, some events may appear to be lost due to the packet output rate limiting
+mandated by the E1.31 specification (Section `6.6.1 Transmission rate`).
+The rate limiter can be disabled on a per-instance basis using the `realtime` option.