1d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel/* 2d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry StrudelCopyright (c) 2013-2016, The Linux Foundation. All rights reserved. 3d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 4d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry StrudelRedistribution and use in source and binary forms, with or without 5d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudelmodification, are permitted provided that the following conditions are 6d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudelmet: 7d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel * Redistributions of source code must retain the above copyright 8d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel notice, this list of conditions and the following disclaimer. 9d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel * Redistributions in binary form must reproduce the above 10d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel copyright notice, this list of conditions and the following 11d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel disclaimer in the documentation and/or other materials provided 12d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel with the distribution. 13d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel * Neither the name of The Linux Foundation nor the names of its 14d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel contributors may be used to endorse or promote products derived 15d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel from this software without specific prior written permission. 16d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 17d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry StrudelTHIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 18d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry StrudelWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry StrudelMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 20d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry StrudelARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 21d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry StrudelBE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry StrudelCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry StrudelSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 24d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry StrudelBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 25d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry StrudelWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 26d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry StrudelOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry StrudelIF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel*/ 29d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel/*! 30d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel @file 31d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPACM_Defs.h 32d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 33d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel @brief 34d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel This file implements the common definitions amon all ifaces. 35d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 36d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel @Author 37d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel Skylar Chang 38d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 39d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel*/ 40d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#ifndef IPA_CM_DEFS_H 41d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPA_CM_DEFS_H 42d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 43d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#include <unistd.h> 44d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#include <fcntl.h> 45d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#include <linux/msm_ipa.h> 46d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#include "IPACM_Log.h" 47d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 48d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#ifdef USE_GLIB 49d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#include <glib.h> 50d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define strlcpy g_strlcpy 51d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define strlcat g_strlcat 52d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#endif 53d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 54d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudelextern "C" 55d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel{ 56d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#include <libnetfilter_conntrack/libnetfilter_conntrack.h> 57d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#include <libnetfilter_conntrack/libnetfilter_conntrack_tcp.h> 58d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel} 59d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 60d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IF_NAME_LEN 16 61d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPA_MAX_FILE_LEN 64 62d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPA_IFACE_NAME_LEN 16 63d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPA_ALG_PROTOCOL_NAME_LEN 10 64d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 65d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPA_WLAN_PARTIAL_HDR_OFFSET 0 // dst mac first then src mac 66d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPA_ODU_PARTIAL_HDR_OFFSET 8 // dst mac first then src mac 67d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPA_WLAN_PARTIAL_HDR_NAME_v4 "IEEE802_3_v4" 68d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPA_WLAN_PARTIAL_HDR_NAME_v6 "IEEE802_3_v6" 69d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPA_DUMMY_ETH_HDR_NAME_v6 "ETH_dummy_v6" 70d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPA_WAN_PARTIAL_HDR_NAME_v4 "IEEE802_3_STA_v4" 71d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPA_WAN_PARTIAL_HDR_NAME_v6 "IEEE802_3_STA_v6" 72d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPA_ETH_HDR_NAME_v4 "IPACM_ETH_v4" 73d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPA_ETH_HDR_NAME_v6 "IPACM_ETH_v6" 74d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPA_ODU_HDR_NAME_v4 "IPACM_ODU_v4" 75d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPA_ODU_HDR_NAME_v6 "IPACM_ODU_v6" 76d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 77d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 78d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPA_MAX_IFACE_ENTRIES 20 79d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPA_MAX_PRIVATE_SUBNET_ENTRIES 3 80d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPA_MAX_ALG_ENTRIES 20 81d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPA_MAX_RM_ENTRY 6 82d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 83d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPV4_ADDR_LINKLOCAL 0xA9FE0000 84d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPV4_ADDR_LINKLOCAL_MASK 0xFFFF0000 85d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 86d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define V4_DEFAULT_ROUTE_TABLE_NAME "ipa_dflt_rt" 87d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define V4_LAN_ROUTE_TABLE_NAME "COMRTBLLANv4" 88d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define V4_WAN_ROUTE_TABLE_NAME "WANRTBLv4" 89d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define WAN_DL_ROUTE_TABLE_NAME "ipa_dflt_wan_rt" 90d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define V6_COMMON_ROUTE_TABLE_NAME "COMRTBLv6" 91d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define V6_WAN_ROUTE_TABLE_NAME "WANRTBLv6" 92d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define V4_ODU_ROUTE_TABLE_NAME "ODURTBLv4" 93d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define V6_ODU_ROUTE_TABLE_NAME "ODURTBLv6" 94d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 95d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define WWAN_QMI_IOCTL_DEVICE_NAME "/dev/wwan_ioctl" 96d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPA_DEVICE_NAME "/dev/ipa" 97d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define MAX_NUM_PROP 2 98d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 99d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#ifndef FEATURE_IPA_V3 100d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPA_MAX_FLT_RULE 50 101d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#else 102d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPA_MAX_FLT_RULE 100 103d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#endif 104d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 105d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define TCP_FIN_SHIFT 16 106d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define TCP_SYN_SHIFT 17 107d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define TCP_RST_SHIFT 18 108d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define NUM_IPV6_PREFIX_FLT_RULE 1 109d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 110d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel/*--------------------------------------------------------------------------- 111d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel Return values indicating error status 112d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel---------------------------------------------------------------------------*/ 113d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 114d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPACM_SUCCESS 0 /* Successful operation */ 115d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPACM_FAILURE -1 /* Unsuccessful operation */ 116d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 117d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPACM_IP_NULL (ipa_ip_type)0xFF 118d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPACM_INVALID_INDEX (ipa_ip_type)0xFF 119d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 120d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPA_MAX_NUM_WIFI_CLIENTS 32 121d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPA_MAX_NUM_WAN_CLIENTS 10 122d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPA_MAX_NUM_ETH_CLIENTS 15 123d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPA_MAX_NUM_AMPDU_RULE 15 124d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#define IPA_MAC_ADDR_SIZE 6 125d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 126d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel/*=========================================================================== 127d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel GLOBAL DEFINITIONS AND DECLARATIONS 128d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel===========================================================================*/ 129d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudeltypedef enum 130d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel{ 131d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_CFG_CHANGE_EVENT, /* NULL */ 132d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_PRIVATE_SUBNET_CHANGE_EVENT, /* ipacm_event_data_fid */ 133d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_FIREWALL_CHANGE_EVENT, /* NULL */ 134d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_LINK_UP_EVENT, /* ipacm_event_data_fid */ 135d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_LINK_DOWN_EVENT, /* ipacm_event_data_fid */ 136d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_USB_LINK_UP_EVENT, /* ipacm_event_data_fid */ 137d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_BRIDGE_LINK_UP_EVENT, /* ipacm_event_data_all */ 138d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_WAN_EMBMS_LINK_UP_EVENT, /* ipacm_event_data_mac */ 139d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_ADDR_ADD_EVENT, /* ipacm_event_data_addr */ 140d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_ADDR_DEL_EVENT, /* no use */ 141d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_ROUTE_ADD_EVENT, /* ipacm_event_data_addr */ 142d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_ROUTE_DEL_EVENT, /* ipacm_event_data_addr */ 143d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_WAN_UPSTREAM_ROUTE_ADD_EVENT, /* ipacm_event_data_fid */ 144d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_WAN_UPSTREAM_ROUTE_DEL_EVENT, /* ipacm_event_data_fid */ 145d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_WLAN_AP_LINK_UP_EVENT, /* ipacm_event_data_mac */ 146d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_WLAN_STA_LINK_UP_EVENT, /* ipacm_event_data_mac */ 147d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_WLAN_LINK_DOWN_EVENT, /* ipacm_event_data_mac */ 148d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_WLAN_CLIENT_ADD_EVENT, /* ipacm_event_data_mac */ 149d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_WLAN_CLIENT_ADD_EVENT_EX, /* ipacm_event_data_wlan_ex */ 150d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_WLAN_CLIENT_DEL_EVENT, /* ipacm_event_data_mac */ 151d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_WLAN_CLIENT_POWER_SAVE_EVENT, /* ipacm_event_data_mac */ 152d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_WLAN_CLIENT_RECOVER_EVENT, /* ipacm_event_data_mac */ 153d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_NEW_NEIGH_EVENT, /* ipacm_event_data_all */ 154d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_DEL_NEIGH_EVENT, /* ipacm_event_data_all */ 155d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_NEIGH_CLIENT_IP_ADDR_ADD_EVENT, /* ipacm_event_data_all */ 156d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_NEIGH_CLIENT_IP_ADDR_DEL_EVENT, /* ipacm_event_data_all */ 157d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_SW_ROUTING_ENABLE, /* NULL */ 158d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_SW_ROUTING_DISABLE, /* NULL */ 159d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_PROCESS_CT_MESSAGE, /* ipacm_ct_evt_data */ 160d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_PROCESS_CT_MESSAGE_V6, /* ipacm_ct_evt_data */ 161d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_LAN_TO_LAN_NEW_CONNECTION, /* ipacm_event_connection */ 162d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_LAN_TO_LAN_DEL_CONNECTION, /* ipacm_event_connection */ 163d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_WLAN_SWITCH_TO_SCC, /* No Data */ 164d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_WLAN_SWITCH_TO_MCC, /* No Data */ 165d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_CRADLE_WAN_MODE_SWITCH, /* ipacm_event_cradle_wan_mode */ 166d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_WAN_XLAT_CONNECT_EVENT, /* ipacm_event_data_fid */ 167d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_TETHERING_STATS_UPDATE_EVENT, /* ipacm_event_data_fid */ 168d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_NETWORK_STATS_UPDATE_EVENT, /* ipacm_event_data_fid */ 169cb31a1775075041d9f8c060ca606ae211bd67436Niranjan Pendharkar IPA_DOWNSTREAM_ADD, /* ipacm_event_ipahal_stream */ 170cb31a1775075041d9f8c060ca606ae211bd67436Niranjan Pendharkar IPA_DOWNSTREAM_DEL, /* ipacm_event_ipahal_stream */ 171d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 172d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_EXTERNAL_EVENT_MAX, 173d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 174d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_HANDLE_WAN_UP, /* ipacm_event_iface_up */ 175d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_HANDLE_WAN_DOWN, /* ipacm_event_iface_up */ 176d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_HANDLE_WAN_UP_V6, /* NULL */ 177d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_HANDLE_WAN_DOWN_V6, /* NULL */ 178d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_HANDLE_WAN_UP_TETHER, /* ipacm_event_iface_up_tehter */ 179d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_HANDLE_WAN_DOWN_TETHER, /* ipacm_event_iface_up_tehter */ 180d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_HANDLE_WAN_UP_V6_TETHER, /* ipacm_event_iface_up_tehter */ 181d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_HANDLE_WAN_DOWN_V6_TETHER, /* ipacm_event_iface_up_tehter */ 182d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_HANDLE_WLAN_UP, /* ipacm_event_iface_up */ 183d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_HANDLE_LAN_UP, /* ipacm_event_iface_up */ 184d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_ETH_BRIDGE_IFACE_UP, /* ipacm_event_eth_bridge*/ 185d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_ETH_BRIDGE_IFACE_DOWN, /* ipacm_event_eth_bridge*/ 186d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_ETH_BRIDGE_CLIENT_ADD, /* ipacm_event_eth_bridge */ 187d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_ETH_BRIDGE_CLIENT_DEL, /* ipacm_event_eth_bridge*/ 188d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_ETH_BRIDGE_WLAN_SCC_MCC_SWITCH, /* ipacm_event_eth_bridge*/ 189d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPA_LAN_DELETE_SELF, /* ipacm_event_data_fid */ 190d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPACM_EVENT_MAX 191d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel} ipa_cm_event_id; 192d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 193d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudeltypedef struct 194d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel{ 195d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint8_t num_rule; 196d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint32_t rule_hdl[MAX_NUM_PROP]; 197d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel} lan_to_lan_rt_rule_hdl; 198d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 199d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudeltypedef enum 200d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel{ 201d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel LAN_IF = 0, 202d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel WLAN_IF, 203d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel WAN_IF, 204d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel VIRTUAL_IF, 205d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel ETH_IF, 206d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel EMBMS_IF, 207d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel ODU_IF, 208d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel UNKNOWN_IF 209d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel} ipacm_iface_type; 210d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 211d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudeltypedef enum 212d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel{ 213d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel ROUTER = 0, 214d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel BRIDGE 215d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel} ipacm_cradle_iface_mode; 216d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 217d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudeltypedef enum 218d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel{ 219d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel FULL, 220d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel INTERNET 221d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel} ipacm_wlan_access_mode; 222d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 223d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudeltypedef struct 224d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel{ 225d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel struct nf_conntrack *ct; 226d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel enum nf_conntrack_msg_type type; 227d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel}ipacm_ct_evt_data; 228d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 229d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudeltypedef struct 230d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel{ 231d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel char iface_name[IPA_IFACE_NAME_LEN]; 232d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel ipacm_iface_type if_cat; 233d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel ipacm_cradle_iface_mode if_mode; 234d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel ipacm_wlan_access_mode wlan_mode; 235d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel int netlink_interface_index; 236d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel} ipa_ifi_dev_name_t; 237d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 238d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudeltypedef struct 239d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel{ 240d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint32_t subnet_addr; 241d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint32_t subnet_mask; 242d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel} ipa_private_subnet; 243d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 244d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 245d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudeltypedef struct _ipacm_event_data_all 246d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel{ 247d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel enum ipa_ip_type iptype; 248d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel int if_index; 249d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint32_t ipv4_addr; 250d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint32_t ipv6_addr[4]; 251d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint8_t mac_addr[IPA_MAC_ADDR_SIZE]; 252d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel} ipacm_event_data_all; 253d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 254d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudelclass IPACM_Lan; 255d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 256d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudeltypedef struct 257d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel{ 258d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel ipacm_cradle_iface_mode cradle_wan_mode; 259d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel} ipacm_event_cradle_wan_mode; 260d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 261d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudeltypedef struct 262d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel{ 263d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel IPACM_Lan *p_iface; 264d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel ipa_ip_type iptype; 265d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint8_t mac_addr[6]; 266d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel} ipacm_event_eth_bridge; 267d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 268d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudeltypedef struct 269d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel{ 270d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel enum ipa_ip_type iptype; 271d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint32_t src_ipv4_addr; 272d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint32_t dst_ipv4_addr; 273d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint32_t src_ipv6_addr[4]; 274d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint32_t dst_ipv6_addr[4]; 275d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel} ipacm_event_connection; 276d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 277d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudeltypedef struct _ipacm_event_data_fid 278d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel{ 279d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel int if_index; 280d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel} ipacm_event_data_fid; 281d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 282d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudeltypedef struct 283d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel{ 284d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel ipacm_iface_type if_cat; 285d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel} ipacm_event_data_if_cat; 286d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 287d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudeltypedef struct _ipacm_event_data_iptype 288d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel{ 289d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel int if_index; 290d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel int if_index_tether; 291d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel enum ipa_ip_type iptype; 292d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#ifdef IPA_WAN_MSG_IPv6_ADDR_GW_LEN 293d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint32_t ipv4_addr_gw; 294d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint32_t ipv6_addr_gw[4]; 295d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#endif 296d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel} ipacm_event_data_iptype; 297d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 298d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 299d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudeltypedef struct _ipacm_event_data_addr 300d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel{ 301d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel enum ipa_ip_type iptype; 302d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel int if_index; 303d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint32_t ipv4_addr_gw; 304d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint32_t ipv4_addr; 305d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint32_t ipv4_addr_mask; 306d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint32_t ipv6_addr[4]; 307d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint32_t ipv6_addr_mask[4]; 308d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint32_t ipv6_addr_gw[4]; 309d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel} ipacm_event_data_addr; 310d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 311d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudeltypedef struct _ipacm_event_data_mac 312d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel{ 313d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel int if_index; 314d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel int ipa_if_cate; 315d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint8_t mac_addr[IPA_MAC_ADDR_SIZE]; 316d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel} ipacm_event_data_mac; 317d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 318d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudeltypedef struct 319d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel{ 320d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel int if_index; 321d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint8_t num_of_attribs; 322d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel struct ipa_wlan_hdr_attrib_val attribs[0]; 323d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel} ipacm_event_data_wlan_ex; 324d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 325d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudeltypedef struct _ipacm_event_iface_up 326d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel{ 327d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel char ifname[IPA_IFACE_NAME_LEN]; 328d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint32_t ipv4_addr; 329d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint32_t addr_mask; 330d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint32_t ipv6_prefix[2]; 331d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel bool is_sta; 332d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint8_t xlat_mux_id; 333d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel}ipacm_event_iface_up; 334d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 335d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudeltypedef struct _ipacm_event_iface_up_tether 336d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel{ 337d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint32_t if_index_tether; 338d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint32_t ipv6_prefix[2]; 339d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel bool is_sta; 340d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel}ipacm_event_iface_up_tehter; 341d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 342d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudeltypedef enum 343d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel{ 344d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel Q6_WAN = 0, 345d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel WLAN_WAN, 346d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel ECM_WAN 347d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel} ipacm_wan_iface_type; 348d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 349d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudeltypedef struct _ipacm_ifacemgr_data 350d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel{ 351d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel int if_index; 352d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel ipacm_wan_iface_type if_type; 353d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel uint8_t mac_addr[IPA_MAC_ADDR_SIZE]; 354d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel}ipacm_ifacemgr_data; 355d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel 356582b9e5c388f74eeafad876c81492c81bf1f3945Thierry Strudeltypedef struct _ipacm_offload_prefix { 357582b9e5c388f74eeafad876c81492c81bf1f3945Thierry Strudel enum ipa_ip_type iptype; 358582b9e5c388f74eeafad876c81492c81bf1f3945Thierry Strudel uint32_t v4Addr; 359582b9e5c388f74eeafad876c81492c81bf1f3945Thierry Strudel uint32_t v4Mask; 360582b9e5c388f74eeafad876c81492c81bf1f3945Thierry Strudel uint32_t v6Addr[4]; 361582b9e5c388f74eeafad876c81492c81bf1f3945Thierry Strudel uint32_t v6Mask[4]; 362582b9e5c388f74eeafad876c81492c81bf1f3945Thierry Strudel} ipacm_offload_prefix; 363582b9e5c388f74eeafad876c81492c81bf1f3945Thierry Strudel 364582b9e5c388f74eeafad876c81492c81bf1f3945Thierry Strudeltypedef struct { 365582b9e5c388f74eeafad876c81492c81bf1f3945Thierry Strudel int if_index; 366582b9e5c388f74eeafad876c81492c81bf1f3945Thierry Strudel _ipacm_offload_prefix prefix; 367582b9e5c388f74eeafad876c81492c81bf1f3945Thierry Strudel} ipacm_event_ipahal_stream; 368582b9e5c388f74eeafad876c81492c81bf1f3945Thierry Strudel 369d512f4232dc6c7105b0f8088c56f277132ca2ab3Thierry Strudel#endif /* IPA_CM_DEFS_H */ 370