Currently in the process of applying for EtherType registration; this is a prototype.


This protocol provides a LinuxDriver for reception processing.

The driver enables exclusive processing of multiple communications.

It is used simultaneously by multiple applications.

Diretta is a protocol implemented not only on hardware sold by Diretta but also on products from multiple manufacturers.

Applications make reservations with the driver, enabling coexistence and communication using this Ether Type with applications other than Diretta.


Please use a commercial license to use Diretta.
Diretta's protocol will be disclosed under a license NDA.
If modifications to the protocol or libraries are required for integration into the actual device, you can report the necessary changes.


We are conducting a test.

https://help.diretta.link/en/support/solutions/articles/73000661018-146

Using 0x88B6 for testing purposes

https://www.diretta.link/


Diretta is a protocol for audio data transfer.

Connection will be initiated on UDP port 19642.

It is then used to directly transfer only the audio stream.

https://www.diretta.link/


Diretta Direct Stream (DDS)


Sub Type 0x0000 is used for stream transmission.

byte0123456789ABCDEF
0x0xDistnation MAC AddressSource MAC AddressEther TypeD1D2
0x1x
EX=0
NO extended 
Stream Data
 0x1x
EX=1
DDS extended
LENVERSub TypeOP1OP2Stream Data / Payload


 

DDS first control (D1) 1byte (When using QoS, interpret Stream Port Number directly as priority(0=high)._

bit76543210
offset=14
EXStream Port Number (0-128)

     


DDS second control (D2) 1byte

bit76543210
offset=15
IRStream Counter (max 127)



Sub Type in DDS extended (EX=1)

bit151413121110
9876543210
offset=18
EXSUID (Service CodeMSUB (Message ID per service

     UID=0 MSUB=0 Stream
     Assigned when used with services other than Diretta

     EXS must set 0 ( For message expansion



offsetlengthdescription
06Distnation MAC Address
66Source MAC Address
122Ether Type
141DDS first control (D1)
151DDS second control (D2)
168DDS extended control
NO  extended (EX=0)
16Frame Length -16Stream Data (NO extended)
DDS extended (EX=1)
161Length (LEN)
171Version (VER)
Version 0 DDS extended (EX=1 VER=0)
182Sub Type
202Option Code 1 (OP1)
222Option Code 2 (OP2)
24Length (LEN)
Stream Data (DDS extended) /Payload

Audio data must be aligned to 64-bit boundaries.

Therefore, it is designed so that DATA has an offset of 16 or 24.



Extended control (EX)

 0 : stream start offset is 16. ProtocolVersion 0x00 /  Sub Type 0x00

 1 : DDS extended control (DE) is used ( stream start offset is 24.


Information request (IR)

 0 : none

 1 : Request the stream reception status.


Stream Port Number (0-127)

     Stream output endpoint number

     Handles multiple streams


Stream Counter (max 127)

     Detects dropped stream packets

     If dropped, a retransmission request will be made based on this value.


Stream Data

     The RAW data of the output audio stream is entered here.


Length (LEN) in DDS extended 

     This value indicates the length of the audio stream.

     Used when the size is less than the minimum size of 60 bytes for EtherFram.

     If 0xff, the EtherFrame length is used.


Version (VER) in DDS extended 

    Protocol Version

 must set 0x00


Message expansion (EXS)

   Used when extending Sub Type

   must set 0 


Option Code 1/2 (OP1 / OP2)
For use when not Sub Type 0x0000 



Protocol Diagram


Hedder Relation



Version:0 ( EX=0 or (EX=1 and  VER=0 ) )


UID = 0 Control


Sub Type = 0x0001 Stream Port=0

     Time Control 

byte0123456789ABCDEF
0x0xDistnation MAC AddressSource MAC AddressEther TypeD1
0x80
D2
0x00
0x1xLEN
16
VER
0
Sub Type
0x0001
Ver0 opt1
0 (Reserv
Ver0 opt2
0 (Reserv
Host Clock 64bit (PicoSeconds



UID = 1 Direta


SUB Type = 0x0101 Stream Port=0

    Diretta Control
When not using UDP authentication communication
    Encapsulates UDP communication

byte0123456789ABCDEF
0x0xDistnation MAC AddressSource MAC AddressEther TypeD1
0xFF
D2
0x00
0x1xLEN
Size
VER
0
Sub Type
0x0101
Diretta
MessageID
Diretta
Status
Diretta Payload


SUB Type = 0x0102 Stream Port=0

    Debug Stream
    SysLog-formatted messages are encapsulated.

byte0123456789ABCDEF
0x0xDistnation MAC AddressSource MAC AddressEther TypeD1
0xFF
D2
0x00
0x1xLEN
Size
VER
0
Sub Type
0x0102
Ver0 opt1
facility
Ver0 opt2
level
Deubg Message




Example Diretta


Diretta Discover (FInd Device)

byte0123456789ABCDEF
0x0xDistnation MAC Address
FF:FF:FF:FF:FF:FF
Source MAC Address
xx:xx:xx:xx:xx:xx
Ether TypeD1
0x80
D2
0x00
0x1xLEN
0x00
VER
0
Sub Type
0x0101
Diretta
MessageID

0x0000
Diretta
Status

0x0000 

DDS  first control(D1)

    Extended control (EX) : 1

    Stream Port Number : 0x00 Control port

LEN : 0x00 Diretta Payload is zero

Sub Type : 0x0101  Diretta Control 
Ver0 opt1  Diretta MessageID : 0x0000  Diretta  Discover  

Ver0 opt2 Diretta Status : 0x0000  don't care 


Diretta FOUND

byte0123456789ABCDEF
0x0xDistnation MAC Address
xx:xx:xx:xx:xx:xx 
Source MAC Address
yy:yy:yy:yy:yy:yy 
Ether TypeD1
0x80 
D2
0x00
0x1xLEN
0x08
VER
0
Sub Type
0x0101 
Diretta
MessageID

0x0001

Diretta
Status

0x0001
Diretta Payload
Vender ID
0xzzzzzzzzzzzzzzzz

DDS  first control(D1)

    Extended control (EX) : 1

    Stream Port Number : 0x00 Control port

LEN : 0x08 Diretta Payload is 8

Sub Type : 0x0101  Diretta Control 
Ver0 opt1  Diretta MessageID : 0x0000  Diretta  Found

Ver0 opt2 Diretta Status : 0x0001  Acknowledge 

Diretta Payload Vender ID  : manufacturer 64bit unique id 


Diretta Information (ERR request ) Sent based on the result of Stream Counter in DDS second control (D2)

byte0123456789ABCDEF
0x0xDistnation MAC Address
xx:xx:xx:xx:xx:xx 
Source MAC Address
yy:yy:yy:yy:yy:yy 
Ether TypeD1
0x8w 
D2
0x00
0x1xLEN
0x08
VER
0
Sub Type
0x0101 
Diretta
MessageID

0x000B

Diretta
Status

0x0012
Reserve
0x00

Expected Count
Recive
Count
Reserve
0x00

DDS  first control(D1)

    Extended control (EX) : 1

    Stream Port Number : 0xww Stream port

LEN : 0x08 Diretta Payload is 8

Sub Type : 0x0101  Diretta Control 
Ver0 opt1  Diretta MessageID : 0x000B Diretta  Status Info

Ver0 opt2 Diretta Status : 0x0001  Connect and Count ERR

Diretta Payload : Report a reception error


Diretta Information (Information request) Sent based on the result of 
Information request (IR) in DDS second control (D2)

byte0123456789ABCDEF
0x0xDistnation MAC Address
xx:xx:xx:xx:xx:xx 
Source MAC Address
yy:yy:yy:yy:yy:yy 
Ether TypeD1
0x8w 
D2
0x00
0x1xLEN
0x08
VER
0
Sub Type
0x0101 
Diretta
MessageID

0x000B

Diretta
Status

0x0023
Rate Time
Exist Time
Target Time
Reserve
0x00

DDS  first control(D1)

    Extended control (EX) : 1

    Stream Port Number : 0xww Stream port

LEN : 0x08 Diretta Payload is 8

Sub Type : 0x0101  Diretta Control 
Ver0 opt1  Diretta MessageID : 0x000B Diretta  Status Info

Ver0 opt2 Diretta Status : 0x0001  Acknowledge  and Connect and Info

Diretta Payload  : Report the status of the receive buffer




Current test configuration



Register the stream port with the driver

Set a filter using the source MAC address for the required communication

This allows other applications on the same OS to share the same EtherType




#ifndef DDS_DRIVER_H_

#define DDS_DRIVER_H_


#include <linux/ioctl.h>


/*

     DDD Diretta Direct Driver prototype rev 0

 */



/* driver open path */

#define DDS_DRV_PATH "/dev/diretta-direct"


/* MAC Address set ioctl arg */

struct _dds_macaddress{

    unsigned char MAC[6];

}dds_drv_macaddress;



/* ioctl magic numbers */

#define DDS_MAGIC 'x'

#define DDS_REGIST_CMD 1

#define DDS_UNREGIST_CMD 2

#define DDS_CLEAR_CMD 3

#define DDS_TIMEOUT_CMD 4

#define DDS_FILTER_SRC_CMD 5

#define DDS_FILTER_DEST_CMD 6

#define DDS_FILTER_LEN_CMD 7

#define DDS_NODE_MAX_CMD 8

#define DDS_ETHERTYPE_CMD 9

#define DDS_WAKEUP_CMD 10


/* Get the Stream Port number to use Transfer */

#define DDS_REGIST_IOCTL _IO(DDS_MAGIC,DDS_REGIST_CMD)

/* Release the stream port in use (this also occurs when you close the stream) */

#define DDS_UNREGIST_IOCTL _IO(DDS_MAGIC,DDS_UNREGIST_CMD)

/* Clear self receive buffer */

#define DDS_CLEAR_IOCTL _IO(DDS_MAGIC,DDS_CLEAR_CMD)

/*  Set the 'rea'd timeout msec*/

#define DDS_TIMEOUT_IOCTL _IOW(DDS_MAGIC,DDS_TIMEOUT_CMD,int)

/* Set source address filter  */

#define DDS_FILTER_SRC_IOCTL _IOW(DDS_MAGIC,DDS_FILTER_SRC_CMD,dds_drv_macaddress)

/* Set destination address filter */

#define DDS_FILTER_DEST_IOCTL _IOW(DDS_MAGIC,DDS_FILTER_DEST_CMD,dds_drv_macaddress)

/*  Set frame size limit */

#define DDS_FILTER_LEN_IOCTL _IOW(DDS_MAGIC,DDS_FILTER_LEN_CMD,int)

/* Get the maximum number of registrations allowed (127 Port 0 is not use)‘ */

#define DDS_NODE_MAX_IOCTL _IO(DDS_MAGIC,DDS_NODE_MAX_CMD)

/* Get the received EthreType */

#define DDS_ETHERTYPE_IOCTL _IO(DDS_MAGIC,DDS_ETHERTYPE_CMD)

/* Interrupt the wait for 'read' and resume execution */

#define DDS_WAKEUP_IOCTL _IO(DDS_MAGIC,DDS_WAKEUP_CMD)


#endif








If you wish to use DDS for purposes other than Diretta, please create a ticket and contact the administrator.

Products WEB page https://www.diretta.link/dds/