#ifdef __cplusplus
extern "C"
{
-#if 0 /* keep Emacsens' auto-indent happy */
+#if 0
+ /* keep Emacsens' auto-indent happy */
}
#endif
#endif
/******************** 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;
/**
- * Information about speed requirements. If the tunnel cannot sustain the
- * minimum bandwidth, packets are to be dropped.
+ * Tunnel options (GNUNET_MESH_OPTION_*).
*/
- uint32_t speed_min GNUNET_PACKED;
+ uint32_t opt GNUNET_PACKED;
/**
- * 64-bit alignment.
+ * 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]; */
+ /* 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
/**
- * Message for mesh data traffic to a particular destination from origin.
+ * Message to acknowledge end-to-end data.
+ */
+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_DataMessageFromOrigin
+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;
+
+ /* TODO: signature */
+};
- /**
- * Slowest link down the path (above minimum speed requirement).
- */
- uint32_t speed_min;
+/**
+ * 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
}
#endif
-/* ifndef MES_PROTOCOL_H */
+/* ifndef MESH_PROTOCOL_H */
#endif
/* end of mesh_protocol.h */