X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fmesh%2Fmesh_protocol.h;h=2d708eb6220b11144c963eac1b525937a790b92e;hb=0f6d24a229e9149db26a4e667ed25032d19f533a;hp=c21d101100d974000483b2b4dba10fde4df6dde7;hpb=02c28f10411c7bccc2c8394f6797032da3a637f8;p=oweals%2Fgnunet.git diff --git a/src/mesh/mesh_protocol.h b/src/mesh/mesh_protocol.h index c21d10110..2d708eb62 100644 --- a/src/mesh/mesh_protocol.h +++ b/src/mesh/mesh_protocol.h @@ -35,10 +35,6 @@ extern "C" #endif #endif -#define MESH_TUNNEL_OPT_SPEED_MIN 0x1 -#define MESH_TUNNEL_OPT_NOBUFFER 0x2 - - /******************************************************************************/ /******************** MESH NETWORK MESSAGES **************************/ /******************************************************************************/ @@ -46,12 +42,12 @@ extern "C" GNUNET_NETWORK_STRUCT_BEGIN /** - * Message for mesh path management + * Message for mesh path creation. */ -struct GNUNET_MESH_ManipulatePath +struct GNUNET_MESH_CreateTunnel { /** - * Type: GNUNET_MESSAGE_TYPE_MESH_PATH_[CREATE|CHANGE|ADD|DESTROY] + * Type: GNUNET_MESSAGE_TYPE_MESH_PATH_CREATE * * Size: sizeof(struct GNUNET_MESH_ManipulatePath) + * path_length * sizeof (struct GNUNET_PeerIdentity) @@ -65,29 +61,32 @@ struct GNUNET_MESH_ManipulatePath uint32_t tid GNUNET_PACKED; /** - * Tunnel options (MESH_TUNNEL_OPT_*). + * Tunnel options (GNUNET_MESH_OPTION_*). */ uint32_t opt GNUNET_PACKED; /** - * 64 bit alignment padding. + * Destination port. */ - uint32_t reserved GNUNET_PACKED; + uint32_t port GNUNET_PACKED; /** + * FIXME do not add the first hop * path_length structs defining the *whole* path from the origin [0] to the * final destination [path_length-1]. */ /* struct GNUNET_PeerIdentity peers[path_length]; */ }; + /** - * Message for mesh data traffic to all tunnel targets. + * Message for mesh data traffic. */ -struct GNUNET_MESH_Multicast +struct GNUNET_MESH_Data { /** - * Type: GNUNET_MESSAGE_TYPE_MESH_MULTICAST + * Type: GNUNET_MESSAGE_TYPE_MESH_UNICAST, + * GNUNET_MESSAGE_TYPE_MESH_TO_ORIGIN */ struct GNUNET_MessageHeader header; @@ -102,7 +101,7 @@ struct GNUNET_MESH_Multicast uint32_t ttl GNUNET_PACKED; /** - * Unique ID of the packet + * ID of the packet */ uint32_t pid GNUNET_PACKED; @@ -111,6 +110,11 @@ struct GNUNET_MESH_Multicast */ struct GNUNET_PeerIdentity oid; + /** + * Unique ID of the payload message + */ + uint32_t mid GNUNET_PACKED; + /** * Payload follows */ @@ -118,53 +122,46 @@ struct GNUNET_MESH_Multicast /** - * Message for mesh data traffic to a particular destination from origin. + * Message to acknowledge end-to-end data. */ -struct GNUNET_MESH_Unicast +struct GNUNET_MESH_DataACK { - /** - * Type: GNUNET_MESSAGE_TYPE_MESH_UNICAST - */ + /** + * Type: GNUNET_MESSAGE_TYPE_MESH_DATA_ACK + */ struct GNUNET_MessageHeader header; - /** - * TID of the tunnel - */ + /** + * TID of the tunnel + */ uint32_t tid GNUNET_PACKED; - /** - * Number of hops to live - */ - uint32_t ttl GNUNET_PACKED; - - /** - * Unique ID of the packet - */ - uint32_t pid GNUNET_PACKED; - - /** - * OID of the tunnel - */ + /** + * OID of the tunnel + */ struct GNUNET_PeerIdentity oid; - /** - * Destination. - */ - struct GNUNET_PeerIdentity destination; - - /** - * Payload follows - */ + /** + * Bitfield of already-received newer messages + * pid + 1 @ LSB + * pid + 64 @ MSB + */ + uint64_t futures GNUNET_PACKED; + + /** + * Last message ID received. + */ + uint32_t mid GNUNET_PACKED; }; /** - * Message for mesh data traffic from a tunnel participant to origin. + * Message to acknowledge mesh data traffic. */ -struct GNUNET_MESH_ToOrigin +struct GNUNET_MESH_ACK { /** - * Type: GNUNET_MESSAGE_TYPE_MESH_TO_ORIGIN + * Type: GNUNET_MESSAGE_TYPE_MESH_ACK */ struct GNUNET_MessageHeader header; @@ -179,41 +176,36 @@ struct GNUNET_MESH_ToOrigin struct GNUNET_PeerIdentity oid; /** - * Sender of the message. - */ - struct GNUNET_PeerIdentity sender; - - /** - * Payload follows + * Maximum packet ID authorized. */ + uint32_t pid GNUNET_PACKED; }; /** - * Message to acknowledte mesh data traffic. + * Message to query a peer about its Flow Control status regarding a tunnel. */ -struct GNUNET_MESH_ACK +struct GNUNET_MESH_Poll { - /** - * Type: GNUNET_MESSAGE_TYPE_MESH_ACK - */ + /** + * Type: GNUNET_MESSAGE_TYPE_MESH_POLL + */ struct GNUNET_MessageHeader header; - /** - * TID of the tunnel - */ + /** + * TID of the tunnel + */ uint32_t tid GNUNET_PACKED; - /** - * OID of the tunnel - */ + /** + * OID of the tunnel + */ struct GNUNET_PeerIdentity oid; - /** - * Maximum packet ID authorized. - */ - uint32_t pid; - + /** + * Last packet sent. + */ + uint32_t pid GNUNET_PACKED; }; /** @@ -241,6 +233,11 @@ struct GNUNET_MESH_PathACK */ struct GNUNET_PeerIdentity peer_id; + /** + * Initial ACK value for payload. + */ + uint32_t ack GNUNET_PACKED; + /* TODO: signature */ }; @@ -303,6 +300,29 @@ struct GNUNET_MESH_TunnelDestroy }; +/** + * Message to destroy a tunnel + */ +struct GNUNET_MESH_TunnelKeepAlive +{ + /** + * Type: GNUNET_MESSAGE_TYPE_MESH_PATH_(FWD|BCK)_KEEPALIVE + */ + struct GNUNET_MessageHeader header; + + /** + * TID of the tunnel + */ + uint32_t tid GNUNET_PACKED; + + /** + * OID of the tunnel + */ + struct GNUNET_PeerIdentity oid; +}; + + + GNUNET_NETWORK_STRUCT_END #if 0 /* keep Emacsens' auto-indent happy */