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