#ifndef __FS_CEPH_MESSENGER_H
#define __FS_CEPH_MESSENGER_H
#include <linux/bvec.h>
#include <linux/crypto.h>
#include <linux/kref.h>
#include <linux/mutex.h>
#include <linux/net.h>
#include <linux/radix-tree.h>
#include <linux/uio.h>
#include <linux/workqueue.h>
#include <net/net_namespace.h>
#include <linux/ceph/types.h>
#include <linux/ceph/buffer.h>
struct ceph_msg;
struct ceph_connection;
struct ceph_msg_data_cursor;
struct ceph_connection_operations { … };
#define ENTITY_NAME(n) …
struct ceph_messenger { … };
enum ceph_msg_data_type { … };
#ifdef CONFIG_BLOCK
struct ceph_bio_iter { … };
#define __ceph_bio_iter_advance_step(it, n, STEP) …
#define ceph_bio_iter_advance(it, n) …
#define ceph_bio_iter_advance_step(it, n, BVEC_STEP) …
#endif
struct ceph_bvec_iter { … };
#define __ceph_bvec_iter_advance_step(it, n, STEP) …
#define ceph_bvec_iter_advance(it, n) …
#define ceph_bvec_iter_advance_step(it, n, BVEC_STEP) …
#define ceph_bvec_iter_shorten(it, n) …
struct ceph_msg_data { … };
struct ceph_msg_data_cursor { … };
struct ceph_msg { … };
#define CEPH_CON_S_CLOSED …
#define CEPH_CON_S_PREOPEN …
#define CEPH_CON_S_V1_BANNER …
#define CEPH_CON_S_V1_CONNECT_MSG …
#define CEPH_CON_S_V2_BANNER_PREFIX …
#define CEPH_CON_S_V2_BANNER_PAYLOAD …
#define CEPH_CON_S_V2_HELLO …
#define CEPH_CON_S_V2_AUTH …
#define CEPH_CON_S_V2_AUTH_SIGNATURE …
#define CEPH_CON_S_V2_SESSION_CONNECT …
#define CEPH_CON_S_V2_SESSION_RECONNECT …
#define CEPH_CON_S_OPEN …
#define CEPH_CON_S_STANDBY …
#define CEPH_CON_F_LOSSYTX …
#define CEPH_CON_F_KEEPALIVE_PENDING …
#define CEPH_CON_F_WRITE_PENDING …
#define CEPH_CON_F_SOCK_CLOSED …
#define CEPH_CON_F_BACKOFF …
#define BASE_DELAY_INTERVAL …
#define MAX_DELAY_INTERVAL …
struct ceph_connection_v1_info { … };
#define CEPH_CRC_LEN …
#define CEPH_GCM_KEY_LEN …
#define CEPH_GCM_IV_LEN …
#define CEPH_GCM_BLOCK_LEN …
#define CEPH_GCM_TAG_LEN …
#define CEPH_PREAMBLE_LEN …
#define CEPH_PREAMBLE_INLINE_LEN …
#define CEPH_PREAMBLE_PLAIN_LEN …
#define CEPH_PREAMBLE_SECURE_LEN …
#define CEPH_EPILOGUE_PLAIN_LEN …
#define CEPH_EPILOGUE_SECURE_LEN …
#define CEPH_FRAME_MAX_SEGMENT_COUNT …
struct ceph_frame_desc { … };
struct ceph_gcm_nonce { … };
struct ceph_connection_v2_info { … };
struct ceph_connection { … };
extern struct page *ceph_zero_page;
void ceph_con_flag_clear(struct ceph_connection *con, unsigned long con_flag);
void ceph_con_flag_set(struct ceph_connection *con, unsigned long con_flag);
bool ceph_con_flag_test(struct ceph_connection *con, unsigned long con_flag);
bool ceph_con_flag_test_and_clear(struct ceph_connection *con,
unsigned long con_flag);
bool ceph_con_flag_test_and_set(struct ceph_connection *con,
unsigned long con_flag);
void ceph_encode_my_addr(struct ceph_messenger *msgr);
int ceph_tcp_connect(struct ceph_connection *con);
int ceph_con_close_socket(struct ceph_connection *con);
void ceph_con_reset_session(struct ceph_connection *con);
u32 ceph_get_global_seq(struct ceph_messenger *msgr, u32 gt);
void ceph_con_discard_sent(struct ceph_connection *con, u64 ack_seq);
void ceph_con_discard_requeued(struct ceph_connection *con, u64 reconnect_seq);
void ceph_msg_data_cursor_init(struct ceph_msg_data_cursor *cursor,
struct ceph_msg *msg, size_t length);
struct page *ceph_msg_data_next(struct ceph_msg_data_cursor *cursor,
size_t *page_offset, size_t *length);
void ceph_msg_data_advance(struct ceph_msg_data_cursor *cursor, size_t bytes);
u32 ceph_crc32c_page(u32 crc, struct page *page, unsigned int page_offset,
unsigned int length);
bool ceph_addr_is_blank(const struct ceph_entity_addr *addr);
int ceph_addr_port(const struct ceph_entity_addr *addr);
void ceph_addr_set_port(struct ceph_entity_addr *addr, int p);
void ceph_con_process_message(struct ceph_connection *con);
int ceph_con_in_msg_alloc(struct ceph_connection *con,
struct ceph_msg_header *hdr, int *skip);
void ceph_con_get_out_msg(struct ceph_connection *con);
int ceph_con_v1_try_read(struct ceph_connection *con);
int ceph_con_v1_try_write(struct ceph_connection *con);
void ceph_con_v1_revoke(struct ceph_connection *con);
void ceph_con_v1_revoke_incoming(struct ceph_connection *con);
bool ceph_con_v1_opened(struct ceph_connection *con);
void ceph_con_v1_reset_session(struct ceph_connection *con);
void ceph_con_v1_reset_protocol(struct ceph_connection *con);
int ceph_con_v2_try_read(struct ceph_connection *con);
int ceph_con_v2_try_write(struct ceph_connection *con);
void ceph_con_v2_revoke(struct ceph_connection *con);
void ceph_con_v2_revoke_incoming(struct ceph_connection *con);
bool ceph_con_v2_opened(struct ceph_connection *con);
void ceph_con_v2_reset_session(struct ceph_connection *con);
void ceph_con_v2_reset_protocol(struct ceph_connection *con);
extern const char *ceph_pr_addr(const struct ceph_entity_addr *addr);
extern int ceph_parse_ips(const char *c, const char *end,
struct ceph_entity_addr *addr,
int max_count, int *count, char delim);
extern int ceph_msgr_init(void);
extern void ceph_msgr_exit(void);
extern void ceph_msgr_flush(void);
extern void ceph_messenger_init(struct ceph_messenger *msgr,
struct ceph_entity_addr *myaddr);
extern void ceph_messenger_fini(struct ceph_messenger *msgr);
extern void ceph_messenger_reset_nonce(struct ceph_messenger *msgr);
extern void ceph_con_init(struct ceph_connection *con, void *private,
const struct ceph_connection_operations *ops,
struct ceph_messenger *msgr);
extern void ceph_con_open(struct ceph_connection *con,
__u8 entity_type, __u64 entity_num,
struct ceph_entity_addr *addr);
extern bool ceph_con_opened(struct ceph_connection *con);
extern void ceph_con_close(struct ceph_connection *con);
extern void ceph_con_send(struct ceph_connection *con, struct ceph_msg *msg);
extern void ceph_msg_revoke(struct ceph_msg *msg);
extern void ceph_msg_revoke_incoming(struct ceph_msg *msg);
extern void ceph_con_keepalive(struct ceph_connection *con);
extern bool ceph_con_keepalive_expired(struct ceph_connection *con,
unsigned long interval);
void ceph_msg_data_add_pages(struct ceph_msg *msg, struct page **pages,
size_t length, size_t alignment, bool own_pages);
extern void ceph_msg_data_add_pagelist(struct ceph_msg *msg,
struct ceph_pagelist *pagelist);
#ifdef CONFIG_BLOCK
void ceph_msg_data_add_bio(struct ceph_msg *msg, struct ceph_bio_iter *bio_pos,
u32 length);
#endif
void ceph_msg_data_add_bvecs(struct ceph_msg *msg,
struct ceph_bvec_iter *bvec_pos);
void ceph_msg_data_add_iter(struct ceph_msg *msg,
struct iov_iter *iter);
struct ceph_msg *ceph_msg_new2(int type, int front_len, int max_data_items,
gfp_t flags, bool can_fail);
extern struct ceph_msg *ceph_msg_new(int type, int front_len, gfp_t flags,
bool can_fail);
extern struct ceph_msg *ceph_msg_get(struct ceph_msg *msg);
extern void ceph_msg_put(struct ceph_msg *msg);
extern void ceph_msg_dump(struct ceph_msg *msg);
#endif