From: Ludovic B. <lu...@lu...> - 2016-10-21 09:23:43
|
James Turner wrote: > I assume the packet size is bounded by UDP limits, so any change > might cause some people to be unable to use MP. (1500 is the > generally > agreed MTU, right?) I'm not aware of this and I'm not an expert at UDP but if the "generally agreed MTU" is indeed 1500 bytes, that's 300 more than the current packet limit. I think this deserves investigation. Does anyone here know why packets are limited to this particular size and whether or not it is possible to raise it? >> One thing I'd like to have is, in the debugging output of fgfs, the >> complete list of properties sent per packet. This would allow me to >> discover any properties that are transmitted without my knowledge or >> consent :) IIUC, only the properties that are "initialized" get >> transmitted. > > That’s a pretty easy modification I think. > > This raises a curious question - for the generic properties, if only > a subset was sent in a given packet, would the existing receivers > cope? I assume the local receiving property stores a value, so we > could send generic properties in a round-robin fashion, but without > breaking protocol compatibility. Obviously at a reduced transmission > rate for those properties, since they would only be sent every second > or third MP packet. It is already the case that not all properties in the protocol are transmitted. In "Position Messages", only the "first part" is completely transmitted, the "second part" only contains key-value pairs for which the value "exists", for some definition of "exists" in the sending fgfs. Let's look at the definition of the protocol in multiplaymgr.cxx, narrow to the declaration of sIdPropertyList[] and pipe that into: awk 'BEGIN { int_=0; float_=0; string_=0; } /simgear::props::INT/ { int_++; } /simgear::props::FLOAT/ { float_++; } /simgear::props::STRING/ { string_++; } /simgear::props::BOOL/ { int_++; } END { print "int=" int_ ", float=" float_ ", string=" string_; print "max bytes=" int_*8 + float_*8 + string_*516; }' This yields: int=31, float=101, string=27 max bytes=14988 Therefore, if an aircraft defines all possible properties in the protocol, it tries to send 14988 bytes per packet, almost 12.5 times the allowed limit! Your idea of sending properties in a round-robin fashion is good IMHO but good MP debugging tools are necessary for aircraft developers. -- Ludovic Brenta. |