• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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