1/*
2 **************************************************************************
3 * Copyright (c) 2014-2015, The Linux Foundation.  All rights reserved.
4 * Permission to use, copy, modify, and/or distribute this software for
5 * any purpose with or without fee is hereby granted, provided that the
6 * above copyright notice and this permission notice appear in all copies.
7 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
10 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
12 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
13 * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
14 **************************************************************************
15 */
16
17struct ecm_tracker_udp_instance;
18
19#ifdef ECM_TRACKER_DPI_SUPPORT_ENABLE
20typedef int32_t (*ecm_tracker_udp_data_size_get_method_t)(struct ecm_tracker_udp_instance *uti, ecm_tracker_sender_type_t sender, int32_t i);
21										/* Return size in bytes of datagram data at index i that was sent by the sender */
22typedef int (*ecm_tracker_udp_data_read_method_t)(struct ecm_tracker_udp_instance *uti, ecm_tracker_sender_type_t sender, int32_t i, int32_t offset, int32_t size, void *buffer);
23										/* Read size bytes of data at index i into the buffer */
24typedef bool (*ecm_tracker_udp_datagram_add_method_t)(struct ecm_tracker_udp_instance *uti, ecm_tracker_sender_type_t sender, struct ecm_tracker_ip_header *ip_hdr, struct ecm_tracker_ip_protocol_header *ecm_udp_header, struct udphdr *udp_header, struct sk_buff *skb);
25										/* Add a pre-checked UDP datagram */
26#endif
27
28struct ecm_tracker_udp_instance {
29	struct ecm_tracker_instance base;					/* MUST BE FIRST FIELD */
30
31#ifdef ECM_TRACKER_DPI_SUPPORT_ENABLE
32	ecm_tracker_udp_data_read_method_t data_read;				/* Read data from a UDP datagram (headers not considered) */
33	ecm_tracker_udp_data_size_get_method_t data_size_get;			/* Get data size of datagram (headers not considered) */
34	ecm_tracker_udp_datagram_add_method_t datagram_add;			/* Add a pre-checked UDP datagram */
35#endif
36};
37
38
39struct udphdr *ecm_tracker_udp_check_header_and_read(struct sk_buff *skb, struct ecm_tracker_ip_header *ip_hdr, struct udphdr *port_buffer);
40
41void ecm_tracker_udp_init(struct ecm_tracker_udp_instance *uti, int32_t data_limit, int src_port, int dest_port);
42struct ecm_tracker_udp_instance *ecm_tracker_udp_alloc(void);
43
44