1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * fs/hmdfs/comm/transport.h 4 * 5 * Copyright (c) 2020-2021 Huawei Device Co., Ltd. 6 */ 7 8 #ifndef HMDFS_TRANSPORT_H 9 #define HMDFS_TRANSPORT_H 10 11 #include "connection.h" 12 13 #define ENCRYPT_FLAG 1 14 #define DECRYPT_FLAG 0 15 16 struct aeadcrypt_result { 17 struct completion completion; 18 int err; 19 }; 20 21 #define ADAPTER_MESSAGE_LENGTH (1024 * 1024 + 1024) // 1M + 1K 22 #define MAX_RECV_SIZE sizeof(struct hmdfs_head_cmd) 23 24 #define TCP_KVEC_HEAD 0 25 #define TCP_KVEC_DATA 1 26 27 enum TCP_KVEC_FILE_ELE_INDEX { 28 TCP_KVEC_FILE_PARA = 1, 29 TCP_KVEC_FILE_CONTENT = 2, 30 }; 31 32 enum TCP_KVEC_TYPE { 33 TCP_KVEC_ELE_SINGLE = 1, 34 TCP_KVEC_ELE_DOUBLE = 2, 35 TCP_KVEC_ELE_TRIPLE = 3, 36 }; 37 38 #define TCP_RECV_TIMEOUT 2 39 #define MAX_RECV_RETRY_TIMES 2 40 41 #ifndef SO_RCVTIMEO 42 #define SO_RCVTIMEO SO_RCVTIMEO_OLD 43 #endif 44 45 struct tcp_handle { 46 struct connection *connect; 47 int recvbuf_maxsize; 48 struct mutex close_mutex; 49 /* 50 * To achieve atomicity. 51 * 52 * The sock lock held at the tcp layer may be temporally released at 53 * `sk_wait_event()` when waiting for sock buffer. From this point on, 54 * threads serialized at the initial call to `lock_sock()` contained 55 * in `tcp_sendmsg()` can proceed, resuling in intermixed messages. 56 */ 57 struct mutex send_mutex; 58 struct socket *sock; 59 int fd; 60 struct kmem_cache *recv_cache; 61 struct task_struct *recv_task; 62 }; 63 64 void hmdfs_get_connection(struct hmdfs_peer *peer); 65 void hmdfs_reget_connection(struct connection *conn); 66 struct connection *hmdfs_get_conn_tcp(struct hmdfs_peer *node, int socket_fd, 67 uint8_t *master_key, uint8_t status); 68 void tcp_stop_connect(struct connection *connect); 69 uint32_t hmdfs_tcpi_rtt(struct hmdfs_peer *node); 70 void tcp_close_socket(struct tcp_handle *tcp); 71 72 #ifdef CONFIG_HMDFS_FS_ENCRYPTION 73 int tcp_send_rekey_request(struct connection *connect); 74 #endif 75 76 #endif 77