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