X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fmesh%2Fmesh_protocol.h;h=2d708eb6220b11144c963eac1b525937a790b92e;hb=0f6d24a229e9149db26a4e667ed25032d19f533a;hp=dcffdac96876cbfdef4ecbba77125a7200631038;hpb=6fe56d071a601aa102d1a0b833bad71a0ef84883;p=oweals%2Fgnunet.git diff --git a/src/mesh/mesh_protocol.h b/src/mesh/mesh_protocol.h index dcffdac96..2d708eb62 100644 --- a/src/mesh/mesh_protocol.h +++ b/src/mesh/mesh_protocol.h @@ -29,7 +29,8 @@ #ifdef __cplusplus extern "C" { -#if 0 /* keep Emacsens' auto-indent happy */ +#if 0 + /* keep Emacsens' auto-indent happy */ } #endif #endif @@ -38,51 +39,81 @@ extern "C" /******************** MESH NETWORK MESSAGES **************************/ /******************************************************************************/ +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|DEL] + * Type: GNUNET_MESSAGE_TYPE_MESH_PATH_CREATE * * Size: sizeof(struct GNUNET_MESH_ManipulatePath) + * path_length * sizeof (struct GNUNET_PeerIdentity) */ - struct GNUNET_MessageHeader header; + struct GNUNET_MessageHeader header; /** * Global id of the tunnel this path belongs to, * unique in conjunction with the origin. */ - uint32_t tid GNUNET_PACKED; + uint32_t tid GNUNET_PACKED; + + /** + * Tunnel options (GNUNET_MESH_OPTION_*). + */ + uint32_t opt GNUNET_PACKED; + + /** + * Destination port. + */ + 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]; */ + /* struct GNUNET_PeerIdentity peers[path_length]; */ }; + /** - * Message for mesh data traffic to all tunnel targets. + * Message for mesh data traffic. */ -struct GNUNET_MESH_OriginMulticast +struct GNUNET_MESH_Data { /** - * Type: GNUNET_MESSAGE_TYPE_DATA_MULTICAST + * Type: GNUNET_MESSAGE_TYPE_MESH_UNICAST, + * GNUNET_MESSAGE_TYPE_MESH_TO_ORIGIN */ - struct GNUNET_MessageHeader header; + struct GNUNET_MessageHeader header; /** * TID of the tunnel */ - uint32_t tid GNUNET_PACKED; + uint32_t tid GNUNET_PACKED; + + /** + * Number of hops to live + */ + uint32_t ttl GNUNET_PACKED; + + /** + * ID of the packet + */ + uint32_t pid GNUNET_PACKED; /** * OID of the tunnel */ - struct GNUNET_PeerIdentity oid; + struct GNUNET_PeerIdentity oid; + + /** + * Unique ID of the payload message + */ + uint32_t mid GNUNET_PACKED; /** * Payload follows @@ -91,93 +122,209 @@ struct GNUNET_MESH_OriginMulticast /** - * Message for mesh data traffic to a particular destination from origin. + * Message to acknowledge end-to-end data. */ -struct GNUNET_MESH_DataMessageFromOrigin +struct GNUNET_MESH_DataACK +{ + /** + * Type: GNUNET_MESSAGE_TYPE_MESH_DATA_ACK + */ + struct GNUNET_MessageHeader header; + + /** + * TID of the tunnel + */ + uint32_t tid GNUNET_PACKED; + + /** + * OID of the tunnel + */ + struct GNUNET_PeerIdentity oid; + + /** + * 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 to acknowledge mesh data traffic. + */ +struct GNUNET_MESH_ACK { /** - * Type: GNUNET_MESSAGE_TYPE_DATA_MESSAGE_FROM_ORIGIN + * Type: GNUNET_MESSAGE_TYPE_MESH_ACK */ - struct GNUNET_MessageHeader header; + struct GNUNET_MessageHeader header; /** * TID of the tunnel */ - uint32_t tid GNUNET_PACKED; + uint32_t tid GNUNET_PACKED; /** * OID of the tunnel */ - struct GNUNET_PeerIdentity oid; + struct GNUNET_PeerIdentity oid; /** - * Destination. + * Maximum packet ID authorized. */ - struct GNUNET_PeerIdentity destination; + uint32_t pid GNUNET_PACKED; +}; + +/** + * Message to query a peer about its Flow Control status regarding a tunnel. + */ +struct GNUNET_MESH_Poll +{ + /** + * Type: GNUNET_MESSAGE_TYPE_MESH_POLL + */ + struct GNUNET_MessageHeader header; + + /** + * TID of the tunnel + */ + uint32_t tid GNUNET_PACKED; + + /** + * OID of the tunnel + */ + struct GNUNET_PeerIdentity oid; + + /** + * Last packet sent. + */ + uint32_t pid GNUNET_PACKED; +}; + +/** + * Message for ack'ing a path + */ +struct GNUNET_MESH_PathACK +{ /** - * Payload follows + * Type: GNUNET_MESSAGE_TYPE_MESH_PATH_ACK + */ + struct GNUNET_MessageHeader header; + + /** + * TID of the tunnel + */ + uint32_t tid GNUNET_PACKED; + + /** + * OID of the tunnel + */ + struct GNUNET_PeerIdentity oid; + + /** + * ID of the endpoint + */ + struct GNUNET_PeerIdentity peer_id; + + /** + * Initial ACK value for payload. */ + uint32_t ack GNUNET_PACKED; + + /* TODO: signature */ }; /** - * Message for mesh data traffic from a tunnel participant to origin. + * Message for notifying a disconnection in a path */ -struct GNUNET_MESH_DataMessageToOrigin +struct GNUNET_MESH_PathBroken { /** - * Type: GNUNET_MESSAGE_TYPE_DATA_MESSAGE_TO_ORIGIN + * Type: GNUNET_MESSAGE_TYPE_MESH_PATH_BROKEN */ - struct GNUNET_MessageHeader header; + struct GNUNET_MessageHeader header; /** * TID of the tunnel */ - uint32_t tid GNUNET_PACKED; + uint32_t tid GNUNET_PACKED; /** * OID of the tunnel */ - struct GNUNET_PeerIdentity oid; + struct GNUNET_PeerIdentity oid; /** - * Sender of the message. + * ID of the endpoint */ - struct GNUNET_PeerIdentity sender; + struct GNUNET_PeerIdentity peer1; /** - * Payload follows + * ID of the endpoint */ + struct GNUNET_PeerIdentity peer2; + + /* TODO: signature */ }; + /** - * Message for mesh flow control + * Message to destroy a tunnel */ -struct GNUNET_MESH_SpeedNotify +struct GNUNET_MESH_TunnelDestroy { /** - * Type: GNUNET_MESSAGE_TYPE_DATA_SPEED_NOTIFY + * Type: GNUNET_MESSAGE_TYPE_MESH_TUNNEL_DESTROY */ - struct GNUNET_MessageHeader header; + struct GNUNET_MessageHeader header; /** * TID of the tunnel */ - uint32_t tid GNUNET_PACKED; + uint32_t tid GNUNET_PACKED; /** * OID of the tunnel */ - struct GNUNET_PeerIdentity oid; + struct GNUNET_PeerIdentity oid; - /** - * Slowest link down the path (above minimum speed requirement). - */ - uint32_t speed_min; + /* TODO: signature */ +}; + +/** + * 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 */ { #endif @@ -185,6 +332,6 @@ struct GNUNET_MESH_SpeedNotify } #endif -/* ifndef MES_PROTOCOL_H */ +/* ifndef MESH_PROTOCOL_H */ #endif /* end of mesh_protocol.h */