linux/include/linux/ceph/msgr.h
<<
>>
Prefs
   1#ifndef CEPH_MSGR_H
   2#define CEPH_MSGR_H
   3
   4/*
   5 * Data types for message passing layer used by Ceph.
   6 */
   7
   8#define CEPH_MON_PORT    6789  /* default monitor port */
   9
  10/*
  11 * client-side processes will try to bind to ports in this
  12 * range, simply for the benefit of tools like nmap or wireshark
  13 * that would like to identify the protocol.
  14 */
  15#define CEPH_PORT_FIRST  6789
  16#define CEPH_PORT_START  6800  /* non-monitors start here */
  17#define CEPH_PORT_LAST   6900
  18
  19/*
  20 * tcp connection banner.  include a protocol version. and adjust
  21 * whenever the wire protocol changes.  try to keep this string length
  22 * constant.
  23 */
  24#define CEPH_BANNER "ceph v027"
  25#define CEPH_BANNER_MAX_LEN 30
  26
  27
  28/*
  29 * Rollover-safe type and comparator for 32-bit sequence numbers.
  30 * Comparator returns -1, 0, or 1.
  31 */
  32typedef __u32 ceph_seq_t;
  33
  34static inline __s32 ceph_seq_cmp(__u32 a, __u32 b)
  35{
  36       return (__s32)a - (__s32)b;
  37}
  38
  39
  40/*
  41 * entity_name -- logical name for a process participating in the
  42 * network, e.g. 'mds0' or 'osd3'.
  43 */
  44struct ceph_entity_name {
  45        __u8 type;      /* CEPH_ENTITY_TYPE_* */
  46        __le64 num;
  47} __attribute__ ((packed));
  48
  49#define CEPH_ENTITY_TYPE_MON    0x01
  50#define CEPH_ENTITY_TYPE_MDS    0x02
  51#define CEPH_ENTITY_TYPE_OSD    0x04
  52#define CEPH_ENTITY_TYPE_CLIENT 0x08
  53#define CEPH_ENTITY_TYPE_AUTH   0x20
  54
  55#define CEPH_ENTITY_TYPE_ANY    0xFF
  56
  57extern const char *ceph_entity_type_name(int type);
  58
  59/*
  60 * entity_addr -- network address
  61 */
  62struct ceph_entity_addr {
  63        __le32 type;
  64        __le32 nonce;  /* unique id for process (e.g. pid) */
  65        struct sockaddr_storage in_addr;
  66} __attribute__ ((packed));
  67
  68struct ceph_entity_inst {
  69        struct ceph_entity_name name;
  70        struct ceph_entity_addr addr;
  71} __attribute__ ((packed));
  72
  73
  74/* used by message exchange protocol */
  75#define CEPH_MSGR_TAG_READY         1  /* server->client: ready for messages */
  76#define CEPH_MSGR_TAG_RESETSESSION  2  /* server->client: reset, try again */
  77#define CEPH_MSGR_TAG_WAIT          3  /* server->client: wait for racing
  78                                          incoming connection */
  79#define CEPH_MSGR_TAG_RETRY_SESSION 4  /* server->client + cseq: try again
  80                                          with higher cseq */
  81#define CEPH_MSGR_TAG_RETRY_GLOBAL  5  /* server->client + gseq: try again
  82                                          with higher gseq */
  83#define CEPH_MSGR_TAG_CLOSE         6  /* closing pipe */
  84#define CEPH_MSGR_TAG_MSG           7  /* message */
  85#define CEPH_MSGR_TAG_ACK           8  /* message ack */
  86#define CEPH_MSGR_TAG_KEEPALIVE     9  /* just a keepalive byte! */
  87#define CEPH_MSGR_TAG_BADPROTOVER   10 /* bad protocol version */
  88#define CEPH_MSGR_TAG_BADAUTHORIZER 11 /* bad authorizer */
  89#define CEPH_MSGR_TAG_FEATURES      12 /* insufficient features */
  90#define CEPH_MSGR_TAG_SEQ           13 /* 64-bit int follows with seen seq number */
  91#define CEPH_MSGR_TAG_KEEPALIVE2    14 /* keepalive2 byte + ceph_timespec */
  92#define CEPH_MSGR_TAG_KEEPALIVE2_ACK 15 /* keepalive2 reply */
  93
  94
  95/*
  96 * connection negotiation
  97 */
  98struct ceph_msg_connect {
  99        __le64 features;     /* supported feature bits */
 100        __le32 host_type;    /* CEPH_ENTITY_TYPE_* */
 101        __le32 global_seq;   /* count connections initiated by this host */
 102        __le32 connect_seq;  /* count connections initiated in this session */
 103        __le32 protocol_version;
 104        __le32 authorizer_protocol;
 105        __le32 authorizer_len;
 106        __u8  flags;         /* CEPH_MSG_CONNECT_* */
 107} __attribute__ ((packed));
 108
 109struct ceph_msg_connect_reply {
 110        __u8 tag;
 111        __le64 features;     /* feature bits for this session */
 112        __le32 global_seq;
 113        __le32 connect_seq;
 114        __le32 protocol_version;
 115        __le32 authorizer_len;
 116        __u8 flags;
 117} __attribute__ ((packed));
 118
 119#define CEPH_MSG_CONNECT_LOSSY  1  /* messages i send may be safely dropped */
 120
 121
 122/*
 123 * message header
 124 */
 125struct ceph_msg_header_old {
 126        __le64 seq;       /* message seq# for this session */
 127        __le64 tid;       /* transaction id */
 128        __le16 type;      /* message type */
 129        __le16 priority;  /* priority.  higher value == higher priority */
 130        __le16 version;   /* version of message encoding */
 131
 132        __le32 front_len; /* bytes in main payload */
 133        __le32 middle_len;/* bytes in middle payload */
 134        __le32 data_len;  /* bytes of data payload */
 135        __le16 data_off;  /* sender: include full offset;
 136                             receiver: mask against ~PAGE_MASK */
 137
 138        struct ceph_entity_inst src, orig_src;
 139        __le32 reserved;
 140        __le32 crc;       /* header crc32c */
 141} __attribute__ ((packed));
 142
 143struct ceph_msg_header {
 144        __le64 seq;       /* message seq# for this session */
 145        __le64 tid;       /* transaction id */
 146        __le16 type;      /* message type */
 147        __le16 priority;  /* priority.  higher value == higher priority */
 148        __le16 version;   /* version of message encoding */
 149
 150        __le32 front_len; /* bytes in main payload */
 151        __le32 middle_len;/* bytes in middle payload */
 152        __le32 data_len;  /* bytes of data payload */
 153        __le16 data_off;  /* sender: include full offset;
 154                             receiver: mask against ~PAGE_MASK */
 155
 156        struct ceph_entity_name src;
 157        __le16 compat_version;
 158        __le16 reserved;
 159        __le32 crc;       /* header crc32c */
 160} __attribute__ ((packed));
 161
 162#define CEPH_MSG_PRIO_LOW     64
 163#define CEPH_MSG_PRIO_DEFAULT 127
 164#define CEPH_MSG_PRIO_HIGH    196
 165#define CEPH_MSG_PRIO_HIGHEST 255
 166
 167/*
 168 * follows data payload
 169 */
 170struct ceph_msg_footer_old {
 171        __le32 front_crc, middle_crc, data_crc;
 172        __u8 flags;
 173} __attribute__ ((packed));
 174
 175struct ceph_msg_footer {
 176        __le32 front_crc, middle_crc, data_crc;
 177        // sig holds the 64 bits of the digital signature for the message PLR
 178        __le64  sig;
 179        __u8 flags;
 180} __attribute__ ((packed));
 181
 182#define CEPH_MSG_FOOTER_COMPLETE  (1<<0)   /* msg wasn't aborted */
 183#define CEPH_MSG_FOOTER_NOCRC     (1<<1)   /* no data crc */
 184#define CEPH_MSG_FOOTER_SIGNED    (1<<2)   /* msg was signed */
 185
 186
 187#endif
 188