1 /*
2  * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16 
17 /*
18  * DOC: contains CoAP structure definitions
19  */
20 
21 #ifndef _WLAN_COAP_PUBLIC_STRUCTS_H_
22 #define _WLAN_COAP_PUBLIC_STRUCTS_H_
23 #include <qdf_types.h>
24 
25 /**
26  * struct coap_offload_reply_param - parameters to enable CoAP offload reply
27  * @vdev_id: vdev id
28  * @pattern_id: pattern id
29  * @cache_timeout: the cached packet expire timeout in ms
30  * @src_ip_v4: source IPv4 address for sending reply message
31  * @src_udp_port: source udp port for sending reply message
32  * @dest_ip_v4: destination IPv4 address to match received CoAP message
33  * @dest_ip_v4_is_bc: indicate whether the destination address is broadcast
34  * address or not
35  * @dest_udp_port: destination UDP port to match received CoAP message
36  * @verify_offset: UDP payload offset to match received CoAP message
37  * @verify_len: UDP payload length to match received CoAP message
38  * @verify: pointer to binary data to match received CoAP message
39  * @coapmsg_len: CoAP reply message length
40  * @coapmsg: pointer to CoAP reply message
41  */
42 struct coap_offload_reply_param {
43 	uint32_t vdev_id;
44 	uint32_t pattern_id;
45 	uint32_t cache_timeout;
46 	uint32_t src_ip_v4;
47 	uint16_t src_udp_port;
48 	uint32_t dest_ip_v4;
49 	bool dest_ip_v4_is_bc;
50 	uint16_t dest_udp_port;
51 	uint32_t verify_offset;
52 	uint32_t verify_len;
53 	uint8_t *verify;
54 	uint32_t coapmsg_len;
55 	uint8_t *coapmsg;
56 };
57 
58 /**
59  * struct coap_offload_periodic_tx_param - parameters to enable CoAP offload
60  * periodic transmitting
61  * @vdev_id: vdev id
62  * @pattern_id: pattern id
63  * @src_ip_v4: IPv4 address for sending CoAP message
64  * @src_udp_port: source udp port for sending CoAP message
65  * @dest_ip_v4: destination IPv4 address for sending CoAP message
66  * @dest_ip_v4_is_bc: indicate whether the destination address is broadcast
67  * address or not
68  * @dest_udp_port: destination UDP port for sending CoAP message
69  * @timeout: the periorid to send keepalive message in ms
70  * @coapmsg_len: keeplive CoAP message length
71  * @coapmsg: pointer to keeplive CoAP message
72  */
73 struct coap_offload_periodic_tx_param {
74 	uint32_t vdev_id;
75 	uint32_t pattern_id;
76 	uint32_t src_ip_v4;
77 	uint16_t src_udp_port;
78 	uint32_t dest_ip_v4;
79 	bool dest_ip_v4_is_bc;
80 	uint16_t dest_udp_port;
81 	uint32_t timeout;
82 	uint32_t coapmsg_len;
83 	uint8_t *coapmsg;
84 };
85 
86 /**
87  * struct coap_buf_node - CoAP message info entry
88  * @node: List entry element
89  * @tsf: TSF of the CoAP meesage
90  * @src_ip: source IPv4 address of the CoAP message
91  * @len: length of the payload
92  * @payload: pointer to buffer holding UDP payload of the CoAP message
93  */
94 struct coap_buf_node {
95 	qdf_list_node_t node;
96 	uint64_t tsf;
97 	uint32_t src_ip;
98 	uint32_t len;
99 	uint8_t *payload;
100 };
101 
102 /**
103  * struct coap_buf_info - info of the cached CoAP messages
104  * @vdev_id: vdev id
105  * @req_id: request id
106  * @more_info: flag to indicate whether there are more cached messages
107  * @info_list: list to hold cached CoAP messages
108  */
109 struct coap_buf_info {
110 	uint8_t vdev_id;
111 	uint32_t req_id;
112 	bool more_info;
113 	qdf_list_t info_list;
114 };
115 
116 /**
117  * typedef coap_cache_get_callback() - callback for getting cached CoAP messages
118  * @context: context for getting cached CoAP messages
119  * @info: pointer to info of the cached CoAP messages
120  */
121 typedef void (*coap_cache_get_callback)(void *context,
122 					struct coap_buf_info *info);
123 #endif
124