- fixes
[oweals/gnunet.git] / src / mesh / mesh_protocol.h
index dcffdac96876cbfdef4ecbba77125a7200631038..01f7f3487d8ca91972271440d83a8eda792e7ded 100644 (file)
 #ifdef __cplusplus
 extern "C"
 {
-#if 0                           /* keep Emacsens' auto-indent happy */
+#if 0
+  /* keep Emacsens' auto-indent happy */
 }
 #endif
 #endif
 
+#define MESH_TUNNEL_OPT_SPEED_MIN       0x1
+#define MESH_TUNNEL_OPT_NOBUFFER        0x2
+
+
 /******************************************************************************/
 /********************      MESH NETWORK MESSAGES     **************************/
 /******************************************************************************/
 
+GNUNET_NETWORK_STRUCT_BEGIN
+
 /**
  * Message for mesh path management
  */
 struct GNUNET_MESH_ManipulatePath
 {
     /**
-     * Type: GNUNET_MESSAGE_TYPE_MESH_PATH_[CREATE|CHANGE|ADD|DEL]
+     * Type: GNUNET_MESSAGE_TYPE_MESH_PATH_[CREATE|CHANGE|ADD|DESTROY]
      *
      * 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 (MESH_TUNNEL_OPT_*).
+     */
+  uint32_t opt GNUNET_PACKED;
+
+    /**
+     * 64 bit alignment padding.
+     */
+  uint32_t reserved GNUNET_PACKED;
 
     /**
      * 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.
  */
-struct GNUNET_MESH_OriginMulticast
+struct GNUNET_MESH_Multicast
 {
     /**
-     * Type: GNUNET_MESSAGE_TYPE_DATA_MULTICAST
+     * Type: GNUNET_MESSAGE_TYPE_MESH_MULTICAST
      */
-    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;
+
+    /**
+     * Unique ID of the packet
+     */
+  uint32_t pid GNUNET_PACKED;
 
     /**
      * OID of the tunnel
      */
-    struct GNUNET_PeerIdentity  oid;
+  struct GNUNET_PeerIdentity oid;
 
     /**
      * Payload follows
@@ -93,27 +120,37 @@ struct GNUNET_MESH_OriginMulticast
 /**
  * Message for mesh data traffic to a particular destination from origin.
  */
-struct GNUNET_MESH_DataMessageFromOrigin
+struct GNUNET_MESH_Unicast
 {
     /**
-     * Type: GNUNET_MESSAGE_TYPE_DATA_MESSAGE_FROM_ORIGIN
+     * Type: GNUNET_MESSAGE_TYPE_MESH_UNICAST
      */
-    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;
+
+    /**
+     * Unique ID of the packet
+     */
+  uint32_t pid GNUNET_PACKED;
 
     /**
      * OID of the tunnel
      */
-    struct GNUNET_PeerIdentity  oid;
+  struct GNUNET_PeerIdentity oid;
 
     /**
      * Destination.
      */
-    struct GNUNET_PeerIdentity  destination;
+  struct GNUNET_PeerIdentity destination;
 
     /**
      * Payload follows
@@ -124,60 +161,209 @@ struct GNUNET_MESH_DataMessageFromOrigin
 /**
  * Message for mesh data traffic from a tunnel participant to origin.
  */
-struct GNUNET_MESH_DataMessageToOrigin
+struct GNUNET_MESH_ToOrigin
 {
     /**
-     * Type: GNUNET_MESSAGE_TYPE_DATA_MESSAGE_TO_ORIGIN
+     * Type: 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;
+
+    /**
+     * Unique ID of the packet
+     */
+  uint32_t pid GNUNET_PACKED;
 
     /**
      * OID of the tunnel
      */
-    struct GNUNET_PeerIdentity  oid;
+  struct GNUNET_PeerIdentity oid;
 
     /**
      * Sender of the message.
      */
-    struct GNUNET_PeerIdentity  sender;
+  struct GNUNET_PeerIdentity sender;
 
     /**
      * Payload follows
      */
 };
 
+
+/**
+ * Message to acknowledge mesh data traffic.
+ */
+struct GNUNET_MESH_ACK
+{
+    /**
+     * Type: GNUNET_MESSAGE_TYPE_MESH_ACK
+     */
+  struct GNUNET_MessageHeader header;
+
+    /**
+     * TID of the tunnel
+     */
+  uint32_t tid GNUNET_PACKED;
+
+    /**
+     * OID of the tunnel
+     */
+  struct GNUNET_PeerIdentity oid;
+
+    /**
+     * Maximum packet ID authorized.
+     */
+  uint32_t pid;
+
+};
+
+/**
+ * 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 ACK received.
+   */
+  uint32_t last_ack;
+};
+
+/**
+ * Message for ack'ing a path
+ */
+struct GNUNET_MESH_PathACK
+{
+    /**
+     * 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;
+
+  /* TODO: signature */
+};
+
+
 /**
- * Message for mesh flow control
+ * Message for notifying a disconnection in a path
  */
-struct GNUNET_MESH_SpeedNotify
+struct GNUNET_MESH_PathBroken
 {
     /**
-     * Type: GNUNET_MESSAGE_TYPE_DATA_SPEED_NOTIFY
+     * 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;
+
+    /**
+     * ID of the endpoint
+     */
+  struct GNUNET_PeerIdentity peer1;
 
     /**
-     * Slowest link down the path (above minimum speed requirement).
+     * ID of the endpoint
      */
-    uint32_t                    speed_min;
+  struct GNUNET_PeerIdentity peer2;
 
+  /* TODO: signature */
 };
 
+
+/**
+ * Message to destroy a tunnel
+ */
+struct GNUNET_MESH_TunnelDestroy
+{
+    /**
+     * Type: GNUNET_MESSAGE_TYPE_MESH_TUNNEL_DESTROY
+     */
+  struct GNUNET_MessageHeader header;
+
+    /**
+     * TID of the tunnel
+     */
+  uint32_t tid GNUNET_PACKED;
+
+    /**
+     * OID of the tunnel
+     */
+  struct GNUNET_PeerIdentity oid;
+
+  /* TODO: signature */
+};
+
+
+/**
+ * Message to destroy a tunnel
+ */
+struct GNUNET_MESH_TunnelKeepAlive
+{
+  /**
+   * Type: GNUNET_MESSAGE_TYPE_MESH_PATH_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 +371,6 @@ struct GNUNET_MESH_SpeedNotify
 }
 #endif
 
-/* ifndef MES_PROTOCOL_H */
+/* ifndef MESH_PROTOCOL_H */
 #endif
 /* end of mesh_protocol.h */