- add separate encryption enabled mesh to avoid breakage during developement
[oweals/gnunet.git] / src / mesh / mesh_protocol.h
index 12723fdacb140cad660e4b92f6216e9a9a27bb6a..2d708eb6220b11144c963eac1b525937a790b92e 100644 (file)
@@ -39,13 +39,15 @@ 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)
@@ -59,19 +61,32 @@ struct GNUNET_MESH_ManipulatePath
   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]; */
 };
 
+
 /**
- * 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;
 
@@ -80,11 +95,26 @@ struct GNUNET_MESH_Multicast
      */
   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;
 
+  /**
+   * Unique ID of the payload message
+   */
+  uint32_t mid GNUNET_PACKED;
+
     /**
      * Payload follows
      */
@@ -92,12 +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_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_Unicast
+struct GNUNET_MESH_ACK
 {
     /**
-     * Type: GNUNET_MESSAGE_TYPE_MESH_UNICAST
+     * Type: GNUNET_MESSAGE_TYPE_MESH_ACK
      */
   struct GNUNET_MessageHeader header;
 
@@ -112,23 +176,45 @@ struct GNUNET_MESH_Unicast
   struct GNUNET_PeerIdentity oid;
 
     /**
-     * Destination.
-     */
-  struct GNUNET_PeerIdentity destination;
-
-    /**
-     * Payload follows
+     * Maximum packet ID authorized.
      */
+  uint32_t pid GNUNET_PACKED;
 };
 
 
 /**
- * Message for mesh data traffic from a tunnel participant to origin.
+ * 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_ToOrigin
+struct GNUNET_MESH_PathACK
 {
     /**
-     * Type: GNUNET_MESSAGE_TYPE_MESH_TO_ORIGIN
+     * Type: GNUNET_MESSAGE_TYPE_MESH_PATH_ACK
      */
   struct GNUNET_MessageHeader header;
 
@@ -143,23 +229,26 @@ struct GNUNET_MESH_ToOrigin
   struct GNUNET_PeerIdentity oid;
 
     /**
-     * Sender of the message.
+     * ID of the endpoint
      */
-  struct GNUNET_PeerIdentity sender;
+  struct GNUNET_PeerIdentity peer_id;
 
     /**
-     * Payload follows
+     * Initial ACK value for payload.
      */
+  uint32_t ack GNUNET_PACKED;
+
+  /* TODO: signature */
 };
 
 
 /**
- * Message for ack'ing a path
+ * Message for notifying a disconnection in a path
  */
-struct GNUNET_MESH_PathACK
+struct GNUNET_MESH_PathBroken
 {
     /**
-     * Type: GNUNET_MESSAGE_TYPE_PATH_ACK
+     * Type: GNUNET_MESSAGE_TYPE_MESH_PATH_BROKEN
      */
   struct GNUNET_MessageHeader header;
 
@@ -176,19 +265,24 @@ struct GNUNET_MESH_PathACK
     /**
      * ID of the endpoint
      */
-  struct GNUNET_PeerIdentity peer_id;
+  struct GNUNET_PeerIdentity peer1;
+
+    /**
+     * 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;
 
@@ -202,13 +296,35 @@ struct GNUNET_MESH_SpeedNotify
      */
   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
@@ -216,6 +332,6 @@ struct GNUNET_MESH_SpeedNotify
 }
 #endif
 
-/* ifndef MES_PROTOCOL_H */
+/* ifndef MESH_PROTOCOL_H */
 #endif
 /* end of mesh_protocol.h */