From e5fc002abdb3fe29f7a1998a494915652850d754 Mon Sep 17 00:00:00 2001
From: "waiser-7@mail.ru" <38221733+waiser86@users.noreply.github.com>
Date: Fri, 12 Apr 2019 10:57:10 +0500
Subject: [PATCH] vince: Initial changes for caf
---
BoardConfig.mk | 3 +-
aosp_vince.mk | 16 +-
compatibility_matrix.xml | 8 +
configs/media_codecs.xml | 105 +-
configs/media_codecs_8953.xml | 362 +
configs/media_codecs_vendor.xml | 362 +
data-ipa-cfg-mgr/Android.mk | 19 -
data-ipa-cfg-mgr/hal/Android.mk | 31 -
data-ipa-cfg-mgr/hal/inc/CtUpdateAmbassador.h | 62 -
data-ipa-cfg-mgr/hal/inc/HAL.h | 200 -
data-ipa-cfg-mgr/hal/inc/IOffloadManager.h | 350 -
data-ipa-cfg-mgr/hal/inc/IpaEventRelay.h | 55 -
data-ipa-cfg-mgr/hal/inc/LocalLogBuffer.h | 73 -
data-ipa-cfg-mgr/hal/inc/OffloadStatistics.h | 49 -
data-ipa-cfg-mgr/hal/inc/PrefixParser.h | 80 -
.../hal/src/CtUpdateAmbassador.cpp | 123 -
data-ipa-cfg-mgr/hal/src/HAL.cpp | 617 --
data-ipa-cfg-mgr/hal/src/IpaEventRelay.cpp | 83 -
data-ipa-cfg-mgr/hal/src/LocalLogBuffer.cpp | 126 -
.../hal/src/OffloadStatistics.cpp | 57 -
data-ipa-cfg-mgr/hal/src/PrefixParser.cpp | 391 -
data-ipa-cfg-mgr/ipacm/inc/IPACM_CmdQueue.h | 109 -
data-ipa-cfg-mgr/ipacm/inc/IPACM_Config.h | 364 -
.../ipacm/inc/IPACM_ConntrackClient.h | 111 -
.../ipacm/inc/IPACM_ConntrackListener.h | 123 -
.../ipacm/inc/IPACM_Conntrack_NATApp.h | 134 -
data-ipa-cfg-mgr/ipacm/inc/IPACM_Defs.h | 383 -
.../ipacm/inc/IPACM_EvtDispatcher.h | 76 -
data-ipa-cfg-mgr/ipacm/inc/IPACM_Filtering.h | 76 -
data-ipa-cfg-mgr/ipacm/inc/IPACM_Header.h | 70 -
data-ipa-cfg-mgr/ipacm/inc/IPACM_Iface.h | 154 -
.../ipacm/inc/IPACM_IfaceManager.h | 90 -
data-ipa-cfg-mgr/ipacm/inc/IPACM_Lan.h | 446 --
data-ipa-cfg-mgr/ipacm/inc/IPACM_LanToLan.h | 282 -
data-ipa-cfg-mgr/ipacm/inc/IPACM_Listener.h | 54 -
data-ipa-cfg-mgr/ipacm/inc/IPACM_Log.h | 102 -
data-ipa-cfg-mgr/ipacm/inc/IPACM_Neighbor.h | 83 -
data-ipa-cfg-mgr/ipacm/inc/IPACM_Netlink.h | 226 -
.../ipacm/inc/IPACM_OffloadManager.h | 129 -
data-ipa-cfg-mgr/ipacm/inc/IPACM_Routing.h | 78 -
data-ipa-cfg-mgr/ipacm/inc/IPACM_Wan.h | 576 --
data-ipa-cfg-mgr/ipacm/inc/IPACM_Wlan.h | 245 -
data-ipa-cfg-mgr/ipacm/inc/IPACM_Xml.h | 303 -
data-ipa-cfg-mgr/ipacm/src/Android.mk | 114 -
data-ipa-cfg-mgr/ipacm/src/IPACM_CmdQueue.cpp | 216 -
data-ipa-cfg-mgr/ipacm/src/IPACM_Config.cpp | 900 ---
.../ipacm/src/IPACM_ConntrackClient.cpp | 741 --
.../ipacm/src/IPACM_ConntrackListener.cpp | 1196 ---
.../ipacm/src/IPACM_Conntrack_NATApp.cpp | 1051 ---
.../ipacm/src/IPACM_EvtDispatcher.cpp | 214 -
.../ipacm/src/IPACM_Filtering.cpp | 538 --
data-ipa-cfg-mgr/ipacm/src/IPACM_Header.cpp | 236 -
data-ipa-cfg-mgr/ipacm/src/IPACM_Iface.cpp | 1053 ---
.../ipacm/src/IPACM_IfaceManager.cpp | 605 --
data-ipa-cfg-mgr/ipacm/src/IPACM_Lan.cpp | 5849 ---------------
data-ipa-cfg-mgr/ipacm/src/IPACM_LanToLan.cpp | 2084 ------
data-ipa-cfg-mgr/ipacm/src/IPACM_Log.cpp | 102 -
data-ipa-cfg-mgr/ipacm/src/IPACM_Main.cpp | 1091 ---
data-ipa-cfg-mgr/ipacm/src/IPACM_Neighbor.cpp | 580 --
data-ipa-cfg-mgr/ipacm/src/IPACM_Netlink.cpp | 1783 -----
.../ipacm/src/IPACM_OffloadManager.cpp | 935 ---
data-ipa-cfg-mgr/ipacm/src/IPACM_Routing.cpp | 276 -
data-ipa-cfg-mgr/ipacm/src/IPACM_Wan.cpp | 6443 -----------------
data-ipa-cfg-mgr/ipacm/src/IPACM_Wlan.cpp | 2344 ------
data-ipa-cfg-mgr/ipacm/src/IPACM_Xml.cpp | 1188 ---
data-ipa-cfg-mgr/ipacm/src/IPACM_cfg.xml | 175 -
.../ipacm/src/mobileap_firewall.xml | 7 -
data-ipa-cfg-mgr/ipacm/src/start_ipacm_le | 57 -
data-ipa-cfg-mgr/ipanat/inc/ipa_nat_drv.h | 147 -
data-ipa-cfg-mgr/ipanat/inc/ipa_nat_drvi.h | 508 --
data-ipa-cfg-mgr/ipanat/inc/ipa_nat_logi.h | 73 -
data-ipa-cfg-mgr/ipanat/src/Android.mk | 33 -
data-ipa-cfg-mgr/ipanat/src/ipa_nat_drv.c | 215 -
data-ipa-cfg-mgr/ipanat/src/ipa_nat_drvi.c | 2456 -------
data-ipa-cfg-mgr/ipanat/src/ipa_nat_logi.c | 49 -
data-ipa-cfg-mgr/ipanat/test/Android.mk | 52 -
data-ipa-cfg-mgr/ipanat/test/README.txt | 18 -
data-ipa-cfg-mgr/ipanat/test/ipa_nat_test.h | 104 -
.../ipanat/test/ipa_nat_test000.c | 69 -
.../ipanat/test/ipa_nat_test001.c | 77 -
.../ipanat/test/ipa_nat_test002.c | 85 -
.../ipanat/test/ipa_nat_test003.c | 82 -
.../ipanat/test/ipa_nat_test004.c | 70 -
.../ipanat/test/ipa_nat_test005.c | 83 -
.../ipanat/test/ipa_nat_test006.c | 91 -
.../ipanat/test/ipa_nat_test007.c | 88 -
.../ipanat/test/ipa_nat_test008.c | 94 -
.../ipanat/test/ipa_nat_test009.c | 96 -
.../ipanat/test/ipa_nat_test010.c | 108 -
.../ipanat/test/ipa_nat_test011.c | 108 -
.../ipanat/test/ipa_nat_test012.c | 109 -
.../ipanat/test/ipa_nat_test013.c | 108 -
.../ipanat/test/ipa_nat_test014.c | 95 -
.../ipanat/test/ipa_nat_test015.c | 97 -
.../ipanat/test/ipa_nat_test016.c | 96 -
.../ipanat/test/ipa_nat_test017.c | 96 -
.../ipanat/test/ipa_nat_test018.c | 96 -
.../ipanat/test/ipa_nat_test019.c | 96 -
.../ipanat/test/ipa_nat_test020.c | 100 -
.../ipanat/test/ipa_nat_test021.c | 81 -
.../ipanat/test/ipa_nat_test022.c | 118 -
data-ipa-cfg-mgr/ipanat/test/main.c | 640 --
device.mk | 15 +-
libhidl/Android.mk | 46 -
manifest.xml | 10 +
.../base/core/res/res/values/config.xml | 5 +
prop.mk | 98 +-
rootdir/init.qcom.rc | 3 +
vndk/Android.mk | 95 -
109 files changed, 856 insertions(+), 43018 deletions(-)
create mode 100644 configs/media_codecs_8953.xml
create mode 100644 configs/media_codecs_vendor.xml
delete mode 100644 data-ipa-cfg-mgr/Android.mk
delete mode 100644 data-ipa-cfg-mgr/hal/Android.mk
delete mode 100644 data-ipa-cfg-mgr/hal/inc/CtUpdateAmbassador.h
delete mode 100644 data-ipa-cfg-mgr/hal/inc/HAL.h
delete mode 100644 data-ipa-cfg-mgr/hal/inc/IOffloadManager.h
delete mode 100644 data-ipa-cfg-mgr/hal/inc/IpaEventRelay.h
delete mode 100644 data-ipa-cfg-mgr/hal/inc/LocalLogBuffer.h
delete mode 100644 data-ipa-cfg-mgr/hal/inc/OffloadStatistics.h
delete mode 100644 data-ipa-cfg-mgr/hal/inc/PrefixParser.h
delete mode 100644 data-ipa-cfg-mgr/hal/src/CtUpdateAmbassador.cpp
delete mode 100644 data-ipa-cfg-mgr/hal/src/HAL.cpp
delete mode 100644 data-ipa-cfg-mgr/hal/src/IpaEventRelay.cpp
delete mode 100644 data-ipa-cfg-mgr/hal/src/LocalLogBuffer.cpp
delete mode 100644 data-ipa-cfg-mgr/hal/src/OffloadStatistics.cpp
delete mode 100644 data-ipa-cfg-mgr/hal/src/PrefixParser.cpp
delete mode 100644 data-ipa-cfg-mgr/ipacm/inc/IPACM_CmdQueue.h
delete mode 100644 data-ipa-cfg-mgr/ipacm/inc/IPACM_Config.h
delete mode 100644 data-ipa-cfg-mgr/ipacm/inc/IPACM_ConntrackClient.h
delete mode 100644 data-ipa-cfg-mgr/ipacm/inc/IPACM_ConntrackListener.h
delete mode 100644 data-ipa-cfg-mgr/ipacm/inc/IPACM_Conntrack_NATApp.h
delete mode 100644 data-ipa-cfg-mgr/ipacm/inc/IPACM_Defs.h
delete mode 100644 data-ipa-cfg-mgr/ipacm/inc/IPACM_EvtDispatcher.h
delete mode 100644 data-ipa-cfg-mgr/ipacm/inc/IPACM_Filtering.h
delete mode 100644 data-ipa-cfg-mgr/ipacm/inc/IPACM_Header.h
delete mode 100644 data-ipa-cfg-mgr/ipacm/inc/IPACM_Iface.h
delete mode 100644 data-ipa-cfg-mgr/ipacm/inc/IPACM_IfaceManager.h
delete mode 100644 data-ipa-cfg-mgr/ipacm/inc/IPACM_Lan.h
delete mode 100644 data-ipa-cfg-mgr/ipacm/inc/IPACM_LanToLan.h
delete mode 100644 data-ipa-cfg-mgr/ipacm/inc/IPACM_Listener.h
delete mode 100644 data-ipa-cfg-mgr/ipacm/inc/IPACM_Log.h
delete mode 100644 data-ipa-cfg-mgr/ipacm/inc/IPACM_Neighbor.h
delete mode 100644 data-ipa-cfg-mgr/ipacm/inc/IPACM_Netlink.h
delete mode 100644 data-ipa-cfg-mgr/ipacm/inc/IPACM_OffloadManager.h
delete mode 100644 data-ipa-cfg-mgr/ipacm/inc/IPACM_Routing.h
delete mode 100644 data-ipa-cfg-mgr/ipacm/inc/IPACM_Wan.h
delete mode 100644 data-ipa-cfg-mgr/ipacm/inc/IPACM_Wlan.h
delete mode 100644 data-ipa-cfg-mgr/ipacm/inc/IPACM_Xml.h
delete mode 100644 data-ipa-cfg-mgr/ipacm/src/Android.mk
delete mode 100644 data-ipa-cfg-mgr/ipacm/src/IPACM_CmdQueue.cpp
delete mode 100644 data-ipa-cfg-mgr/ipacm/src/IPACM_Config.cpp
delete mode 100644 data-ipa-cfg-mgr/ipacm/src/IPACM_ConntrackClient.cpp
delete mode 100644 data-ipa-cfg-mgr/ipacm/src/IPACM_ConntrackListener.cpp
delete mode 100644 data-ipa-cfg-mgr/ipacm/src/IPACM_Conntrack_NATApp.cpp
delete mode 100644 data-ipa-cfg-mgr/ipacm/src/IPACM_EvtDispatcher.cpp
delete mode 100644 data-ipa-cfg-mgr/ipacm/src/IPACM_Filtering.cpp
delete mode 100644 data-ipa-cfg-mgr/ipacm/src/IPACM_Header.cpp
delete mode 100644 data-ipa-cfg-mgr/ipacm/src/IPACM_Iface.cpp
delete mode 100644 data-ipa-cfg-mgr/ipacm/src/IPACM_IfaceManager.cpp
delete mode 100644 data-ipa-cfg-mgr/ipacm/src/IPACM_Lan.cpp
delete mode 100644 data-ipa-cfg-mgr/ipacm/src/IPACM_LanToLan.cpp
delete mode 100644 data-ipa-cfg-mgr/ipacm/src/IPACM_Log.cpp
delete mode 100644 data-ipa-cfg-mgr/ipacm/src/IPACM_Main.cpp
delete mode 100644 data-ipa-cfg-mgr/ipacm/src/IPACM_Neighbor.cpp
delete mode 100644 data-ipa-cfg-mgr/ipacm/src/IPACM_Netlink.cpp
delete mode 100644 data-ipa-cfg-mgr/ipacm/src/IPACM_OffloadManager.cpp
delete mode 100644 data-ipa-cfg-mgr/ipacm/src/IPACM_Routing.cpp
delete mode 100644 data-ipa-cfg-mgr/ipacm/src/IPACM_Wan.cpp
delete mode 100644 data-ipa-cfg-mgr/ipacm/src/IPACM_Wlan.cpp
delete mode 100644 data-ipa-cfg-mgr/ipacm/src/IPACM_Xml.cpp
delete mode 100644 data-ipa-cfg-mgr/ipacm/src/IPACM_cfg.xml
delete mode 100644 data-ipa-cfg-mgr/ipacm/src/mobileap_firewall.xml
delete mode 100644 data-ipa-cfg-mgr/ipacm/src/start_ipacm_le
delete mode 100644 data-ipa-cfg-mgr/ipanat/inc/ipa_nat_drv.h
delete mode 100644 data-ipa-cfg-mgr/ipanat/inc/ipa_nat_drvi.h
delete mode 100644 data-ipa-cfg-mgr/ipanat/inc/ipa_nat_logi.h
delete mode 100644 data-ipa-cfg-mgr/ipanat/src/Android.mk
delete mode 100644 data-ipa-cfg-mgr/ipanat/src/ipa_nat_drv.c
delete mode 100644 data-ipa-cfg-mgr/ipanat/src/ipa_nat_drvi.c
delete mode 100644 data-ipa-cfg-mgr/ipanat/src/ipa_nat_logi.c
delete mode 100644 data-ipa-cfg-mgr/ipanat/test/Android.mk
delete mode 100644 data-ipa-cfg-mgr/ipanat/test/README.txt
delete mode 100644 data-ipa-cfg-mgr/ipanat/test/ipa_nat_test.h
delete mode 100644 data-ipa-cfg-mgr/ipanat/test/ipa_nat_test000.c
delete mode 100644 data-ipa-cfg-mgr/ipanat/test/ipa_nat_test001.c
delete mode 100644 data-ipa-cfg-mgr/ipanat/test/ipa_nat_test002.c
delete mode 100644 data-ipa-cfg-mgr/ipanat/test/ipa_nat_test003.c
delete mode 100644 data-ipa-cfg-mgr/ipanat/test/ipa_nat_test004.c
delete mode 100644 data-ipa-cfg-mgr/ipanat/test/ipa_nat_test005.c
delete mode 100644 data-ipa-cfg-mgr/ipanat/test/ipa_nat_test006.c
delete mode 100644 data-ipa-cfg-mgr/ipanat/test/ipa_nat_test007.c
delete mode 100644 data-ipa-cfg-mgr/ipanat/test/ipa_nat_test008.c
delete mode 100644 data-ipa-cfg-mgr/ipanat/test/ipa_nat_test009.c
delete mode 100644 data-ipa-cfg-mgr/ipanat/test/ipa_nat_test010.c
delete mode 100644 data-ipa-cfg-mgr/ipanat/test/ipa_nat_test011.c
delete mode 100644 data-ipa-cfg-mgr/ipanat/test/ipa_nat_test012.c
delete mode 100644 data-ipa-cfg-mgr/ipanat/test/ipa_nat_test013.c
delete mode 100644 data-ipa-cfg-mgr/ipanat/test/ipa_nat_test014.c
delete mode 100644 data-ipa-cfg-mgr/ipanat/test/ipa_nat_test015.c
delete mode 100644 data-ipa-cfg-mgr/ipanat/test/ipa_nat_test016.c
delete mode 100644 data-ipa-cfg-mgr/ipanat/test/ipa_nat_test017.c
delete mode 100644 data-ipa-cfg-mgr/ipanat/test/ipa_nat_test018.c
delete mode 100644 data-ipa-cfg-mgr/ipanat/test/ipa_nat_test019.c
delete mode 100644 data-ipa-cfg-mgr/ipanat/test/ipa_nat_test020.c
delete mode 100644 data-ipa-cfg-mgr/ipanat/test/ipa_nat_test021.c
delete mode 100644 data-ipa-cfg-mgr/ipanat/test/ipa_nat_test022.c
delete mode 100644 data-ipa-cfg-mgr/ipanat/test/main.c
delete mode 100644 libhidl/Android.mk
delete mode 100644 vndk/Android.mk
diff --git a/BoardConfig.mk b/BoardConfig.mk
index a073cfa..fc5787f 100644
--- a/BoardConfig.mk
+++ b/BoardConfig.mk
@@ -61,6 +61,7 @@ AUDIO_FEATURE_ENABLED_EXTN_FORMATS := true
AUDIO_FEATURE_ENABLED_FM_POWER_OPT := true
AUDIO_FEATURE_ENABLED_FLAC_OFFLOAD := true
AUDIO_FEATURE_ENABLED_FLUENCE := true
+AUDIO_FEATURE_ENABLED_SND_MONITOR := true
AUDIO_FEATURE_ENABLED_HFP := true
AUDIO_FEATURE_ENABLED_KPI_OPTIMIZE := true
AUDIO_FEATURE_ENABLED_MULTI_VOICE_SESSIONS := true
@@ -218,7 +219,7 @@ TARGET_PROVIDES_QTI_TELEPHONY_JAR := true
TARGET_USES_OLD_MNC_FORMAT := true
# SELinux
-include device/qcom/sepolicy/sepolicy.mk
+#include device/qcom/sepolicy/sepolicy.mk
BOARD_SEPOLICY_DIRS += $(DEVICE_PATH)/sepolicy
# Security patch level
diff --git a/aosp_vince.mk b/aosp_vince.mk
index fdaaf00..cbc0b58 100644
--- a/aosp_vince.mk
+++ b/aosp_vince.mk
@@ -22,24 +22,20 @@ $(call inherit-product, $(SRC_TARGET_DIR)/product/full_base_telephony.mk)
$(call inherit-product, device/xiaomi/vince/device.mk)
#all
-IS_GO_VERSION := true
TARGET_INCLUDE_STOCK_ARCORE := true
$(call inherit-product, vendor/MiuiCamera/config.mk)
-# On for(PE)
-$(call inherit-product, vendor/aosp/config/common_full_phone.mk)
+#(PE-CAF)
+$(call inherit-product, vendor/aosp/config/common.mk)
+
+# Inherit from our common CAF device tree.
+include device/qcom/common/common.mk
+
TARGET_BOOT_ANIMATION_RES := 1080
TARGET_GAPPS_ARCH := arm64
TARGET_MINIMAL_APPS := false
CUSTOM_BUILD_TYPE := OFFICIAL
-# On for(AEX)
-#$(call inherit-product, vendor/aosp/common.mk)
-#TARGET_BOOT_ANIMATION_RES := 2140
-#EXTENDED_BUILD_TYPE := OFFICIAL
-
-# Inherit from custom vendor
-
#Device identifier. This must come after all inclusions
PRODUCT_DEVICE := vince
PRODUCT_NAME := aosp_vince
diff --git a/compatibility_matrix.xml b/compatibility_matrix.xml
index e0723ff..988c3b3 100644
--- a/compatibility_matrix.xml
+++ b/compatibility_matrix.xml
@@ -79,4 +79,12 @@
default
+
+ vendor.qti.hardware.iop
+ 2.0
+
+ IIop
+ default
+
+
diff --git a/configs/media_codecs.xml b/configs/media_codecs.xml
index de09f91..70c1cdb 100644
--- a/configs/media_codecs.xml
+++ b/configs/media_codecs.xml
@@ -1,14 +1,11 @@
-
-
-
-
@@ -196,18 +186,19 @@ Only the three quirks included above are recognized at this point:
+
-
+
-
-
+
+
-
+
@@ -227,10 +218,10 @@ Only the three quirks included above are recognized at this point:
-
+
-
+
@@ -265,19 +256,7 @@ Only the three quirks included above are recognized at this point:
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -288,14 +267,14 @@ Only the three quirks included above are recognized at this point:
-
+
-
-
+
+
@@ -369,15 +348,15 @@ Only the three quirks included above are recognized at this point:
-
+
-
-
+
+
-
+
-
+
\ No newline at end of file
diff --git a/configs/media_codecs_8953.xml b/configs/media_codecs_8953.xml
new file mode 100644
index 0000000..f6371a9
--- /dev/null
+++ b/configs/media_codecs_8953.xml
@@ -0,0 +1,362 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/configs/media_codecs_vendor.xml b/configs/media_codecs_vendor.xml
new file mode 100644
index 0000000..128ac5d
--- /dev/null
+++ b/configs/media_codecs_vendor.xml
@@ -0,0 +1,362 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/data-ipa-cfg-mgr/Android.mk b/data-ipa-cfg-mgr/Android.mk
deleted file mode 100644
index 7c1e95d..0000000
--- a/data-ipa-cfg-mgr/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# Copyright (C) 2017 The LineageOS Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-LOCAL_PATH := $(call my-dir)
-
-include $(call first-makefiles-under,$(LOCAL_PATH))
diff --git a/data-ipa-cfg-mgr/hal/Android.mk b/data-ipa-cfg-mgr/hal/Android.mk
deleted file mode 100644
index 6ebca46..0000000
--- a/data-ipa-cfg-mgr/hal/Android.mk
+++ /dev/null
@@ -1,31 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-LOCAL_ARM_MODE := arm
-LOCAL_SRC_FILES := src/CtUpdateAmbassador.cpp \
- src/HAL.cpp \
- src/IpaEventRelay.cpp \
- src/LocalLogBuffer.cpp \
- src/OffloadStatistics.cpp \
- src/PrefixParser.cpp
-LOCAL_C_INCLUDES := $(LOCAL_PATH)/inc
-LOCAL_MODULE := liboffloadhal
-
-#LOCAL_CPP_FLAGS := -Wall -Werror
-LOCAL_SHARED_LIBRARIES := libhwbinder \
- libhidlbase \
- libhidltransport \
- liblog \
- libcutils \
- libdl \
- libbase \
- libutils \
- libhardware_legacy \
- libhardware \
- android.hardware.tetheroffload.config@1.0 \
- android.hardware.tetheroffload.control@1.0
-LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/inc
-LOCAL_VENDOR_MODULE := true
-LOCAL_MODULE_PATH_32 := $(TARGET_OUT_VENDOR)/lib
-LOCAL_MODULE_PATH_64 := $(TARGET_OUT_VENDOR)/lib64
-include $(BUILD_SHARED_LIBRARY)
diff --git a/data-ipa-cfg-mgr/hal/inc/CtUpdateAmbassador.h b/data-ipa-cfg-mgr/hal/inc/CtUpdateAmbassador.h
deleted file mode 100644
index d4890f3..0000000
--- a/data-ipa-cfg-mgr/hal/inc/CtUpdateAmbassador.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2017, The Linux Foundation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of The Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef _CT_UPDATE_AMBASSADOR_H_
-#define _CT_UPDATE_AMBASSADOR_H_
-/* External Includes */
-#include
-
-/* HIDL Includes */
-#include
-
-/* Internal Includes */
-#include "IOffloadManager.h"
-
-/* Namespace pollution avoidance */
-using ::android::hardware::tetheroffload::control::V1_0::ITetheringOffloadCallback;
-using ::android::hardware::tetheroffload::control::V1_0::NetworkProtocol;
-using HALIpAddrPortPair = ::android::hardware::tetheroffload::control::V1_0::IPv4AddrPortPair;
-using HALNatTimeoutUpdate = ::android::hardware::tetheroffload::control::V1_0::NatTimeoutUpdate;
-
-using IpaIpAddrPortPair = ::IOffloadManager::ConntrackTimeoutUpdater::IpAddrPortPair;
-using IpaNatTimeoutUpdate = ::IOffloadManager::ConntrackTimeoutUpdater::NatTimeoutUpdate;
-using IpaL4Protocol = ::IOffloadManager::ConntrackTimeoutUpdater::L4Protocol;
-
-
-class CtUpdateAmbassador : public IOffloadManager::ConntrackTimeoutUpdater {
-public:
- CtUpdateAmbassador(const ::android::sp& /* cb */);
- /* ------------------- CONNTRACK TIMEOUT UPDATER ------------------------ */
- void updateTimeout(IpaNatTimeoutUpdate /* update */);
-private:
- static bool translate(IpaNatTimeoutUpdate /* in */, HALNatTimeoutUpdate& /* out */);
- static bool translate(IpaIpAddrPortPair /* in */, HALIpAddrPortPair& /* out */);
- static bool L4ToNetwork(IpaL4Protocol /* in */, NetworkProtocol& /* out */);
- const ::android::sp& mFramework;
-}; /* CtUpdateAmbassador */
-#endif /* _CT_UPDATE_AMBASSADOR_H_ */
\ No newline at end of file
diff --git a/data-ipa-cfg-mgr/hal/inc/HAL.h b/data-ipa-cfg-mgr/hal/inc/HAL.h
deleted file mode 100644
index 894438f..0000000
--- a/data-ipa-cfg-mgr/hal/inc/HAL.h
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of The Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef _HAL_H_
-#define _HAL_H_
-
-/* HIDL Includes */
-#include
-#include
-#include
-
-/* External Includes */
-#include
-#include
-
-/* Internal Includes */
-#include "CtUpdateAmbassador.h"
-#include "IOffloadManager.h"
-#include "IpaEventRelay.h"
-#include "LocalLogBuffer.h"
-
-/* Avoid the namespace litering everywhere */
-using ::android::hardware::configureRpcThreadpool;
-using ::android::hardware::joinRpcThreadpool;
-using ::android::hardware::Return;
-using ::android::hardware::hidl_handle;
-using ::android::hardware::hidl_string;
-using ::android::hardware::hidl_vec;
-
-using RET = ::IOffloadManager::RET;
-using Prefix = ::IOffloadManager::Prefix;
-
-using ::std::map;
-using ::std::string;
-using ::std::vector;
-
-using ::android::hardware::tetheroffload::config::V1_0::IOffloadConfig;
-using ::android::hardware::tetheroffload::control::V1_0::IOffloadControl;
-
-using ::android::hardware::tetheroffload::control::V1_0::ITetheringOffloadCallback;
-
-#define KERNEL_PAGE 4096
-
-class HAL : public IOffloadControl, IOffloadConfig {
-public:
- /* Static Const Definitions */
- static const uint32_t UDP_SUBSCRIPTIONS =
- NF_NETLINK_CONNTRACK_NEW | NF_NETLINK_CONNTRACK_DESTROY;
- static const uint32_t TCP_SUBSCRIPTIONS =
- NF_NETLINK_CONNTRACK_UPDATE | NF_NETLINK_CONNTRACK_DESTROY;
-
- /* Interface to IPACM */
- /**
- * @TODO This will likely need to be extended into a proper FactoryPattern
- * when version bumps are needed.
- *
- * This makeIPAHAL function would move to a HALFactory class. Each HAL could
- * then be versioned (class HAL_V1, class HAL_V2, etc) and inherit from a base class HAL.
- * Then the version number in this function could be used to decide which one to return
- * (if any).
- *
- * IPACM does not need to talk directly back to the returned HAL class. The other methods that
- * IPACM needs to call are covered by registering the event listeners. If IPACM did need to
- * talk directly back to the HAL object, without HAL registering a callback, these methods would
- * need to be defined in the HAL base class.
- *
- * This would slightly break backwards compatibility so it should be discouraged; however, the
- * base class could define a sane default implementation and not require that the child class
- * implement this new method. This "sane default implementation" might only be possible in the
- * case of listening to async events; if IPACM needs to query something, then this would not
- * be backwards compatible and should be done via registering a callback so that IPACM knows
- * this version of HAL supports that functionality.
- *
- * The above statements assume that only one version of the HAL will be instantiated at a time.
- * Yet, it seems possible that a HAL_V1 and HAL_V2 service could both be registered, extending
- * support to both old and new client implementations. It would be difficult to multiplex
- * information from both versions. Additionally, IPACM would be responsible for instantiating
- * two HALs (makeIPAHAL(1, ...); makeIPAHAL(2, ...)) which makes signaling between HAL versions
- * (see next paragraph) slightly more difficult but not impossible.
- *
- * If concurrent versions of HAL are required, there will likely need to only be one master.
- * Whichever version of HAL receives a client first may be allowed to take over control while
- * other versions would be required to return failures (ETRYAGAIN: another version in use) until
- * that version of the client relinquishes control. This should work seemlessly because we
- * currently have an assumption that only one client will be present in system image.
- * Logically, that client will have only a single version (or if it supports multiple, it will
- * always attempt the newest version of HAL before falling back) and therefore no version
- * collisions could possibly occur.
- *
- * Dislaimer:
- * ==========
- * Supporting multiple versions of an interface, in the same code base, at runtime, comes with a
- * significant carrying cost and overhead in the form of developer headaches. This should not
- * be done lightly and should be extensively scoped before committing to the effort.
- *
- * Perhaps the notion of minor version could be introduced to bridge the gaps created above.
- * For example, 1.x and 1.y could be ran concurrently and supported from the same IPACM code.
- * Yet, a major version update, would not be backwards compatible. This means that a 2.x HAL
- * could not linked into the same IPACM code base as a 1.x HAL.
- */
- static HAL* makeIPAHAL(int /* version */, IOffloadManager* /* mgr */);
-
- /* IOffloadConfig */
- Return setHandles(
- const hidl_handle& /* fd1 */,
- const hidl_handle& /* fd2 */,
- setHandles_cb /* hidl_cb */);
-
- /* IOffloadControl */
- Return initOffload(
- const ::android::sp& /* cb */,
- initOffload_cb /* hidl_cb */);
- Return stopOffload(
- stopOffload_cb /* hidl_cb */);
- Return setLocalPrefixes(
- const hidl_vec& /* prefixes */,
- setLocalPrefixes_cb /* hidl_cb */);
- Return getForwardedStats(
- const hidl_string& /* upstream */,
- getForwardedStats_cb /* hidl_cb */);
- Return setDataLimit(
- const hidl_string& /* upstream */,
- uint64_t /* limit */,
- setDataLimit_cb /* hidl_cb */);
- Return setUpstreamParameters(
- const hidl_string& /* iface */,
- const hidl_string& /* v4Addr */,
- const hidl_string& /* v4Gw */,
- const hidl_vec& /* v6Gws */,
- setUpstreamParameters_cb /* hidl_cb */);
- Return addDownstream(
- const hidl_string& /* iface */,
- const hidl_string& /* prefix */,
- addDownstream_cb /* hidl_cb */);
- Return removeDownstream(
- const hidl_string& /* iface */,
- const hidl_string& /* prefix */,
- removeDownstream_cb /* hidl_cb */);
-
-private:
- typedef struct BoolResult {
- bool success;
- string errMsg;
- } boolResult_t;
-
- HAL(IOffloadManager* /* mgr */);
- void registerAsSystemService(const char* /* name */);
-
- void doLogcatDump();
-
- static BoolResult makeInputCheckFailure(string /* customErr */);
- static BoolResult ipaResultToBoolResult(RET /* in */);
-
- static vector convertHidlStrToStdStr(hidl_vec /* in */);
-
- void registerEventListeners();
- void registerIpaCb();
- void registerCtCb();
- void unregisterEventListeners();
- void unregisterIpaCb();
- void unregisterCtCb();
-
- void clearHandles();
-
- bool isInitialized();
-
- IOffloadManager* mIPA;
- hidl_handle mHandle1;
- hidl_handle mHandle2;
- LocalLogBuffer mLogs;
- ::android::sp mCb;
- IpaEventRelay *mCbIpa;
- CtUpdateAmbassador *mCbCt;
-}; /* HAL */
-#endif /* _HAL_H_ */
diff --git a/data-ipa-cfg-mgr/hal/inc/IOffloadManager.h b/data-ipa-cfg-mgr/hal/inc/IOffloadManager.h
deleted file mode 100644
index 6a357b3..0000000
--- a/data-ipa-cfg-mgr/hal/inc/IOffloadManager.h
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
- * Copyright (c) 2017, The Linux Foundation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of The Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef _I_OFFLOAD_MANAGER_H_
-#define _I_OFFLOAD_MANAGER_H_
-
-/* External Includes */
-#include
-
-/* Internal Includes */
-#include "OffloadStatistics.h"
-
-
-class IOffloadManager {
-public:
- enum RET {
- FAIL_TOO_MANY_PREFIXES = -6,
- FAIL_UNSUPPORTED = -5,
- FAIL_INPUT_CHECK = -4,
- FAIL_HARDWARE = -3,
- FAIL_UNNEEDED = -2,
- FAIL_TRY_AGAIN = -1,
- SUCCESS = 0,
- SUCCESS_DUPLICATE_CONFIG = 1,
- SUCCESS_NO_OP = 2,
- SUCCESS_OPTIMIZED = 3
- }; /* RET */
-
- enum IP_FAM {
- V4 = 0,
- V6 = 1,
- INVALID = 2
- }; /* IP_FAM */
-
- /* Overloading to use for addresses as well */
- typedef struct Prefix {
- IP_FAM fam;
- uint32_t v4Addr;
- uint32_t v4Mask;
- uint32_t v6Addr[4];
- uint32_t v6Mask[4];
- } prefix_t;
-
- /* ---------------------------- LIFECYCLE ------------------------------- */
- virtual ~IOffloadManager(){}
-
- /* ---------------------- ASYNC EVENT CALLBACKS ------------------------- */
- class IpaEventListener {
- public:
- enum StoppedReason {
- /**
- * Offload was stopped due to the configuration being removed via
- * setUpstreamParameters/removeDownstream.
- */
- REQUESTED,
- /**
- * Offload was stopped due to an internal (to IPA or modem) error.
- *
- * Statistics may be temporarily unavailable.
- */
- ERROR,
- /**
- * Offload was stopped because the upstream connection has
- * migrated to unsupported radio access technology.
- *
- * Statistics will still be available.
- */
- UNSUPPORTED
- }; /* StoppedReason */
- virtual ~IpaEventListener(){}
- /**
- * Called when Offload first begins to occur on any upstream and
- * tether interface pair. It should be paired with an onOffloadStopped
- * call.
- */
- virtual void onOffloadStarted(){}
- /**
- * Called when Offload stops occurring on all upstream and tether
- * interface pairs. It comes after a call to onOffloadStarted.
- *
- * @param reason Reason that Offload was stopped
- */
- virtual void onOffloadStopped(StoppedReason /* reason */){}
- /**
- * Called when the hardware can support Offload again.
- *
- * Any statistics that were previously unavailable, may be queried
- * again at this time.
- */
- virtual void onOffloadSupportAvailable(){}
- /**
- * Called when the limit set via setQuota has expired.
- *
- * It is implied that Offload has been stopped on all upstream and
- * tether interface pairs when this callback is called.
- */
- virtual void onLimitReached(){}
- }; /* IpaEventListener */
-
- /**
- * Request notifications about asynchronous events that occur in hardware.
- *
- * The calling client must be able to handle the callback on a separate
- * thread (i.e. their implementation of IpaEventListener must be thread
- * safe).
- *
- * @return SUCCESS iff callback successfully registered
- *
- * Remarks: This can't really be allowed to fail.
- */
- virtual RET registerEventListener(IpaEventListener* /* listener */) = 0;
- /**
- * Unregister a previously registered listener.
- *
- * @return SUCCESS iff callback successfully unregistered
- * FAIL_INPUT_CHECK if callback was never registered
- */
- virtual RET unregisterEventListener(IpaEventListener* /* listener */) = 0;
-
- class ConntrackTimeoutUpdater {
- public:
- enum L4Protocol {
- TCP = 0,
- UDP = 1
- }; /* L4Protocol */
- typedef struct IpAddrPortPair {
- uint32_t ipAddr;
- uint16_t port;
- } ipAddrPortPair_t;
- typedef struct NatTimeoutUpdate {
- IpAddrPortPair src;
- IpAddrPortPair dst;
- L4Protocol proto;
- } natTimeoutUpdate_t;
- virtual ~ConntrackTimeoutUpdater(){}
- virtual void updateTimeout(NatTimeoutUpdate /* update */) {}
- }; /* ConntrackTimeoutUpdater */
-
- /**
- * Register a callback that may be called if the OffloadManager wants to
- * update the timeout value in conntrack of kernel.
- *
- * The calling client must be able to handle the callback on a separate
- * thread (i.e. their implementation of ConntrackTimeoutUpdater must be
- * thread safe)
- *
- * @return SUCCESS iff callback successfully registered
- *
- * Remarks: This can't really be allowed to fail
- */
- virtual RET registerCtTimeoutUpdater(ConntrackTimeoutUpdater* /* cb */) = 0;
- /**
- * Unregister a previously registered callback.
- *
- * @return SUCCESS iff callback successfully unregistered
- * FAIL_INPUT_CHECK if callback was never registered
- */
- virtual RET unregisterCtTimeoutUpdater(ConntrackTimeoutUpdater* /* cb */) = 0;
-
- /* ----------------------------- CONFIG --------------------------------- */
- /**
- * Provide a file descriptor for use with conntrack library
- *
- * @param fd File Descriptor that has been opened and bound to groups
- * @param groups Groups (bit mask) that fd has been bound to
- *
- * @return SUCCESS iff IOffloadManager needed this file descriptor and
- * it was properly bound.
- * FAIL_INPUT_CHECK if IOffloadManager needed this file descriptor
- * but it was found to not be properly bound
- * FAIL_UNNEEDED if IOffloadManager determined that it does not need
- * a file descriptor bound to these groups.
- */
- virtual RET provideFd(int /* fd */, unsigned int /* group */) = 0;
- /**
- * Indicate that IOffloadManager must cease using all file
- * descriptors passed via provideFd API.
- *
- * After this call returns, the file descriptors will likely be closed by
- * the calling client.
- *
- * @return SUCCESS iff IOffloadManager has stopped using all file
- * descriptors
- * FAIL_TRY_AGAIN if IOffloadManager needs more time with these
- * file descriptors before it can release them
- *
- * Remarks: Currently, it would be very difficult to handle a FAIL_TRY_AGAIN
- * because HAL serivce does not own a thread outside of RPC
- * Threadpool to reschedule this call.
- */
- virtual RET clearAllFds() = 0;
- /**
- * Query whether STA+AP offload is supported on this device.
- *
- * @return true if supported, false otherwise
- */
- virtual bool isStaApSupported() = 0;
-
- /* ------------------------------ ROUTE --------------------------------- */
- /**
- * Add a downstream prefix that may be forwarded.
- *
- * The Prefix may be an IPv4 or IPv6 address to signify which family can be
- * offloaded from the specified tether interface. If the given IP family,
- * as determined by the Prefix, has a corresponding upstream configured,
- * then traffic should be forwarded between the two interfaces.
- *
- * Only traffic that has a downstream address within the specified Prefix
- * can be forwarded. Traffic from the same downstream interface that falls
- * outside of the Prefix will be unaffected and can be forwarded iff it was
- * previously configured via a separate addDownstream call.
- *
- * If no upstream has been configured, then this information must be cached
- * so that offload may begin once an upstream is configured.
- *
- * This API does not replace any previously configured downstreams
- * and must be explicitly removed by calling removeDownstream or by clearing
- * the entire configuration by calling stopAllOffload.
- *
- * @return SUCCESS The new information was accepted
- * FAIL_TOO_MANY_PREFIXES The hardware has already accepted the max
- * number of Prefixes that can be supported.
- * If offload is desired on this Prefix then
- * another must be removed first.
- * FAIL_UNSUPPORTED The hardware cannot forward traffic from this
- * downstream interface and will never be able to.
- */
- virtual RET addDownstream(const char* /* downstream */,
- const Prefix& /* prefix */) = 0;
- /**
- * Remove a downstream Prefix that forwarding was previously requested for.
- *
- * The Prefix may be an IPv4 or IPv6 address. Traffic outside of this
- * Prefix is not affected.
- *
- * @return SUCCESS iff forwarding was previously occurring and has been
- * stopped
- * SUCCESS_NO_OP iff forwarding was not previously occurring and
- * therefore no action needed to be taken
- */
- virtual RET removeDownstream(const char* /* downstream */,
- const Prefix& /* prefix */) = 0;
- /**
- * Indicate that hardware should forward traffic from any configured
- * downstreams to the specified upstream.
- *
- * When iface is non-null and non-empty and v4Gw is valid, then any
- * currently configured or future configured IPv4 downstreams should be
- * forwarded to this upstream interface.
- *
- * When iface is non-null and non-empty and v6Gw is valid, then any
- * currently configured or future configured IPv6 downstreams should be
- * forwarded to this upstream interface.
- *
- * @param iface Upstream interface name. Only one is needed because IPv4
- * and IPv6 interface names are required to match.
- * @param v4Gw The address of the IPv4 Gateway on the iface
- * @param v6Gw The address of one of the IPv6 Gateways on the iface
- *
- * @return SUCCESS iff the specified configuration was applied
- * SUCCESS_DUPLICATE_CONFIG if this configuration exactly
- * matches a previously provided
- * configuration. This means that no
- * action has to be taken, but, the
- * configuration was previously accepted
- * and applied.
- * FAIL_UNSUPPORTED if hardware cannot support forwarding to this
- * upstream interface
- *
- * Remarks: This overrides any previously configured parameters
- */
- virtual RET setUpstream(const char* /* iface */, const Prefix& /* v4Gw */,
- const Prefix& /* v6Gw */) = 0;
- /**
- * All traffic must be returned to the software path and all configuration
- * (including provided file descriptors) must be forgotten.
- *
- * @return SUCCESS If all offload was successfully stopped and provided
- * file descriptors were released.
- *
- * Remarks: This can't really fail?
- */
- virtual RET stopAllOffload() = 0;
-
- /* --------------------------- STATS/POLICY ----------------------------- */
- /**
- * Instruct hardware to stop forwarding traffic and send a callback after
- * limit bytes have been transferred in either direction on this upstream
- * interface.
- *
- * @param upstream Upstream interface name that the limit should apply to
- * @param limit Bytes limit that can occur before action should be taken
- *
- * @return SUCCESS If the limit was successfully applied
- * SUCCESS_OPTIMIZED If the limit was sufficiently high to be
- * interpreted as "no quota".
- * FAIL_HARDWARE If the limit was rejected by the hardware
- * FAIL_UNSUPPORTED If metering is not supported on this interface
- * FAIL_TRY_AGAIN If this upstream has not been previously
- * configured to allow offload
- * (via setUpstreamParameters)
- */
- virtual RET setQuota(const char* /* upstream */, uint64_t /* limit */) = 0;
- /**
- * Query for statistics counters in hardware.
- *
- * This returns an aggregate of all hardware accelerated traffic which
- * has occurred on this upstream interface.
- *
- * @param upstream Interface on which traffic entered/exited
- * @param reset Whether hardware counters should reset after returning
- * current statistics
- * @param ret Output variable where statistics are returned
- *
- * @return SUCCESS If the statistics were successfully populated in ret and
- * were successfully reset if requested.
- * FAIL_TRY_AGAIN If the statistics are not currently available but
- * may be available later. This may occur during
- * a subsystem restart.
- * FAIL_UNSUPPORTED If statistics are not supported on this upstream
- */
- virtual RET getStats(const char* /* upstream */, bool /* reset */,
- OffloadStatistics& /* ret */) = 0;
-}; /* IOffloadManager */
-#endif /* _I_OFFLOAD_MANAGER_H_ */
diff --git a/data-ipa-cfg-mgr/hal/inc/IpaEventRelay.h b/data-ipa-cfg-mgr/hal/inc/IpaEventRelay.h
deleted file mode 100644
index 4541510..0000000
--- a/data-ipa-cfg-mgr/hal/inc/IpaEventRelay.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2017, The Linux Foundation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of The Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef _IPA_EVENT_RELAY_H_
-#define _IPA_EVENT_RELAY_H_
-/* External Includes */
-#include
-
-/* HIDL Includes */
-#include
-
-/* Internal Includes */
-#include "IOffloadManager.h"
-
-/* Namespace pollution avoidance */
-using ::android::hardware::tetheroffload::control::V1_0::ITetheringOffloadCallback;
-
-
-class IpaEventRelay : public IOffloadManager::IpaEventListener {
-public:
- IpaEventRelay(const ::android::sp& /* cb */);
- /* ----------------------- IPA EVENT LISTENER --------------------------- */
- void onOffloadStarted();
- void onOffloadStopped(StoppedReason /* reason */);
- void onOffloadSupportAvailable();
- void onLimitReached();
-private:
- const ::android::sp& mFramework;
-}; /* IpaEventRelay */
-#endif /* _IPA_EVENT_RELAY_H_ */
\ No newline at end of file
diff --git a/data-ipa-cfg-mgr/hal/inc/LocalLogBuffer.h b/data-ipa-cfg-mgr/hal/inc/LocalLogBuffer.h
deleted file mode 100644
index c23ef7d..0000000
--- a/data-ipa-cfg-mgr/hal/inc/LocalLogBuffer.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2017, The Linux Foundation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of The Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef _LOCAL_LOG_BUFFER_H_
-#define _LOCAL_LOG_BUFFER_H_
-/* External Includes */
-#include
-#include
-#include
-#include
-#include
-
-/* Namespace pollution avoidance */
-using ::std::deque;
-using ::std::string;
-using ::std::stringstream;
-using ::std::vector;
-
-
-class LocalLogBuffer {
-public:
- class FunctionLog {
- public:
- FunctionLog(string /* funcName */);
- FunctionLog(const FunctionLog& /* other */);
- void addArg(string /* kw */, string /* arg */);
- void addArg(string /* kw */, vector /* args */);
- void addArg(string /* kw */, uint64_t /* arg */);
- void setResult(bool /* success */, string /* msg */);
- void setResult(vector /* ret */);
- void setResult(uint64_t /* rx */, uint64_t /* tx */);
- string toString();
- private:
- void maybeAddArgsComma();
- const string mName;
- bool mArgsProvided;
- stringstream mSSArgs;
- stringstream mSSReturn;
- }; /* FunctionLog */
- LocalLogBuffer(string /* name */, int /* maxLogs */);
- void addLog(FunctionLog /* log */);
- void toLogcat();
-private:
- deque mLogs;
- const string mName;
- const size_t mMaxLogs;
-}; /* LocalLogBuffer */
-#endif /* _LOCAL_LOG_BUFFER_H_ */
\ No newline at end of file
diff --git a/data-ipa-cfg-mgr/hal/inc/OffloadStatistics.h b/data-ipa-cfg-mgr/hal/inc/OffloadStatistics.h
deleted file mode 100644
index 226ea72..0000000
--- a/data-ipa-cfg-mgr/hal/inc/OffloadStatistics.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2017, The Linux Foundation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of The Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef _OFFLOAD_STATISTICS_H_
-#define _OFFLOAD_STATISTICS_H_
-
-#include
-#include
-
-
-class OffloadStatistics {
-public:
- uint64_t rx;
- uint64_t tx;
-
- OffloadStatistics();
- OffloadStatistics(std::string /* upstream */);
-
- uint64_t getTotalRxBytes();
- uint64_t getTotalTxBytes();
-private:
- std::string upstream;
-}; /* OffloadStatistics */
-#endif /* _OFFLOAD_STATISTICS_H_ */
diff --git a/data-ipa-cfg-mgr/hal/inc/PrefixParser.h b/data-ipa-cfg-mgr/hal/inc/PrefixParser.h
deleted file mode 100644
index 99afbe0..0000000
--- a/data-ipa-cfg-mgr/hal/inc/PrefixParser.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2017, The Linux Foundation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of The Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef _PREFIX_PARSER_H_
-#define _PREFIX_PARSER_H_
-
-/* External Includes */
-#include
-#include
-#include
-
-/* Internal Includes */
-#include "IOffloadManager.h"
-
-/* Avoiding namespace pollution */
-using IP_FAM = ::IOffloadManager::IP_FAM;
-using Prefix = ::IOffloadManager::Prefix;
-
-using ::std::string;
-using ::std::vector;
-
-
-class PrefixParser {
-public:
- PrefixParser();
- bool add(vector /* in */);
- bool add(string /* in */);
- bool addV4(vector /* in */);
- bool addV4(string /* in */);
- bool addV6(vector /* in */);
- bool addV6(string /* in */);
- int size();
- bool allAreFullyQualified();
- Prefix getFirstPrefix();
- Prefix getFirstPrefix(IP_FAM);
- string getLastErrAsStr();
-private:
- bool add(string /* in */, IP_FAM /* famHint */);
- bool add(vector /* in */, IP_FAM /* famHint */);
- static IP_FAM guessIPFamily(string /* in */);
- static bool splitIntoAddrAndMask(string /* in */, string& /* addr */,
- string& /* mask */);
- static int parseSubnetMask(string /* in */, IP_FAM /* famHint */);
- static bool parseV4Addr(string /* in */, Prefix& /* out */);
- static bool parseV6Addr(string /* in */, Prefix& /* out */);
- static bool populateV4Mask(int /* mask */, Prefix& /* out */);
- static bool populateV6Mask(int /* mask */, Prefix& /* out */);
- static uint32_t createMask(int /* mask */);
- static Prefix makeBlankPrefix(IP_FAM /* famHint */);
- bool isMaskValid(int /* mask */, IP_FAM /* fam */);
- static const uint32_t FULLY_QUALIFIED_MASK = ~0;
- vector mPrefixes;
- string mLastErr;
-}; /* PrefixParser */
-#endif /* _PREFIX_PARSER_H_ */
\ No newline at end of file
diff --git a/data-ipa-cfg-mgr/hal/src/CtUpdateAmbassador.cpp b/data-ipa-cfg-mgr/hal/src/CtUpdateAmbassador.cpp
deleted file mode 100644
index 4843fe2..0000000
--- a/data-ipa-cfg-mgr/hal/src/CtUpdateAmbassador.cpp
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (c) 2017, The Linux Foundation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of The Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef DBG
- #define DBG false
-#endif /* DBG */
-#define LOG_TAG "IPAHALService/CtUpdateAmbassador"
-
-/* External Includes */
-#include
-#include
-
-/* HIDL Includes */
-#include
-
-/* Internal Includes */
-#include "CtUpdateAmbassador.h"
-
-/* Namespace pollution avoidance */
-using ::android::hardware::tetheroffload::control::V1_0::ITetheringOffloadCallback;
-using ::android::hardware::tetheroffload::control::V1_0::NetworkProtocol;
-using HALIpAddrPortPair = ::android::hardware::tetheroffload::control::V1_0::IPv4AddrPortPair;
-using HALNatTimeoutUpdate = ::android::hardware::tetheroffload::control::V1_0::NatTimeoutUpdate;
-
-using IpaIpAddrPortPair = ::IOffloadManager::ConntrackTimeoutUpdater::IpAddrPortPair;
-using IpaNatTimeoutUpdate = ::IOffloadManager::ConntrackTimeoutUpdater::NatTimeoutUpdate;
-using IpaL4Protocol = ::IOffloadManager::ConntrackTimeoutUpdater::L4Protocol;
-
-
-CtUpdateAmbassador::CtUpdateAmbassador(
- const ::android::sp& cb) : mFramework(cb) {
-} /* CtUpdateAmbassador */
-
-void CtUpdateAmbassador::updateTimeout(IpaNatTimeoutUpdate in) {
- if (DBG) {
- ALOGD("updateTimeout(src={%#010X, %#04X}, dest={%#010X, %#04X}, Proto=%d)",
- in.src.ipAddr, in.src.port, in.dst.ipAddr, in.dst.port,
- in.proto);
- }
- HALNatTimeoutUpdate out;
- if (!translate(in, out)) {
- /* Cannot log the input outside of DBG flag because it contains sensitive
- * information. This will lead to a two step debug if the information
- * cannot be gleaned from IPACM logs. The other option is to improve this
- * with the use of our local log. That would likely still be hard to
- * instruct testers to collect logs, because, assuming timeout updates
- * are numerous, it will overrun the ring quickly. Therefore, the tester
- * would have to know the exact moment as issue occurred. Or we make the
- * ring massive. This would lead to a significant memory overhead.
- * Because of this overhead, we would likely not want to check in a change
- * with it and once we provide a debug build for increasing buffer size,
- * why not just define the DBG flag?
- */
- ALOGE("Failed to translate timeout event :(");
- } else {
- mFramework->updateTimeout(out);
- }
-} /* updateTimeout */
-
-bool CtUpdateAmbassador::translate(IpaNatTimeoutUpdate in, HALNatTimeoutUpdate &out) {
- return translate(in.src, out.src)
- && translate(in.dst, out.dst)
- && L4ToNetwork(in.proto, out.proto);
-} /* translate */
-
-bool CtUpdateAmbassador::translate(IpaIpAddrPortPair in, HALIpAddrPortPair& out) {
- char ipAddrStr[INET_ADDRSTRLEN];
-
- if (inet_ntop(AF_INET, &(in.ipAddr), ipAddrStr, INET_ADDRSTRLEN) == nullptr) {
- /* errno would be valid here with EAFNOSUPPORT or ENOSPC, neither should really
- * be possible in our scenario though.
- */
- return false;
- }
-
- out.addr = ipAddrStr;
- out.port = in.port;
-
- return true;
-} /* translate */
-
-bool CtUpdateAmbassador::L4ToNetwork(IpaL4Protocol in, NetworkProtocol &out) {
- bool ret = false;
- switch(in) {
- case IpaL4Protocol::TCP:
- ret = true;
- out = NetworkProtocol::TCP;
- break;
- case IpaL4Protocol::UDP:
- ret = true;
- out = NetworkProtocol::UDP;
- break;
- default:
- ret = false;
- break;
- }
- return ret;
-} /* L4ToNetwork */
diff --git a/data-ipa-cfg-mgr/hal/src/HAL.cpp b/data-ipa-cfg-mgr/hal/src/HAL.cpp
deleted file mode 100644
index 3f1a41f..0000000
--- a/data-ipa-cfg-mgr/hal/src/HAL.cpp
+++ /dev/null
@@ -1,617 +0,0 @@
-/*
- * Copyright (c) 2017, The Linux Foundation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of The Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef DBG
- #define DBG true
-#endif /* DBG */
-#define LOG_TAG "IPAHALService"
-
-/* HIDL Includes */
-#include
-#include
-
-/* Kernel Includes */
-#include
-
-/* External Includes */
-#include
-#include
-#include
-#include
-#include
-
-/* Internal Includes */
-#include "HAL.h"
-#include "LocalLogBuffer.h"
-#include "PrefixParser.h"
-
-/* Namespace pollution avoidance */
-using ::android::hardware::Void;
-using ::android::status_t;
-
-using RET = ::IOffloadManager::RET;
-using Prefix = ::IOffloadManager::Prefix;
-
-using ::std::map;
-using ::std::vector;
-
-
-/* ------------------------------ PUBLIC ------------------------------------ */
-HAL* HAL::makeIPAHAL(int version, IOffloadManager* mgr) {
- android::hardware::ProcessState::initWithMmapSize((size_t)(2 * KERNEL_PAGE));
-
- if (DBG)
- ALOGI("makeIPAHAL(%d, %s)", version,
- (mgr != nullptr) ? "provided" : "null");
- if (nullptr == mgr) return NULL;
- else if (version != 1) return NULL;
- HAL* ret = new HAL(mgr);
- if (nullptr == ret) return NULL;
- configureRpcThreadpool(1, false);
- ret->registerAsSystemService("ipacm");
- return ret;
-} /* makeIPAHAL */
-
-
-/* ------------------------------ PRIVATE ----------------------------------- */
-HAL::HAL(IOffloadManager* mgr) : mLogs("HAL Function Calls", 50) {
- mIPA = mgr;
- mCb.clear();
- mCbIpa = nullptr;
- mCbCt = nullptr;
-} /* HAL */
-
-void HAL::registerAsSystemService(const char* name) {
- status_t ret = 0;
-
- ret = IOffloadControl::registerAsService();
- if (ret != 0) ALOGE("Failed to register IOffloadControl (%d) name(%s)", ret, name);
- else if (DBG) {
- ALOGI("Successfully registered IOffloadControl");
- }
-
- ret = IOffloadConfig::registerAsService();
- if (ret != 0) ALOGE("Failed to register IOffloadConfig (%d)", ret);
- else if (DBG) {
- ALOGI("Successfully registered IOffloadConfig");
- }
-} /* registerAsSystemService */
-
-void HAL::doLogcatDump() {
- ALOGD("mHandles");
- ALOGD("========");
- /* @TODO This will segfault if they aren't initialized and I don't currently
- * care to check for initialization in a function that isn't used anyways
- * ALOGD("fd1->%d", mHandle1->data[0]);
- * ALOGD("fd2->%d", mHandle2->data[0]);
- */
- ALOGD("========");
-} /* doLogcatDump */
-
-HAL::BoolResult HAL::makeInputCheckFailure(string customErr) {
- BoolResult ret;
- ret.success = false;
- ret.errMsg = "Failed Input Checks: " + customErr;
- return ret;
-} /* makeInputCheckFailure */
-
-HAL::BoolResult HAL::ipaResultToBoolResult(RET in) {
- BoolResult ret;
- ret.success = (in >= RET::SUCCESS);
- switch (in) {
- case RET::FAIL_TOO_MANY_PREFIXES:
- ret.errMsg = "Too Many Prefixes Provided";
- break;
- case RET::FAIL_UNSUPPORTED:
- ret.errMsg = "Unsupported by Hardware";
- break;
- case RET::FAIL_INPUT_CHECK:
- ret.errMsg = "Failed Input Checks";
- break;
- case RET::FAIL_HARDWARE:
- ret.errMsg = "Hardware did not accept";
- break;
- case RET::FAIL_TRY_AGAIN:
- ret.errMsg = "Try Again";
- break;
- case RET::SUCCESS:
- ret.errMsg = "Successful";
- break;
- case RET::SUCCESS_DUPLICATE_CONFIG:
- ret.errMsg = "Successful: Was a duplicate configuration";
- break;
- case RET::SUCCESS_NO_OP:
- ret.errMsg = "Successful: No action needed";
- break;
- case RET::SUCCESS_OPTIMIZED:
- ret.errMsg = "Successful: Performed optimized version of action";
- break;
- default:
- ret.errMsg = "Unknown Error";
- break;
- }
- return ret;
-} /* ipaResultToBoolResult */
-
-/* This will likely always result in doubling the number of loops the execution
- * goes through. Obviously that is suboptimal. But if we first translate
- * away from all HIDL specific code, then we can avoid sprinkling HIDL
- * dependencies everywhere.
- */
-vector HAL::convertHidlStrToStdStr(hidl_vec in) {
- vector ret;
- for (size_t i = 0; i < in.size(); i++) {
- string add = in[i];
- ret.push_back(add);
- }
- return ret;
-} /* convertHidlStrToStdStr */
-
-void HAL::registerEventListeners() {
- registerIpaCb();
- registerCtCb();
-} /* registerEventListeners */
-
-void HAL::registerIpaCb() {
- if (isInitialized() && mCbIpa == nullptr) {
- LocalLogBuffer::FunctionLog fl("registerEventListener");
- mCbIpa = new IpaEventRelay(mCb);
- mIPA->registerEventListener(mCbIpa);
- mLogs.addLog(fl);
- } else {
- ALOGE("Failed to registerIpaCb (isInitialized()=%s, (mCbIpa == nullptr)=%s)",
- isInitialized() ? "true" : "false",
- (mCbIpa == nullptr) ? "true" : "false");
- }
-} /* registerIpaCb */
-
-void HAL::registerCtCb() {
- if (isInitialized() && mCbCt == nullptr) {
- LocalLogBuffer::FunctionLog fl("registerCtTimeoutUpdater");
- mCbCt = new CtUpdateAmbassador(mCb);
- mIPA->registerCtTimeoutUpdater(mCbCt);
- mLogs.addLog(fl);
- } else {
- ALOGE("Failed to registerCtCb (isInitialized()=%s, (mCbCt == nullptr)=%s)",
- isInitialized() ? "true" : "false",
- (mCbCt == nullptr) ? "true" : "false");
- }
-} /* registerCtCb */
-
-void HAL::unregisterEventListeners() {
- unregisterIpaCb();
- unregisterCtCb();
-} /* unregisterEventListeners */
-
-void HAL::unregisterIpaCb() {
- if (mCbIpa != nullptr) {
- LocalLogBuffer::FunctionLog fl("unregisterEventListener");
- mIPA->unregisterEventListener(mCbIpa);
- mCbIpa = nullptr;
- mLogs.addLog(fl);
- } else {
- ALOGE("Failed to unregisterIpaCb");
- }
-} /* unregisterIpaCb */
-
-void HAL::unregisterCtCb() {
- if (mCbCt != nullptr) {
- LocalLogBuffer::FunctionLog fl("unregisterCtTimeoutUpdater");
- mIPA->unregisterCtTimeoutUpdater(mCbCt);
- mCbCt = nullptr;
- mLogs.addLog(fl);
- } else {
- ALOGE("Failed to unregisterCtCb");
- }
-} /* unregisterCtCb */
-
-void HAL::clearHandles() {
- ALOGI("clearHandles()");
- /* @TODO handle this more gracefully... also remove the log
- *
- * Things that would be nice, but I can't do:
- * [1] Destroy the object (it's on the stack)
- * [2] Call freeHandle (it's private)
- *
- * Things I can do but are hacks:
- * [1] Look at code and notice that setTo immediately calls freeHandle
- */
- mHandle1.setTo(nullptr, true);
- mHandle2.setTo(nullptr, true);
-} /* clearHandles */
-
-bool HAL::isInitialized() {
- return mCb.get() != nullptr;
-} /* isInitialized */
-
-
-/* -------------------------- IOffloadConfig -------------------------------- */
-Return HAL::setHandles(
- const hidl_handle &fd1,
- const hidl_handle &fd2,
- setHandles_cb hidl_cb
-) {
- LocalLogBuffer::FunctionLog fl(__func__);
-
- if (fd1->numFds != 1) {
- BoolResult res = makeInputCheckFailure("Must provide exactly one FD per handle (fd1)");
- hidl_cb(res.success, res.errMsg);
- fl.setResult(res.success, res.errMsg);
-
- mLogs.addLog(fl);
- return Void();
- }
-
- if (fd2->numFds != 1) {
- BoolResult res = makeInputCheckFailure("Must provide exactly one FD per handle (fd2)");
- hidl_cb(res.success, res.errMsg);
- fl.setResult(res.success, res.errMsg);
-
- mLogs.addLog(fl);
- return Void();
- }
-
- /* The = operator calls freeHandle internally. Therefore, if we were using
- * these handles previously, they're now gone... forever. But hopefully the
- * new ones kick in very quickly.
- *
- * After freeing anything previously held, it will dup the FD so we have our
- * own copy.
- */
- mHandle1 = fd1;
- mHandle2 = fd2;
-
- /* Log the DUPed FD instead of the actual input FD so that we can lookup
- * this value in ls -l /proc//
- */
- fl.addArg("fd1", mHandle1->data[0]);
- fl.addArg("fd2", mHandle2->data[0]);
-
- /* Try to provide each handle to IPACM. Destroy our DUPed hidl_handles if
- * IPACM does not like either input. This keeps us from leaking FDs or
- * providing half solutions.
- *
- * @TODO unfortunately, this does not cover duplicate configs where IPACM
- * thinks it is still holding on to a handle that we would have freed above.
- * It also probably means that IPACM would not know about the first FD being
- * freed if it rejects the second FD.
- */
- RET ipaReturn = mIPA->provideFd(mHandle1->data[0], UDP_SUBSCRIPTIONS);
- if (ipaReturn == RET::SUCCESS) {
- ipaReturn = mIPA->provideFd(mHandle2->data[0], TCP_SUBSCRIPTIONS);
- }
-
- if (ipaReturn != RET::SUCCESS) {
- ALOGE("IPACM failed to accept the FDs (%d %d)", mHandle1->data[0],
- mHandle2->data[0]);
- clearHandles();
- } else {
- /* @TODO remove logs after stabilization */
- ALOGI("IPACM was provided two FDs (%d, %d)", mHandle1->data[0],
- mHandle2->data[0]);
- }
-
- BoolResult res = ipaResultToBoolResult(ipaReturn);
- hidl_cb(res.success, res.errMsg);
-
- fl.setResult(res.success, res.errMsg);
- mLogs.addLog(fl);
- return Void();
-} /* setHandles */
-
-
-/* -------------------------- IOffloadControl ------------------------------- */
-Return HAL::initOffload
-(
- const ::android::sp& cb,
- initOffload_cb hidl_cb
-) {
- LocalLogBuffer::FunctionLog fl(__func__);
-
- if (isInitialized()) {
- BoolResult res = makeInputCheckFailure("Already initialized");
- hidl_cb(res.success, res.errMsg);
- fl.setResult(res.success, res.errMsg);
- mLogs.addLog(fl);
- } else {
- /* Should storing the CB be a function? */
- mCb = cb;
- registerEventListeners();
- BoolResult res = ipaResultToBoolResult(RET::SUCCESS);
- hidl_cb(res.success, res.errMsg);
- fl.setResult(res.success, res.errMsg);
- mLogs.addLog(fl);
- }
-
- return Void();
-} /* initOffload */
-
-Return HAL::stopOffload
-(
- stopOffload_cb hidl_cb
-) {
- LocalLogBuffer::FunctionLog fl(__func__);
-
- if (!isInitialized()) {
- BoolResult res = makeInputCheckFailure("Was never initialized");
- hidl_cb(res.success, res.errMsg);
- fl.setResult(res.success, res.errMsg);
- mLogs.addLog(fl);
- } else {
- /* Should removing the CB be a function? */
- mCb.clear();
- unregisterEventListeners();
-
- RET ipaReturn = mIPA->stopAllOffload();
- if (ipaReturn != RET::SUCCESS) {
- /* Ignore IPAs return value here and provide why stopAllOffload
- * failed. However, if IPA failed to clearAllFds, then we can't
- * clear our map because they may still be in use.
- */
- RET ret = mIPA->clearAllFds();
- if (ret == RET::SUCCESS) {
- clearHandles();
- }
- } else {
- ipaReturn = mIPA->clearAllFds();
- /* If IPA fails, they may still be using these for some reason. */
- if (ipaReturn == RET::SUCCESS) {
- clearHandles();
- } else {
- ALOGE("IPACM failed to return success for clearAllFds so they will not be released...");
- }
- }
-
- BoolResult res = ipaResultToBoolResult(ipaReturn);
- hidl_cb(res.success, res.errMsg);
-
- fl.setResult(res.success, res.errMsg);
- mLogs.addLog(fl);
- }
-
- return Void();
-} /* stopOffload */
-
-Return HAL::setLocalPrefixes
-(
- const hidl_vec& prefixes,
- setLocalPrefixes_cb hidl_cb
-) {
- BoolResult res;
- PrefixParser parser;
- vector prefixesStr = convertHidlStrToStdStr(prefixes);
-
- LocalLogBuffer::FunctionLog fl(__func__);
- fl.addArg("prefixes", prefixesStr);
-
- memset(&res,0,sizeof(BoolResult));
-
- if (!isInitialized()) {
- BoolResult res = makeInputCheckFailure("Not initialized");
- } else if(prefixesStr.size() < 1) {
- res = ipaResultToBoolResult(RET::FAIL_INPUT_CHECK);
- } else if (!parser.add(prefixesStr)) {
- res = makeInputCheckFailure(parser.getLastErrAsStr());
- } else {
- res = ipaResultToBoolResult(RET::SUCCESS);
- }
-
- hidl_cb(res.success, res.errMsg);
- fl.setResult(res.success, res.errMsg);
- mLogs.addLog(fl);
- return Void();
-} /* setLocalPrefixes */
-
-Return HAL::getForwardedStats
-(
- const hidl_string& upstream,
- getForwardedStats_cb hidl_cb
-) {
- LocalLogBuffer::FunctionLog fl(__func__);
- fl.addArg("upstream", upstream);
-
- OffloadStatistics ret;
- RET ipaReturn = mIPA->getStats(upstream.c_str(), true, ret);
- if (ipaReturn == RET::SUCCESS) {
- hidl_cb(ret.getTotalRxBytes(), ret.getTotalTxBytes());
- fl.setResult(ret.getTotalRxBytes(), ret.getTotalTxBytes());
- } else {
- /* @TODO Ensure the output is zeroed, but this is probably not enough to
- * tell Framework that an error has occurred. If, for example, they had
- * not yet polled for statistics previously, they may incorrectly assume
- * that simply no statistics have transpired on hardware path.
- *
- * Maybe ITetheringOffloadCallback:onEvent(OFFLOAD_STOPPED_ERROR) is
- * enough to handle this case, time will tell.
- */
- hidl_cb(0, 0);
- fl.setResult(0, 0);
- }
-
- mLogs.addLog(fl);
- return Void();
-} /* getForwardedStats */
-
-Return HAL::setDataLimit
-(
- const hidl_string& upstream,
- uint64_t limit,
- setDataLimit_cb hidl_cb
-) {
- LocalLogBuffer::FunctionLog fl(__func__);
- fl.addArg("upstream", upstream);
- fl.addArg("limit", limit);
-
- if (!isInitialized()) {
- BoolResult res = makeInputCheckFailure("Not initialized (setDataLimit)");
- hidl_cb(res.success, res.errMsg);
- fl.setResult(res.success, res.errMsg);
- } else {
- RET ipaReturn = mIPA->setQuota(upstream.c_str(), limit);
- if(ipaReturn == RET::FAIL_TRY_AGAIN) {
- ipaReturn = RET::SUCCESS;
- }
- BoolResult res = ipaResultToBoolResult(ipaReturn);
- hidl_cb(res.success, res.errMsg);
- fl.setResult(res.success, res.errMsg);
- }
-
- mLogs.addLog(fl);
- return Void();
-} /* setDataLimit */
-
-Return HAL::setUpstreamParameters
-(
- const hidl_string& iface,
- const hidl_string& v4Addr,
- const hidl_string& v4Gw,
- const hidl_vec& v6Gws,
- setUpstreamParameters_cb hidl_cb
-) {
- vector v6GwStrs = convertHidlStrToStdStr(v6Gws);
-
- LocalLogBuffer::FunctionLog fl(__func__);
- fl.addArg("iface", iface);
- fl.addArg("v4Addr", v4Addr);
- fl.addArg("v4Gw", v4Gw);
- fl.addArg("v6Gws", v6GwStrs);
-
- PrefixParser v4AddrParser;
- PrefixParser v4GwParser;
- PrefixParser v6GwParser;
-
- /* @TODO maybe we should enforce that these addresses and gateways are fully
- * qualified here. But then, how do we allow them to be empty/null as well
- * while still preserving a sane API on PrefixParser?
- */
- if (!isInitialized()) {
- BoolResult res = makeInputCheckFailure("Not initialized (setUpstreamParameters)");
- hidl_cb(res.success, res.errMsg);
- fl.setResult(res.success, res.errMsg);
- } else if (!v4AddrParser.addV4(v4Addr) && !v4Addr.empty()) {
- BoolResult res = makeInputCheckFailure(v4AddrParser.getLastErrAsStr());
- hidl_cb(res.success, res.errMsg);
- fl.setResult(res.success, res.errMsg);
- } else if (!v4GwParser.addV4(v4Gw) && !v4Gw.empty()) {
- BoolResult res = makeInputCheckFailure(v4GwParser.getLastErrAsStr());
- hidl_cb(res.success, res.errMsg);
- fl.setResult(res.success, res.errMsg);
- } else if (v6GwStrs.size() >= 1 && !v6GwParser.addV6(v6GwStrs)) {
- BoolResult res = makeInputCheckFailure(v6GwParser.getLastErrAsStr());
- hidl_cb(res.success, res.errMsg);
- fl.setResult(res.success, res.errMsg);
- } else if (iface.size()>= 1) {
- RET ipaReturn = mIPA->setUpstream(
- iface.c_str(),
- v4GwParser.getFirstPrefix(),
- v6GwParser.getFirstPrefix());
- BoolResult res = ipaResultToBoolResult(ipaReturn);
- hidl_cb(res.success, res.errMsg);
- fl.setResult(res.success, res.errMsg);
- } else {
- /* send NULL iface string when upstream down */
- RET ipaReturn = mIPA->setUpstream(
- NULL,
- v4GwParser.getFirstPrefix(IP_FAM::V4),
- v6GwParser.getFirstPrefix(IP_FAM::V6));
- BoolResult res = ipaResultToBoolResult(ipaReturn);
- hidl_cb(res.success, res.errMsg);
- fl.setResult(res.success, res.errMsg);
- }
-
- mLogs.addLog(fl);
- return Void();
-} /* setUpstreamParameters */
-
-Return HAL::addDownstream
-(
- const hidl_string& iface,
- const hidl_string& prefix,
- addDownstream_cb hidl_cb
-) {
- LocalLogBuffer::FunctionLog fl(__func__);
- fl.addArg("iface", iface);
- fl.addArg("prefix", prefix);
-
- PrefixParser prefixParser;
-
- if (!isInitialized()) {
- BoolResult res = makeInputCheckFailure("Not initialized (setUpstreamParameters)");
- hidl_cb(res.success, res.errMsg);
- fl.setResult(res.success, res.errMsg);
- }
- else if (!prefixParser.add(prefix)) {
- BoolResult res = makeInputCheckFailure(prefixParser.getLastErrAsStr());
- hidl_cb(res.success, res.errMsg);
- fl.setResult(res.success, res.errMsg);
- } else {
- RET ipaReturn = mIPA->addDownstream(
- iface.c_str(),
- prefixParser.getFirstPrefix());
- BoolResult res = ipaResultToBoolResult(ipaReturn);
- hidl_cb(res.success, res.errMsg);
- fl.setResult(res.success, res.errMsg);
- }
-
- mLogs.addLog(fl);
- return Void();
-} /* addDownstream */
-
-Return HAL::removeDownstream
-(
- const hidl_string& iface,
- const hidl_string& prefix,
- removeDownstream_cb hidl_cb
-) {
- LocalLogBuffer::FunctionLog fl(__func__);
- fl.addArg("iface", iface);
- fl.addArg("prefix", prefix);
-
- PrefixParser prefixParser;
-
- if (!isInitialized()) {
- BoolResult res = makeInputCheckFailure("Not initialized (setUpstreamParameters)");
- hidl_cb(res.success, res.errMsg);
- fl.setResult(res.success, res.errMsg);
- }
- else if (!prefixParser.add(prefix)) {
- BoolResult res = makeInputCheckFailure(prefixParser.getLastErrAsStr());
- hidl_cb(res.success, res.errMsg);
- fl.setResult(res.success, res.errMsg);
- } else {
- RET ipaReturn = mIPA->removeDownstream(
- iface.c_str(),
- prefixParser.getFirstPrefix());
- BoolResult res = ipaResultToBoolResult(ipaReturn);
- hidl_cb(res.success, res.errMsg);
- fl.setResult(res.success, res.errMsg);
- }
-
- mLogs.addLog(fl);
- return Void();
-} /* removeDownstream */
diff --git a/data-ipa-cfg-mgr/hal/src/IpaEventRelay.cpp b/data-ipa-cfg-mgr/hal/src/IpaEventRelay.cpp
deleted file mode 100644
index 788b152..0000000
--- a/data-ipa-cfg-mgr/hal/src/IpaEventRelay.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 2017, The Linux Foundation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of The Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#define LOG_TAG "IPAHALService/IpaEventRelay"
-/* External Includes */
-#include
-
-/* HIDL Includes */
-#include
-
-/* Internal Includes */
-#include "IpaEventRelay.h"
-
-/* Namespace pollution avoidance */
-using ::android::hardware::tetheroffload::control::V1_0::ITetheringOffloadCallback;
-using ::android::hardware::tetheroffload::control::V1_0::OffloadCallbackEvent;
-
-
-IpaEventRelay::IpaEventRelay(
- const ::android::sp& cb) : mFramework(cb) {
-} /* IpaEventRelay */
-
-void IpaEventRelay::onOffloadStarted() {
- ALOGI("onOffloadStarted()");
- mFramework->onEvent(OffloadCallbackEvent::OFFLOAD_STARTED);
-} /* onOffloadStarted */
-
-void IpaEventRelay::onOffloadStopped(StoppedReason reason) {
- ALOGI("onOffloadStopped(%d)", reason);
- switch (reason) {
- case REQUESTED:
- /*
- * No way to communicate this to Framework right now, they make an
- * assumption that offload is stopped when they remove the
- * configuration.
- */
- break;
- case ERROR:
- mFramework->onEvent(OffloadCallbackEvent::OFFLOAD_STOPPED_ERROR);
- break;
- case UNSUPPORTED:
- mFramework->onEvent(OffloadCallbackEvent::OFFLOAD_STOPPED_UNSUPPORTED);
- break;
- default:
- ALOGE("Unknown stopped reason(%d)", reason);
- break;
- }
-} /* onOffloadStopped */
-
-void IpaEventRelay::onOffloadSupportAvailable() {
- ALOGI("onOffloadSupportAvailable()");
- mFramework->onEvent(OffloadCallbackEvent::OFFLOAD_SUPPORT_AVAILABLE);
-} /* onOffloadSupportAvailable */
-
-void IpaEventRelay::onLimitReached() {
- ALOGI("onLimitReached()");
- mFramework->onEvent(OffloadCallbackEvent::OFFLOAD_STOPPED_LIMIT_REACHED);
-} /* onLimitReached */
diff --git a/data-ipa-cfg-mgr/hal/src/LocalLogBuffer.cpp b/data-ipa-cfg-mgr/hal/src/LocalLogBuffer.cpp
deleted file mode 100644
index f556e40..0000000
--- a/data-ipa-cfg-mgr/hal/src/LocalLogBuffer.cpp
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (c) 2017, The Linux Foundation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of The Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#define LOG_TAG "IPAHALService/dump"
-
-/* External Includes */
-#include
-#include
-#include
-#include
-#include
-
-/* Internal Includes */
-#include "LocalLogBuffer.h"
-
-/* Namespace pollution avoidance */
-using ::std::deque;
-using ::std::string;
-using ::std::vector;
-
-
-LocalLogBuffer::FunctionLog::FunctionLog(string funcName) : mName(funcName) {
- mArgsProvided = false;
-} /* FunctionLog */
-
-LocalLogBuffer::FunctionLog::FunctionLog(const FunctionLog& other) :
- mName(other.mName) {
- mArgsProvided = other.mArgsProvided;
- /* Is this right? How do you copy stringstreams without wizardry? */
- mSSArgs.str(other.mSSArgs.str());
- mSSReturn.str(other.mSSReturn.str());
-} /* FunctionLog */
-
-void LocalLogBuffer::FunctionLog::addArg(string kw, string arg) {
- maybeAddArgsComma();
- mSSArgs << kw << "=" << arg;
-} /* addArg */
-
-void LocalLogBuffer::FunctionLog::addArg(string kw, vector args) {
- maybeAddArgsComma();
- mSSArgs << kw << "=[";
- for (size_t i = 0; i < args.size(); i++) {
- mSSArgs << args[i];
- if (i < (args.size() - 1))
- mSSArgs << ", ";
- }
- mSSArgs << "]";
-} /* addArg */
-
-void LocalLogBuffer::FunctionLog::addArg(string kw, uint64_t arg) {
- maybeAddArgsComma();
- mSSArgs << kw << "=" << arg;
-} /* addArg */
-
-void LocalLogBuffer::FunctionLog::maybeAddArgsComma() {
- if (!mArgsProvided) {
- mArgsProvided = true;
- } else {
- mSSArgs << ", ";
- }
-} /* maybeAddArgsComma */
-
-void LocalLogBuffer::FunctionLog::setResult(bool success, string msg) {
- mSSReturn << "[" << ((success) ? "success" : "failure") << ", " << msg
- << "]";
-} /* setResult */
-
-void LocalLogBuffer::FunctionLog::setResult(vector ret) {
- mSSReturn << "[";
- for (size_t i = 0; i < ret.size(); i++) {
- mSSReturn << ret[i];
- if (i < (ret.size() - 1))
- mSSReturn << ", ";
- }
- mSSReturn << "]";
-} /* setResult */
-
-void LocalLogBuffer::FunctionLog::setResult(uint64_t rx, uint64_t tx) {
- mSSReturn << "[rx=" << rx << ", tx=" << tx << "]";
-} /* setResult */
-
-string LocalLogBuffer::FunctionLog::toString() {
- stringstream ret;
- ret << mName << "(" << mSSArgs.str() << ") returned " << mSSReturn.str();
- return ret.str();
-} /* toString */
-
-LocalLogBuffer::LocalLogBuffer(string name, int maxLogs) : mName(name),
- mMaxLogs(maxLogs) {
-} /* LocalLogBuffer */
-
-void LocalLogBuffer::addLog(FunctionLog log) {
- while (mLogs.size() > mMaxLogs)
- mLogs.pop_front();
- mLogs.push_back(log);
-} /* addLog */
-
-void LocalLogBuffer::toLogcat() {
- for (size_t i = 0; i < mLogs.size(); i++)
- ALOGD("%s: %s", mName.c_str(), mLogs[i].toString().c_str());
-} /* toLogcat */
diff --git a/data-ipa-cfg-mgr/hal/src/OffloadStatistics.cpp b/data-ipa-cfg-mgr/hal/src/OffloadStatistics.cpp
deleted file mode 100644
index 8f8beb6..0000000
--- a/data-ipa-cfg-mgr/hal/src/OffloadStatistics.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2017, The Linux Foundation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of The Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#include
-#include
-
-#include "OffloadStatistics.h"
-
-
-/* ------------------------------ PUBLIC ------------------------------------ */
-OffloadStatistics::OffloadStatistics() {
- this->upstream = "UNSET";
- this->rx = 0;
- this->tx = 0;
-} /* OffloadStatistics */
-
-OffloadStatistics::OffloadStatistics
-(
- std::string upstream
-) {
- this->upstream = upstream;
- this->rx = 0;
- this->tx =0;
-} /* OffloadStatistics */
-
-uint64_t OffloadStatistics::getTotalRxBytes() {
- return rx;
-} /* getTotalRxBytes */
-
-uint64_t OffloadStatistics::getTotalTxBytes() {
- return tx;
-} /* getTotalTxBytes */
diff --git a/data-ipa-cfg-mgr/hal/src/PrefixParser.cpp b/data-ipa-cfg-mgr/hal/src/PrefixParser.cpp
deleted file mode 100644
index ff55147..0000000
--- a/data-ipa-cfg-mgr/hal/src/PrefixParser.cpp
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- * Copyright (c) 2017, The Linux Foundation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of The Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-/* External Includes */
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-/* Internal Includes */
-#include "IOffloadManager.h"
-#include "PrefixParser.h"
-
-/* Avoiding namespace pollution */
-using IP_FAM = ::IOffloadManager::IP_FAM;
-using Prefix = ::IOffloadManager::Prefix;
-
-using ::std::string;
-using ::std::vector;
-
-
-/* ------------------------------ PUBLIC ------------------------------------ */
-PrefixParser::PrefixParser() {
- mLastErr = "No Err";
-} /* PrefixParser */
-
-bool PrefixParser::add(vector in) {
- return add(in, IP_FAM::INVALID);
-} /* add */
-
-bool PrefixParser::add(string in) {
- return add(in, IP_FAM::INVALID);
-} /* add */
-
-bool PrefixParser::addV4(string in) {
- return add(in, IP_FAM::V4);
-} /* addV4 */
-
-bool PrefixParser::addV4(vector in) {
- return add(in, IP_FAM::V4);
-} /* addV4 */
-
-bool PrefixParser::addV6(string in) {
- return add(in, IP_FAM::V6);
-} /* addV6 */
-
-bool PrefixParser::addV6(vector in) {
- for (size_t i = 0; i < in.size(); i++) {
- if (!addV6(in[i]))
- return false;
- }
- return true;
-} /* addV6 */
-
-int PrefixParser::size() {
- return mPrefixes.size();
-} /* size */
-
-bool PrefixParser::allAreFullyQualified() {
- for (size_t i = 0; i < mPrefixes.size(); i++) {
- if (mPrefixes[i].fam == IP_FAM::V4) {
- uint32_t masked = mPrefixes[i].v4Addr & mPrefixes[i].v4Mask;
- if (masked != mPrefixes[i].v4Addr)
- return false;
- } else {
- uint32_t masked[4];
- masked[0] = mPrefixes[i].v6Addr[0] & mPrefixes[i].v6Mask[0];
- masked[1] = mPrefixes[i].v6Addr[1] & mPrefixes[i].v6Mask[1];
- masked[2] = mPrefixes[i].v6Addr[2] & mPrefixes[i].v6Mask[2];
- masked[3] = mPrefixes[i].v6Addr[3] & mPrefixes[i].v6Mask[3];
- for (int j = 0; j < 4; j++) {
- if (masked[j] != mPrefixes[i].v6Addr[j])
- return false;
- }
- }
- }
- return true;
-} /* allAreFullyQualified */
-
-Prefix PrefixParser::getFirstPrefix() {
- if (size() >= 1)
- return mPrefixes[0];
- return makeBlankPrefix(IP_FAM::INVALID);
-} /* getFirstPrefix */
-
-Prefix PrefixParser::getFirstPrefix(IP_FAM famHint) {
- if (size() >= 1)
- return mPrefixes[0];
- return makeBlankPrefix(famHint);
-} /* getFirstPrefix */
-
-string PrefixParser::getLastErrAsStr() {
- return mLastErr;
-} /* getLastErrAsStr */
-
-
-/* ------------------------------ PRIVATE ----------------------------------- */
-bool PrefixParser::add(vector in, IP_FAM famHint) {
- if (in.size() == 0)
- return false;
-
- for (size_t i = 0; i < in.size(); i++) {
- if (!add(in[i], famHint))
- return false;
- }
- return true;
-} /* add */
-
-bool PrefixParser::add(string in, IP_FAM famHint) {
- if (in.length() == 0) {
- mLastErr = "Failed to parse string, length = 0...";
- return false;
- }
-
- if (famHint == IP_FAM::INVALID)
- famHint = guessIPFamily(in);
-
- string subnet;
- string addr;
-
- if (!splitIntoAddrAndMask(in, addr, subnet)) {
- mLastErr = "Failed to split into Address and Mask(" + in + ")";
- return false;
- }
-
- int mask = parseSubnetMask(subnet, famHint);
- if (!isMaskValid(mask, famHint)) {
- mLastErr = "Invalid mask";
- return false;
- }
-
- Prefix pre = makeBlankPrefix(famHint);
-
- if (famHint == IP_FAM::V4) {
- if (!parseV4Addr(addr, pre)) {
- mLastErr = "Failed to parse V4 Address(" + addr + ")";
- return false;
- }
- } else if (!parseV6Addr(addr, pre)) {
- mLastErr = "Failed to parse V6 Address(" + addr + ")";
- return false;
- }
-
- if (famHint == IP_FAM::V4 && !populateV4Mask(mask, pre)) {
- mLastErr = "Failed to populate IPv4 Mask(" + std::to_string(mask)
- + ", " + addr + ")";
- return false;
- } else if (!populateV6Mask(mask, pre)) {
- mLastErr = "Failed to populate IPv6 Mask(" + std::to_string(mask)
- + ", " + addr + ")";
- return false;
- }
-
- mPrefixes.push_back(pre);
- return true;
-} /* add */
-
-/* Assumption (based on man inet_pton)
- *
- * X represents a hex character
- * d represents a base 10 digit
- * / represents the start of the subnet mask
- * (assume that it can be left off of all below combinations)
- *
- * IPv4 Addresses always look like the following:
- * ddd.ddd.ddd.ddd/dd
- *
- * IPv6 Addresses can look a few different ways:
- * x:x:x:x:x:x:x:x/ddd
- * x::x/ddd
- * x:x:x:x:x:x:d.d.d.d/ddd
- *
- * Therefore, if a presentation of an IP Address contains a colon, then it
- * may not be a valid IPv6, but, it is definitely not valid IPv4. If a
- * presentation of an IP Address does not contain a colon, then it may not be
- * a valid IPv4, but, it is definitely not IPv6.
- */
-IP_FAM PrefixParser::guessIPFamily(string in) {
- size_t found = in.find(":");
- if (found != string::npos)
- return IP_FAM::V6;
- return IP_FAM::V4;
-} /* guessIPFamily */
-
-bool PrefixParser::splitIntoAddrAndMask(string in, string &addr, string &mask) {
- size_t pos = in.find("/");
-
- if (pos != string::npos && pos >= 1) {
- /* addr is now everything up until the first / */
- addr = in.substr(0, pos);
- } else if (pos == string::npos) {
- /* There is no /, so the entire input is an address */
- addr = in;
- } else {
- /* There was nothing before the /, not recoverable */
- return false;
- }
-
- if (pos != string::npos && pos < in.size()) {
- /* There is a / and it is not the last character. Everything after /
- * must be the subnet.
- */
- mask = in.substr(pos + 1);
- } else if (pos != string::npos && pos == in.size()) {
- /* There is a /, but it is the last character. This is garbage, but,
- * we may still be able to interpret the address so we will throw it
- * out.
- */
- mask = "";
- } else if (pos == string::npos) {
- /* There is no /, therefore, there is no subnet */
- mask = "";
- } else {
- /* This really shouldn't be possible because it would imply that find
- * returned a position larger than the size of the input. Just
- * preserving sanity that mask is always initialized.
- */
- mask = "";
- }
-
- return true;
-} /* splitIntoAddrAndMask */
-
-int PrefixParser::parseSubnetMask(string in, IP_FAM famHint) {
- if (in.empty())
- /* Treat no subnet mask as fully qualified */
- return (famHint == IP_FAM::V6) ? 128 : 32;
- return atoi(in.c_str());
-} /* parseSubnetMask */
-
-bool PrefixParser::parseV4Addr(string in, Prefix &out) {
- struct sockaddr_in sa;
-
- int ret = inet_pton(AF_INET, in.c_str(), &(sa.sin_addr));
-
- if (ret < 0) {
- /* errno would be valid */
- return false;
- } else if (ret == 0) {
- /* input was not a valid IP address */
- return false;
- }
-
- /* Address in network byte order */
- out.v4Addr = htonl(sa.sin_addr.s_addr);
- return true;
-} /* parseV4Addr */
-
-bool PrefixParser::parseV6Addr(string in, Prefix &out) {
- struct sockaddr_in6 sa;
-
- int ret = inet_pton(AF_INET6, in.c_str(), &(sa.sin6_addr));
-
- if (ret < 0) {
- /* errno would be valid */
- return false;
- } else if (ret == 0) {
- /* input was not a valid IP address */
- return false;
- }
-
- /* Translate unsigned chars to unsigned ints to match IPA
- *
- * TODO there must be a better way to do this beyond bit fiddling
- * Maybe a Union since we've already made the assumption that the data
- * structures match?
- */
- out.v6Addr[0] = (sa.sin6_addr.s6_addr[0] << 24) |
- (sa.sin6_addr.s6_addr[1] << 16) |
- (sa.sin6_addr.s6_addr[2] << 8) |
- (sa.sin6_addr.s6_addr[3]);
- out.v6Addr[1] = (sa.sin6_addr.s6_addr[4] << 24) |
- (sa.sin6_addr.s6_addr[5] << 16) |
- (sa.sin6_addr.s6_addr[6] << 8) |
- (sa.sin6_addr.s6_addr[7]);
- out.v6Addr[2] = (sa.sin6_addr.s6_addr[8] << 24) |
- (sa.sin6_addr.s6_addr[9] << 16) |
- (sa.sin6_addr.s6_addr[10] << 8) |
- (sa.sin6_addr.s6_addr[11]);
- out.v6Addr[3] = (sa.sin6_addr.s6_addr[12] << 24) |
- (sa.sin6_addr.s6_addr[13] << 16) |
- (sa.sin6_addr.s6_addr[14] << 8) |
- (sa.sin6_addr.s6_addr[15]);
- return true;
-} /* parseV6Addr */
-
-bool PrefixParser::populateV4Mask(int mask, Prefix &out) {
- if (mask < 0 || mask > 32)
- return false;
- out.v4Mask = createMask(mask);
- return true;
-} /* populateV4Mask */
-
-bool PrefixParser::populateV6Mask(int mask, Prefix &out) {
- if (mask < 0 || mask > 128)
- return false;
-
- for (int i = 0; i < 4; i++) {
- out.v6Mask[i] = createMask(mask);
- mask = (mask > 32) ? mask - 32 : 0;
- }
-
- return true;
-} /* populateV6Mask */
-
-uint32_t PrefixParser::createMask(int mask) {
- uint32_t ret = 0;
-
- if (mask >= 32) {
- ret = ~ret;
- return ret;
- }
-
- for (int i = 0; i < 32; i++) {
- if (i < mask)
- ret = (ret << 1) | 1;
- else
- ret = (ret << 1);
- }
-
- return ret;
-} /* createMask */
-
-Prefix PrefixParser::makeBlankPrefix(IP_FAM famHint) {
- Prefix ret;
-
- ret.fam = famHint;
-
- ret.v4Addr = 0;
- ret.v4Mask = 0;
-
- ret.v6Addr[0] = 0;
- ret.v6Addr[1] = 0;
- ret.v6Addr[2] = 0;
- ret.v6Addr[3] = 0;
-
- ret.v6Mask[0] = 0;
- ret.v6Mask[1] = 0;
- ret.v6Mask[2] = 0;
- ret.v6Mask[3] = 0;
-
- return ret;
-} /* makeBlankPrefix */
-
-bool PrefixParser::isMaskValid(int mask, IP_FAM fam) {
- if (mask < 0) {
- mLastErr = "Failed parse subnet mask(" + std::to_string(mask) + ")";
- return false;
- } else if (mask == 0) {
- mLastErr = "Subnet mask cannot be 0(" + std::to_string(mask) + ")";
- return false;
- } else if (fam == IP_FAM::V4 && mask > 32) {
- mLastErr = "Interpreted address as V4 but mask was too large("
- + std::to_string(mask) + ")";
- return false;
- } else if (fam == IP_FAM::V6 && mask > 128) {
- mLastErr = "Interpreted address as V6 but mask was too large("
- + std::to_string(mask) + ")";
- return false;
- }
-
- return true;
-} /* isMaskValid */
diff --git a/data-ipa-cfg-mgr/ipacm/inc/IPACM_CmdQueue.h b/data-ipa-cfg-mgr/ipacm/inc/IPACM_CmdQueue.h
deleted file mode 100644
index 27d7c8b..0000000
--- a/data-ipa-cfg-mgr/ipacm/inc/IPACM_CmdQueue.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
-Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*!
- @file
- IPACM_CmdQueue.h
-
- @brief
- This file implements the IPAM Comment Queue definitions
-
- @Author
-
-*/
-#ifndef IPA_CONNTRACK_MESSAGE_H
-#define IPA_CONNTRACK_MESSAGE_H
-
-#include
-#include "IPACM_Defs.h"
-
-
-
-/*---------------------------------------------------------------------------
- Event data required by IPA_CM
----------------------------------------------------------------------------*/
-
-
-typedef struct _ipacm_cmd_q_data {
- ipa_cm_event_id event;
- void *evt_data;
-}ipacm_cmd_q_data;
-
-typedef struct cmd_s
-{
- void (*callback_ptr)(ipacm_cmd_q_data *);
- ipacm_cmd_q_data data;
-}cmd_t;
-
-class Message
-{
-private:
- Message *m_next;
-
-public:
- cmd_t evt;
-
- Message()
- {
- m_next = NULL;
- evt.callback_ptr = NULL;
- }
- ~Message() { }
- void setnext(Message *item) { m_next = item; }
- Message* getnext() { return m_next; }
-};
-
-class MessageQueue
-{
-
-private:
- Message *Head;
- Message *Tail;
- Message* dequeue(void);
- static MessageQueue *inst_internal;
- static MessageQueue *inst_external;
-
- MessageQueue()
- {
- Head = NULL;
- Tail = NULL;
- }
-
-public:
-
- ~MessageQueue() { }
- void enqueue(Message *item);
-
- static void* Process(void *);
- static MessageQueue* getInstanceInternal();
- static MessageQueue* getInstanceExternal();
-
-};
-
-#endif /* IPA_CONNTRACK_MESSAGE_H */
-
diff --git a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Config.h b/data-ipa-cfg-mgr/ipacm/inc/IPACM_Config.h
deleted file mode 100644
index 524f4ac..0000000
--- a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Config.h
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
-Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*!
- @file
- IPACM_Config.h
-
- @brief
- This file implements the IPACM Configuration from XML file
-
- @Author
- Skylar Chang
-
-*/
-#ifndef IPACM_CONFIG_H
-#define IPACM_CONFIG_H
-
-#include "IPACM_Defs.h"
-#include "IPACM_Xml.h"
-#include "IPACM_EvtDispatcher.h"
-
-typedef struct
-{
- char iface_name[IPA_IFACE_NAME_LEN];
- bool v4_up;
- bool v6_up;
-}NatIfaces;
-
-/* for IPACM rm dependency use*/
-typedef struct _ipa_rm_client
-{
- ipa_rm_resource_name producer_rm1;
- ipa_rm_resource_name consumer_rm1;
- ipa_rm_resource_name producer_rm2;
- ipa_rm_resource_name consumer_rm2;
- bool producer1_up; /* only monitor producer_rm1, not monitor producer_rm2 */
- bool consumer1_up; /* only monitor consumer_rm1, not monitor consumer_rm2 */
- bool rm_set; /* once producer1_up and consumer1_up, will add bi-directional dependency */
- bool rx_bypass_ipa; /* support WLAN may not register RX-property, should not add dependency */
-}ipa_rm_client;
-
-#define MAX_NUM_EXT_PROPS 25
-
-/* used to hold extended properties */
-typedef struct
-{
- uint8_t num_ext_props;
- ipa_ioc_ext_intf_prop prop[MAX_NUM_EXT_PROPS];
-} ipacm_ext_prop;
-
-/* iface */
-class IPACM_Config
-{
-public:
-
- /* IPACM ipa_client map to rm_resource*/
- ipa_rm_resource_name ipa_client_rm_map_tbl[IPA_CLIENT_MAX];
-
- /* IPACM monitored rm_depency table */
- ipa_rm_client ipa_rm_tbl[IPA_MAX_RM_ENTRY];
-
- /* IPACM rm_depency a2 endpoint check*/
- int ipa_rm_a2_check;
-
- /* Store interested interface and their configuration from XML file */
- ipa_ifi_dev_name_t *iface_table;
-
- /* Store interested ALG port from XML file */
- ipacm_alg *alg_table;
-
- /* Store private subnet configuration from XML file */
- ipa_private_subnet private_subnet_table[IPA_MAX_PRIVATE_SUBNET_ENTRIES];
-
- /* Store the non nat iface names */
- NatIfaces *pNatIfaces;
-
- /* Store the bridge iface names */
- char ipa_virtual_iface_name[IPA_IFACE_NAME_LEN];
-
- /* Store the number of interface IPACM read from XML file */
- int ipa_num_ipa_interfaces;
-
- int ipa_num_private_subnet;
-
- int ipa_num_alg_ports;
-
- int ipa_nat_max_entries;
-
- bool ipacm_odu_router_mode;
-
- bool ipacm_odu_enable;
-
- bool ipacm_odu_embms_enable;
-
- bool ipacm_ip_passthrough_mode;
-
- int ipa_nat_iface_entries;
-
- /* Store the total number of wlan guest ap configured */
- int ipa_num_wlan_guest_ap;
-
- /* Max valid rm entry */
- int ipa_max_valid_rm_entry;
-
- /* Store SW-enable or not */
- bool ipa_sw_rt_enable;
-
- /* Store bridge mode or not */
- bool ipa_bridge_enable;
-
- /* Store bridge netdev mac */
- uint8_t bridge_mac[IPA_MAC_ADDR_SIZE];
-
- /* Store the flt rule count for each producer client*/
- int flt_rule_count_v4[IPA_CLIENT_MAX];
- int flt_rule_count_v6[IPA_CLIENT_MAX];
-
- /* IPACM routing table name for v4/v6 */
- struct ipa_ioc_get_rt_tbl rt_tbl_lan_v4, rt_tbl_wan_v4, rt_tbl_default_v4, rt_tbl_v6, rt_tbl_wan_v6;
- struct ipa_ioc_get_rt_tbl rt_tbl_wan_dl;
- struct ipa_ioc_get_rt_tbl rt_tbl_odu_v4, rt_tbl_odu_v6;
-
- bool isMCC_Mode;
-
- /* To return the instance */
- static IPACM_Config* GetInstance();
-
- const char* getEventName(ipa_cm_event_id event_id);
-
- inline void increaseFltRuleCount(int index, ipa_ip_type iptype, int increment)
- {
- if((index >= IPA_CLIENT_MAX) || (index < 0))
- {
- IPACMERR("Index is out of range: %d.\n", index);
- return;
- }
- if(iptype == IPA_IP_v4)
- {
- flt_rule_count_v4[index] += increment;
- IPACMDBG_H("Now num of v4 flt rules on client %d is %d.\n", index, flt_rule_count_v4[index]);
- }
- else
- {
- flt_rule_count_v6[index] += increment;
- IPACMDBG_H("Now num of v6 flt rules on client %d is %d.\n", index, flt_rule_count_v6[index]);
- }
- return;
- }
-
- inline void decreaseFltRuleCount(int index, ipa_ip_type iptype, int decrement)
- {
- if((index >= IPA_CLIENT_MAX) || (index < 0))
- {
- IPACMERR("Index is out of range: %d.\n", index);
- return;
- }
- if(iptype == IPA_IP_v4)
- {
- flt_rule_count_v4[index] -= decrement;
- IPACMDBG_H("Now num of v4 flt rules on client %d is %d.\n", index, flt_rule_count_v4[index]);
- }
- else
- {
- flt_rule_count_v6[index] -= decrement;
- IPACMDBG_H("Now num of v6 flt rules on client %d is %d.\n", index, flt_rule_count_v6[index]);
- }
- return;
- }
-
- inline int getFltRuleCount(int index, ipa_ip_type iptype)
- {
- if((index >= IPA_CLIENT_MAX) || (index < 0))
- {
- IPACMERR("Index is out of range: %d.\n", index);
- return -1;
- }
- if(iptype == IPA_IP_v4)
- {
- return flt_rule_count_v4[index];
- }
- else
- {
- return flt_rule_count_v6[index];
- }
- }
-
- inline int GetAlgPortCnt()
- {
- return ipa_num_alg_ports;
- }
-
- int GetAlgPorts(int nPorts, ipacm_alg *pAlgPorts);
-
- inline int GetNatMaxEntries(void)
- {
- return ipa_nat_max_entries;
- }
-
- inline int GetNatIfacesCnt()
- {
- return ipa_nat_iface_entries;
- }
- int GetNatIfaces(int nPorts, NatIfaces *ifaces);
-
- /* for IPACM resource manager dependency usage */
- void AddRmDepend(ipa_rm_resource_name rm1,bool rx_bypass_ipa);
-
- void DelRmDepend(ipa_rm_resource_name rm1);
-
- int AddNatIfaces(char *dev_name, ipa_ip_type ip_type);
-
- int DelNatIfaces(char *dev_name);
-
- int CheckNatIfaces(const char *dev_name, ipa_ip_type ip_type);
-
- inline void SetQmapId(uint8_t id)
- {
- qmap_id = id;
- }
-
- inline uint8_t GetQmapId()
- {
- return qmap_id;
- }
-
- int SetExtProp(ipa_ioc_query_intf_ext_props *prop);
-
- ipacm_ext_prop* GetExtProp(ipa_ip_type ip_type);
-
- int DelExtProp(ipa_ip_type ip_type);
-
- enum ipa_hw_type GetIPAVer(bool get = false);
-
- int Init(void);
-
- inline bool isPrivateSubnet(uint32_t ip_addr)
- {
- for(int cnt=0; cnt> 8) << 8;
- ipa_num_private_subnet++;
-
- /* IPACM private subnet set changes */
- data_fid = (ipacm_event_data_fid *)malloc(sizeof(ipacm_event_data_fid));
- if(data_fid == NULL)
- {
- IPACMERR("unable to allocate memory for event data_fid\n");
- return IPACM_FAILURE;
- }
- data_fid->if_index = ipa_if_index; // already ipa index, not fid index
- evt_data.event = IPA_PRIVATE_SUBNET_CHANGE_EVENT;
- evt_data.evt_data = data_fid;
-
- /* Insert IPA_PRIVATE_SUBNET_CHANGE_EVENT to command queue */
- IPACM_EvtDispatcher::PostEvt(&evt_data);
- return true;
- }
- IPACMERR("IPACM private subnet_addr overflow, total entry(%d)\n", ipa_num_private_subnet);
- return false;
- }
-
- inline bool DelPrivateSubnet(uint32_t ip_addr, int ipa_if_index)
- {
- ipacm_cmd_q_data evt_data;
- ipacm_event_data_fid *data_fid;
- for(int cnt=0; cntif_index = ipa_if_index; // already ipa index, not fid index
- evt_data.event = IPA_PRIVATE_SUBNET_CHANGE_EVENT;
- evt_data.evt_data = data_fid;
-
- /* Insert IPA_PRIVATE_SUBNET_CHANGE_EVENT to command queue */
- IPACM_EvtDispatcher::PostEvt(&evt_data);
- return true;
- }
- }
- IPACMDBG("can't find private subnet_addr as: 0x%x \n", ip_addr);
- return false;
- }
-#endif /* defined(FEATURE_IPA_ANDROID)*/
-
- static const char *DEVICE_NAME_ODU;
-
-private:
- enum ipa_hw_type ver;
- static IPACM_Config *pInstance;
- static const char *DEVICE_NAME;
- IPACM_Config(void);
- int m_fd; /* File descriptor of the IPA device node /dev/ipa */
- uint8_t qmap_id;
- ipacm_ext_prop ext_prop_v4;
- ipacm_ext_prop ext_prop_v6;
-};
-
-#endif /* IPACM_CONFIG */
diff --git a/data-ipa-cfg-mgr/ipacm/inc/IPACM_ConntrackClient.h b/data-ipa-cfg-mgr/ipacm/inc/IPACM_ConntrackClient.h
deleted file mode 100644
index 16d5b9c..0000000
--- a/data-ipa-cfg-mgr/ipacm/inc/IPACM_ConntrackClient.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
-Copyright (c) 2013, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef IPACM_CONNTRACK_FILTER_H
-#define IPACM_CONNTRACK_FILTER_H
-
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include "IPACM_ConntrackClient.h"
-#include "IPACM_CmdQueue.h"
-#include "IPACM_Conntrack_NATApp.h"
-#include "IPACM_EvtDispatcher.h"
-#include "IPACM_Defs.h"
-
-#ifndef IPACM_DEBUG
-#define IPACM_DEBUG
-#endif
-
-extern "C"
-{
-#include
-#include
-#include
-}
-
-using namespace std;
-
-#define UDP_TIMEOUT_UPDATE 20
-#define BROADCAST_IPV4_ADDR 0xFFFFFFFF
-
-class IPACM_ConntrackClient
-{
-
-private:
- static IPACM_ConntrackClient *pInstance;
-
- struct nfct_handle *tcp_hdl;
- struct nfct_handle *udp_hdl;
- struct nfct_filter *tcp_filter;
- struct nfct_filter *udp_filter;
- static int IPA_Conntrack_Filters_Ignore_Local_Addrs(struct nfct_filter *filter);
- static int IPA_Conntrack_Filters_Ignore_Bridge_Addrs(struct nfct_filter *filter);
- static int IPA_Conntrack_Filters_Ignore_Local_Iface(struct nfct_filter *, ipacm_event_iface_up *);
- IPACM_ConntrackClient();
-
-public:
- static int IPAConntrackEventCB(enum nf_conntrack_msg_type type,
- struct nf_conntrack *ct,
- void *data);
-
- static int IPA_Conntrack_UDP_Filter_Init(void);
- static int IPA_Conntrack_TCP_Filter_Init(void);
- static void* TCPRegisterWithConnTrack(void *);
- static void* UDPRegisterWithConnTrack(void *);
- static void* UDPConnTimeoutUpdate(void *);
-
- static void UpdateUDPFilters(void *, bool);
- static void UpdateTCPFilters(void *, bool);
- static void Read_TcpUdp_Timeout(char *in, int len);
-
- static IPACM_ConntrackClient* GetInstance();
-
- static void UNRegisterWithConnTrack(void);
- int fd_tcp;
- int fd_udp;
-
- unsigned int subscrips_tcp;
- unsigned int subscrips_udp;
-
-#ifdef IPACM_DEBUG
-#define iptodot(X,Y) \
- IPACMLOG(" %s(0x%x): %d.%d.%d.%d\n", X, Y, ((Y>>24) & 0xFF), ((Y>>16) & 0xFF), ((Y>>8) & 0xFF), (Y & 0xFF));
-#endif
-
-#define log_nat(A,B,C,D,E,F) \
- IPACMDBG_H("protocol %d Private IP: %d.%d.%d.%d\t Target IP: %d.%d.%d.%d\t private port: %d public port: %d %s",A,((B>>24) & 0xFF), ((B>>16) & 0xFF), ((B>>8) & 0xFF), (B & 0xFF), ((C>>24) & 0xFF), ((C>>16) & 0xFF),((C>>8) & 0xFF),(C & 0xFF),D,E,F);
-
-};
-
-#endif /* IPACM_CONNTRACK_FILTER_H */
diff --git a/data-ipa-cfg-mgr/ipacm/inc/IPACM_ConntrackListener.h b/data-ipa-cfg-mgr/ipacm/inc/IPACM_ConntrackListener.h
deleted file mode 100644
index d965cf7..0000000
--- a/data-ipa-cfg-mgr/ipacm/inc/IPACM_ConntrackListener.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
-Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef IPACM_CONNTRACK_LISTENER
-#define IPACM_CONNTRACK_LISTENER
-
-#include
-#include
-#include
-#include
-
-#include
-#include
-#include
-
-#include "IPACM_CmdQueue.h"
-#include "IPACM_Conntrack_NATApp.h"
-#include "IPACM_Listener.h"
-#ifdef CT_OPT
-#include "IPACM_LanToLan.h"
-#endif
-
-#define MAX_IFACE_ADDRESS 50
-#define MAX_STA_CLNT_IFACES 10
-#define STA_CLNT_SUBNET_MASK 0xFFFFFF00
-
-using namespace std;
-
-typedef struct _nat_entry_bundle
-{
- struct nf_conntrack *ct;
- enum nf_conntrack_msg_type type;
- nat_table_entry *rule;
- bool isTempEntry;
-
-}nat_entry_bundle;
-
-class IPACM_ConntrackListener : public IPACM_Listener
-{
-
-private:
- bool isCTReg;
- bool isNatThreadStart;
- bool WanUp;
- NatApp *nat_inst;
-
- int NatIfaceCnt;
- int StaClntCnt;
- NatIfaces *pNatIfaces;
- uint32_t nat_iface_ipv4_addr[MAX_IFACE_ADDRESS];
- uint32_t nonnat_iface_ipv4_addr[MAX_IFACE_ADDRESS];
- uint32_t sta_clnt_ipv4_addr[MAX_STA_CLNT_IFACES];
- IPACM_Config *pConfig;
-#ifdef CT_OPT
- IPACM_LanToLan *p_lan2lan;
-#endif
-
- void ProcessCTMessage(void *);
- void ProcessTCPorUDPMsg(struct nf_conntrack *,
- enum nf_conntrack_msg_type, u_int8_t);
- void TriggerWANUp(void *);
- void TriggerWANDown(uint32_t);
- int CreateNatThreads(void);
- bool AddIface(nat_table_entry *, bool *);
- void AddORDeleteNatEntry(const nat_entry_bundle *);
- void PopulateTCPorUDPEntry(struct nf_conntrack *, uint32_t, nat_table_entry *);
- void CheckSTAClient(const nat_table_entry *, bool *);
- int CheckNatIface(ipacm_event_data_all *, bool *);
- void HandleNonNatIPAddr(void *, bool);
-
-#ifdef CT_OPT
- void ProcessCTV6Message(void *);
- void HandleLan2Lan(struct nf_conntrack *,
- enum nf_conntrack_msg_type, nat_table_entry* );
-#endif
-
-public:
- char wan_ifname[IPA_IFACE_NAME_LEN];
- uint32_t wan_ipaddr;
- bool isStaMode;
- IPACM_ConntrackListener();
- void event_callback(ipa_cm_event_id, void *data);
- inline bool isWanUp()
- {
- return WanUp;
- }
-
- void HandleNeighIpAddrAddEvt(ipacm_event_data_all *);
- void HandleNeighIpAddrDelEvt(uint32_t);
- void HandleSTAClientAddEvt(uint32_t);
- void HandleSTAClientDelEvt(uint32_t);
- int CreateConnTrackThreads(void);
-};
-
-extern IPACM_ConntrackListener *CtList;
-
-#endif /* IPACM_CONNTRACK_LISTENER */
diff --git a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Conntrack_NATApp.h b/data-ipa-cfg-mgr/ipacm/inc/IPACM_Conntrack_NATApp.h
deleted file mode 100644
index c3749e1..0000000
--- a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Conntrack_NATApp.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
-Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-#ifndef IPACM_CONNTRACK_NATAPP_H
-#define IPACM_CONNTRACK_NATAPP_H
-
-#include /* for stderror */
-#include
-#include /* for perror */
-
-#include "IPACM_Config.h"
-#include "IPACM_Xml.h"
-
-extern "C"
-{
-#include
-#include
-}
-
-#define MAX_TEMP_ENTRIES 25
-
-#define IPACM_TCP_FULL_FILE_NAME "/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established"
-#define IPACM_UDP_FULL_FILE_NAME "/proc/sys/net/ipv4/netfilter/ip_conntrack_udp_timeout_stream"
-
-typedef struct _nat_table_entry
-{
- uint32_t private_ip;
- uint16_t private_port;
-
- uint32_t target_ip;
- uint16_t target_port;
-
- uint32_t public_ip;
- uint16_t public_port;
-
- u_int8_t protocol;
- uint32_t timestamp;
-
- bool dst_nat;
- bool enabled;
- uint32_t rule_hdl;
-
-}nat_table_entry;
-
-#define CHK_TBL_HDL() if(nat_table_hdl == 0){ return -1; }
-
-class NatApp
-{
-private:
-
- static NatApp *pInstance;
-
- nat_table_entry *cache;
- nat_table_entry temp[MAX_TEMP_ENTRIES];
- uint32_t pub_ip_addr;
- uint32_t pub_ip_addr_pre;
- uint32_t nat_table_hdl;
-
- int curCnt, max_entries;
-
- ipacm_alg *pALGPorts;
- uint16_t nALGPort;
-
- uint32_t tcp_timeout;
- uint32_t udp_timeout;
-
- uint32_t PwrSaveIfs[IPA_MAX_NUM_WIFI_CLIENTS];
-
- struct nf_conntrack *ct;
- struct nfct_handle *ct_hdl;
-
- NatApp();
- int Init();
-
- void UpdateCTUdpTs(nat_table_entry *, uint32_t);
- bool ChkForDup(const nat_table_entry *);
- bool isAlgPort(uint8_t, uint16_t);
- void Reset();
- bool isPwrSaveIf(uint32_t);
- uint32_t GenerateMetdata(uint8_t mux_id);
-
-public:
- static NatApp* GetInstance();
-
- int AddTable(uint32_t, uint8_t mux_id);
- uint32_t GetTableHdl(uint32_t);
- int DeleteTable(uint32_t);
-
- int AddEntry(const nat_table_entry *);
- int DeleteEntry(const nat_table_entry *);
-
- void UpdateUDPTimeStamp();
-
- int UpdatePwrSaveIf(uint32_t);
- int ResetPwrSaveIf(uint32_t);
- int DelEntriesOnClntDiscon(uint32_t);
- int DelEntriesOnSTAClntDiscon(uint32_t);
-
- void Read_TcpUdp_Timeout(void);
-
- void AddTempEntry(const nat_table_entry *);
- void CacheEntry(const nat_table_entry *);
- void DeleteTempEntry(const nat_table_entry *);
- void FlushTempEntries(uint32_t, bool, bool isDummy = false);
-};
-
-
-
-#endif /* IPACM_CONNTRACK_NATAPP_H */
diff --git a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Defs.h b/data-ipa-cfg-mgr/ipacm/inc/IPACM_Defs.h
deleted file mode 100644
index 051184d..0000000
--- a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Defs.h
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
-Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*!
- @file
- IPACM_Defs.h
-
- @brief
- This file implements the common definitions amon all ifaces.
-
- @Author
- Skylar Chang
-
-*/
-#ifndef IPA_CM_DEFS_H
-#define IPA_CM_DEFS_H
-
-#include
-#include
-#include
-#include "IPACM_Log.h"
-
-#ifdef USE_GLIB
-#include
-#define strlcpy g_strlcpy
-#define strlcat g_strlcat
-#endif
-
-extern "C"
-{
-#include
-#include
-}
-
-#define IF_NAME_LEN 16
-#define IPA_MAX_FILE_LEN 64
-#define IPA_IFACE_NAME_LEN 16
-#define IPA_ALG_PROTOCOL_NAME_LEN 10
-
-#define IPA_WLAN_PARTIAL_HDR_OFFSET 0 // dst mac first then src mac
-#define IPA_ODU_PARTIAL_HDR_OFFSET 8 // dst mac first then src mac
-#define IPA_WLAN_PARTIAL_HDR_NAME_v4 "IEEE802_3_v4"
-#define IPA_WLAN_PARTIAL_HDR_NAME_v6 "IEEE802_3_v6"
-#define IPA_DUMMY_ETH_HDR_NAME_v6 "ETH_dummy_v6"
-#define IPA_WAN_PARTIAL_HDR_NAME_v4 "IEEE802_3_STA_v4"
-#define IPA_WAN_PARTIAL_HDR_NAME_v6 "IEEE802_3_STA_v6"
-#define IPA_ETH_HDR_NAME_v4 "IPACM_ETH_v4"
-#define IPA_ETH_HDR_NAME_v6 "IPACM_ETH_v6"
-#define IPA_ODU_HDR_NAME_v4 "IPACM_ODU_v4"
-#define IPA_ODU_HDR_NAME_v6 "IPACM_ODU_v6"
-
-
-#define IPA_MAX_IFACE_ENTRIES 20
-#define IPA_MAX_PRIVATE_SUBNET_ENTRIES 3
-#define IPA_MAX_ALG_ENTRIES 20
-#define IPA_MAX_RM_ENTRY 6
-
-#define IPV4_ADDR_LINKLOCAL 0xA9FE0000
-#define IPV4_ADDR_LINKLOCAL_MASK 0xFFFF0000
-
-#define V4_DEFAULT_ROUTE_TABLE_NAME "ipa_dflt_rt"
-#define V4_LAN_ROUTE_TABLE_NAME "COMRTBLLANv4"
-#define V4_WAN_ROUTE_TABLE_NAME "WANRTBLv4"
-#define WAN_DL_ROUTE_TABLE_NAME "ipa_dflt_wan_rt"
-#define V6_COMMON_ROUTE_TABLE_NAME "COMRTBLv6"
-#define V6_WAN_ROUTE_TABLE_NAME "WANRTBLv6"
-#define V4_ODU_ROUTE_TABLE_NAME "ODURTBLv4"
-#define V6_ODU_ROUTE_TABLE_NAME "ODURTBLv6"
-
-#define WWAN_QMI_IOCTL_DEVICE_NAME "/dev/wwan_ioctl"
-#define IPA_DEVICE_NAME "/dev/ipa"
-#define MAX_NUM_PROP 2
-
-#ifndef FEATURE_IPA_V3
-#define IPA_MAX_FLT_RULE 50
-#else
-#define IPA_MAX_FLT_RULE 100
-#endif
-
-#define TCP_FIN_SHIFT 16
-#define TCP_SYN_SHIFT 17
-#define TCP_RST_SHIFT 18
-#define NUM_IPV6_PREFIX_FLT_RULE 1
-
-/*---------------------------------------------------------------------------
- Return values indicating error status
----------------------------------------------------------------------------*/
-
-#define IPACM_SUCCESS 0 /* Successful operation */
-#define IPACM_FAILURE -1 /* Unsuccessful operation */
-
-#define IPACM_IP_NULL (ipa_ip_type)0xFF
-#define IPACM_INVALID_INDEX (ipa_ip_type)0xFF
-
-#define IPA_MAX_NUM_WIFI_CLIENTS 32
-#define IPA_MAX_NUM_WAN_CLIENTS 10
-#define IPA_MAX_NUM_ETH_CLIENTS 15
-#define IPA_MAX_NUM_AMPDU_RULE 15
-#define IPA_MAC_ADDR_SIZE 6
-
-/*===========================================================================
- GLOBAL DEFINITIONS AND DECLARATIONS
-===========================================================================*/
-typedef enum
-{
- IPA_CFG_CHANGE_EVENT, /* NULL */
- IPA_PRIVATE_SUBNET_CHANGE_EVENT, /* ipacm_event_data_fid */
- IPA_FIREWALL_CHANGE_EVENT, /* NULL */
- IPA_LINK_UP_EVENT, /* ipacm_event_data_fid */
- IPA_LINK_DOWN_EVENT, /* ipacm_event_data_fid */
- IPA_USB_LINK_UP_EVENT, /* ipacm_event_data_fid */
- IPA_BRIDGE_LINK_UP_EVENT, /* ipacm_event_data_all */
- IPA_WAN_EMBMS_LINK_UP_EVENT, /* ipacm_event_data_mac */
- IPA_ADDR_ADD_EVENT, /* ipacm_event_data_addr */
- IPA_ADDR_DEL_EVENT, /* no use */
- IPA_ROUTE_ADD_EVENT, /* ipacm_event_data_addr */
- IPA_ROUTE_DEL_EVENT, /* ipacm_event_data_addr */
- IPA_WAN_UPSTREAM_ROUTE_ADD_EVENT, /* ipacm_event_data_fid */
- IPA_WAN_UPSTREAM_ROUTE_DEL_EVENT, /* ipacm_event_data_fid */
- IPA_WLAN_AP_LINK_UP_EVENT, /* ipacm_event_data_mac */
- IPA_WLAN_STA_LINK_UP_EVENT, /* ipacm_event_data_mac */
- IPA_WLAN_LINK_DOWN_EVENT, /* ipacm_event_data_mac */
- IPA_WLAN_CLIENT_ADD_EVENT, /* ipacm_event_data_mac */
- IPA_WLAN_CLIENT_ADD_EVENT_EX, /* ipacm_event_data_wlan_ex */
- IPA_WLAN_CLIENT_DEL_EVENT, /* ipacm_event_data_mac */
- IPA_WLAN_CLIENT_POWER_SAVE_EVENT, /* ipacm_event_data_mac */
- IPA_WLAN_CLIENT_RECOVER_EVENT, /* ipacm_event_data_mac */
- IPA_NEW_NEIGH_EVENT, /* ipacm_event_data_all */
- IPA_DEL_NEIGH_EVENT, /* ipacm_event_data_all */
- IPA_NEIGH_CLIENT_IP_ADDR_ADD_EVENT, /* ipacm_event_data_all */
- IPA_NEIGH_CLIENT_IP_ADDR_DEL_EVENT, /* ipacm_event_data_all */
- IPA_SW_ROUTING_ENABLE, /* NULL */
- IPA_SW_ROUTING_DISABLE, /* NULL */
- IPA_PROCESS_CT_MESSAGE, /* ipacm_ct_evt_data */
- IPA_PROCESS_CT_MESSAGE_V6, /* ipacm_ct_evt_data */
- IPA_LAN_TO_LAN_NEW_CONNECTION, /* ipacm_event_connection */
- IPA_LAN_TO_LAN_DEL_CONNECTION, /* ipacm_event_connection */
- IPA_WLAN_SWITCH_TO_SCC, /* No Data */
- IPA_WLAN_SWITCH_TO_MCC, /* No Data */
- IPA_CRADLE_WAN_MODE_SWITCH, /* ipacm_event_cradle_wan_mode */
- IPA_WAN_XLAT_CONNECT_EVENT, /* ipacm_event_data_fid */
- IPA_TETHERING_STATS_UPDATE_EVENT, /* ipacm_event_data_fid */
- IPA_NETWORK_STATS_UPDATE_EVENT, /* ipacm_event_data_fid */
- IPA_DOWNSTREAM_ADD, /* ipacm_event_ipahal_stream */
- IPA_DOWNSTREAM_DEL, /* ipacm_event_ipahal_stream */
-
- IPA_EXTERNAL_EVENT_MAX,
-
- IPA_HANDLE_WAN_UP, /* ipacm_event_iface_up */
- IPA_HANDLE_WAN_DOWN, /* ipacm_event_iface_up */
- IPA_HANDLE_WAN_UP_V6, /* ipacm_event_iface_up */
- IPA_HANDLE_WAN_DOWN_V6, /* NULL */
- IPA_HANDLE_WAN_UP_TETHER, /* ipacm_event_iface_up_tehter */
- IPA_HANDLE_WAN_DOWN_TETHER, /* ipacm_event_iface_up_tehter */
- IPA_HANDLE_WAN_UP_V6_TETHER, /* ipacm_event_iface_up_tehter */
- IPA_HANDLE_WAN_DOWN_V6_TETHER, /* ipacm_event_iface_up_tehter */
- IPA_HANDLE_WLAN_UP, /* ipacm_event_iface_up */
- IPA_HANDLE_LAN_UP, /* ipacm_event_iface_up */
- IPA_ETH_BRIDGE_IFACE_UP, /* ipacm_event_eth_bridge*/
- IPA_ETH_BRIDGE_IFACE_DOWN, /* ipacm_event_eth_bridge*/
- IPA_ETH_BRIDGE_CLIENT_ADD, /* ipacm_event_eth_bridge */
- IPA_ETH_BRIDGE_CLIENT_DEL, /* ipacm_event_eth_bridge*/
- IPA_ETH_BRIDGE_WLAN_SCC_MCC_SWITCH, /* ipacm_event_eth_bridge*/
- IPA_SSR_NOTICE, /* NULL*/
-#ifdef FEATURE_L2TP
- IPA_ADD_VLAN_IFACE, /* ipa_ioc_vlan_iface_info */
- IPA_DEL_VLAN_IFACE, /* ipa_ioc_vlan_iface_info */
- IPA_ADD_L2TP_VLAN_MAPPING, /* ipa_ioc_l2tp_vlan_mapping_info */
- IPA_DEL_L2TP_VLAN_MAPPING, /* ipa_ioc_l2tp_vlan_mapping_info */
- IPA_HANDLE_VLAN_CLIENT_INFO, /* ipacm_event_data_all */
- IPA_HANDLE_VLAN_IFACE_INFO, /* ipacm_event_data_all */
-#endif
- IPA_WLAN_FWR_SSR_BEFORE_SHUTDOWN_NOTICE,
- IPA_LAN_DELETE_SELF, /* ipacm_event_data_fid */
- IPACM_EVENT_MAX
-} ipa_cm_event_id;
-
-typedef struct
-{
- uint8_t num_rule;
- uint32_t rule_hdl[MAX_NUM_PROP];
-} lan_to_lan_rt_rule_hdl;
-
-typedef enum
-{
- LAN_IF = 0,
- WLAN_IF,
- WAN_IF,
- VIRTUAL_IF,
- ETH_IF,
- EMBMS_IF,
- ODU_IF,
- UNKNOWN_IF
-} ipacm_iface_type;
-
-typedef enum
-{
- ROUTER = 0,
- BRIDGE
-} ipacm_cradle_iface_mode;
-
-typedef enum
-{
- FULL,
- INTERNET
-} ipacm_wlan_access_mode;
-
-typedef struct
-{
- struct nf_conntrack *ct;
- enum nf_conntrack_msg_type type;
-}ipacm_ct_evt_data;
-
-typedef struct
-{
- char iface_name[IPA_IFACE_NAME_LEN];
- ipacm_iface_type if_cat;
- ipacm_cradle_iface_mode if_mode;
- ipacm_wlan_access_mode wlan_mode;
- int netlink_interface_index;
-} ipa_ifi_dev_name_t;
-
-typedef struct
-{
- uint32_t subnet_addr;
- uint32_t subnet_mask;
-} ipa_private_subnet;
-
-
-typedef struct _ipacm_event_data_all
-{
- enum ipa_ip_type iptype;
- int if_index;
- uint32_t ipv4_addr;
- uint32_t ipv6_addr[4];
- uint8_t mac_addr[IPA_MAC_ADDR_SIZE];
- char iface_name[IPA_IFACE_NAME_LEN];
-} ipacm_event_data_all;
-
-class IPACM_Lan;
-
-typedef struct
-{
- ipacm_cradle_iface_mode cradle_wan_mode;
-} ipacm_event_cradle_wan_mode;
-
-typedef struct
-{
- IPACM_Lan *p_iface;
- ipa_ip_type iptype;
- uint8_t mac_addr[6];
- char iface_name[IPA_IFACE_NAME_LEN];
-} ipacm_event_eth_bridge;
-
-typedef struct
-{
- enum ipa_ip_type iptype;
- uint32_t src_ipv4_addr;
- uint32_t dst_ipv4_addr;
- uint32_t src_ipv6_addr[4];
- uint32_t dst_ipv6_addr[4];
-} ipacm_event_connection;
-
-typedef struct _ipacm_event_data_fid
-{
- int if_index;
-} ipacm_event_data_fid;
-
-typedef struct
-{
- ipacm_iface_type if_cat;
-} ipacm_event_data_if_cat;
-
-typedef struct _ipacm_event_data_iptype
-{
- int if_index;
- int if_index_tether;
- enum ipa_ip_type iptype;
-#ifdef IPA_WAN_MSG_IPv6_ADDR_GW_LEN
- uint32_t ipv4_addr_gw;
- uint32_t ipv6_addr_gw[4];
-#endif
-} ipacm_event_data_iptype;
-
-
-typedef struct _ipacm_event_data_addr
-{
- enum ipa_ip_type iptype;
- char iface_name[IPA_IFACE_NAME_LEN];
- int if_index;
- uint32_t ipv4_addr_gw;
- uint32_t ipv4_addr;
- uint32_t ipv4_addr_mask;
- uint32_t ipv6_addr[4];
- uint32_t ipv6_addr_mask[4];
- uint32_t ipv6_addr_gw[4];
-} ipacm_event_data_addr;
-
-typedef struct _ipacm_event_data_mac
-{
- int if_index;
- int ipa_if_cate;
- uint8_t mac_addr[IPA_MAC_ADDR_SIZE];
-} ipacm_event_data_mac;
-
-typedef struct
-{
- int if_index;
- uint8_t num_of_attribs;
- struct ipa_wlan_hdr_attrib_val attribs[0];
-} ipacm_event_data_wlan_ex;
-
-typedef struct _ipacm_event_iface_up
-{
- char ifname[IPA_IFACE_NAME_LEN];
- uint32_t ipv4_addr;
- uint32_t addr_mask;
- uint32_t ipv6_prefix[2];
- bool is_sta;
- uint8_t xlat_mux_id;
- uint8_t mux_id;
-}ipacm_event_iface_up;
-
-typedef struct _ipacm_event_iface_up_tether
-{
- uint32_t if_index_tether;
- uint32_t ipv6_prefix[2];
- bool is_sta;
-}ipacm_event_iface_up_tehter;
-
-typedef enum
-{
- Q6_WAN = 0,
- WLAN_WAN,
- ECM_WAN
-} ipacm_wan_iface_type;
-
-typedef struct _ipacm_ifacemgr_data
-{
- int if_index;
- ipacm_wan_iface_type if_type;
- uint8_t mac_addr[IPA_MAC_ADDR_SIZE];
-}ipacm_ifacemgr_data;
-
-typedef struct _ipacm_offload_prefix {
- enum ipa_ip_type iptype;
- uint32_t v4Addr;
- uint32_t v4Mask;
- uint32_t v6Addr[4];
- uint32_t v6Mask[4];
-} ipacm_offload_prefix;
-
-typedef struct {
- int if_index;
- _ipacm_offload_prefix prefix;
-} ipacm_event_ipahal_stream;
-
-#endif /* IPA_CM_DEFS_H */
diff --git a/data-ipa-cfg-mgr/ipacm/inc/IPACM_EvtDispatcher.h b/data-ipa-cfg-mgr/ipacm/inc/IPACM_EvtDispatcher.h
deleted file mode 100644
index 550f4d4..0000000
--- a/data-ipa-cfg-mgr/ipacm/inc/IPACM_EvtDispatcher.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
-Copyright (c) 2013, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*!
- @file
- IPACM_EvtDispatcher.h
-
- @brief
- This file implements the IPAM event dispatcher definitions
-
- @Author
-
-*/
-#ifndef IPACM_EvtDispatcher_H
-#define IPACM_EvtDispatcher_H
-
-#include
-#include
-#include "IPACM_Defs.h"
-#include "IPACM_Listener.h"
-
-/* queue */
-typedef struct _cmd_evts
-{
- ipa_cm_event_id event;
- IPACM_Listener *obj;
- //int ipa_interface_index;
- _cmd_evts *next;
-} cmd_evts;
-
-
-
-class IPACM_EvtDispatcher
-{
-public:
-
- /* api for all iface instances to register events */
- static int registr(ipa_cm_event_id event, IPACM_Listener *obj);
-
- /* api for all iface instances to de-register events */
- static int deregistr(IPACM_Listener *obj);
-
- static int PostEvt(ipacm_cmd_q_data *);
- static void ProcessEvt(ipacm_cmd_q_data *);
-
-private:
- static cmd_evts *head;
-};
-
-#endif /* IPACM_EvtDispatcher_H */
diff --git a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Filtering.h b/data-ipa-cfg-mgr/ipacm/inc/IPACM_Filtering.h
deleted file mode 100644
index 9bb8247..0000000
--- a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Filtering.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
-Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*!
- @file
- IPACM_Filtering.h
-
- @brief
- This file implements the IPACM filtering definitions
-
- @Author
- Skylar Chang
-
-*/
-
-#ifndef IPACM_FILTERING_H
-#define IPACM_FILTERING_H
-
-#include
-#include
-#include
-#include
-
-class IPACM_Filtering
-{
-public:
- IPACM_Filtering();
- ~IPACM_Filtering();
- bool AddFilteringRule(struct ipa_ioc_add_flt_rule const *ruleTable);
- bool AddFilteringRuleAfter(struct ipa_ioc_add_flt_rule_after const *ruleTable);
- bool DeleteFilteringRule(struct ipa_ioc_del_flt_rule *ruleTable);
- bool Commit(enum ipa_ip_type ip);
- bool Reset(enum ipa_ip_type ip);
- bool DeviceNodeIsOpened();
- bool DeleteFilteringHdls(uint32_t *flt_rule_hdls,
- ipa_ip_type ip,
- uint8_t num_rules);
-
- bool AddWanDLFilteringRule(struct ipa_ioc_add_flt_rule const *rule_table_v4, struct ipa_ioc_add_flt_rule const * rule_table_v6, uint8_t mux_id);
- bool SendFilteringRuleIndex(struct ipa_fltr_installed_notif_req_msg_v01* table);
- bool ModifyFilteringRule(struct ipa_ioc_mdfy_flt_rule* ruleTable);
- ipa_filter_action_enum_v01 GetQmiFilterAction(ipa_flt_action action);
-
-private:
- static const char *DEVICE_NAME;
- int fd; /* File descriptor of the IPA device node /dev/ipa */
-};
-
-#endif //IPACM_FILTERING_H
-
diff --git a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Header.h b/data-ipa-cfg-mgr/ipacm/inc/IPACM_Header.h
deleted file mode 100644
index 027c8ff..0000000
--- a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Header.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
-Copyright (c) 2013, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- * IPACM_Header.h
- *
- * Created on: Jun 20, 2012
- * Author: tatias
- */
-
-//////////////////////////////////////////////////////////////////////////////////
-
-#ifndef IPACM_HEADER_H
-#define IPACM_HEADER_H
-
-#include
-#include "linux/msm_ipa.h"
-
-//////////////////////////////////////////////////////////////////////////////////
-
-class IPACM_Header
-{
-private:
- int m_fd;
-public:
- bool AddHeader(struct ipa_ioc_add_hdr *pHeaderTable);
- bool DeleteHeader(struct ipa_ioc_del_hdr *pHeaderTable);
- bool GetHeaderHandle(struct ipa_ioc_get_hdr *pHeaderStruct);
- bool CopyHeader(struct ipa_ioc_copy_hdr *pCopyHeaderStruct);
- bool Commit();
- bool Reset();
- bool DeleteHeaderHdl(uint32_t hdr_hdl);
- bool AddHeaderProcCtx(struct ipa_ioc_add_hdr_proc_ctx* pHeader);
- bool DeleteHeaderProcCtx(uint32_t hdl);
-
- IPACM_Header();
- ~IPACM_Header();
- bool DeviceNodeIsOpened();
-};
-
-
-#endif
-
-
diff --git a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Iface.h b/data-ipa-cfg-mgr/ipacm/inc/IPACM_Iface.h
deleted file mode 100644
index a562613..0000000
--- a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Iface.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
-Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*!
- @file
- IPACM_iface.h
-
- @brief
- This file implements the basis Iface definitions.
-
- @Author
- Skylar Chang
-
-*/
-#ifndef IPACM_IFACE_H
-#define IPACM_IFACE_H
-
-#include
-#include
-#include
-#include "IPACM_Routing.h"
-#include "IPACM_Filtering.h"
-#include "IPACM_Header.h"
-#include "IPACM_EvtDispatcher.h"
-#include "IPACM_Xml.h"
-#include "IPACM_Log.h"
-#include "IPACM_Config.h"
-#include "IPACM_Defs.h"
-#include
-
-/* current support 2 ipv6-address*/
-#define MAX_DEFAULT_v4_ROUTE_RULES 1
-#define MAX_DEFAULT_v6_ROUTE_RULES 2
-#define IPV4_DEFAULT_FILTERTING_RULES 3
-
-#ifdef FEATURE_IPA_ANDROID
-#define IPV6_DEFAULT_FILTERTING_RULES 8
-#else
-#define IPV6_DEFAULT_FILTERTING_RULES 4
-#endif
-
-#define IPV6_DEFAULT_LAN_FILTERTING_RULES 1
-#define IPV6_NUM_ADDR 3
-#define MAX_SOFTWAREROUTING_FILTERTING_RULES 2
-#define INVALID_IFACE -1
-
-/* iface */
-class IPACM_Iface :public IPACM_Listener
-{
-public:
-
- /* Static class for reading IPACM configuration from XML file*/
- static IPACM_Config *ipacmcfg;
-
- /* IPACM interface id */
- int ipa_if_num;
-
- /* IPACM interface category */
- ipacm_iface_type ipa_if_cate;
-
- /* IPACM interface name */
- char dev_name[IF_NAME_LEN];
-
- /* IPACM interface iptype v4, v6 or both */
- ipa_ip_type ip_type;
-
- /* IPACM interface v6 ip-address*/
- uint32_t ipv6_addr[MAX_DEFAULT_v6_ROUTE_RULES][4];
-
- uint32_t software_routing_fl_rule_hdl[MAX_SOFTWAREROUTING_FILTERTING_RULES];
-
- bool softwarerouting_act;
-
- /* IPACM number of default route rules for ipv6*/
- uint32_t num_dft_rt_v6;
-
- uint32_t dft_v4fl_rule_hdl[IPV4_DEFAULT_FILTERTING_RULES];
- uint32_t dft_v6fl_rule_hdl[IPV6_DEFAULT_FILTERTING_RULES + IPV6_DEFAULT_LAN_FILTERTING_RULES];
- /* create additional set of v6 RT-rules in Wanv6RT table*/
- uint32_t dft_rt_rule_hdl[MAX_DEFAULT_v4_ROUTE_RULES+2*MAX_DEFAULT_v6_ROUTE_RULES];
-
- ipa_ioc_query_intf *iface_query;
- ipa_ioc_query_intf_tx_props *tx_prop;
- ipa_ioc_query_intf_rx_props *rx_prop;
-
- virtual int handle_down_evt() = 0;
-
- virtual int handle_addr_evt(ipacm_event_data_addr *data) = 0;
-
- IPACM_Iface(int iface_index);
-
- virtual void event_callback(ipa_cm_event_id event,
- void *data) = 0;
-
- /* Query ipa_interface_index by given linux interface_index */
- static int iface_ipa_index_query(int interface_index);
-
- /* Query ipa_interface ipv4_addr by given linux interface_index */
- static void iface_addr_query(int interface_index);
-
- /*Query the IPA endpoint property */
- int query_iface_property(void);
-
- /*Configure the initial filter rules */
- virtual int init_fl_rule(ipa_ip_type iptype);
-
- /* Change IP Type.*/
- void config_ip_type(ipa_ip_type iptype);
-
- /* Get interface index */
- virtual int ipa_get_if_index(char * if_name, int * if_index);
-
- static IPACM_Routing m_routing;
- static IPACM_Filtering m_filtering;
- static IPACM_Header m_header;
-
- /* software routing enable */
- virtual int handle_software_routing_enable(void);
-
- /* software routing disable */
- virtual int handle_software_routing_disable(void);
- void delete_iface(void);
-
-private:
-
- static const char *DEVICE_NAME;
-};
-
-#endif /* IPACM_IFACE_H */
diff --git a/data-ipa-cfg-mgr/ipacm/inc/IPACM_IfaceManager.h b/data-ipa-cfg-mgr/ipacm/inc/IPACM_IfaceManager.h
deleted file mode 100644
index c7184f2..0000000
--- a/data-ipa-cfg-mgr/ipacm/inc/IPACM_IfaceManager.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
-Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*!
- @file
- IPACM_IfaceManager.h
-
- @brief
- This file implements the IPAM iface_manager definitions
-
- @Author
- Skylar Chang
-
-*/
-#ifndef IPACM_IFACEMANAGER_H
-#define IPACM_IFACEMANAGER_H
-
-#include
-#include
-
-#include "IPACM_Routing.h"
-#include "IPACM_Filtering.h"
-#include "IPACM_Listener.h"
-#include "IPACM_Iface.h"
-
-#define IPA_INSTANCE_NOT_FOUND 0
-#define IPA_INSTANCE_FOUND 1
-
-/* queue */
-typedef struct _iface_instances
-{
- /* Linux interface id */
- int ipa_if_index;
- IPACM_Listener *obj;
- _iface_instances *next;
-} iface_instances;
-
-
-class IPACM_IfaceManager : public IPACM_Listener
-{
-
-public:
-
- IPACM_IfaceManager();
-
- void event_callback(ipa_cm_event_id event,
- void *data);
-
- /* api for all iface instances to de-register instances */
- static int deregistr(IPACM_Listener *param);
-
-
-private:
- int create_iface_instance(ipacm_ifacemgr_data *);
-
- /* api to register instances */
- int registr(int ipa_if_index, IPACM_Listener *obj);
-
- int SearchInstance(int ipa_if_index);
-
- static iface_instances *head;
-
-};
-
-#endif /* IPACM_IFACEMANAGER_H */
diff --git a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Lan.h b/data-ipa-cfg-mgr/ipacm/inc/IPACM_Lan.h
deleted file mode 100644
index 03219c5..0000000
--- a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Lan.h
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
-Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*!
- @file
- IPACM_Lan.h
-
- @brief
- This file implements the LAN iface definitions
-
- @Author
- Skylar Chang
-
-*/
-#ifndef IPACM_LAN_H
-#define IPACM_LAN_H
-
-#include
-#include
-
-#include "IPACM_CmdQueue.h"
-#include "IPACM_Iface.h"
-#include "IPACM_Routing.h"
-#include "IPACM_Filtering.h"
-#include "IPACM_Config.h"
-#include "IPACM_Conntrack_NATApp.h"
-
-#define IPA_WAN_DEFAULT_FILTER_RULE_HANDLES 1
-#define IPA_PRIV_SUBNET_FILTER_RULE_HANDLES 3
-#define IPA_NUM_ODU_ROUTE_RULES 2
-#define MAX_WAN_UL_FILTER_RULES MAX_NUM_EXT_PROPS
-#define NUM_IPV4_ICMP_FLT_RULE 1
-#define NUM_IPV6_ICMP_FLT_RULE 1
-
-/* ndc bandwidth ipatetherstats */
-/* out_bytes> out_pkts> in_bytes> in_pkts */
-
-#define PIPE_STATS "%s %s %llu %llu %llu %llu"
-#define IPA_PIPE_STATS_FILE_NAME "/data/misc/ipa/tether_stats"
-
-/* store each lan-iface unicast routing rule and its handler*/
-struct ipa_lan_rt_rule
-{
- ipa_ip_type ip;
- uint32_t v4_addr;
- uint32_t v4_addr_mask;
- uint32_t v6_addr[4];
- uint32_t rt_rule_hdl[0];
-};
-
-/* Support multiple eth client */
-typedef struct _eth_client_rt_hdl
-{
- uint32_t eth_rt_rule_hdl_v4;
- uint32_t eth_rt_rule_hdl_v6[IPV6_NUM_ADDR];
- uint32_t eth_rt_rule_hdl_v6_wan[IPV6_NUM_ADDR];
-}eth_client_rt_hdl;
-
-typedef struct _ipa_eth_client
-{
- uint8_t mac[IPA_MAC_ADDR_SIZE];
- uint32_t v4_addr;
- uint32_t v6_addr[IPV6_NUM_ADDR][4];
- uint32_t hdr_hdl_v4;
- uint32_t hdr_hdl_v6;
- bool route_rule_set_v4;
- int route_rule_set_v6;
- bool ipv4_set;
- int ipv6_set;
- bool ipv4_header_set;
- bool ipv6_header_set;
- eth_client_rt_hdl eth_rt_hdl[0]; /* depends on number of tx properties */
-}ipa_eth_client;
-
-
-/* lan iface */
-class IPACM_Lan : public IPACM_Iface
-{
-public:
-
- IPACM_Lan(int iface_index);
- ~IPACM_Lan();
-
- /* store lan's wan-up filter rule handlers */
- uint32_t lan_wan_fl_rule_hdl[IPA_WAN_DEFAULT_FILTER_RULE_HANDLES];
-
- /* store private-subnet filter rule handlers */
- uint32_t private_fl_rule_hdl[IPA_MAX_PRIVATE_SUBNET_ENTRIES];
-
- /* LAN-iface's callback function */
- void event_callback(ipa_cm_event_id event, void *data);
-
- virtual int handle_wan_up(ipa_ip_type ip_type);
-
- /* configure filter rule for wan_up event*/
- virtual int handle_wan_up_ex(ipacm_ext_prop* ext_prop, ipa_ip_type iptype, uint8_t xlat_mux_id);
-
- /* delete filter rule for wan_down event*/
- virtual int handle_wan_down(bool is_sta_mode);
-
- /* delete filter rule for wan_down event*/
- virtual int handle_wan_down_v6(bool is_sta_mode);
-
- /* configure private subnet filter rules*/
- virtual int handle_private_subnet(ipa_ip_type iptype);
-
- /* handle new_address event*/
- int handle_addr_evt(ipacm_event_data_addr *data);
-
- int handle_addr_evt_odu_bridge(ipacm_event_data_addr* data);
-
- int handle_del_ipv6_addr(ipacm_event_data_all *data);
-
- static bool odu_up;
-
- /* install UL filter rule from Q6 */
- virtual int handle_uplink_filter_rule(ipacm_ext_prop* prop, ipa_ip_type iptype, uint8_t xlat_mux_id);
-
- int handle_cradle_wan_mode_switch(bool is_wan_bridge_mode);
-
- int install_ipv4_icmp_flt_rule();
-
-
- /* add header processing context and return handle to lan2lan controller */
- int eth_bridge_add_hdr_proc_ctx(ipa_hdr_l2_type peer_l2_hdr_type, uint32_t *hdl);
-
- /* add routing rule and return handle to lan2lan controller */
- int eth_bridge_add_rt_rule(uint8_t *mac, char *rt_tbl_name, uint32_t hdr_proc_ctx_hdl,
- ipa_hdr_l2_type peer_l2_hdr_type, ipa_ip_type iptype, uint32_t *rt_rule_hdl, int *rt_rule_count);
-
- /* modify routing rule*/
- int eth_bridge_modify_rt_rule(uint8_t *mac, uint32_t hdr_proc_ctx_hdl,
- ipa_hdr_l2_type peer_l2_hdr_type, ipa_ip_type iptype, uint32_t *rt_rule_hdl, int rt_rule_count);
-
- /* add filtering rule and return handle to lan2lan controller */
- int eth_bridge_add_flt_rule(uint8_t *mac, uint32_t rt_tbl_hdl, ipa_ip_type iptype, uint32_t *flt_rule_hdl);
-
- /* delete filtering rule */
- int eth_bridge_del_flt_rule(uint32_t flt_rule_hdl, ipa_ip_type iptype);
-
- /* delete routing rule */
- int eth_bridge_del_rt_rule(uint32_t rt_rule_hdl, ipa_ip_type iptype);
-
- /* delete header processing context */
- int eth_bridge_del_hdr_proc_ctx(uint32_t hdr_proc_ctx_hdl);
-
-#ifdef FEATURE_L2TP
- /* add l2tp rt rule for l2tp client */
- int add_l2tp_rt_rule(ipa_ip_type iptype, uint8_t *dst_mac, ipa_hdr_l2_type peer_l2_hdr_type,
- uint32_t l2tp_session_id, uint32_t vlan_id, uint8_t *vlan_client_mac, uint32_t *vlan_iface_ipv6_addr,
- uint32_t *vlan_client_ipv6_addr, uint32_t *first_pass_hdr_hdl, uint32_t *first_pass_hdr_proc_ctx_hdl,
- uint32_t *second_pass_hdr_hdl, int *num_rt_hdl, uint32_t *first_pass_rt_rule_hdl, uint32_t *second_pass_rt_rule_hdl);
-
- /* delete l2tp rt rule for l2tp client */
- int del_l2tp_rt_rule(ipa_ip_type iptype, uint32_t first_pass_hdr_hdl, uint32_t first_pass_hdr_proc_ctx_hdl,
- uint32_t second_pass_hdr_hdl, int num_rt_hdl, uint32_t *first_pass_rt_rule_hdl, uint32_t *second_pass_rt_rule_hdl);
-
- /* add l2tp rt rule for non l2tp client */
- int add_l2tp_rt_rule(ipa_ip_type iptype, uint8_t *dst_mac, uint32_t *hdr_proc_ctx_hdl,
- int *num_rt_hdl, uint32_t *rt_rule_hdl);
-
- /* delete l2tp rt rule for non l2tp client */
- int del_l2tp_rt_rule(ipa_ip_type iptype, int num_rt_hdl, uint32_t *rt_rule_hdl);
-
- /* add l2tp flt rule on l2tp interface */
- int add_l2tp_flt_rule(uint8_t *dst_mac, uint32_t *flt_rule_hdl);
-
- /* delete l2tp flt rule on l2tp interface */
- int del_l2tp_flt_rule(uint32_t flt_rule_hdl);
-
- /* add l2tp flt rule on non l2tp interface */
- int add_l2tp_flt_rule(ipa_ip_type iptype, uint8_t *dst_mac, uint32_t *vlan_client_ipv6_addr,
- uint32_t *first_pass_flt_rule_hdl, uint32_t *second_pass_flt_rule_hdl);
-
- /* delete l2tp flt rule on non l2tp interface */
- int del_l2tp_flt_rule(ipa_ip_type iptype, uint32_t first_pass_flt_rule_hdl, uint32_t second_pass_flt_rule_hdl);
-#endif
-
-protected:
-
- int each_client_rt_rule_count[IPA_IP_MAX];
-
- uint32_t eth_bridge_flt_rule_offset[IPA_IP_MAX];
-
- /* mac address has to be provided for client related events */
- void eth_bridge_post_event(ipa_cm_event_id evt, ipa_ip_type iptype, uint8_t *mac,
- uint32_t *ipv6_addr, char *iface_name);
-
-#ifdef FEATURE_L2TP
- /* check if the event is associated with vlan interface */
- bool is_vlan_event(char *event_iface_name);
- /* check if the event is associated with l2tp interface */
- bool is_l2tp_event(char *event_iface_name);
-
- /* check if the IPv6 address is unique local address */
- bool is_unique_local_ipv6_addr(uint32_t *ipv6_addr);
-
-#endif
- virtual int add_dummy_private_subnet_flt_rule(ipa_ip_type iptype);
-
- int handle_private_subnet_android(ipa_ip_type iptype);
-
- int reset_to_dummy_flt_rule(ipa_ip_type iptype, uint32_t rule_hdl);
-
- virtual int install_ipv6_prefix_flt_rule(uint32_t* prefix);
-
- virtual void delete_ipv6_prefix_flt_rule();
-
- int install_ipv6_icmp_flt_rule();
-
- void post_del_self_evt();
-
- /* handle tethering stats */
- int handle_tethering_stats_event(ipa_get_data_stats_resp_msg_v01 *data);
-
- /* handle tethering client */
- int handle_tethering_client(bool reset, ipacm_client_enum ipa_client);
-
- /* add tcp syn flt rule */
- int add_tcp_syn_flt_rule(ipa_ip_type iptype);
-
- /* add tcp syn flt rule for l2tp interface*/
- int add_tcp_syn_flt_rule_l2tp(ipa_ip_type inner_ip_type);
-
- /* store ipv4 UL filter rule handlers from Q6*/
- uint32_t wan_ul_fl_rule_hdl_v4[MAX_WAN_UL_FILTER_RULES];
-
- /* store ipv6 UL filter rule handlers from Q6*/
- uint32_t wan_ul_fl_rule_hdl_v6[MAX_WAN_UL_FILTER_RULES];
-
- uint32_t ipv4_icmp_flt_rule_hdl[NUM_IPV4_ICMP_FLT_RULE];
-
- uint32_t ipv6_prefix_flt_rule_hdl[NUM_IPV6_PREFIX_FLT_RULE];
- uint32_t ipv6_icmp_flt_rule_hdl[NUM_IPV6_ICMP_FLT_RULE];
-
- int num_wan_ul_fl_rule_v4;
- int num_wan_ul_fl_rule_v6;
-
- bool is_active;
- bool modem_ul_v4_set;
- uint8_t v4_mux_id;
- bool modem_ul_v6_set;
- uint8_t v6_mux_id;
-
- bool sta_ul_v4_set;
- bool sta_ul_v6_set;
-
- uint32_t if_ipv4_subnet;
-
- uint32_t ipv6_prefix[2];
-
- bool is_upstream_set[IPA_IP_MAX];
- bool is_downstream_set[IPA_IP_MAX];
- _ipacm_offload_prefix prefix[IPA_IP_MAX];
-
- uint32_t tcp_syn_flt_rule_hdl[IPA_IP_MAX];
-
-private:
-
- /* get hdr proc ctx type given source and destination l2 hdr type */
- ipa_hdr_proc_type eth_bridge_get_hdr_proc_type(ipa_hdr_l2_type t1, ipa_hdr_l2_type t2);
-
- /* get partial header (header template of hdr proc ctx) */
- int eth_bridge_get_hdr_template_hdl(uint32_t* hdr_hdl);
-
-
- /* dynamically allocate lan iface's unicast routing rule structure */
-
- bool is_mode_switch; /* indicate mode switch, need post internal up event */
-
- int eth_client_len;
-
- ipa_eth_client *eth_client;
-
- int header_name_count;
-
- uint32_t num_eth_client;
-
- NatApp *Nat_App;
-
- int ipv6_set;
-
- uint32_t ODU_hdr_hdl_v4, ODU_hdr_hdl_v6;
-
- uint32_t *odu_route_rule_v4_hdl;
-
- uint32_t *odu_route_rule_v6_hdl;
-
- bool ipv4_header_set;
-
- bool ipv6_header_set;
-
- inline ipa_eth_client* get_client_memptr(ipa_eth_client *param, int cnt)
- {
- char *ret = ((char *)param) + (eth_client_len * cnt);
- return (ipa_eth_client *)ret;
- }
-
- inline int get_eth_client_index(uint8_t *mac_addr)
- {
- int cnt;
- int num_eth_client_tmp = num_eth_client;
-
- IPACMDBG_H("Passed MAC %02x:%02x:%02x:%02x:%02x:%02x\n",
- mac_addr[0], mac_addr[1], mac_addr[2],
- mac_addr[3], mac_addr[4], mac_addr[5]);
-
- for(cnt = 0; cnt < num_eth_client_tmp; cnt++)
- {
- IPACMDBG_H("stored MAC %02x:%02x:%02x:%02x:%02x:%02x\n",
- get_client_memptr(eth_client, cnt)->mac[0],
- get_client_memptr(eth_client, cnt)->mac[1],
- get_client_memptr(eth_client, cnt)->mac[2],
- get_client_memptr(eth_client, cnt)->mac[3],
- get_client_memptr(eth_client, cnt)->mac[4],
- get_client_memptr(eth_client, cnt)->mac[5]);
-
- if(memcmp(get_client_memptr(eth_client, cnt)->mac,
- mac_addr,
- sizeof(get_client_memptr(eth_client, cnt)->mac)) == 0)
- {
- IPACMDBG_H("Matched client index: %d\n", cnt);
- return cnt;
- }
- }
-
- return IPACM_INVALID_INDEX;
- }
-
- inline int delete_eth_rtrules(int clt_indx, ipa_ip_type iptype)
- {
- uint32_t tx_index;
- uint32_t rt_hdl;
- int num_v6;
-
- if(iptype == IPA_IP_v4)
- {
- for(tx_index = 0; tx_index < iface_query->num_tx_props; tx_index++)
- {
- if((tx_prop->tx[tx_index].ip == IPA_IP_v4) && (get_client_memptr(eth_client, clt_indx)->route_rule_set_v4==true)) /* for ipv4 */
- {
- IPACMDBG_H("Delete client index %d ipv4 RT-rules for tx:%d\n",clt_indx,tx_index);
- rt_hdl = get_client_memptr(eth_client, clt_indx)->eth_rt_hdl[tx_index].eth_rt_rule_hdl_v4;
-
- if(m_routing.DeleteRoutingHdl(rt_hdl, IPA_IP_v4) == false)
- {
- return IPACM_FAILURE;
- }
- }
- } /* end of for loop */
-
- /* clean the ipv4 RT rules for eth-client:clt_indx */
- if(get_client_memptr(eth_client, clt_indx)->route_rule_set_v4==true) /* for ipv4 */
- {
- get_client_memptr(eth_client, clt_indx)->route_rule_set_v4 = false;
- }
- }
-
- if(iptype == IPA_IP_v6)
- {
- for(tx_index = 0; tx_index < iface_query->num_tx_props; tx_index++)
- {
- if((tx_prop->tx[tx_index].ip == IPA_IP_v6) && (get_client_memptr(eth_client, clt_indx)->route_rule_set_v6 != 0)) /* for ipv6 */
- {
- for(num_v6 =0;num_v6 < get_client_memptr(eth_client, clt_indx)->route_rule_set_v6;num_v6++)
- {
- IPACMDBG_H("Delete client index %d ipv6 RT-rules for %d-st ipv6 for tx:%d\n", clt_indx,num_v6,tx_index);
- rt_hdl = get_client_memptr(eth_client, clt_indx)->eth_rt_hdl[tx_index].eth_rt_rule_hdl_v6[num_v6];
- if(m_routing.DeleteRoutingHdl(rt_hdl, IPA_IP_v6) == false)
- {
- return IPACM_FAILURE;
- }
-
- rt_hdl = get_client_memptr(eth_client, clt_indx)->eth_rt_hdl[tx_index].eth_rt_rule_hdl_v6_wan[num_v6];
- if(m_routing.DeleteRoutingHdl(rt_hdl, IPA_IP_v6) == false)
- {
- return IPACM_FAILURE;
- }
- }
- }
- } /* end of for loop */
-
- /* clean the ipv6 RT rules for eth-client:clt_indx */
- if(get_client_memptr(eth_client, clt_indx)->route_rule_set_v6 != 0) /* for ipv6 */
- {
- get_client_memptr(eth_client, clt_indx)->route_rule_set_v6 = 0;
- }
- }
-
- return IPACM_SUCCESS;
- }
-
- /* handle eth client initial, construct full headers (tx property) */
- int handle_eth_hdr_init(uint8_t *mac_addr);
-
- /* handle eth client ip-address */
- int handle_eth_client_ipaddr(ipacm_event_data_all *data);
-
- /* handle eth client routing rule*/
- int handle_eth_client_route_rule(uint8_t *mac_addr, ipa_ip_type iptype);
-
- /*handle eth client del mode*/
- int handle_eth_client_down_evt(uint8_t *mac_addr);
-
- /* handle odu client initial, construct full headers (tx property) */
- int handle_odu_hdr_init(uint8_t *mac_addr);
-
- /* handle odu default route rule configuration */
- int handle_odu_route_add();
-
- /* handle odu default route rule deletion */
- int handle_odu_route_del();
-
- /*handle lan iface down event*/
- int handle_down_evt();
-
- /*handle reset usb-client rt-rules */
- int handle_lan_client_reset_rt(ipa_ip_type iptype);
-};
-
-#endif /* IPACM_LAN_H */
diff --git a/data-ipa-cfg-mgr/ipacm/inc/IPACM_LanToLan.h b/data-ipa-cfg-mgr/ipacm/inc/IPACM_LanToLan.h
deleted file mode 100644
index e517e97..0000000
--- a/data-ipa-cfg-mgr/ipacm/inc/IPACM_LanToLan.h
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
-Copyright (c) 2014-2017, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
- * IPACM_LanToLan.h
- *
- * Created on: Mar 4th, 2014
- * Author: Shihuan Liu
- */
-
-#ifndef IPACM_LANTOLAN_H
-#define IPACM_LANTOLAN_H
-
-#include
-#include "linux/msm_ipa.h"
-#include "IPACM_Iface.h"
-#include "IPACM_Defs.h"
-#include "IPACM_Lan.h"
-
-#ifdef FEATURE_IPA_ANDROID
-#include
-#else/* defined(FEATURE_IPA_ANDROID) */
-#include
-#endif /* ndefined(FEATURE_IPA_ANDROID)*/
-
-#define MAX_NUM_CACHED_CLIENT_ADD_EVENT 10
-#define MAX_NUM_IFACE 10
-#define MAX_NUM_CLIENT 16
-
-struct vlan_iface_info
-{
- char vlan_iface_name[IPA_RESOURCE_NAME_MAX];
- uint8_t vlan_id;
- uint32_t vlan_iface_ipv6_addr[4];
- uint8_t vlan_client_mac[6];
- uint32_t vlan_client_ipv6_addr[4];
-};
-
-struct l2tp_vlan_mapping_info
-{
- /* the following are l2tp iface info (name, session id) */
- char l2tp_iface_name[IPA_RESOURCE_NAME_MAX];
- uint8_t l2tp_session_id;
- /* the following are mdm vlan iface info (name, vlan id, ipv6 addr) */
- char vlan_iface_name[IPA_RESOURCE_NAME_MAX];
- uint8_t vlan_id;
- uint32_t vlan_iface_ipv6_addr[4];
- /* the following are MIB3 vlan client info (mac, ipv6 addr) */
- uint8_t vlan_client_mac[6];
- uint32_t vlan_client_ipv6_addr[4];
- /* the following is MIB3 l2tp client info (mac) */
- uint8_t l2tp_client_mac[6];
-};
-
-struct rt_rule_info
-{
- int num_hdl[IPA_IP_MAX]; /* one client may need more than one routing rules on the same routing table depending on tx_prop */
- uint32_t rule_hdl[IPA_IP_MAX][MAX_NUM_PROP];
-};
-
-struct l2tp_rt_rule_info
-{
- uint32_t first_pass_hdr_hdl; /* first pass hdr template (IPv4 and IPv6 use the same hdr template) */
- uint32_t first_pass_hdr_proc_ctx_hdl[IPA_IP_MAX]; /* first pass hdr proc ctx */
- uint32_t second_pass_hdr_hdl; /* second pass hdr template (IPv4 and IPv6 use the same hdr template) */
- int num_rt_hdl[IPA_IP_MAX]; /* number of TX properties for IPv4 and IPv6 respectively */
- uint32_t first_pass_rt_rule_hdl[IPA_IP_MAX][MAX_NUM_PROP]; /* first pass routing rule */
- uint32_t second_pass_rt_rule_hdl[MAX_NUM_PROP]; /*second pass routing rule (only ipv6 rt rule is needed) */
-};
-
-struct client_info
-{
- uint8_t mac_addr[6];
- rt_rule_info inter_iface_rt_rule_hdl[IPA_HDR_L2_MAX]; /* routing rule handles of inter interface communication based on source l2 header type */
- rt_rule_info intra_iface_rt_rule_hdl; /* routing rule handles of inter interface communication */
- bool is_l2tp_client;
- l2tp_vlan_mapping_info *mapping_info;
- l2tp_rt_rule_info l2tp_rt_rule_hdl[IPA_HDR_L2_MAX];
-};
-
-struct flt_rule_info
-{
- client_info *p_client;
- uint32_t flt_rule_hdl[IPA_IP_MAX];
- uint32_t l2tp_first_pass_flt_rule_hdl[IPA_IP_MAX]; /* L2TP filtering rules are destination MAC based */
- uint32_t l2tp_second_pass_flt_rule_hdl;
-};
-
-struct peer_iface_info
-{
- class IPACM_LanToLan_Iface *peer;
- char rt_tbl_name_for_rt[IPA_IP_MAX][IPA_RESOURCE_NAME_MAX];
- char rt_tbl_name_for_flt[IPA_IP_MAX][IPA_RESOURCE_NAME_MAX];
- list flt_rule;
-};
-
-class IPACM_LanToLan_Iface
-{
-public:
- IPACM_LanToLan_Iface(IPACM_Lan *p_iface);
- ~IPACM_LanToLan_Iface();
-
- void add_client_rt_rule_for_new_iface();
-
- void add_all_inter_interface_client_flt_rule(ipa_ip_type iptype);
-
- void add_all_intra_interface_client_flt_rule(ipa_ip_type iptype);
-
- void handle_down_event();
-
- void handle_wlan_scc_mcc_switch();
-
- void handle_intra_interface_info();
-
- void handle_new_iface_up(char rt_tbl_name_for_flt[][IPA_RESOURCE_NAME_MAX], char rt_tbl_name_for_rt[][IPA_RESOURCE_NAME_MAX],
- IPACM_LanToLan_Iface *peer_iface);
-
- void handle_client_add(uint8_t *mac, bool is_l2tp_client, l2tp_vlan_mapping_info *mapping_info);
-
- void handle_client_del(uint8_t *mac);
-
- void print_data_structure_info();
-
- IPACM_Lan* get_iface_pointer();
-
- bool get_m_is_ip_addr_assigned(ipa_ip_type iptype);
-
- void set_m_is_ip_addr_assigned(ipa_ip_type iptype, bool value);
-
- bool get_m_support_inter_iface_offload();
-
- bool get_m_support_intra_iface_offload();
-
- void increment_ref_cnt_peer_l2_hdr_type(ipa_hdr_l2_type peer_l2_type);
-
- void decrement_ref_cnt_peer_l2_hdr_type(ipa_hdr_l2_type peer_l2_type);
-#ifdef FEATURE_L2TP
- void switch_to_l2tp_iface();
-
- bool set_l2tp_iface(char *vlan_iface_name);
-
- bool is_l2tp_iface();
-
- void handle_l2tp_enable();
-
- void handle_l2tp_disable();
-#endif
-private:
-
- IPACM_Lan *m_p_iface;
- bool m_is_ip_addr_assigned[IPA_IP_MAX];
- bool m_support_inter_iface_offload;
- bool m_support_intra_iface_offload;
- bool m_is_l2tp_iface;
-
- int ref_cnt_peer_l2_hdr_type[IPA_HDR_L2_MAX]; /* reference count of l2 header type of peer interfaces */
- uint32_t hdr_proc_ctx_for_inter_interface[IPA_HDR_L2_MAX];
- uint32_t hdr_proc_ctx_for_intra_interface;
- uint32_t hdr_proc_ctx_for_l2tp; /* uc needs to remove 62 bytes IPv6 + L2TP + inner Ethernet header */
-
- list m_client_info; /* client list */
- list m_peer_iface_info; /* peer information list */
-
- /* The following members are for intra-interface communication*/
- peer_iface_info m_intra_interface_info;
-
- void add_one_client_flt_rule(IPACM_LanToLan_Iface *peer_iface, client_info *client);
-
- void add_client_flt_rule(peer_iface_info *peer, client_info *client, ipa_ip_type iptype);
-
- void del_one_client_flt_rule(IPACM_LanToLan_Iface *peer_iface, client_info *client);
-
- void del_client_flt_rule(peer_iface_info *peer, client_info *client);
-
- void add_client_rt_rule(peer_iface_info *peer, client_info *client);
-
- void del_client_rt_rule(peer_iface_info *peer, client_info *client);
-
- void add_l2tp_client_rt_rule(peer_iface_info *peer, client_info *client);
-
- void clear_all_flt_rule_for_one_peer_iface(peer_iface_info *peer);
-
- void clear_all_rt_rule_for_one_peer_iface(peer_iface_info *peer);
-
- void add_hdr_proc_ctx(ipa_hdr_l2_type peer_l2_type);
-
- void del_hdr_proc_ctx(ipa_hdr_l2_type peer_l2_type);
-
- void print_peer_info(peer_iface_info *peer_info);
-
-};
-
-class IPACM_LanToLan : public IPACM_Listener
-{
-
-public:
-
- static IPACM_LanToLan* p_instance;
- static IPACM_LanToLan* get_instance();
-#ifdef FEATURE_L2TP
- bool has_l2tp_iface();
-#endif
-
-private:
-
- IPACM_LanToLan();
-
- ~IPACM_LanToLan();
-
- bool m_has_l2tp_iface;
-
- list m_iface;
-
- list m_cached_client_add_event;
-
- list m_vlan_iface;
-
- list m_l2tp_vlan_mapping;
-
- void handle_iface_up(ipacm_event_eth_bridge *data);
-
- void handle_iface_down(ipacm_event_eth_bridge *data);
-
- void handle_client_add(ipacm_event_eth_bridge *data);
-
- void handle_client_del(ipacm_event_eth_bridge *data);
-
- void handle_wlan_scc_mcc_switch(ipacm_event_eth_bridge *data);
-
-#ifdef FEATURE_L2TP
- void handle_add_vlan_iface(ipa_ioc_vlan_iface_info *data);
-
- void handle_del_vlan_iface(ipa_ioc_vlan_iface_info *data);
-
- void handle_add_l2tp_vlan_mapping(ipa_ioc_l2tp_vlan_mapping_info *data);
-
- void handle_del_l2tp_vlan_mapping(ipa_ioc_l2tp_vlan_mapping_info *data);
-
- void handle_vlan_client_info(ipacm_event_data_all *data);
-
- void handle_vlan_iface_info(ipacm_event_data_all *data);
-#endif
-
- void handle_new_iface_up(IPACM_LanToLan_Iface *new_iface, IPACM_LanToLan_Iface *exist_iface);
-
- void event_callback(ipa_cm_event_id event, void* param);
-
- void handle_cached_client_add_event(IPACM_Lan *p_iface);
-
- void clear_cached_client_add_event(IPACM_Lan *p_iface);
-
- void print_data_structure_info();
-
-};
-
-#endif
diff --git a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Listener.h b/data-ipa-cfg-mgr/ipacm/inc/IPACM_Listener.h
deleted file mode 100644
index 9d774fe..0000000
--- a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Listener.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
-Copyright (c) 2013, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*!
- @file
- IPACM_Listener.h
-
- @brief
- This file implements the abstract class notifier.
-
- @Author
- Skylar Chang
-
-*/
-#ifndef IPACM_LISTENER_H
-#define IPACM_LISTENER_H
-
-#include "IPACM_Defs.h"
-#include "IPACM_CmdQueue.h"
-
-/* abstract class notifier */
-class IPACM_Listener
-{
-public:
- virtual void event_callback(ipa_cm_event_id event, void *data) = 0;
- virtual ~IPACM_Listener(void) {};
-};
-
-#endif /* IPACM_LISTENER_H */
diff --git a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Log.h b/data-ipa-cfg-mgr/ipacm/inc/IPACM_Log.h
deleted file mode 100644
index dab0280..0000000
--- a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Log.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
-Copyright (c) 2013, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*!
- @file
- IPACM_log.h
-
- @brief
- This file implements the IPAM log functionality.
-
- @Author
- Skylar Chang
-
-*/
-
-#ifndef IPACM_LOG_H
-#define IPACM_LOG_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#include
-#include
-#include
-
-#define MAX_BUF_LEN 256
-
-#ifdef FEATURE_IPA_ANDROID
-#define IPACMLOG_FILE "/dev/socket/ipacm_log_file"
-#else/* defined(FEATURE_IPA_ANDROID) */
-#define IPACMLOG_FILE "/etc/ipacm_log_file"
-#endif /* defined(NOT FEATURE_IPA_ANDROID)*/
-
-typedef struct ipacm_log_buffer_s {
- char user_data[MAX_BUF_LEN];
-} ipacm_log_buffer_t;
-
-void ipacm_log_send( void * user_data);
-
-static char buffer_send[MAX_BUF_LEN];
-static char dmesg_cmd[MAX_BUF_LEN];
-
-#define IPACMDBG_DMESG(fmt, ...) memset(buffer_send, 0, MAX_BUF_LEN);\
- snprintf(buffer_send,MAX_BUF_LEN,"%s:%d %s: " fmt, __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__);\
- ipacm_log_send (buffer_send);\
- printf("%s:%d %s() " fmt, __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__); \
- memset(dmesg_cmd, 0, MAX_BUF_LEN);\
- snprintf(dmesg_cmd, MAX_BUF_LEN, "echo %s > /dev/kmsg", buffer_send);\
- system(dmesg_cmd);
-#ifdef DEBUG
-#define PERROR(fmt) memset(buffer_send, 0, MAX_BUF_LEN);\
- snprintf(buffer_send,MAX_BUF_LEN,"%s:%d %s()", __FILE__, __LINE__, __FUNCTION__);\
- ipacm_log_send (buffer_send); \
- perror(fmt);
-#define IPACMERR(fmt, ...) memset(buffer_send, 0, MAX_BUF_LEN);\
- snprintf(buffer_send,MAX_BUF_LEN,"ERROR: %s:%d %s() " fmt, __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__);\
- ipacm_log_send (buffer_send);\
- printf("ERROR: %s:%d %s() " fmt, __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__);
-#define IPACMDBG_H(fmt, ...) memset(buffer_send, 0, MAX_BUF_LEN);\
- snprintf(buffer_send,MAX_BUF_LEN,"%s:%d %s() " fmt, __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__);\
- ipacm_log_send (buffer_send);\
- printf("%s:%d %s() " fmt, __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__);
-#else
-#define PERROR(fmt) perror(fmt)
-#define IPACMERR(fmt, ...) printf("ERR: %s:%d %s() " fmt, __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__);
-#define IPACMDBG_H(fmt, ...) printf("%s:%d %s() " fmt, __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__);
-#endif
-#define IPACMDBG(fmt, ...) printf("%s:%d %s() " fmt, __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__);
-#define IPACMLOG(fmt, ...) printf(fmt, ##__VA_ARGS__);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IPACM_LOG_H */
diff --git a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Neighbor.h b/data-ipa-cfg-mgr/ipacm/inc/IPACM_Neighbor.h
deleted file mode 100644
index 745b145..0000000
--- a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Neighbor.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
-Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*!
- @file
- IPACM_Neighbor.h
-
- @brief
- This file implements the functionality of handling IPACM Neighbor events.
-
- @Author
- Skylar Chang
-
-*/
-#ifndef IPACM_NEIGHBOR_H
-#define IPACM_NEIGHBOR_H
-
-#include
-#include
-#include
-#include "IPACM_Routing.h"
-#include "IPACM_Filtering.h"
-#include "IPACM_Listener.h"
-#include "IPACM_Iface.h"
-
-#define IPA_MAX_NUM_NEIGHBOR_CLIENTS 100
-
-struct ipa_neighbor_client
-{
- uint8_t mac_addr[6];
- int iface_index;
- uint32_t v4_addr;
- int ipa_if_num;
- /* add support for handling L2TP clients which associated with eth0 vlan interface */
- char iface_name[IPA_IFACE_NAME_LEN];
-};
-
-class IPACM_Neighbor : public IPACM_Listener
-{
-
-public:
-
- IPACM_Neighbor();
-
- void event_callback(ipa_cm_event_id event,
- void *data);
-
-private:
-
- int num_neighbor_client;
-
- int circular_index;
-
- ipa_neighbor_client neighbor_client[IPA_MAX_NUM_NEIGHBOR_CLIENTS];
-
-};
-
-#endif /* IPACM_NEIGHBOR_H */
diff --git a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Netlink.h b/data-ipa-cfg-mgr/ipacm/inc/IPACM_Netlink.h
deleted file mode 100644
index 81f1968..0000000
--- a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Netlink.h
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
-Copyright (c) 2013, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*!
- @file
- IPA_Netlink.h
-
- @brief
- IPACM Netlink Messaging Implementation File
-
- @Author
- Skylar Chang
-
-*/
-#ifndef IPACM_NETLINK_H
-#define IPACM_NETLINK_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#define sockaddr_storage __kernel_sockaddr_storage
-#include
-#include
-#include
-#include
-#include
-#include "IPACM_Defs.h"
-
-#define MAX_NUM_OF_FD 10
-#define IPA_NL_MSG_MAX_LEN (2048)
-
-/*---------------------------------------------------------------------------
- Type representing enumeration of NetLink event indication messages
----------------------------------------------------------------------------*/
-
-/*---------------------------------------------------------------------------
- Types representing parsed NetLink message
----------------------------------------------------------------------------*/
-#define IPA_NLA_PARAM_NONE (0x0000)
-#define IPA_NLA_PARAM_PREFIXADDR (0x0001)
-#define IPA_NLA_PARAM_LOCALADDR (0x0002)
-#define IPA_NLA_PARAM_LABELNAME (0x0004)
-#define IPA_NLA_PARAM_BCASTADDR (0x0008)
-#define IPA_NLA_PARAM_ACASTADDR (0x0010)
-#define IPA_NLA_PARAM_MCASTADDR (0x0020)
-#define IPA_NLA_PARAM_CACHEINFO (0x0080)
-#define IPA_NLA_PARAM_PROTOINFO (0x0100)
-#define IPA_NLA_PARAM_FLAGS (0x0200)
-
-#define IPA_RTA_PARAM_NONE (0x0000)
-#define IPA_RTA_PARAM_DST (0x0001)
-#define IPA_RTA_PARAM_SRC (0x0002)
-#define IPA_RTA_PARAM_GATEWAY (0x0004)
-#define IPA_RTA_PARAM_IIF (0x0008)
-#define IPA_RTA_PARAM_OIF (0x0010)
-#define IPA_RTA_PARAM_CACHEINFO (0x0020)
-#define IPA_RTA_PARAM_PRIORITY (0x0080)
-#define IPA_RTA_PARAM_METRICS (0x0100)
-
-
-/*---------------------------------------------------------------------------
- Type representing function callback registered with a socket listener
- thread for reading from a socket on receipt of an incoming message
----------------------------------------------------------------------------*/
-typedef int (*ipa_sock_thrd_fd_read_f)(int fd);
-
-typedef enum
-{
- IPA_INIT = 0,
- IPA_LINK_UP_WAIT,
- IPA_LINK_UP,
- IPA_LINK_DOWN_WAIT,
- IPA_LINK_DOWN
-} ipa_nl_state_e;
-
-typedef struct
-{
- int sk_fd;
- ipa_sock_thrd_fd_read_f read_func;
-} ipa_nl_sk_fd_map_info_t;
-
-typedef struct
-{
- ipa_nl_sk_fd_map_info_t sk_fds[MAX_NUM_OF_FD];
- fd_set fdset;
- int num_fd;
- int max_fd;
-} ipa_nl_sk_fd_set_info_t;
-
-typedef struct
-{
- int sk_fd; /* socket descriptor */
- struct sockaddr_nl sk_addr_loc; /* local address of socket */
-} ipa_nl_sk_info_t;
-
-typedef struct ipa_nl_addr_s {
- struct sockaddr_storage ip_addr;
- unsigned int mask;
-} ipa_nl_addr_t;
-
-typedef struct ipa_nl_proto_info_s {
- unsigned int param_mask;
- unsigned int flags;
- struct ifla_cacheinfo cache_info;
-} ipa_nl_proto_info_t;
-
-typedef struct
-{
- struct ifinfomsg metainfo; /* from header */
-} ipa_nl_link_info_t;
-
-
-
-typedef struct ipa_nl_addr_info_s {
- struct ifaddrmsg metainfo; /* from header */
- struct /* attributes */
- {
- unsigned int param_mask;
- unsigned char label_name[IF_NAME_LEN];
- struct sockaddr_storage prefix_addr;
- struct sockaddr_storage local_addr;
- struct sockaddr_storage bcast_addr;
- struct sockaddr_storage acast_addr;
- struct sockaddr_storage mcast_addr;
- } attr_info;
-} ipa_nl_addr_info_t;
-
-
-typedef struct ipa_nl_neigh_info_s {
- struct ndmsg metainfo; /* from header */
- struct /* attributes */
- {
- unsigned int param_mask;
- struct sockaddr_storage local_addr;
- struct sockaddr lladdr_hwaddr;
- } attr_info;
-} ipa_nl_neigh_info_t;
-
-
-
-typedef struct ipa_nl_route_info_s {
- struct rtmsg metainfo; /* from header */
- struct /* attributes */
- {
- unsigned int param_mask;
- struct sockaddr_storage dst_addr;
- struct sockaddr_storage src_addr;
- struct sockaddr_storage gateway_addr;
- struct sockaddr_storage mark_addr;
- struct rta_cacheinfo cache_info;
- __u32 iif_index; /* Link index */
- __u32 oif_index; /* Link index */
- __u32 priority;
- __u32 metrics;
- ipa_nl_proto_info_t proto_info;
- } attr_info;
-} ipa_nl_route_info_t;
-
-#define IPA_FLOW_TYPE_INVALID (-1)
-
-typedef struct
-{
- unsigned int type;
- bool link_event;
- /* Optional parameters */
- ipa_nl_link_info_t nl_link_info;
- ipa_nl_addr_info_t nl_addr_info;
- ipa_nl_neigh_info_t nl_neigh_info;
- ipa_nl_route_info_t nl_route_info;
-} ipa_nl_msg_t;
-
-/* Initialization routine for listener on NetLink sockets interface */
-int ipa_nl_listener_init
-(
- unsigned int nl_type,
- unsigned int nl_groups,
- ipa_nl_sk_fd_set_info_t *sk_fdset,
- ipa_sock_thrd_fd_read_f read_f
- );
-
-/* Virtual function registered to receive incoming messages over the NETLINK routing socket*/
-int ipa_nl_recv_msg(int fd);
-
-/* map mask value for ipv6 */
-int mask_v6(int index, uint32_t *mask);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* IPACM_NETLINK_H */
diff --git a/data-ipa-cfg-mgr/ipacm/inc/IPACM_OffloadManager.h b/data-ipa-cfg-mgr/ipacm/inc/IPACM_OffloadManager.h
deleted file mode 100644
index 88a411b..0000000
--- a/data-ipa-cfg-mgr/ipacm/inc/IPACM_OffloadManager.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- * * Neither the name of The Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef _IPACM_OFFLOAD_MANAGER_H_
-#define _IPACM_OFFLOAD_MANAGER_H_
-
-#include
-#include
-#include
-#include "IPACM_Defs.h"
-
-using RET = ::IOffloadManager::RET;
-using Prefix = ::IOffloadManager::Prefix;
-using IP_FAM = ::IOffloadManager::IP_FAM;
-using L4Protocol = ::IOffloadManager::ConntrackTimeoutUpdater::L4Protocol;
-using natTimeoutUpdate_t = ::IOffloadManager::ConntrackTimeoutUpdater::natTimeoutUpdate_t;
-//using ipAddrPortPair_t = ::IOffloadManager::ConntrackTimeoutUpdater::ipAddrPortPair_t;
-//using UDP = ::IOffloadManager::ConntrackTimeoutUpdater::UDP;
-//using TCP = ::IOffloadManager::ConntrackTimeoutUpdater::TCP;
-
-#define MAX_EVENT_CACHE 10
-
-typedef struct _framework_event_cache
-{
- /* IPACM interface name */
- ipa_cm_event_id event;
- char dev_name[IF_NAME_LEN];
- Prefix prefix_cache;
- Prefix prefix_cache_v6; //for setupstream use
- bool valid;
-}framework_event_cache;
-
-class IPACM_OffloadManager : public IOffloadManager
-{
-
-public:
-
- IPACM_OffloadManager();
- static IPACM_OffloadManager* GetInstance();
-
- virtual RET registerEventListener(IpaEventListener* /* listener */);
- virtual RET unregisterEventListener(IpaEventListener* /* listener */);
- virtual RET registerCtTimeoutUpdater(ConntrackTimeoutUpdater* /* cb */);
- virtual RET unregisterCtTimeoutUpdater(ConntrackTimeoutUpdater* /* cb */);
-
- virtual RET provideFd(int /* fd */, unsigned int /* group */);
- virtual RET clearAllFds();
- virtual bool isStaApSupported();
-
- /* ---------------------------- ROUTE ------------------------------- */
- virtual RET setLocalPrefixes(std::vector &/* prefixes */);
- virtual RET addDownstream(const char * /* downstream */,
- const Prefix & /* prefix */);
- virtual RET removeDownstream(const char * /* downstream */,
- const Prefix &/* prefix */);
- virtual RET setUpstream(const char* /* iface */, const Prefix& /* v4Gw */, const Prefix& /* v6Gw */);
- virtual RET stopAllOffload();
-
- /* ------------------------- STATS/POLICY --------------------------- */
- virtual RET setQuota(const char * /* upstream */, uint64_t /* limit */);
- virtual RET getStats(const char * /* upstream */, bool /* reset */,
- OffloadStatistics& /* ret */);
-
- static IPACM_OffloadManager *pInstance; //sky
-
- IpaEventListener *elrInstance;
-
- ConntrackTimeoutUpdater *touInstance;
-
- bool search_framwork_cache(char * interface_name);
-
- bool push_framework_event(const char * if_name, _ipacm_offload_prefix prefix);
-
-private:
-
- std::list valid_ifaces;
-
- bool upstream_v4_up;
-
- bool upstream_v6_up;
-
- int default_gw_index;
-
- int post_route_evt(enum ipa_ip_type iptype, int index, ipa_cm_event_id event, const Prefix &gw_addr);
-
- int ipa_get_if_index(const char *if_name, int *if_index);
-
- int resetTetherStats(const char *upstream_name);
-
-#ifdef FEATURE_IPACM_RESTART
- int push_iface_up(const char *if_name, bool upstream);
-#endif
-
- static const char *DEVICE_NAME;
-
- /* cache the add_downstream events if netdev is not ready */
- framework_event_cache event_cache[MAX_EVENT_CACHE];
-
- /* latest update cache entry */
- int latest_cache_index;
-
-}; /* IPACM_OffloadManager */
-
-#endif /* _IPACM_OFFLOAD_MANAGER_H_ */
diff --git a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Routing.h b/data-ipa-cfg-mgr/ipacm/inc/IPACM_Routing.h
deleted file mode 100644
index b5ffabc..0000000
--- a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Routing.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
-Copyright (c) 2013, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*!
- @file
- IPACM_Routing.cpp
-
- @brief
- This file implements the IPACM routing functionality.
-
- @Author
- Skylar Chang
-
-*/
-
-
-#ifndef IPACM_ROUTING_H
-#define IPACM_ROUTING_H
-
-#include
-#include
-#include
-
-using namespace std;
-
-class IPACM_Routing
-{
-public:
- IPACM_Routing();
- ~IPACM_Routing();
-
- bool AddRoutingRule(struct ipa_ioc_add_rt_rule *ruleTable);
- bool DeleteRoutingRule(struct ipa_ioc_del_rt_rule *ruleTable);
-
- bool Commit(enum ipa_ip_type ip);
- bool Reset(enum ipa_ip_type ip);
-
- bool GetRoutingTable(struct ipa_ioc_get_rt_tbl *routingTable);
-
- bool DeviceNodeIsOpened();
- bool DeleteRoutingHdl(uint32_t rt_rule_hdl, ipa_ip_type ip);
-
- bool ModifyRoutingRule(struct ipa_ioc_mdfy_rt_rule *);
-
-private:
- static const char *DEVICE_NAME;
- int m_fd; /* File descriptor of the IPA device node /dev/ipa */
-
- bool PutRoutingTable(uint32_t routingTableHandle);
-};
-
-#endif //IPACM_ROUTING_H
-
diff --git a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Wan.h b/data-ipa-cfg-mgr/ipacm/inc/IPACM_Wan.h
deleted file mode 100644
index 29b1341..0000000
--- a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Wan.h
+++ /dev/null
@@ -1,576 +0,0 @@
-/*
-Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*!
- @file
- IPACM_Wan.cpp
-
- @brief
- This file implements the WAN iface functionality.
-
- @Author
- Skylar Chang
-
-*/
-#ifndef IPACM_WAN_H
-#define IPACM_WAN_H
-
-#include
-#include
-#include
-#include "IPACM_Routing.h"
-#include "IPACM_Filtering.h"
-#include
-#include
-#include
-
-#define IPA_NUM_DEFAULT_WAN_FILTER_RULES 3 /*1 for v4, 2 for v6*/
-#define IPA_V2_NUM_DEFAULT_WAN_FILTER_RULE_IPV4 2
-
-#ifdef FEATURE_IPA_ANDROID
-#define IPA_V2_NUM_DEFAULT_WAN_FILTER_RULE_IPV6 7
-#define IPA_V2_NUM_TCP_WAN_FILTER_RULE_IPV6 3
-#define IPA_V2_NUM_MULTICAST_WAN_FILTER_RULE_IPV6 3
-#define IPA_V2_NUM_FRAG_WAN_FILTER_RULE_IPV6 1
-#else
-#define IPA_V2_NUM_DEFAULT_WAN_FILTER_RULE_IPV6 3
-#endif
-
-#define NETWORK_STATS "%s %llu %llu %llu %llu"
-#define IPA_NETWORK_STATS_FILE_NAME "/data/misc/ipa/network_stats"
-
-typedef struct _wan_client_rt_hdl
-{
- uint32_t wan_rt_rule_hdl_v4;
- uint32_t wan_rt_rule_hdl_v6[IPV6_NUM_ADDR];
- uint32_t wan_rt_rule_hdl_v6_wan[IPV6_NUM_ADDR];
-}wan_client_rt_hdl;
-
-typedef struct _ipa_wan_client
-{
- ipacm_event_data_wlan_ex* p_hdr_info;
- uint8_t mac[IPA_MAC_ADDR_SIZE];
- uint32_t v4_addr;
- uint32_t v6_addr[IPV6_NUM_ADDR][4];
- uint32_t hdr_hdl_v4;
- uint32_t hdr_hdl_v6;
- bool route_rule_set_v4;
- int route_rule_set_v6;
- bool ipv4_set;
- int ipv6_set;
- bool ipv4_header_set;
- bool ipv6_header_set;
- bool power_save_set;
- wan_client_rt_hdl wan_rt_hdl[0]; /* depends on number of tx properties */
-}ipa_wan_client;
-
-/* wan iface */
-class IPACM_Wan : public IPACM_Iface
-{
-
-public:
- /* IPACM pm_depency q6 check*/
- static int ipa_pm_q6_check;
- static bool wan_up;
- static bool wan_up_v6;
- static uint8_t xlat_mux_id;
- /* IPACM interface name */
- static char wan_up_dev_name[IF_NAME_LEN];
- static uint32_t curr_wan_ip;
- IPACM_Wan(int, ipacm_wan_iface_type, uint8_t *);
- virtual ~IPACM_Wan();
-
- static bool isWanUP(int ipa_if_num_tether)
- {
-#ifdef FEATURE_IPA_ANDROID
-#ifdef FEATURE_IPACM_HAL
- /*To avoid -Wall -Werror error */
- IPACMDBG_H("ipa_if_num_tether: %d\n",ipa_if_num_tether);
- return wan_up;
-#else
- uint32_t i;
- for (i=0; i < ipa_if_num_tether_v4_total;i++)
- {
- if (ipa_if_num_tether_v4[i] == ipa_if_num_tether)
- {
- IPACMDBG_H("support ipv4 tether_iface(%s)\n",
- IPACM_Iface::ipacmcfg->iface_table[ipa_if_num_tether].iface_name);
- return wan_up;
- break;
- }
- }
- return false;
-#endif
-#else
- return wan_up;
-#endif
- }
-
- static bool isWanUP_V6(int ipa_if_num_tether)
- {
-#ifdef FEATURE_IPA_ANDROID
-#ifdef FEATURE_IPACM_HAL
- /*To avoid -Wall -Werror error */
- IPACMDBG_H("ipa_if_num_tether: %d\n",ipa_if_num_tether);
- return wan_up_v6;
-#else
- uint32_t i;
- for (i=0; i < ipa_if_num_tether_v6_total;i++)
- {
- if (ipa_if_num_tether_v6[i] == ipa_if_num_tether)
- {
- IPACMDBG_H("support ipv6 tether_iface(%s)\n",
- IPACM_Iface::ipacmcfg->iface_table[ipa_if_num_tether].iface_name);
- return wan_up_v6;
- break;
- }
- }
- return false;
-#endif
-#else
- return wan_up_v6;
-#endif
- }
-
-#ifdef FEATURE_IPA_ANDROID
- static int delete_tether_iface(ipa_ip_type iptype, int ipa_if_num_tether)
- {
- uint32_t i, j;
-
- if (iptype == IPA_IP_v4)
- {
- /* delete support tether ifaces to its array*/
- for (i=0; i < IPACM_Wan::ipa_if_num_tether_v4_total; i++)
- {
- if(IPACM_Wan::ipa_if_num_tether_v4[i] == ipa_if_num_tether)
- {
- IPACMDBG_H("Found tether client at position %d name(%s)\n", i,
- IPACM_Iface::ipacmcfg->iface_table[ipa_if_num_tether].iface_name);
- break;
- }
- }
- if(i == IPACM_Wan::ipa_if_num_tether_v4_total)
- {
- IPACMDBG_H("Not finding the tethered ipv4 client.\n");
- return IPACM_FAILURE;
- }
- for(j = i+1; j < IPACM_Wan::ipa_if_num_tether_v4_total; j++)
- {
- IPACM_Wan::ipa_if_num_tether_v4[j-1] = IPACM_Wan::ipa_if_num_tether_v4[j];
- }
- IPACM_Wan::ipa_if_num_tether_v4_total--;
- IPACMDBG_H("Now the total num of ipa_if_num_tether_v4_total is %d\n",
- IPACM_Wan::ipa_if_num_tether_v4_total);
- }
- else
- {
- /* delete support tether ifaces to its array*/
- for (i=0; i < IPACM_Wan::ipa_if_num_tether_v6_total; i++)
- {
- if(IPACM_Wan::ipa_if_num_tether_v6[i] == ipa_if_num_tether)
- {
- IPACMDBG_H("Found tether client at position %d name(%s)\n", i,
- IPACM_Iface::ipacmcfg->iface_table[ipa_if_num_tether].iface_name);
- break;
- }
- }
- if(i == IPACM_Wan::ipa_if_num_tether_v6_total)
- {
- IPACMDBG_H("Not finding the tethered ipv6 client.\n");
- return IPACM_FAILURE;
- }
- for(j = i+1; j < IPACM_Wan::ipa_if_num_tether_v6_total; j++)
- {
- IPACM_Wan::ipa_if_num_tether_v6[j-1] = IPACM_Wan::ipa_if_num_tether_v6[j];
- }
- IPACM_Wan::ipa_if_num_tether_v6_total--;
- IPACMDBG_H("Now the total num of ipa_if_num_tether_v6_total is %d\n",
- IPACM_Wan::ipa_if_num_tether_v6_total);
- }
- return IPACM_SUCCESS;
- }
-#endif
-
- static uint32_t getWANIP()
- {
- return curr_wan_ip;
- }
-
- static bool getXlat_Mux_Id()
- {
- return xlat_mux_id;
- }
-
- void event_callback(ipa_cm_event_id event,
- void *data);
-
- static struct ipa_flt_rule_add flt_rule_v4[IPA_MAX_FLT_RULE];
- static struct ipa_flt_rule_add flt_rule_v6[IPA_MAX_FLT_RULE];
-
- static int num_v4_flt_rule;
- static int num_v6_flt_rule;
-
- ipacm_wan_iface_type m_is_sta_mode;
- static bool backhaul_is_sta_mode;
- static bool is_ext_prop_set;
- static uint32_t backhaul_ipv6_prefix[2];
-
- static bool embms_is_on;
- static bool backhaul_is_wan_bridge;
-
- static bool isWan_Bridge_Mode()
- {
- return backhaul_is_wan_bridge;
- }
-#ifdef FEATURE_IPA_ANDROID
- /* IPACM interface id */
- static uint32_t ipa_if_num_tether_v4_total;
- static int ipa_if_num_tether_v4[IPA_MAX_IFACE_ENTRIES];
- static uint32_t ipa_if_num_tether_v6_total;
- static int ipa_if_num_tether_v6[IPA_MAX_IFACE_ENTRIES];
-#endif
-
-private:
-
- bool is_ipv6_frag_firewall_flt_rule_installed;
- uint32_t ipv6_frag_firewall_flt_rule_hdl;
- uint32_t *wan_route_rule_v4_hdl;
- uint32_t *wan_route_rule_v6_hdl;
- uint32_t *wan_route_rule_v6_hdl_a5;
- uint32_t hdr_hdl_sta_v4;
- uint32_t hdr_hdl_sta_v6;
- uint32_t firewall_hdl_v4[IPACM_MAX_FIREWALL_ENTRIES];
- uint32_t firewall_hdl_v6[IPACM_MAX_FIREWALL_ENTRIES];
- uint32_t dft_wan_fl_hdl[IPA_NUM_DEFAULT_WAN_FILTER_RULES];
- uint32_t ipv6_dest_flt_rule_hdl[MAX_DEFAULT_v6_ROUTE_RULES];
- int num_ipv6_dest_flt_rule;
- uint32_t ODU_fl_hdl[IPA_NUM_DEFAULT_WAN_FILTER_RULES];
- int num_firewall_v4,num_firewall_v6;
- uint32_t wan_v4_addr;
- uint32_t wan_v4_addr_gw;
- uint32_t wan_v6_addr_gw[4];
- bool wan_v4_addr_set;
- bool wan_v4_addr_gw_set;
- bool wan_v6_addr_gw_set;
- bool active_v4;
- bool active_v6;
- bool header_set_v4;
- bool header_set_v6;
- bool header_partial_default_wan_v4;
- bool header_partial_default_wan_v6;
- uint8_t ext_router_mac_addr[IPA_MAC_ADDR_SIZE];
- uint8_t netdev_mac[IPA_MAC_ADDR_SIZE];
-
- static int num_ipv4_modem_pdn;
-
- static int num_ipv6_modem_pdn;
-
- int modem_ipv4_pdn_index;
-
- int modem_ipv6_pdn_index;
-
- bool is_default_gateway;
-
- uint32_t ipv6_prefix[2];
-
- /* IPACM firewall Configuration file*/
- IPACM_firewall_conf_t firewall_config;
-
- /* STA mode wan-client*/
- int wan_client_len;
- ipa_wan_client *wan_client;
- int header_name_count;
- uint32_t num_wan_client;
- uint8_t invalid_mac[IPA_MAC_ADDR_SIZE];
- bool is_xlat;
-
- /* update network stats for CNE */
- int ipa_network_stats_fd;
- uint32_t hdr_hdl_dummy_v6;
- uint32_t hdr_proc_hdl_dummy_v6;
-
- inline ipa_wan_client* get_client_memptr(ipa_wan_client *param, int cnt)
- {
- char *ret = ((char *)param) + (wan_client_len * cnt);
- return (ipa_wan_client *)ret;
- }
-
- inline int get_wan_client_index(uint8_t *mac_addr)
- {
- int cnt;
- int num_wan_client_tmp = num_wan_client;
-
- IPACMDBG_H("Passed MAC %02x:%02x:%02x:%02x:%02x:%02x\n",
- mac_addr[0], mac_addr[1], mac_addr[2],
- mac_addr[3], mac_addr[4], mac_addr[5]);
-
- for(cnt = 0; cnt < num_wan_client_tmp; cnt++)
- {
- IPACMDBG_H("stored MAC %02x:%02x:%02x:%02x:%02x:%02x\n",
- get_client_memptr(wan_client, cnt)->mac[0],
- get_client_memptr(wan_client, cnt)->mac[1],
- get_client_memptr(wan_client, cnt)->mac[2],
- get_client_memptr(wan_client, cnt)->mac[3],
- get_client_memptr(wan_client, cnt)->mac[4],
- get_client_memptr(wan_client, cnt)->mac[5]);
-
- if(memcmp(get_client_memptr(wan_client, cnt)->mac,
- mac_addr,
- sizeof(get_client_memptr(wan_client, cnt)->mac)) == 0)
- {
- IPACMDBG_H("Matched client index: %d\n", cnt);
- return cnt;
- }
- }
-
- return IPACM_INVALID_INDEX;
- }
-
- inline int get_wan_client_index_ipv4(uint32_t ipv4_addr)
- {
- int cnt;
- int num_wan_client_tmp = num_wan_client;
-
- IPACMDBG_H("Passed IPv4 %x\n", ipv4_addr);
-
- for(cnt = 0; cnt < num_wan_client_tmp; cnt++)
- {
- if (get_client_memptr(wan_client, cnt)->ipv4_set)
- {
- IPACMDBG_H("stored IPv4 %x\n", get_client_memptr(wan_client, cnt)->v4_addr);
-
- if(ipv4_addr == get_client_memptr(wan_client, cnt)->v4_addr)
- {
- IPACMDBG_H("Matched client index: %d\n", cnt);
- IPACMDBG_H("The MAC is %02x:%02x:%02x:%02x:%02x:%02x\n",
- get_client_memptr(wan_client, cnt)->mac[0],
- get_client_memptr(wan_client, cnt)->mac[1],
- get_client_memptr(wan_client, cnt)->mac[2],
- get_client_memptr(wan_client, cnt)->mac[3],
- get_client_memptr(wan_client, cnt)->mac[4],
- get_client_memptr(wan_client, cnt)->mac[5]);
- IPACMDBG_H("header set ipv4(%d) ipv6(%d)\n",
- get_client_memptr(wan_client, cnt)->ipv4_header_set,
- get_client_memptr(wan_client, cnt)->ipv6_header_set);
- return cnt;
- }
- }
- }
- return IPACM_INVALID_INDEX;
- }
-
- inline int get_wan_client_index_ipv6(uint32_t* ipv6_addr)
- {
- int cnt, v6_num;
- int num_wan_client_tmp = num_wan_client;
-
- IPACMDBG_H("Get ipv6 address 0x%08x.0x%08x.0x%08x.0x%08x\n", ipv6_addr[0], ipv6_addr[1], ipv6_addr[2], ipv6_addr[3]);
-
- for(cnt = 0; cnt < num_wan_client_tmp; cnt++)
- {
- if (get_client_memptr(wan_client, cnt)->ipv6_set)
- {
- for(v6_num=0;v6_num < get_client_memptr(wan_client, cnt)->ipv6_set;v6_num++)
- {
-
- IPACMDBG_H("stored IPv6 0x%08x.0x%08x.0x%08x.0x%08x\n", get_client_memptr(wan_client, cnt)->v6_addr[v6_num][0],
- get_client_memptr(wan_client, cnt)->v6_addr[v6_num][1],
- get_client_memptr(wan_client, cnt)->v6_addr[v6_num][2],
- get_client_memptr(wan_client, cnt)->v6_addr[v6_num][3]);
-
- if(ipv6_addr[0] == get_client_memptr(wan_client, cnt)->v6_addr[v6_num][0] &&
- ipv6_addr[1] == get_client_memptr(wan_client, cnt)->v6_addr[v6_num][1] &&
- ipv6_addr[2]== get_client_memptr(wan_client, cnt)->v6_addr[v6_num][2] &&
- ipv6_addr[3] == get_client_memptr(wan_client, cnt)->v6_addr[v6_num][3])
- {
- IPACMDBG_H("Matched client index: %d\n", cnt);
- IPACMDBG_H("The MAC is %02x:%02x:%02x:%02x:%02x:%02x\n",
- get_client_memptr(wan_client, cnt)->mac[0],
- get_client_memptr(wan_client, cnt)->mac[1],
- get_client_memptr(wan_client, cnt)->mac[2],
- get_client_memptr(wan_client, cnt)->mac[3],
- get_client_memptr(wan_client, cnt)->mac[4],
- get_client_memptr(wan_client, cnt)->mac[5]);
- IPACMDBG_H("header set ipv4(%d) ipv6(%d)\n",
- get_client_memptr(wan_client, cnt)->ipv4_header_set,
- get_client_memptr(wan_client, cnt)->ipv6_header_set);
- return cnt;
- }
- }
- }
- }
- return IPACM_INVALID_INDEX;
- }
-
- inline int delete_wan_rtrules(int clt_indx, ipa_ip_type iptype)
- {
- uint32_t tx_index;
- uint32_t rt_hdl;
- int num_v6;
-
- if(iptype == IPA_IP_v4)
- {
- for(tx_index = 0; tx_index < iface_query->num_tx_props; tx_index++)
- {
- if((tx_prop->tx[tx_index].ip == IPA_IP_v4) && (get_client_memptr(wan_client, clt_indx)->route_rule_set_v4==true)) /* for ipv4 */
- {
- IPACMDBG_H("Delete client index %d ipv4 Qos rules for tx:%d \n",clt_indx,tx_index);
- rt_hdl = get_client_memptr(wan_client, clt_indx)->wan_rt_hdl[tx_index].wan_rt_rule_hdl_v4;
-
- if(m_routing.DeleteRoutingHdl(rt_hdl, IPA_IP_v4) == false)
- {
- return IPACM_FAILURE;
- }
- }
- } /* end of for loop */
-
- /* clean the 4 Qos ipv4 RT rules for client:clt_indx */
- if(get_client_memptr(wan_client, clt_indx)->route_rule_set_v4==true) /* for ipv4 */
- {
- get_client_memptr(wan_client, clt_indx)->route_rule_set_v4 = false;
- }
- }
-
- if(iptype == IPA_IP_v6)
- {
- for(tx_index = 0; tx_index < iface_query->num_tx_props; tx_index++)
- {
-
- if((tx_prop->tx[tx_index].ip == IPA_IP_v6) && (get_client_memptr(wan_client, clt_indx)->route_rule_set_v6 != 0)) /* for ipv6 */
- {
- for(num_v6 =0;num_v6 < get_client_memptr(wan_client, clt_indx)->route_rule_set_v6;num_v6++)
- {
- IPACMDBG_H("Delete client index %d ipv6 Qos rules for %d-st ipv6 for tx:%d\n", clt_indx,num_v6,tx_index);
- rt_hdl = get_client_memptr(wan_client, clt_indx)->wan_rt_hdl[tx_index].wan_rt_rule_hdl_v6[num_v6];
- if(m_routing.DeleteRoutingHdl(rt_hdl, IPA_IP_v6) == false)
- {
- return IPACM_FAILURE;
- }
-
- rt_hdl = get_client_memptr(wan_client, clt_indx)->wan_rt_hdl[tx_index].wan_rt_rule_hdl_v6_wan[num_v6];
- if(m_routing.DeleteRoutingHdl(rt_hdl, IPA_IP_v6) == false)
- {
- return IPACM_FAILURE;
- }
- }
-
- }
- } /* end of for loop */
-
- /* clean the 4 Qos ipv6 RT rules for client:clt_indx */
- if(get_client_memptr(wan_client, clt_indx)->route_rule_set_v6 != 0) /* for ipv6 */
- {
- get_client_memptr(wan_client, clt_indx)->route_rule_set_v6 = 0;
- }
- }
-
- return IPACM_SUCCESS;
- }
-
- int handle_wan_hdr_init(uint8_t *mac_addr);
- int handle_wan_client_ipaddr(ipacm_event_data_all *data);
- int handle_wan_client_route_rule(uint8_t *mac_addr, ipa_ip_type iptype);
-
- /* handle new_address event */
- int handle_addr_evt(ipacm_event_data_addr *data);
-
- /* wan default route/filter rule configuration */
- int handle_route_add_evt(ipa_ip_type iptype);
-
- /* construct complete STA ethernet header */
- int handle_sta_header_add_evt();
-
- bool check_dft_firewall_rules_attr_mask(IPACM_firewall_conf_t *firewall_config);
-
-#ifdef FEATURE_IPA_ANDROID
- /* wan posting supported tether_iface */
- int post_wan_up_tether_evt(ipa_ip_type iptype, int ipa_if_num_tether);
-
- int post_wan_down_tether_evt(ipa_ip_type iptype, int ipa_if_num_tether);
-#endif
- int config_dft_firewall_rules(ipa_ip_type iptype);
-
- /* configure the initial firewall filter rules */
- int config_dft_embms_rules(ipa_ioc_add_flt_rule *pFilteringTable_v4, ipa_ioc_add_flt_rule *pFilteringTable_v6);
-
- int handle_route_del_evt(ipa_ip_type iptype);
-
- int del_dft_firewall_rules(ipa_ip_type iptype);
-
- int handle_down_evt();
-
- /*handle wan-iface down event */
- int handle_down_evt_ex();
-
- /* wan default route/filter rule delete */
- int handle_route_del_evt_ex(ipa_ip_type iptype);
-
- /* configure the initial firewall filter rules */
- int config_dft_firewall_rules_ex(struct ipa_flt_rule_add* rules, int rule_offset,
- ipa_ip_type iptype);
-
- /* init filtering rule in wan dl filtering table */
- int init_fl_rule_ex(ipa_ip_type iptype);
-
- /* add ICMP and ALG rules in wan dl filtering table */
- int add_icmp_alg_rules(struct ipa_flt_rule_add* rules, int rule_offset, ipa_ip_type iptype);
-
- /* query extended property */
- int query_ext_prop();
-
- ipa_ioc_query_intf_ext_props *ext_prop;
-
- int config_wan_firewall_rule(ipa_ip_type iptype);
-
- int del_wan_firewall_rule(ipa_ip_type iptype);
-
- int add_dft_filtering_rule(struct ipa_flt_rule_add* rules, int rule_offset, ipa_ip_type iptype);
-
- int add_tcpv6_filtering_rule(struct ipa_flt_rule_add* rules, int rule_offset);
-
- int install_wan_filtering_rule(bool is_sw_routing);
-
- void change_to_network_order(ipa_ip_type iptype, ipa_rule_attrib* attrib);
-
- bool is_global_ipv6_addr(uint32_t* ipv6_addr);
-
- void handle_wlan_SCC_MCC_switch(bool, ipa_ip_type);
-
- void handle_wan_client_SCC_MCC_switch(bool, ipa_ip_type);
-
- int handle_network_stats_evt();
-
- int m_fd_ipa;
-
- int handle_network_stats_update(ipa_get_apn_data_stats_resp_msg_v01 *data);
-
- /* construct dummy ethernet header */
- int add_dummy_rx_hdr();
-};
-
-#endif /* IPACM_WAN_H */
diff --git a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Wlan.h b/data-ipa-cfg-mgr/ipacm/inc/IPACM_Wlan.h
deleted file mode 100644
index 94623f9..0000000
--- a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Wlan.h
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
-Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*!
- @file
- IPACM_Wlan.h
-
- @brief
- This file implements the WLAN iface functionality.
-
- @Author
- Skylar Chang
-
-*/
-#ifndef IPACM_WLAN_H
-#define IPACM_WLAN_H
-
-#include
-#include
-#include
-#include "IPACM_Routing.h"
-#include "IPACM_Filtering.h"
-#include "IPACM_Lan.h"
-#include "IPACM_Iface.h"
-#include "IPACM_Conntrack_NATApp.h"
-
-typedef struct _wlan_client_rt_hdl
-{
- uint32_t wifi_rt_rule_hdl_v4;
- uint32_t wifi_rt_rule_hdl_v6[IPV6_NUM_ADDR];
- uint32_t wifi_rt_rule_hdl_v6_wan[IPV6_NUM_ADDR];
-}wlan_client_rt_hdl;
-
-typedef struct _ipa_wlan_client
-{
- ipacm_event_data_wlan_ex* p_hdr_info;
- uint8_t mac[IPA_MAC_ADDR_SIZE];
- uint32_t v4_addr;
- uint32_t v6_addr[IPV6_NUM_ADDR][4];
- uint32_t hdr_hdl_v4;
- uint32_t hdr_hdl_v6;
- bool route_rule_set_v4;
- int route_rule_set_v6;
- bool ipv4_set;
- int ipv6_set;
- bool ipv4_header_set;
- bool ipv6_header_set;
- bool power_save_set;
- wlan_client_rt_hdl wifi_rt_hdl[0]; /* depends on number of tx properties */
-}ipa_wlan_client;
-
-/* wlan iface */
-class IPACM_Wlan : public IPACM_Lan
-{
-
-public:
-
- IPACM_Wlan(int iface_index);
- virtual ~IPACM_Wlan(void);
-
- static int total_num_wifi_clients;
-
- void event_callback(ipa_cm_event_id event, void *data);
-
- bool is_guest_ap();
-
-private:
-
- bool m_is_guest_ap;
-
- /* handle wlan access mode switch in ethernet bridging*/
- void eth_bridge_handle_wlan_mode_switch();
-
-
- int wlan_client_len;
- ipa_wlan_client *wlan_client;
-
- int header_name_count;
- uint32_t num_wifi_client;
-
- int wlan_ap_index;
-
- static int num_wlan_ap_iface;
-
- NatApp *Nat_App;
-
- inline ipa_wlan_client* get_client_memptr(ipa_wlan_client *param, int cnt)
- {
- char *ret = ((char *)param) + (wlan_client_len * cnt);
- return (ipa_wlan_client *)ret;
- }
-
- inline int get_wlan_client_index(uint8_t *mac_addr)
- {
- int cnt;
- int num_wifi_client_tmp = num_wifi_client;
-
- IPACMDBG_H("Passed MAC %02x:%02x:%02x:%02x:%02x:%02x\n",
- mac_addr[0], mac_addr[1], mac_addr[2],
- mac_addr[3], mac_addr[4], mac_addr[5]);
-
- for(cnt = 0; cnt < num_wifi_client_tmp; cnt++)
- {
- IPACMDBG_H("stored MAC %02x:%02x:%02x:%02x:%02x:%02x\n",
- get_client_memptr(wlan_client, cnt)->mac[0],
- get_client_memptr(wlan_client, cnt)->mac[1],
- get_client_memptr(wlan_client, cnt)->mac[2],
- get_client_memptr(wlan_client, cnt)->mac[3],
- get_client_memptr(wlan_client, cnt)->mac[4],
- get_client_memptr(wlan_client, cnt)->mac[5]);
-
- if(memcmp(get_client_memptr(wlan_client, cnt)->mac,
- mac_addr,
- sizeof(get_client_memptr(wlan_client, cnt)->mac)) == 0)
- {
- IPACMDBG_H("Matched client index: %d\n", cnt);
- return cnt;
- }
- }
-
- return IPACM_INVALID_INDEX;
- }
-
- inline int delete_default_qos_rtrules(int clt_indx, ipa_ip_type iptype)
- {
- uint32_t tx_index;
- uint32_t rt_hdl;
- int num_v6;
-
- if(iptype == IPA_IP_v4)
- {
- for(tx_index = 0; tx_index < iface_query->num_tx_props; tx_index++)
- {
- if((tx_prop->tx[tx_index].ip == IPA_IP_v4) && (get_client_memptr(wlan_client, clt_indx)->route_rule_set_v4==true)) /* for ipv4 */
- {
- IPACMDBG_H("Delete client index %d ipv4 Qos rules for tx:%d \n",clt_indx,tx_index);
- rt_hdl = get_client_memptr(wlan_client, clt_indx)->wifi_rt_hdl[tx_index].wifi_rt_rule_hdl_v4;
-
- if(m_routing.DeleteRoutingHdl(rt_hdl, IPA_IP_v4) == false)
- {
- return IPACM_FAILURE;
- }
- }
- } /* end of for loop */
-
- /* clean the 4 Qos ipv4 RT rules for client:clt_indx */
- if(get_client_memptr(wlan_client, clt_indx)->route_rule_set_v4==true) /* for ipv4 */
- {
- get_client_memptr(wlan_client, clt_indx)->route_rule_set_v4 = false;
- }
- }
-
- if(iptype == IPA_IP_v6)
- {
- for(tx_index = 0; tx_index < iface_query->num_tx_props; tx_index++)
- {
-
- if((tx_prop->tx[tx_index].ip == IPA_IP_v6) && (get_client_memptr(wlan_client, clt_indx)->route_rule_set_v6 != 0)) /* for ipv6 */
- {
- for(num_v6 =0;num_v6 < get_client_memptr(wlan_client, clt_indx)->route_rule_set_v6;num_v6++)
- {
- IPACMDBG_H("Delete client index %d ipv6 Qos rules for %d-st ipv6 for tx:%d\n", clt_indx,num_v6,tx_index);
- rt_hdl = get_client_memptr(wlan_client, clt_indx)->wifi_rt_hdl[tx_index].wifi_rt_rule_hdl_v6[num_v6];
- if(m_routing.DeleteRoutingHdl(rt_hdl, IPA_IP_v6) == false)
- {
- return IPACM_FAILURE;
- }
-
- rt_hdl = get_client_memptr(wlan_client, clt_indx)->wifi_rt_hdl[tx_index].wifi_rt_rule_hdl_v6_wan[num_v6];
- if(m_routing.DeleteRoutingHdl(rt_hdl, IPA_IP_v6) == false)
- {
- return IPACM_FAILURE;
- }
- }
-
- }
- } /* end of for loop */
-
- /* clean the 4 Qos ipv6 RT rules for client:clt_indx */
- if(get_client_memptr(wlan_client, clt_indx)->route_rule_set_v6 != 0) /* for ipv6 */
- {
- get_client_memptr(wlan_client, clt_indx)->route_rule_set_v6 = 0;
- }
- }
-
- return IPACM_SUCCESS;
- }
-
- /* for handle wifi client initial,copy all partial headers (tx property) */
- int handle_wlan_client_init_ex(ipacm_event_data_wlan_ex *data);
-
- /*handle wifi client */
- int handle_wlan_client_ipaddr(ipacm_event_data_all *data);
-
- /*handle wifi client routing rule*/
- int handle_wlan_client_route_rule(uint8_t *mac_addr, ipa_ip_type iptype);
-
- /*handle wifi client power-save mode*/
- int handle_wlan_client_pwrsave(uint8_t *mac_addr);
-
- /*handle wifi client del mode*/
- int handle_wlan_client_down_evt(uint8_t *mac_addr);
-
- /*handle wlan iface down event*/
- int handle_down_evt();
-
- /*handle reset wifi-client rt-rules */
- int handle_wlan_client_reset_rt(ipa_ip_type iptype);
-
- void handle_SCC_MCC_switch(ipa_ip_type);
-
-#ifdef FEATURE_IPACM_RESTART
- /*query wlan-clients */
- int ipa_query_wlan_client();
-#endif
-
-};
-
-
-#endif /* IPACM_WLAN_H */
diff --git a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Xml.h b/data-ipa-cfg-mgr/ipacm/inc/IPACM_Xml.h
deleted file mode 100644
index 64c00ed..0000000
--- a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Xml.h
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
-Copyright (c) 2013, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*!
- @file
- IPACM_Xml.h
-
- @brief
- This file implements the XML specific parsing functionality.
-
- @Author
- Skylar Chang/Shihuan Liu
-
-*/
-#ifndef IPACM_XML_H
-#define IPACM_XML_H
-
-#include
-#include "IPACM_Defs.h"
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-#define IPACM_ASSERT(a) \
-if (!(a)) { \
- fprintf(stderr, "%s, %d: assertion (a) failed!", \
- __FILE__, \
- __LINE__); \
- abort(); \
-}
-
-/* Max allowed size of the XML file (2 MB) */
-#define IPACM_XML_MAX_FILESIZE (2 << 20)
-#define IPACM_MAX_FIREWALL_ENTRIES 50
-#define IPACM_IPV6_ADDR_LEN 16
-
-/* Defines for clipping space or space & quotes (single, double) */
-#define IPACM_XML_CLIP_SPACE " "
-#define IPACM_XML_CLIP_SPACE_QUOTES " '\""
-
-#define MAX_XML_STR_LEN 120
-
-/* IPA Config Entries */
-#define system_TAG "system"
-#define ODU_TAG "ODUCFG"
-#define ODUMODE_TAG "OduMode"
-#define ODUEMBMS_OFFLOAD_TAG "eMBMS_offload"
-#define ODU_ROUTER_TAG "router"
-#define ODU_BRIDGE_TAG "bridge"
-#define IPACMCFG_TAG "IPACM"
-#define IPACMIFACECFG_TAG "IPACMIface"
-#define IFACE_TAG "Iface"
-#define NAME_TAG "Name"
-#define CATEGORY_TAG "Category"
-#define MODE_TAG "Mode"
-#define IPACMPRIVATESUBNETCFG_TAG "IPACMPrivateSubnet"
-#define SUBNET_TAG "Subnet"
-#define SUBNETADDRESS_TAG "SubnetAddress"
-#define SUBNETMASK_TAG "SubnetMask"
-#define WANIF_TAG "WAN"
-#define LANIF_TAG "LAN"
-#define WLANIF_TAG "WLAN"
-#define WLAN_FULL_MODE_TAG "full"
-#define WLAN_INTERNET_MODE_TAG "internet"
-#define WLAN_MODE_TAG "WlanMode"
-#define VIRTUALIF_TAG "VIRTUAL"
-#define UNKNOWNIF_TAG "UNKNOWN"
-#define ODUIF_TAG "ODU"
-#define EMBMSIF_TAG "EMBMS"
-#define ETHIF_TAG "ETH"
-#define IFACE_ROUTER_MODE_TAG "ROUTER"
-#define IFACE_BRIDGE_MODE_TAG "BRIDGE"
-#define IPACMALG_TAG "IPACMALG"
-#define ALG_TAG "ALG"
-#define Protocol_TAG "Protocol"
-#define Port_TAG "Port"
-#define TCP_PROTOCOL_TAG "TCP"
-#define UDP_PROTOCOL_TAG "UDP"
-
-/* FIREWALL Config Entries */
-#define Firewall_TAG "Firewall"
-#define MobileAPFirewallCfg_TAG "MobileAPFirewallCfg"
-#define FirewallEnabled_TAG "FirewallEnabled"
-#define FirewallPktsAllowed_TAG "FirewallPktsAllowed"
-
-#define IPFamily_TAG "IPFamily"
-#define IPV4SourceAddress_TAG "IPV4SourceAddress"
-#define IPV4SourceIPAddress_TAG "IPV4SourceIPAddress"
-#define IPV4SourceSubnetMask_TAG "IPV4SourceSubnetMask"
-
-#define IPV4DestinationAddress_TAG "IPV4DestinationAddress"
-#define IPV4DestinationIPAddress_TAG "IPV4DestinationIPAddress"
-#define IPV4DestinationSubnetMask_TAG "IPV4DestinationSubnetMask"
-
-#define IPV4TypeOfService_TAG "IPV4TypeOfService"
-#define TOSValue_TAG "TOSValue"
-#define TOSMask_TAG "TOSMask"
-
-#define IPV4NextHeaderProtocol_TAG "IPV4NextHeaderProtocol"
-
-#define IPV6SourceAddress_TAG "IPV6SourceAddress"
-#define IPV6SourceIPAddress_TAG "IPV6SourceIPAddress"
-#define IPV6SourcePrefix_TAG "IPV6SourcePrefix"
-
-#define IPV6DestinationAddress_TAG "IPV6DestinationAddress"
-#define IPV6DestinationIPAddress_TAG "IPV6DestinationIPAddress"
-#define IPV6DestinationPrefix_TAG "IPV6DestinationPrefix"
-
-#define IPV6TrafficClass_TAG "IPV6TrafficClass"
-#define TrfClsValue_TAG "TrfClsValue"
-#define TrfClsMask_TAG "TrfClsMask"
-
-#define IPV6NextHeaderProtocol_TAG "IPV6NextHeaderProtocol"
-
-#define TCPSource_TAG "TCPSource"
-#define TCPSourcePort_TAG "TCPSourcePort"
-#define TCPSourceRange_TAG "TCPSourceRange"
-
-#define TCPDestination_TAG "TCPDestination"
-#define TCPDestinationPort_TAG "TCPDestinationPort"
-#define TCPDestinationRange_TAG "TCPDestinationRange"
-
-#define UDPSource_TAG "UDPSource"
-#define UDPSourcePort_TAG "UDPSourcePort"
-#define UDPSourceRange_TAG "UDPSourceRange"
-
-#define UDPDestination_TAG "UDPDestination"
-#define UDPDestinationPort_TAG "UDPDestinationPort"
-#define UDPDestinationRange_TAG "UDPDestinationRange"
-
-#define ICMPType_TAG "ICMPType"
-#define ICMPCode_TAG "ICMPCode"
-
-#define ESP_TAG "ESP"
-#define ESPSPI_TAG "ESPSPI"
-
-#define TCP_UDPSource_TAG "TCP_UDPSource"
-#define TCP_UDPSourcePort_TAG "TCP_UDPSourcePort"
-#define TCP_UDPSourceRange_TAG "TCP_UDPSourceRange"
-
-#define TCP_UDPDestination_TAG "TCP_UDPDestination"
-#define TCP_UDPDestinationPort_TAG "TCP_UDPDestinationPort"
-#define TCP_UDPDestinationRange_TAG "TCP_UDPDestinationRange"
-
-#define IPACMNat_TAG "IPACMNAT"
-#define NAT_MaxEntries_TAG "MaxNatEntries"
-
-#define IP_PassthroughFlag_TAG "IPPassthroughFlag"
-#define IP_PassthroughMode_TAG "IPPassthroughMode"
-
-/*---------------------------------------------------------------------------
- IP protocol numbers - use in dss_socket() to identify protocols.
- Also contains the extension header types for IPv6.
----------------------------------------------------------------------------*/
-typedef enum
-{
- IPACM_FIREWALL_IPV6_BASE_HDR = 4, /* IPv6 Base Header */
- IPACM_FIREWALL_IPPROTO_HOP_BY_HOP_OPT_HDR = 0, /* Hop-by-hop Option Header */
- IPACM_FIREWALL_IPPROTO_ICMP = 1, /* ICMP protocol */
- IPACM_FIREWALL_IPPROTO_IGMP = 2, /* IGMP protocol */
- IPACM_FIREWALL_IPPROTO_IP = IPACM_FIREWALL_IPV6_BASE_HDR, /* IPv4 */
- IPACM_FIREWALL_IPPROTO_TCP = 6, /* TCP Protocol */
- IPACM_FIREWALL_IPPROTO_UDP = 17, /* UDP Protocol */
- IPACM_FIREWALL_IPPROTO_IPV6 = 41, /* IPv6 */
- IPACM_FIREWALL_IPPROTO_ROUTING_HDR = 43, /* Routing Header */
- IPACM_FIREWALL_IPPROTO_FRAG_HDR = 44, /* Fragmentation Header */
- IPACM_FIREWALL_IPPROTO_GRE = 47, /* GRE Protocol */
- IPACM_FIREWALL_IPPROTO_ESP = 50, /* ESP Protocol */
- IPACM_FIREWALL_IPPROTO_AH = 51, /* Authentication Header */
- IPACM_FIREWALL_IPPROTO_ICMP6 = 58, /* ICMPv6 */
- IPACM_FIREWALL_NO_NEXT_HDR = 59, /* No Next Header for IPv6 */
- IPACM_FIREWALL_IPPROTO_DEST_OPT_HDR = 60, /* Destination Options Header */
- IPACM_FIREWALL_IPPROTO_MOBILITY_HDR = 135, /* Mobility Header */
- IPACM_FIREWALL_IPPROTO_TCP_UDP = 253 /* Unspecified protocol used for IPACM */
-} ipacm_firewall_ip_protocol_enum_type;
-
-/* define as mobileap firewall rule format*/
-typedef enum
-{
- IP_V4 = 4,
- IP_V6 = 6
-} firewall_ip_version_enum;
-
-/*---------------------------------------------------------------------------
- Extended FireWall Entry Configuration.
----------------------------------------------------------------------------*/
-typedef struct
-{
- struct ipa_rule_attrib attrib;
- firewall_ip_version_enum ip_vsn;
-} IPACM_extd_firewall_entry_conf_t;
-
-
-/*---------------------------------------------------------------------------
- Extended FireWall configuration.
----------------------------------------------------------------------------*/
-typedef union
-{
- IPACM_extd_firewall_entry_conf_t extd_firewall_entry;
-} IPACM_extd_firewall_conf_t;
-
-
-typedef struct
-{
- char firewall_config_file[IPA_MAX_FILE_LEN];
- uint8_t num_extd_firewall_entries;
- IPACM_extd_firewall_entry_conf_t extd_firewall_entries[IPACM_MAX_FIREWALL_ENTRIES];
- bool rule_action_accept;
- bool firewall_enable;
-} IPACM_firewall_conf_t;
-
-
-
-typedef struct
-{
- uint8_t num_iface_entries;
- ipa_ifi_dev_name_t iface_entries[IPA_MAX_IFACE_ENTRIES];
-} ipacm_iface_conf_t;
-
-typedef struct
-{
- uint8_t num_subnet_entries;
- ipa_private_subnet private_subnet_entries[IPA_MAX_PRIVATE_SUBNET_ENTRIES];
-} ipacm_private_subnet_conf_t;
-
-typedef struct
-{
- uint8_t protocol;
- uint16_t port;
-} ipacm_alg;
-
-typedef struct
-{
- uint8_t num_alg_entries;
- ipacm_alg alg_entries[IPA_MAX_ALG_ENTRIES];
-} ipacm_alg_conf_t;
-
-
-typedef struct _IPACM_conf_t
-{
- ipacm_iface_conf_t iface_config;
- ipacm_private_subnet_conf_t private_subnet_config;
- ipacm_alg_conf_t alg_config;
- int nat_max_entries;
- bool odu_enable;
- bool router_mode_enable;
- bool odu_embms_enable;
- int num_wlan_guest_ap;
- bool ip_passthrough_mode;
-} IPACM_conf_t;
-
-/* This function read IPACM XML configuration*/
-int ipacm_read_cfg_xml
-(
- char *xml_file, /* Filename and path */
- IPACM_conf_t *config /* Mobile AP config data */
-);
-
-/* This function reads QCMAP Firewall XML and store in IPACM Firewall stucture */
-int IPACM_read_firewall_xml
-(
- char *xml_file, /* Filename and path */
- IPACM_firewall_conf_t *config /* Mobile AP config data */
-);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif //IPACM_XML
diff --git a/data-ipa-cfg-mgr/ipacm/src/Android.mk b/data-ipa-cfg-mgr/ipacm/src/Android.mk
deleted file mode 100644
index d972cdd..0000000
--- a/data-ipa-cfg-mgr/ipacm/src/Android.mk
+++ /dev/null
@@ -1,114 +0,0 @@
-BOARD_PLATFORM_LIST := msm8909
-BOARD_PLATFORM_LIST += msm8916
-BOARD_PLATFORM_LIST += msm8917
-BOARD_IPAv3_LIST := msm8998
-BOARD_IPAv3_LIST += sdm845
-BOARD_IPAv3_LIST += sdm710
-BOARD_IPAv3_LIST += msmnile
-BOARD_IPAv3_LIST += $(MSMSTEPPE)
-
-ifneq ($(call is-board-platform-in-list,$(BOARD_PLATFORM_LIST)),true)
-ifneq (,$(filter $(QCOM_BOARD_PLATFORMS),$(TARGET_BOARD_PLATFORM)))
-ifneq (, $(filter aarch64 arm arm64, $(TARGET_ARCH)))
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_C_INCLUDES := $(LOCAL_PATH)/../src
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/../inc
-
-LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
-LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
-
-LOCAL_CFLAGS := -v
-LOCAL_CFLAGS += -DFEATURE_IPA_ANDROID
-LOCAL_CFLAGS += -DFEATURE_IPACM_RESTART
-LOCAL_CFLAGS += -DFEATURE_IPACM_HAL -Wall -Werror -Wno-error=macro-redefined
-ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
-LOCAL_CFLAGS += -DDEBUG
-endif
-
-ifeq ($(call is-board-platform-in-list,$(BOARD_IPAv3_LIST)),true)
-LOCAL_CFLAGS += -DFEATURE_IPA_V3
-endif
-
-filetoadd = bionic/libc/kernel/arch-arm/asm/posix_types.h
-LOCAL_CFLAGS += $(shell if [ -a $(filetoadd) ] ; then echo -include $(filetoadd) ; fi ;)
-filetoadd = bionic/libc/kernel/arch-arm/asm/byteorder.h
-LOCAL_CFLAGS += $(shell if [ -a $(filetoadd) ] ; then echo -include $(filetoadd) ; fi ;)
-
-LOCAL_SRC_FILES := IPACM_Main.cpp \
- IPACM_EvtDispatcher.cpp \
- IPACM_Config.cpp \
- IPACM_CmdQueue.cpp \
- IPACM_Filtering.cpp \
- IPACM_Routing.cpp \
- IPACM_Header.cpp \
- IPACM_Lan.cpp \
- IPACM_Iface.cpp \
- IPACM_Wlan.cpp \
- IPACM_Wan.cpp \
- IPACM_IfaceManager.cpp \
- IPACM_Neighbor.cpp \
- IPACM_Netlink.cpp \
- IPACM_Xml.cpp \
- IPACM_Conntrack_NATApp.cpp\
- IPACM_ConntrackClient.cpp \
- IPACM_ConntrackListener.cpp \
- IPACM_Log.cpp \
- IPACM_OffloadManager.cpp
-
-LOCAL_MODULE := ipacm
-LOCAL_CLANG := false
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_SHARED_LIBRARIES := liboffloadhal
-LOCAL_SHARED_LIBRARIES += libipanat
-LOCAL_SHARED_LIBRARIES += libxml2
-LOCAL_SHARED_LIBRARIES += libnfnetlink
-LOCAL_SHARED_LIBRARIES += libnetfilter_conntrack
-LOCAL_SHARED_LIBRARIES += libhwbinder \
- libhidlbase \
- libhidltransport \
- liblog \
- libcutils \
- libdl \
- libbase \
- libutils \
- libhardware_legacy \
- libhardware \
- android.hardware.tetheroffload.config@1.0 \
- android.hardware.tetheroffload.control@1.0
-
-LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_EXECUTABLES)
-
-LOCAL_CLANG := true
-include $(BUILD_EXECUTABLE)
-
-################################################################################
-
-define ADD_TEST
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := $1
-LOCAL_SRC_FILES := $1
-LOCAL_MODULE_CLASS := ipacm
-LOCAL_MODULE_TAGS := debug
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)
-include $(BUILD_PREBUILT)
-
-endef
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := IPACM_cfg.xml
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_ETC)
-LOCAL_MODULE_TAGS := optional
-LOCAL_SRC_FILES := $(LOCAL_MODULE)
-LOCAL_MODULE_OWNER := ipacm
-include $(BUILD_PREBUILT)
-
-endif # $(TARGET_ARCH)
-endif
-endif
diff --git a/data-ipa-cfg-mgr/ipacm/src/IPACM_CmdQueue.cpp b/data-ipa-cfg-mgr/ipacm/src/IPACM_CmdQueue.cpp
deleted file mode 100644
index cab78e2..0000000
--- a/data-ipa-cfg-mgr/ipacm/src/IPACM_CmdQueue.cpp
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
-Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*!
- @file
- IPACM_CmdQueue.cpp
-
- @brief
- This file implements the IPAM Comment Queue functionality
-
- @Author
- Sunil
-
-*/
-#include
-#include "IPACM_CmdQueue.h"
-#include "IPACM_Log.h"
-#include "IPACM_Iface.h"
-
-pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
-pthread_cond_t cond_var = PTHREAD_COND_INITIALIZER;
-
-MessageQueue* MessageQueue::inst_internal = NULL;
-MessageQueue* MessageQueue::inst_external = NULL;
-
-MessageQueue* MessageQueue::getInstanceInternal()
-{
- if(inst_internal == NULL)
- {
- inst_internal = new MessageQueue();
- if(inst_internal == NULL)
- {
- IPACMERR("unable to create internal Message Queue instance\n");
- return NULL;
- }
- }
-
- return inst_internal;
-}
-
-MessageQueue* MessageQueue::getInstanceExternal()
-{
- if(inst_external == NULL)
- {
- inst_external = new MessageQueue();
- if(inst_external == NULL)
- {
- IPACMERR("unable to create external Message Queue instance\n");
- return NULL;
- }
- }
-
- return inst_external;
-}
-
-void MessageQueue::enqueue(Message *item)
-{
- if(!Head)
- {
- Tail = item;
- Head = item;
- }
- else
- {
- if(Tail == NULL)
- {
- IPACMDBG("Tail is null\n");
- Head->setnext(item);
- }
- else
- {
- Tail->setnext(item);
- }
- Tail = item;
- }
-}
-
-
-Message* MessageQueue::dequeue(void)
-{
- if(Head == NULL)
- {
- return NULL;
- }
- else
- {
- Message *tmp = Head;
- Head = Head->getnext();
-
- return tmp;
- }
-}
-
-
-void* MessageQueue::Process(void *param)
-{
- MessageQueue *MsgQueueInternal = NULL;
- MessageQueue *MsgQueueExternal = NULL;
- Message *item = NULL;
- param = NULL;
- const char *eventName = NULL;
-
- IPACMDBG("MessageQueue::Process()\n");
-
- MsgQueueInternal = MessageQueue::getInstanceInternal();
- if(MsgQueueInternal == NULL)
- {
- IPACMERR("unable to start internal cmd queue process\n");
- return NULL;
- }
-
- MsgQueueExternal = MessageQueue::getInstanceExternal();
- if(MsgQueueExternal == NULL)
- {
- IPACMERR("unable to start external cmd queue process\n");
- return NULL;
- }
-
- while(1)
- {
- if(pthread_mutex_lock(&mutex) != 0)
- {
- IPACMERR("unable to lock the mutex\n");
- return NULL;
- }
-
- item = MsgQueueInternal->dequeue();
- if(item == NULL)
- {
- item = MsgQueueExternal->dequeue();
- if(item)
- {
- eventName = IPACM_Iface::ipacmcfg->getEventName(item->evt.data.event);
- if (eventName != NULL)
- {
- IPACMDBG("Get event %s from external queue.\n",
- eventName);
- }
- }
- }
- else
- {
- eventName = IPACM_Iface::ipacmcfg->getEventName(item->evt.data.event);
- if (eventName != NULL)
- {
- IPACMDBG("Get event %s from internal queue.\n",
- eventName);
- }
- }
-
- if(item == NULL)
- {
- IPACMDBG("Waiting for Message\n");
-
- if(pthread_cond_wait(&cond_var, &mutex) != 0)
- {
- IPACMERR("unable to lock the mutex\n");
-
- if(pthread_mutex_unlock(&mutex) != 0)
- {
- IPACMERR("unable to unlock the mutex\n");
- return NULL;
- }
-
- return NULL;
- }
-
- if(pthread_mutex_unlock(&mutex) != 0)
- {
- IPACMERR("unable to unlock the mutex\n");
- return NULL;
- }
-
- }
- else
- {
- if(pthread_mutex_unlock(&mutex) != 0)
- {
- IPACMERR("unable to unlock the mutex\n");
- return NULL;
- }
-
- IPACMDBG("Processing item %pK event ID: %d\n",item,item->evt.data.event);
- item->evt.callback_ptr(&item->evt.data);
- delete item;
- item = NULL;
- }
-
- } /* Go forever until a termination indication is received */
-
-}
diff --git a/data-ipa-cfg-mgr/ipacm/src/IPACM_Config.cpp b/data-ipa-cfg-mgr/ipacm/src/IPACM_Config.cpp
deleted file mode 100644
index 90d3647..0000000
--- a/data-ipa-cfg-mgr/ipacm/src/IPACM_Config.cpp
+++ /dev/null
@@ -1,900 +0,0 @@
-/*
-Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*!
- @file
- IPACM_Config.cpp
-
- @brief
- This file implements the IPACM Configuration from XML file
-
- @Author
- Skylar Chang
-
-*/
-#include
-#include
-#include
-#include
-#include
-
-IPACM_Config *IPACM_Config::pInstance = NULL;
-const char *IPACM_Config::DEVICE_NAME = "/dev/ipa";
-const char *IPACM_Config::DEVICE_NAME_ODU = "/dev/odu_ipa_bridge";
-
-#define __stringify(x...) #x
-
-const char *ipacm_event_name[] = {
- __stringify(IPA_CFG_CHANGE_EVENT), /* NULL */
- __stringify(IPA_PRIVATE_SUBNET_CHANGE_EVENT), /* ipacm_event_data_fid */
- __stringify(IPA_FIREWALL_CHANGE_EVENT), /* NULL */
- __stringify(IPA_LINK_UP_EVENT), /* ipacm_event_data_fid */
- __stringify(IPA_LINK_DOWN_EVENT), /* ipacm_event_data_fid */
- __stringify(IPA_USB_LINK_UP_EVENT), /* ipacm_event_data_fid */
- __stringify(IPA_BRIDGE_LINK_UP_EVENT), /* ipacm_event_data_all */
- __stringify(IPA_WAN_EMBMS_LINK_UP_EVENT), /* ipacm_event_data_mac */
- __stringify(IPA_ADDR_ADD_EVENT), /* ipacm_event_data_addr */
- __stringify(IPA_ADDR_DEL_EVENT), /* no use */
- __stringify(IPA_ROUTE_ADD_EVENT), /* ipacm_event_data_addr */
- __stringify(IPA_ROUTE_DEL_EVENT), /* ipacm_event_data_addr */
- __stringify(IPA_WAN_UPSTREAM_ROUTE_ADD_EVENT), /* ipacm_event_data_fid */
- __stringify(IPA_WAN_UPSTREAM_ROUTE_DEL_EVENT), /* ipacm_event_data_fid */
- __stringify(IPA_WLAN_AP_LINK_UP_EVENT), /* ipacm_event_data_mac */
- __stringify(IPA_WLAN_STA_LINK_UP_EVENT), /* ipacm_event_data_mac */
- __stringify(IPA_WLAN_LINK_DOWN_EVENT), /* ipacm_event_data_mac */
- __stringify(IPA_WLAN_CLIENT_ADD_EVENT), /* ipacm_event_data_mac */
- __stringify(IPA_WLAN_CLIENT_ADD_EVENT_EX), /* ipacm_event_data_wlan_ex */
- __stringify(IPA_WLAN_CLIENT_DEL_EVENT), /* ipacm_event_data_mac */
- __stringify(IPA_WLAN_CLIENT_POWER_SAVE_EVENT), /* ipacm_event_data_mac */
- __stringify(IPA_WLAN_CLIENT_RECOVER_EVENT), /* ipacm_event_data_mac */
- __stringify(IPA_NEW_NEIGH_EVENT), /* ipacm_event_data_all */
- __stringify(IPA_DEL_NEIGH_EVENT), /* ipacm_event_data_all */
- __stringify(IPA_NEIGH_CLIENT_IP_ADDR_ADD_EVENT), /* ipacm_event_data_all */
- __stringify(IPA_NEIGH_CLIENT_IP_ADDR_DEL_EVENT), /* ipacm_event_data_all */
- __stringify(IPA_SW_ROUTING_ENABLE), /* NULL */
- __stringify(IPA_SW_ROUTING_DISABLE), /* NULL */
- __stringify(IPA_PROCESS_CT_MESSAGE), /* ipacm_ct_evt_data */
- __stringify(IPA_PROCESS_CT_MESSAGE_V6), /* ipacm_ct_evt_data */
- __stringify(IPA_LAN_TO_LAN_NEW_CONNECTION), /* ipacm_event_connection */
- __stringify(IPA_LAN_TO_LAN_DEL_CONNECTION), /* ipacm_event_connection */
- __stringify(IPA_WLAN_SWITCH_TO_SCC), /* No Data */
- __stringify(IPA_WLAN_SWITCH_TO_MCC), /* No Data */
- __stringify(IPA_CRADLE_WAN_MODE_SWITCH), /* ipacm_event_cradle_wan_mode */
- __stringify(IPA_WAN_XLAT_CONNECT_EVENT), /* ipacm_event_data_fid */
- __stringify(IPA_TETHERING_STATS_UPDATE_EVENT), /* ipacm_event_data_fid */
- __stringify(IPA_NETWORK_STATS_UPDATE_EVENT), /* ipacm_event_data_fid */
- __stringify(IPA_DOWNSTREAM_ADD), /* ipacm_event_ipahal_stream */
- __stringify(IPA_DOWNSTREAM_DEL), /* ipacm_event_ipahal_stream */
- __stringify(IPA_EXTERNAL_EVENT_MAX),
- __stringify(IPA_HANDLE_WAN_UP), /* ipacm_event_iface_up */
- __stringify(IPA_HANDLE_WAN_DOWN), /* ipacm_event_iface_up */
- __stringify(IPA_HANDLE_WAN_UP_V6), /* NULL */
- __stringify(IPA_HANDLE_WAN_DOWN_V6), /* NULL */
- __stringify(IPA_HANDLE_WAN_UP_TETHER), /* ipacm_event_iface_up_tehter */
- __stringify(IPA_HANDLE_WAN_DOWN_TETHER), /* ipacm_event_iface_up_tehter */
- __stringify(IPA_HANDLE_WAN_UP_V6_TETHER), /* ipacm_event_iface_up_tehter */
- __stringify(IPA_HANDLE_WAN_DOWN_V6_TETHER), /* ipacm_event_iface_up_tehter */
- __stringify(IPA_HANDLE_WLAN_UP), /* ipacm_event_iface_up */
- __stringify(IPA_HANDLE_LAN_UP), /* ipacm_event_iface_up */
- __stringify(IPA_ETH_BRIDGE_IFACE_UP), /* ipacm_event_eth_bridge*/
- __stringify(IPA_ETH_BRIDGE_IFACE_DOWN), /* ipacm_event_eth_bridge*/
- __stringify(IPA_ETH_BRIDGE_CLIENT_ADD), /* ipacm_event_eth_bridge*/
- __stringify(IPA_ETH_BRIDGE_CLIENT_DEL), /* ipacm_event_eth_bridge*/
- __stringify(IPA_ETH_BRIDGE_WLAN_SCC_MCC_SWITCH), /* ipacm_event_eth_bridge*/
- __stringify(IPA_WLAN_FWR_SSR_BEFORE_SHUTDOWN_NOTICE), /* ipacm_event_iface*/
- __stringify(IPA_LAN_DELETE_SELF), /* ipacm_event_data_fid */
-#ifdef FEATURE_L2TP
- __stringify(IPA_ADD_VLAN_IFACE), /* ipa_ioc_vlan_iface_info */
- __stringify(IPA_DEL_VLAN_IFACE), /* ipa_ioc_vlan_iface_info */
- __stringify(IPA_ADD_L2TP_VLAN_MAPPING), /* ipa_ioc_l2tp_vlan_mapping_info */
- __stringify(IPA_DEL_L2TP_VLAN_MAPPING), /* ipa_ioc_l2tp_vlan_mapping_info */
- __stringify(IPA_VLAN_CLIENT_INFO), /* ipacm_event_data_all */
- __stringify(IPA_VLAN_IFACE_INFO), /* ipacm_event_data_all */
-#endif
- __stringify(IPACM_EVENT_MAX),
-};
-
-IPACM_Config::IPACM_Config()
-{
- iface_table = NULL;
- alg_table = NULL;
- pNatIfaces = NULL;
- memset(&ipa_client_rm_map_tbl, 0, sizeof(ipa_client_rm_map_tbl));
- memset(&ipa_rm_tbl, 0, sizeof(ipa_rm_tbl));
- ipa_rm_a2_check=0;
- ipacm_odu_enable = false;
- ipacm_odu_router_mode = false;
- ipa_num_wlan_guest_ap = 0;
-
- ipa_num_ipa_interfaces = 0;
- ipa_num_private_subnet = 0;
- ipa_num_alg_ports = 0;
- ipa_nat_max_entries = 0;
- ipa_nat_iface_entries = 0;
- ipa_sw_rt_enable = false;
- ipa_bridge_enable = false;
- isMCC_Mode = false;
- ipa_max_valid_rm_entry = 0;
-
- memset(&rt_tbl_default_v4, 0, sizeof(rt_tbl_default_v4));
- memset(&rt_tbl_lan_v4, 0, sizeof(rt_tbl_lan_v4));
- memset(&rt_tbl_wan_v4, 0, sizeof(rt_tbl_wan_v4));
- memset(&rt_tbl_v6, 0, sizeof(rt_tbl_v6));
- memset(&rt_tbl_wan_v6, 0, sizeof(rt_tbl_wan_v6));
- memset(&rt_tbl_wan_dl, 0, sizeof(rt_tbl_wan_dl));
- memset(&rt_tbl_odu_v4, 0, sizeof(rt_tbl_odu_v4));
- memset(&rt_tbl_odu_v6, 0, sizeof(rt_tbl_odu_v6));
-
- memset(&ext_prop_v4, 0, sizeof(ext_prop_v4));
- memset(&ext_prop_v6, 0, sizeof(ext_prop_v6));
-
- qmap_id = ~0;
-
- memset(flt_rule_count_v4, 0, IPA_CLIENT_MAX*sizeof(int));
- memset(flt_rule_count_v6, 0, IPA_CLIENT_MAX*sizeof(int));
- memset(bridge_mac, 0, IPA_MAC_ADDR_SIZE*sizeof(uint8_t));
-
- IPACMDBG_H(" create IPACM_Config constructor\n");
- return;
-}
-
-int IPACM_Config::Init(void)
-{
- /* Read IPACM Config file */
- char IPACM_config_file[IPA_MAX_FILE_LEN];
- IPACM_conf_t *cfg;
- cfg = (IPACM_conf_t *)malloc(sizeof(IPACM_conf_t));
- if(cfg == NULL)
- {
- IPACMERR("Unable to allocate cfg memory.\n");
- return IPACM_FAILURE;
- }
- uint32_t subnet_addr;
- uint32_t subnet_mask;
- int i, ret = IPACM_SUCCESS;
- struct in_addr in_addr_print;
-
- m_fd = open(DEVICE_NAME, O_RDWR);
- if (0 > m_fd)
- {
- IPACMERR("Failed opening %s.\n", DEVICE_NAME);
- }
- ver = GetIPAVer(true);
-#ifdef FEATURE_IPACM_HAL
- strlcpy(IPACM_config_file, "/vendor/etc/IPACM_cfg.xml", sizeof(IPACM_config_file));
-#else
- strlcpy(IPACM_config_file, "/etc/IPACM_cfg.xml", sizeof(IPACM_config_file));
-#endif
- IPACMDBG_H("\n IPACM XML file is %s \n", IPACM_config_file);
- if (IPACM_SUCCESS == ipacm_read_cfg_xml(IPACM_config_file, cfg))
- {
- IPACMDBG_H("\n IPACM XML read OK \n");
- }
- else
- {
- IPACMERR("\n IPACM XML read failed \n");
- ret = IPACM_FAILURE;
- goto fail;
- }
-
- /* Construct IPACM Iface table */
- ipa_num_ipa_interfaces = cfg->iface_config.num_iface_entries;
- if (iface_table != NULL)
- {
- free(iface_table);
- iface_table = NULL;
- IPACMDBG_H("RESET IPACM_Config::iface_table\n");
- }
- iface_table = (ipa_ifi_dev_name_t *)calloc(ipa_num_ipa_interfaces,
- sizeof(ipa_ifi_dev_name_t));
- if(iface_table == NULL)
- {
- IPACMERR("Unable to allocate iface_table memory.\n");
- ret = IPACM_FAILURE;
- goto fail;
- }
-
- for (i = 0; i < cfg->iface_config.num_iface_entries; i++)
- {
- strlcpy(iface_table[i].iface_name, cfg->iface_config.iface_entries[i].iface_name, sizeof(iface_table[i].iface_name));
- iface_table[i].if_cat = cfg->iface_config.iface_entries[i].if_cat;
- iface_table[i].if_mode = cfg->iface_config.iface_entries[i].if_mode;
- iface_table[i].wlan_mode = cfg->iface_config.iface_entries[i].wlan_mode;
- IPACMDBG_H("IPACM_Config::iface_table[%d] = %s, cat=%d, mode=%d wlan-mode=%d \n", i, iface_table[i].iface_name,
- iface_table[i].if_cat, iface_table[i].if_mode, iface_table[i].wlan_mode);
- /* copy bridge interface name to ipacmcfg */
- if( iface_table[i].if_cat == VIRTUAL_IF)
- {
- strlcpy(ipa_virtual_iface_name, iface_table[i].iface_name, sizeof(ipa_virtual_iface_name));
- IPACMDBG_H("ipa_virtual_iface_name(%s) \n", ipa_virtual_iface_name);
- }
- }
-
- /* Construct IPACM Private_Subnet table */
- memset(&private_subnet_table, 0, sizeof(private_subnet_table));
- ipa_num_private_subnet = cfg->private_subnet_config.num_subnet_entries;
-
- for (i = 0; i < cfg->private_subnet_config.num_subnet_entries; i++)
- {
- memcpy(&private_subnet_table[i].subnet_addr,
- &cfg->private_subnet_config.private_subnet_entries[i].subnet_addr,
- sizeof(cfg->private_subnet_config.private_subnet_entries[i].subnet_addr));
-
- memcpy(&private_subnet_table[i].subnet_mask,
- &cfg->private_subnet_config.private_subnet_entries[i].subnet_mask,
- sizeof(cfg->private_subnet_config.private_subnet_entries[i].subnet_mask));
-
- subnet_addr = htonl(private_subnet_table[i].subnet_addr);
- memcpy(&in_addr_print,&subnet_addr,sizeof(in_addr_print));
- IPACMDBG_H("%dst::private_subnet_table= %s \n ", i,
- inet_ntoa(in_addr_print));
-
- subnet_mask = htonl(private_subnet_table[i].subnet_mask);
- memcpy(&in_addr_print,&subnet_mask,sizeof(in_addr_print));
- IPACMDBG_H("%dst::private_subnet_table= %s \n ", i,
- inet_ntoa(in_addr_print));
- }
-
- /* Construct IPACM ALG table */
- ipa_num_alg_ports = cfg->alg_config.num_alg_entries;
- if (alg_table != NULL)
- {
- free(alg_table);
- alg_table = NULL;
- IPACMDBG_H("RESET IPACM_Config::alg_table \n");
- }
- alg_table = (ipacm_alg *)calloc(ipa_num_alg_ports,
- sizeof(ipacm_alg));
- if(alg_table == NULL)
- {
- IPACMERR("Unable to allocate alg_table memory.\n");
- ret = IPACM_FAILURE;
- free(iface_table);
- goto fail;;
- }
- for (i = 0; i < cfg->alg_config.num_alg_entries; i++)
- {
- alg_table[i].protocol = cfg->alg_config.alg_entries[i].protocol;
- alg_table[i].port = cfg->alg_config.alg_entries[i].port;
- IPACMDBG_H("IPACM_Config::ipacm_alg[%d] = %d, port=%d\n", i, alg_table[i].protocol, alg_table[i].port);
- }
-
- ipa_nat_max_entries = cfg->nat_max_entries;
- IPACMDBG_H("Nat Maximum Entries %d\n", ipa_nat_max_entries);
-
- /* Find ODU is either router mode or bridge mode*/
- ipacm_odu_enable = cfg->odu_enable;
- ipacm_odu_router_mode = cfg->router_mode_enable;
- ipacm_odu_embms_enable = cfg->odu_embms_enable;
- IPACMDBG_H("ipacm_odu_enable %d\n", ipacm_odu_enable);
- IPACMDBG_H("ipacm_odu_mode %d\n", ipacm_odu_router_mode);
- IPACMDBG_H("ipacm_odu_embms_enable %d\n", ipacm_odu_embms_enable);
-
- ipacm_ip_passthrough_mode = cfg->ip_passthrough_mode;
- IPACMDBG_H("ipacm_ip_passthrough_mode %d. \n", ipacm_ip_passthrough_mode);
-
- ipa_num_wlan_guest_ap = cfg->num_wlan_guest_ap;
- IPACMDBG_H("ipa_num_wlan_guest_ap %d\n",ipa_num_wlan_guest_ap);
-
- /* Allocate more non-nat entries if the monitored iface dun have Tx/Rx properties */
- if (pNatIfaces != NULL)
- {
- free(pNatIfaces);
- pNatIfaces = NULL;
- IPACMDBG_H("RESET IPACM_Config::pNatIfaces \n");
- }
- ipa_nat_iface_entries = 0;
- pNatIfaces = (NatIfaces *)calloc(ipa_num_ipa_interfaces, sizeof(NatIfaces));
- if (pNatIfaces == NULL)
- {
- IPACMERR("unable to allocate nat ifaces\n");
- ret = IPACM_FAILURE;
- free(iface_table);
- free(alg_table);
- goto fail;
- }
-
- /* Construct the routing table ictol name in iface static member*/
- rt_tbl_default_v4.ip = IPA_IP_v4;
- strlcpy(rt_tbl_default_v4.name, V4_DEFAULT_ROUTE_TABLE_NAME, sizeof(rt_tbl_default_v4.name));
-
- rt_tbl_lan_v4.ip = IPA_IP_v4;
- strlcpy(rt_tbl_lan_v4.name, V4_LAN_ROUTE_TABLE_NAME, sizeof(rt_tbl_lan_v4.name));
-
- rt_tbl_wan_v4.ip = IPA_IP_v4;
- strlcpy(rt_tbl_wan_v4.name, V4_WAN_ROUTE_TABLE_NAME, sizeof(rt_tbl_wan_v4.name));
-
- rt_tbl_v6.ip = IPA_IP_v6;
- strlcpy(rt_tbl_v6.name, V6_COMMON_ROUTE_TABLE_NAME, sizeof(rt_tbl_v6.name));
-
- rt_tbl_wan_v6.ip = IPA_IP_v6;
- strlcpy(rt_tbl_wan_v6.name, V6_WAN_ROUTE_TABLE_NAME, sizeof(rt_tbl_wan_v6.name));
-
- rt_tbl_odu_v4.ip = IPA_IP_v4;
- strlcpy(rt_tbl_odu_v4.name, V4_ODU_ROUTE_TABLE_NAME, sizeof(rt_tbl_odu_v4.name));
-
- rt_tbl_odu_v6.ip = IPA_IP_v6;
- strlcpy(rt_tbl_odu_v6.name, V6_ODU_ROUTE_TABLE_NAME, sizeof(rt_tbl_odu_v6.name));
-
- rt_tbl_wan_dl.ip = IPA_IP_MAX;
- strlcpy(rt_tbl_wan_dl.name, WAN_DL_ROUTE_TABLE_NAME, sizeof(rt_tbl_wan_dl.name));
-
- /* Construct IPACM ipa_client map to rm_resource table */
- ipa_client_rm_map_tbl[IPA_CLIENT_WLAN1_PROD]= IPA_RM_RESOURCE_WLAN_PROD;
- ipa_client_rm_map_tbl[IPA_CLIENT_USB_PROD]= IPA_RM_RESOURCE_USB_PROD;
- ipa_client_rm_map_tbl[IPA_CLIENT_A5_WLAN_AMPDU_PROD]= IPA_RM_RESOURCE_HSIC_PROD;
- ipa_client_rm_map_tbl[IPA_CLIENT_A2_EMBEDDED_PROD]= IPA_RM_RESOURCE_Q6_PROD;
- ipa_client_rm_map_tbl[IPA_CLIENT_A2_TETHERED_PROD]= IPA_RM_RESOURCE_Q6_PROD;
- ipa_client_rm_map_tbl[IPA_CLIENT_APPS_LAN_WAN_PROD]= IPA_RM_RESOURCE_Q6_PROD;
- ipa_client_rm_map_tbl[IPA_CLIENT_WLAN1_CONS]= IPA_RM_RESOURCE_WLAN_CONS;
- ipa_client_rm_map_tbl[IPA_CLIENT_WLAN2_CONS]= IPA_RM_RESOURCE_WLAN_CONS;
- ipa_client_rm_map_tbl[IPA_CLIENT_WLAN3_CONS]= IPA_RM_RESOURCE_WLAN_CONS;
- ipa_client_rm_map_tbl[IPA_CLIENT_WLAN4_CONS]= IPA_RM_RESOURCE_WLAN_CONS;
- ipa_client_rm_map_tbl[IPA_CLIENT_USB_CONS]= IPA_RM_RESOURCE_USB_CONS;
- ipa_client_rm_map_tbl[IPA_CLIENT_A2_EMBEDDED_CONS]= IPA_RM_RESOURCE_Q6_CONS;
- ipa_client_rm_map_tbl[IPA_CLIENT_A2_TETHERED_CONS]= IPA_RM_RESOURCE_Q6_CONS;
- ipa_client_rm_map_tbl[IPA_CLIENT_APPS_WAN_CONS]= IPA_RM_RESOURCE_Q6_CONS;
- ipa_client_rm_map_tbl[IPA_CLIENT_ODU_PROD]= IPA_RM_RESOURCE_ODU_ADAPT_PROD;
- ipa_client_rm_map_tbl[IPA_CLIENT_ODU_EMB_CONS]= IPA_RM_RESOURCE_ODU_ADAPT_CONS;
- ipa_client_rm_map_tbl[IPA_CLIENT_ODU_TETH_CONS]= IPA_RM_RESOURCE_ODU_ADAPT_CONS;
-
- /* Create the entries which IPACM wants to add dependencies on */
- ipa_rm_tbl[0].producer_rm1 = IPA_RM_RESOURCE_WLAN_PROD;
- ipa_rm_tbl[0].consumer_rm1 = IPA_RM_RESOURCE_Q6_CONS;
- ipa_rm_tbl[0].producer_rm2 = IPA_RM_RESOURCE_Q6_PROD;
- ipa_rm_tbl[0].consumer_rm2 = IPA_RM_RESOURCE_WLAN_CONS;
-
- ipa_rm_tbl[1].producer_rm1 = IPA_RM_RESOURCE_USB_PROD;
- ipa_rm_tbl[1].consumer_rm1 = IPA_RM_RESOURCE_Q6_CONS;
- ipa_rm_tbl[1].producer_rm2 = IPA_RM_RESOURCE_Q6_PROD;
- ipa_rm_tbl[1].consumer_rm2 = IPA_RM_RESOURCE_USB_CONS;
-
- ipa_rm_tbl[2].producer_rm1 = IPA_RM_RESOURCE_WLAN_PROD;
- ipa_rm_tbl[2].consumer_rm1 = IPA_RM_RESOURCE_USB_CONS;
- ipa_rm_tbl[2].producer_rm2 = IPA_RM_RESOURCE_USB_PROD;
- ipa_rm_tbl[2].consumer_rm2 = IPA_RM_RESOURCE_WLAN_CONS;
-
- ipa_rm_tbl[3].producer_rm1 = IPA_RM_RESOURCE_ODU_ADAPT_PROD;
- ipa_rm_tbl[3].consumer_rm1 = IPA_RM_RESOURCE_Q6_CONS;
- ipa_rm_tbl[3].producer_rm2 = IPA_RM_RESOURCE_Q6_PROD;
- ipa_rm_tbl[3].consumer_rm2 = IPA_RM_RESOURCE_ODU_ADAPT_CONS;
-
- ipa_rm_tbl[4].producer_rm1 = IPA_RM_RESOURCE_WLAN_PROD;
- ipa_rm_tbl[4].consumer_rm1 = IPA_RM_RESOURCE_ODU_ADAPT_CONS;
- ipa_rm_tbl[4].producer_rm2 = IPA_RM_RESOURCE_ODU_ADAPT_PROD;
- ipa_rm_tbl[4].consumer_rm2 = IPA_RM_RESOURCE_WLAN_CONS;
-
- ipa_rm_tbl[5].producer_rm1 = IPA_RM_RESOURCE_ODU_ADAPT_PROD;
- ipa_rm_tbl[5].consumer_rm1 = IPA_RM_RESOURCE_USB_CONS;
- ipa_rm_tbl[5].producer_rm2 = IPA_RM_RESOURCE_USB_PROD;
- ipa_rm_tbl[5].consumer_rm2 = IPA_RM_RESOURCE_ODU_ADAPT_CONS;
- ipa_max_valid_rm_entry = 6; /* max is IPA_MAX_RM_ENTRY (6)*/
-
- IPACMDBG_H(" depend MAP-0 rm index %d to rm index: %d \n", IPA_RM_RESOURCE_WLAN_PROD, IPA_RM_RESOURCE_Q6_CONS);
- IPACMDBG_H(" depend MAP-1 rm index %d to rm index: %d \n", IPA_RM_RESOURCE_USB_PROD, IPA_RM_RESOURCE_Q6_CONS);
- IPACMDBG_H(" depend MAP-2 rm index %d to rm index: %d \n", IPA_RM_RESOURCE_WLAN_PROD, IPA_RM_RESOURCE_USB_CONS);
- IPACMDBG_H(" depend MAP-3 rm index %d to rm index: %d \n", IPA_RM_RESOURCE_ODU_ADAPT_PROD, IPA_RM_RESOURCE_Q6_CONS);
- IPACMDBG_H(" depend MAP-4 rm index %d to rm index: %d \n", IPA_RM_RESOURCE_WLAN_PROD, IPA_RM_RESOURCE_ODU_ADAPT_CONS);
- IPACMDBG_H(" depend MAP-5 rm index %d to rm index: %d \n", IPA_RM_RESOURCE_ODU_ADAPT_PROD, IPA_RM_RESOURCE_USB_CONS);
-
-fail:
- if (cfg != NULL)
- {
- free(cfg);
- cfg = NULL;
- }
-
- return ret;
-}
-
-IPACM_Config* IPACM_Config::GetInstance()
-{
- int res = IPACM_SUCCESS;
-
- if (pInstance == NULL)
- {
- pInstance = new IPACM_Config();
-
- res = pInstance->Init();
- if (res != IPACM_SUCCESS)
- {
- delete pInstance;
- IPACMERR("unable to initialize config instance\n");
- return NULL;
- }
- }
-
- return pInstance;
-}
-
-int IPACM_Config::GetAlgPorts(int nPorts, ipacm_alg *pAlgPorts)
-{
- if (nPorts <= 0 || pAlgPorts == NULL)
- {
- IPACMERR("Invalid input\n");
- return -1;
- }
-
- for (int cnt = 0; cnt < nPorts; cnt++)
- {
- pAlgPorts[cnt].protocol = alg_table[cnt].protocol;
- pAlgPorts[cnt].port = alg_table[cnt].port;
- }
-
- return 0;
-}
-
-int IPACM_Config::GetNatIfaces(int nIfaces, NatIfaces *pIfaces)
-{
- if (nIfaces <= 0 || pIfaces == NULL)
- {
- IPACMERR("Invalid input\n");
- return -1;
- }
-
- for (int cnt=0; cntnum_ext_props <= 0)
- {
- IPACMERR("There is no extended property!\n");
- return IPACM_FAILURE;
- }
-
- num = prop->num_ext_props;
- for(i=0; iext[i].ip == IPA_IP_v4)
- {
- if(ext_prop_v4.num_ext_props >= MAX_NUM_EXT_PROPS)
- {
- IPACMERR("IPv4 extended property table is full!\n");
- continue;
- }
- memcpy(&ext_prop_v4.prop[ext_prop_v4.num_ext_props], &prop->ext[i], sizeof(struct ipa_ioc_ext_intf_prop));
- ext_prop_v4.num_ext_props++;
- }
- else if(prop->ext[i].ip == IPA_IP_v6)
- {
- if(ext_prop_v6.num_ext_props >= MAX_NUM_EXT_PROPS)
- {
- IPACMERR("IPv6 extended property table is full!\n");
- continue;
- }
- memcpy(&ext_prop_v6.prop[ext_prop_v6.num_ext_props], &prop->ext[i], sizeof(struct ipa_ioc_ext_intf_prop));
- ext_prop_v6.num_ext_props++;
- }
- else
- {
- IPACMERR("The IP type is not expected!\n");
- return IPACM_FAILURE;
- }
- }
-
- IPACMDBG_H("Set extended property succeeded.\n");
-
- return IPACM_SUCCESS;
-}
-
-ipacm_ext_prop* IPACM_Config::GetExtProp(ipa_ip_type ip_type)
-{
- if(ip_type == IPA_IP_v4)
- return &ext_prop_v4;
- else if(ip_type == IPA_IP_v6)
- return &ext_prop_v6;
- else
- {
- IPACMERR("Failed to get extended property: the IP version is neither IPv4 nor IPv6!\n");
- return NULL;
- }
-}
-
-int IPACM_Config::DelExtProp(ipa_ip_type ip_type)
-{
- if(ip_type != IPA_IP_v6)
- {
- memset(&ext_prop_v4, 0, sizeof(ext_prop_v4));
- }
-
- if(ip_type != IPA_IP_v4)
- {
- memset(&ext_prop_v6, 0, sizeof(ext_prop_v6));
- }
-
- return IPACM_SUCCESS;
-}
-
-const char* IPACM_Config::getEventName(ipa_cm_event_id event_id)
-{
- if(event_id >= sizeof(ipacm_event_name)/sizeof(ipacm_event_name[0]))
- {
- IPACMERR("Event name array is not consistent with event array!\n");
- return NULL;
- }
-
- return ipacm_event_name[event_id];
-}
-
-enum ipa_hw_type IPACM_Config::GetIPAVer(bool get)
-{
- int ret;
-
- if(!get)
- return ver;
-
- ret = ioctl(m_fd, IPA_IOC_GET_HW_VERSION, &ver);
- if(ret != 0)
- {
- IPACMERR("Failed to get IPA version with error %d.\n", ret);
- ver = IPA_HW_None;
- return IPA_HW_None;
- }
- IPACMDBG_H("IPA version is %d.\n", ver);
- return ver;
-}
diff --git a/data-ipa-cfg-mgr/ipacm/src/IPACM_ConntrackClient.cpp b/data-ipa-cfg-mgr/ipacm/src/IPACM_ConntrackClient.cpp
deleted file mode 100644
index 8a2499c..0000000
--- a/data-ipa-cfg-mgr/ipacm/src/IPACM_ConntrackClient.cpp
+++ /dev/null
@@ -1,741 +0,0 @@
-/*
-Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include "IPACM_Iface.h"
-#include "IPACM_ConntrackListener.h"
-#include "IPACM_ConntrackClient.h"
-#include "IPACM_Log.h"
-
-#define LO_NAME "lo"
-
-extern IPACM_EvtDispatcher cm_dis;
-extern void ParseCTMessage(struct nf_conntrack *ct);
-
-IPACM_ConntrackClient *IPACM_ConntrackClient::pInstance = NULL;
-IPACM_ConntrackListener *CtList = NULL;
-
-/* ================================
- Local Function Definitions
- =================================
-*/
-IPACM_ConntrackClient::IPACM_ConntrackClient()
-{
- IPACMDBG("\n");
-
- tcp_hdl = NULL;
- udp_hdl = NULL;
- tcp_filter = NULL;
- udp_filter = NULL;
- fd_tcp = -1;
- fd_udp = -1;
- subscrips_tcp = NF_NETLINK_CONNTRACK_UPDATE | NF_NETLINK_CONNTRACK_DESTROY;
- subscrips_udp = NF_NETLINK_CONNTRACK_NEW | NF_NETLINK_CONNTRACK_DESTROY;
-}
-
-IPACM_ConntrackClient* IPACM_ConntrackClient::GetInstance()
-{
- if(pInstance == NULL)
- {
- pInstance = new IPACM_ConntrackClient();
-
- pInstance->udp_filter = nfct_filter_create();
- if(pInstance->udp_filter == NULL)
- {
- IPACMERR("unable to create UDP filter\n");
- delete pInstance;
- return NULL;
- }
- IPACMDBG("Created UDP filter\n");
-
- pInstance->tcp_filter = nfct_filter_create();
- if(pInstance->tcp_filter == NULL)
- {
- IPACMERR("unable to create TCP filter\n");
- delete pInstance;
- return NULL;
- }
- IPACMDBG("Created TCP filter\n");
- }
-
- return pInstance;
-}
-
-int IPACM_ConntrackClient::IPAConntrackEventCB
-(
- enum nf_conntrack_msg_type type,
- struct nf_conntrack *ct,
- void *data
- )
-{
- ipacm_cmd_q_data evt_data;
- ipacm_ct_evt_data *ct_data;
- uint8_t ip_type = 0;
- data = NULL;
-
- IPACMDBG("Event callback called with msgtype: %d\n",type);
-
- /* Retrieve ip type */
- ip_type = nfct_get_attr_u8(ct, ATTR_REPL_L3PROTO);
-
-#ifndef CT_OPT
- if(AF_INET6 == ip_type)
- {
- IPACMDBG("Ignoring ipv6(%d) connections\n", ip_type);
- goto IGNORE;
- }
-
-#endif
-
- ct_data = (ipacm_ct_evt_data *)malloc(sizeof(ipacm_ct_evt_data));
- if(ct_data == NULL)
- {
- IPACMERR("unable to allocate memory \n");
- goto IGNORE;
- }
-
- ct_data->ct = ct;
- ct_data->type = type;
-
- evt_data.event = IPA_PROCESS_CT_MESSAGE;
- evt_data.evt_data = (void *)ct_data;
-
-#ifdef CT_OPT
- if(AF_INET6 == ip_type)
- {
- evt_data.event = IPA_PROCESS_CT_MESSAGE_V6;
- }
-#endif
-
- if(0 != IPACM_EvtDispatcher::PostEvt(&evt_data))
- {
- IPACMERR("Error sending Conntrack message to processing thread!\n");
- free(ct_data);
- goto IGNORE;
- }
-
-/* NFCT_CB_STOLEN means that the conntrack object is not released after the
- callback That must be manually done later when the object is no longer needed. */
- return NFCT_CB_STOLEN;
-
-IGNORE:
- nfct_destroy(ct);
- return NFCT_CB_STOLEN;
-
-}
-
-int IPACM_ConntrackClient::IPA_Conntrack_Filters_Ignore_Bridge_Addrs
-(
- struct nfct_filter *filter
-)
-{
- int fd;
- fd = socket(AF_INET, SOCK_DGRAM, 0);
- if(fd < 0)
- {
- PERROR("unable to open socket");
- return -1;
- }
-
- int ret;
- uint32_t ipv4_addr;
- struct ifreq ifr;
-
- /* retrieve bridge interface ipv4 address */
- memset(&ifr, 0, sizeof(struct ifreq));
- ifr.ifr_addr.sa_family = AF_INET;
-
- if(strlen(IPACM_Iface::ipacmcfg->ipa_virtual_iface_name) >= sizeof(ifr.ifr_name))
- {
- IPACMERR("interface name overflows: len %zu\n",
- strlen(IPACM_Iface::ipacmcfg->ipa_virtual_iface_name));
- close(fd);
- return -1;
- }
- (void)strlcpy(ifr.ifr_name, IPACM_Iface::ipacmcfg->ipa_virtual_iface_name, sizeof(ifr.ifr_name));
- IPACMDBG("bridge interface name (%s)\n", ifr.ifr_name);
-
- ret = ioctl(fd, SIOCGIFADDR, &ifr);
- if (ret < 0)
- {
- IPACMERR("unable to retrieve (%s) interface address\n",ifr.ifr_name);
- close(fd);
- return -1;
- }
- IPACMDBG("Interface (%s) address %s\n", ifr.ifr_name, inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr));
- ipv4_addr = ntohl(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr.s_addr);
- close(fd);
-
- /* ignore whatever is destined to or originates from broadcast ip address */
- struct nfct_filter_ipv4 filter_ipv4;
-
- filter_ipv4.addr = ipv4_addr;
- filter_ipv4.mask = 0xffffffff;
-
- nfct_filter_set_logic(filter,
- NFCT_FILTER_DST_IPV4,
- NFCT_FILTER_LOGIC_NEGATIVE);
-
- nfct_filter_add_attr(filter, NFCT_FILTER_DST_IPV4, &filter_ipv4);
-
- nfct_filter_set_logic(filter,
- NFCT_FILTER_SRC_IPV4,
- NFCT_FILTER_LOGIC_NEGATIVE);
-
- nfct_filter_add_attr(filter, NFCT_FILTER_SRC_IPV4, &filter_ipv4);
-
- return 0;
-}
-
-int IPACM_ConntrackClient::IPA_Conntrack_Filters_Ignore_Local_Iface
-(
- struct nfct_filter *filter,
- ipacm_event_iface_up *param
-)
-{
- struct nfct_filter_ipv4 filter_ipv4;
-
- filter_ipv4.addr = param->ipv4_addr;
- filter_ipv4.mask = 0xffffffff;
-
- /* ignore whatever is destined to local interfaces */
- IPACMDBG("Ignore connections destinated to interface %s", param->ifname);
- iptodot("with ipv4 address", param->ipv4_addr);
- nfct_filter_set_logic(filter,
- NFCT_FILTER_DST_IPV4,
- NFCT_FILTER_LOGIC_NEGATIVE);
-
- nfct_filter_add_attr(filter, NFCT_FILTER_DST_IPV4, &filter_ipv4);
-
- IPACMDBG("Ignore connections orignated from interface %s", param->ifname);
- iptodot("with ipv4 address", filter_ipv4.addr);
- nfct_filter_set_logic(filter,
- NFCT_FILTER_SRC_IPV4,
- NFCT_FILTER_LOGIC_NEGATIVE);
-
- nfct_filter_add_attr(filter, NFCT_FILTER_SRC_IPV4, &filter_ipv4);
-
- /* Retrieve broadcast address */
- /* Intialize with 255.255.255.255 */
- uint32_t bc_ip_addr = 0xFFFFFFFF;
-
- /* calculate broadcast address from addr and addr_mask */
- bc_ip_addr = (bc_ip_addr & (~param->addr_mask));
- bc_ip_addr = (bc_ip_addr | (param->ipv4_addr & param->addr_mask));
-
- /* netfitler expecting in host-byte order */
- filter_ipv4.addr = bc_ip_addr;
- filter_ipv4.mask = 0xffffffff;
-
- iptodot("with broadcast address", filter_ipv4.addr);
- nfct_filter_set_logic(filter,
- NFCT_FILTER_DST_IPV4,
- NFCT_FILTER_LOGIC_NEGATIVE);
-
- nfct_filter_add_attr(filter, NFCT_FILTER_DST_IPV4, &filter_ipv4);
-
- return 0;
-}
-
-/* Function which sets up filters to ignore
- connections to and from local interfaces */
-int IPACM_ConntrackClient::IPA_Conntrack_Filters_Ignore_Local_Addrs
-(
- struct nfct_filter *filter
-)
-{
- struct nfct_filter_ipv4 filter_ipv4;
-
- /* ignore whatever is destined to or originates from broadcast ip address */
- filter_ipv4.addr = 0xffffffff;
- filter_ipv4.mask = 0xffffffff;
-
- nfct_filter_set_logic(filter,
- NFCT_FILTER_DST_IPV4,
- NFCT_FILTER_LOGIC_NEGATIVE);
-
- nfct_filter_add_attr(filter, NFCT_FILTER_DST_IPV4, &filter_ipv4);
-
- nfct_filter_set_logic(filter,
- NFCT_FILTER_SRC_IPV4,
- NFCT_FILTER_LOGIC_NEGATIVE);
-
- nfct_filter_add_attr(filter, NFCT_FILTER_SRC_IPV4, &filter_ipv4);
-
- return 0;
-} /* IPA_Conntrack_Filters_Ignore_Local_Addrs() */
-
-/* Initialize TCP Filter */
-int IPACM_ConntrackClient::IPA_Conntrack_TCP_Filter_Init(void)
-{
- int ret = 0;
- IPACM_ConntrackClient *pClient;
-
- IPACMDBG("\n");
-
- pClient = IPACM_ConntrackClient::GetInstance();
- if(pClient == NULL)
- {
- IPACMERR("unable to get conntrack client instance\n");
- return -1;
- }
-
- ret = nfct_filter_set_logic(pClient->tcp_filter,
- NFCT_FILTER_L4PROTO,
- NFCT_FILTER_LOGIC_POSITIVE);
- if(ret == -1)
- {
- IPACMERR("Unable to set filter logic\n");
- return -1;
- }
-
- /* set protocol filters as tcp and udp */
- nfct_filter_add_attr_u32(pClient->tcp_filter, NFCT_FILTER_L4PROTO, IPPROTO_TCP);
-
-
- struct nfct_filter_proto tcp_proto_state;
- tcp_proto_state.proto = IPPROTO_TCP;
- tcp_proto_state.state = TCP_CONNTRACK_ESTABLISHED;
-
- ret = nfct_filter_set_logic(pClient->tcp_filter,
- NFCT_FILTER_L4PROTO_STATE,
- NFCT_FILTER_LOGIC_POSITIVE);
- if(ret == -1)
- {
- IPACMERR("unable to set filter logic\n");
- return -1;
- }
- nfct_filter_add_attr(pClient->tcp_filter,
- NFCT_FILTER_L4PROTO_STATE,
- &tcp_proto_state);
-
-
- tcp_proto_state.proto = IPPROTO_TCP;
- tcp_proto_state.state = TCP_CONNTRACK_FIN_WAIT;
- ret = nfct_filter_set_logic(pClient->tcp_filter,
- NFCT_FILTER_L4PROTO_STATE,
- NFCT_FILTER_LOGIC_POSITIVE);
- if(ret == -1)
- {
- IPACMERR("unable to set filter logic\n");
- return -1;
- }
-
- nfct_filter_add_attr(pClient->tcp_filter,
- NFCT_FILTER_L4PROTO_STATE,
- &tcp_proto_state);
- return 0;
-}
-
-
-/* Initialize UDP Filter */
-int IPACM_ConntrackClient::IPA_Conntrack_UDP_Filter_Init(void)
-{
- int ret = 0;
- IPACM_ConntrackClient *pClient = IPACM_ConntrackClient::GetInstance();
- if(pClient == NULL)
- {
- IPACMERR("unable to get conntrack client instance\n");
- return -1;
- }
-
- ret = nfct_filter_set_logic(pClient->udp_filter,
- NFCT_FILTER_L4PROTO,
- NFCT_FILTER_LOGIC_POSITIVE);
- if(ret == -1)
- {
- IPACMERR("unable to set filter logic\n");
- }
- /* set protocol filters as tcp and udp */
- nfct_filter_add_attr_u32(pClient->udp_filter, NFCT_FILTER_L4PROTO, IPPROTO_UDP);
-
- return 0;
-}
-
-void* IPACM_ConntrackClient::UDPConnTimeoutUpdate(void *ptr)
-{
- NatApp *nat_inst = NULL;
- ptr = NULL;
-#ifdef IPACM_DEBUG
- IPACMDBG("\n");
-#endif
-
- nat_inst = NatApp::GetInstance();
- if(nat_inst == NULL)
- {
- IPACMERR("unable to create nat instance\n");
- return NULL;
- }
-
- while(1)
- {
- nat_inst->UpdateUDPTimeStamp();
- sleep(UDP_TIMEOUT_UPDATE);
- } /* end of while(1) loop */
-
-#ifdef IPACM_DEBUG
- IPACMDBG("Returning from %s() %d\n", __FUNCTION__, __LINE__);
-#endif
-
- return NULL;
-}
-
-/* Thread to initialize TCP Conntrack Filters*/
-void* IPACM_ConntrackClient::TCPRegisterWithConnTrack(void *)
-{
- int ret;
- IPACM_ConntrackClient *pClient;
- unsigned subscrips = 0;
-
- IPACMDBG("\n");
-
- pClient = IPACM_ConntrackClient::GetInstance();
- if(pClient == NULL)
- {
- IPACMERR("unable to get conntrack client instance\n");
- return NULL;
- }
-
- subscrips = (NF_NETLINK_CONNTRACK_UPDATE | NF_NETLINK_CONNTRACK_DESTROY);
-#ifdef CT_OPT
- subscrips |= NF_NETLINK_CONNTRACK_NEW;
-#endif
-
-#ifdef FEATURE_IPACM_HAL
- if (pClient->fd_tcp < 0) {
- IPACMERR("unable to get conntrack TCP handle due to fd_tcp is invalid \n");
- return NULL;
- } else {
- pClient->tcp_hdl = nfct_open2(CONNTRACK, subscrips, pClient->fd_tcp);
- }
-#else
- pClient->tcp_hdl = nfct_open(CONNTRACK, subscrips);
-#endif
-
- if(pClient->tcp_hdl == NULL)
- {
- PERROR("nfct_open failed on getting tcp_hdl\n");
- return NULL;
- }
-
- /* Initialize the filter */
- ret = IPA_Conntrack_TCP_Filter_Init();
- if(ret == -1)
- {
- IPACMERR("Unable to initliaze TCP Filter\n");
- return NULL;
- }
-
- /* Attach the filter to net filter handler */
- ret = nfct_filter_attach(nfct_fd(pClient->tcp_hdl), pClient->tcp_filter);
- if(ret == -1)
- {
- IPACMDBG("unable to attach TCP filter\n");
- return NULL;
- }
-
- /* Register callback with netfilter handler */
- IPACMDBG_H("tcp handle:%pK, fd:%d\n", pClient->tcp_hdl, nfct_fd(pClient->tcp_hdl));
-#ifndef CT_OPT
- nfct_callback_register(pClient->tcp_hdl,
- (nf_conntrack_msg_type) (NFCT_T_UPDATE | NFCT_T_DESTROY | NFCT_T_NEW),
- IPAConntrackEventCB, NULL);
-#else
- nfct_callback_register(pClient->tcp_hdl, (nf_conntrack_msg_type) NFCT_T_ALL, IPAConntrackEventCB, NULL);
-#endif
-
- /* Block to catch events from net filter connection track */
- /* nfct_catch() receives conntrack events from kernel-space, by default it
- blocks waiting for events. */
- IPACMDBG("Waiting for events\n");
-
- ret = nfct_catch(pClient->tcp_hdl);
- if(ret == -1)
- {
- IPACMERR("(%d)(%s)\n", ret, strerror(errno));
- return NULL;
- }
-
- IPACMDBG("Exit from tcp thread\n");
-
- /* destroy the filter.. this will not detach the filter */
- nfct_filter_destroy(pClient->tcp_filter);
- pClient->tcp_filter = NULL;
-
- /* de-register the callback */
- nfct_callback_unregister(pClient->tcp_hdl);
- /* close the handle */
-#ifdef FEATURE_IPACM_HAL
- nfct_close2(pClient->tcp_hdl, true);
-#else
- nfct_close(pClient->tcp_hdl);
-#endif
- pClient->tcp_hdl = NULL;
-
- pthread_exit(NULL);
- return NULL;
-}
-
-/* Thread to initialize UDP Conntrack Filters*/
-void* IPACM_ConntrackClient::UDPRegisterWithConnTrack(void *)
-{
- int ret;
- IPACM_ConntrackClient *pClient = NULL;
-
- IPACMDBG("\n");
-
- pClient = IPACM_ConntrackClient::GetInstance();
- if(pClient == NULL)
- {
- IPACMERR("unable to retrieve instance of conntrack client\n");
- return NULL;
- }
-
-#ifdef FEATURE_IPACM_HAL
- if (pClient->fd_udp < 0) {
- IPACMERR("unable to get conntrack UDP handle due to fd_udp is invalid \n");
- return NULL;
- } else {
- pClient->udp_hdl = nfct_open2(CONNTRACK,
- (NF_NETLINK_CONNTRACK_NEW | NF_NETLINK_CONNTRACK_DESTROY), pClient->fd_udp);
- }
-#else
- pClient->udp_hdl = nfct_open(CONNTRACK,
- (NF_NETLINK_CONNTRACK_NEW | NF_NETLINK_CONNTRACK_DESTROY));
-#endif
- if(pClient->udp_hdl == NULL)
- {
- PERROR("nfct_open failed on getting udp_hdl\n");
- return NULL;
- }
-
- /* Initialize Filter */
- ret = IPA_Conntrack_UDP_Filter_Init();
- if(-1 == ret)
- {
- IPACMDBG("Unable to initalize udp filters\n");
- return NULL;
- }
-
- /* Attach the filter to net filter handler */
- ret = nfct_filter_attach(nfct_fd(pClient->udp_hdl), pClient->udp_filter);
- if(ret == -1)
- {
- IPACMDBG("unable to attach the filter\n");
- return NULL;
- }
-
- /* Register callback with netfilter handler */
- IPACMDBG_H("udp handle:%pK, fd:%d\n", pClient->udp_hdl, nfct_fd(pClient->udp_hdl));
- nfct_callback_register(pClient->udp_hdl,
- (nf_conntrack_msg_type)(NFCT_T_NEW | NFCT_T_DESTROY),
- IPAConntrackEventCB,
- NULL);
-
- /* Block to catch events from net filter connection track */
-ctcatch:
- ret = nfct_catch(pClient->udp_hdl);
- if(ret == -1)
- {
- IPACMDBG("(%d)(%s)\n", ret, strerror(errno));
- return NULL;
- }
- else
- {
- IPACMDBG("ctcatch ret:%d\n", ret);
- goto ctcatch;
- }
-
- IPACMDBG("Exit from udp thread with ret: %d\n", ret);
-
- /* destroy the filter.. this will not detach the filter */
- nfct_filter_destroy(pClient->udp_filter);
- pClient->udp_filter = NULL;
-
- /* de-register the callback */
- nfct_callback_unregister(pClient->udp_hdl);
- /* close the handle */
-#ifdef FEATURE_IPACM_HAL
- nfct_close2(pClient->udp_hdl, true);
-#else
- nfct_close(pClient->udp_hdl);
-#endif
- pClient->udp_hdl = NULL;
-
- pthread_exit(NULL);
- return NULL;
-}
-
-/* Thread to initialize TCP Conntrack Filters*/
-void IPACM_ConntrackClient::UNRegisterWithConnTrack(void)
-{
- IPACM_ConntrackClient *pClient = NULL;
-
- IPACMDBG("\n");
-
- pClient = IPACM_ConntrackClient::GetInstance();
- if(pClient == NULL)
- {
- IPACMERR("unable to retrieve instance of conntrack client\n");
- return;
- }
-
- /* destroy the TCP filter.. this will not detach the filter */
- if (pClient->tcp_filter) {
- nfct_filter_destroy(pClient->tcp_filter);
- pClient->tcp_filter = NULL;
- }
-
- /* de-register the callback */
- if (pClient->tcp_hdl) {
- nfct_callback_unregister(pClient->tcp_hdl);
- /* close the handle */
- nfct_close(pClient->tcp_hdl);
- pClient->tcp_hdl = NULL;
- }
-
- /* destroy the filter.. this will not detach the filter */
- if (pClient->udp_filter) {
- nfct_filter_destroy(pClient->udp_filter);
- pClient->udp_filter = NULL;
- }
-
- /* de-register the callback */
- if (pClient->udp_hdl) {
- nfct_callback_unregister(pClient->udp_hdl);
- /* close the handle */
- nfct_close(pClient->udp_hdl);
- pClient->udp_hdl = NULL;
- }
-
- pClient->fd_tcp = -1;
- pClient->fd_udp = -1;
-
- return;
-}
-
-void IPACM_ConntrackClient::UpdateUDPFilters(void *param, bool isWan)
-{
- static bool isIgnore = false;
- int ret = 0;
- IPACM_ConntrackClient *pClient = NULL;
-
- pClient = IPACM_ConntrackClient::GetInstance();
- if(pClient == NULL)
- {
- IPACMERR("unable to retrieve conntrack client instance\n");
- return;
- }
-
- if(pClient->udp_filter == NULL)
- {
- return;
- }
-
- if(!isWan)
- {
- IPA_Conntrack_Filters_Ignore_Local_Iface(pClient->udp_filter,
- (ipacm_event_iface_up *)param);
-
- if(!isIgnore)
- {
- IPA_Conntrack_Filters_Ignore_Bridge_Addrs(pClient->udp_filter);
- IPA_Conntrack_Filters_Ignore_Local_Addrs(pClient->udp_filter);
- isIgnore = true;
- }
- }
-
- /* Attach the filter to udp handle */
- if(pClient->udp_hdl != NULL)
- {
- IPACMDBG("attaching the filter to udp handle\n");
- ret = nfct_filter_attach(nfct_fd(pClient->udp_hdl), pClient->udp_filter);
- if(ret == -1)
- {
- PERROR("unable to attach the filter to udp handle\n");
- IPACMERR("udp handle:%pK, fd:%d Error: %d\n",pClient->udp_hdl, nfct_fd(pClient->udp_hdl), ret);
- return;
- }
- }
-
- return;
-}
-
-void IPACM_ConntrackClient::UpdateTCPFilters(void *param, bool isWan)
-{
- static bool isIgnore = false;
- int ret = 0;
- IPACM_ConntrackClient *pClient = NULL;
-
- pClient = IPACM_ConntrackClient::GetInstance();
- if(pClient == NULL)
- {
- IPACMERR("unable to retrieve conntrack client instance\n");
- return;
- }
-
- if(pClient->tcp_filter == NULL)
- return;
-
- if(!isWan)
- {
- IPA_Conntrack_Filters_Ignore_Local_Iface(pClient->tcp_filter,
- (ipacm_event_iface_up *)param);
-
- if(!isIgnore)
- {
- IPA_Conntrack_Filters_Ignore_Bridge_Addrs(pClient->udp_filter);
- IPA_Conntrack_Filters_Ignore_Local_Addrs(pClient->udp_filter);
- isIgnore = true;
- }
- }
-
- /* Attach the filter to tcp handle */
- if(pClient->tcp_hdl != NULL)
- {
- IPACMDBG("attaching the filter to tcp handle\n");
- ret = nfct_filter_attach(nfct_fd(pClient->tcp_hdl), pClient->tcp_filter);
- if(ret == -1)
- {
- PERROR("unable to attach the filter to tcp handle\n");
- IPACMERR("tcp handle:%pK, fd:%d Error: %d\n",pClient->tcp_hdl, nfct_fd(pClient->tcp_hdl), ret);
- return;
- }
- }
-
- return;
-}
-
diff --git a/data-ipa-cfg-mgr/ipacm/src/IPACM_ConntrackListener.cpp b/data-ipa-cfg-mgr/ipacm/src/IPACM_ConntrackListener.cpp
deleted file mode 100644
index 29a70b9..0000000
--- a/data-ipa-cfg-mgr/ipacm/src/IPACM_ConntrackListener.cpp
+++ /dev/null
@@ -1,1196 +0,0 @@
-/*
-Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include
-#include
-
-#include "IPACM_ConntrackListener.h"
-#include "IPACM_ConntrackClient.h"
-#include "IPACM_EvtDispatcher.h"
-#include "IPACM_Iface.h"
-#include "IPACM_Wan.h"
-
-IPACM_ConntrackListener::IPACM_ConntrackListener()
-{
- IPACMDBG("\n");
-
- isNatThreadStart = false;
- isCTReg = false;
- WanUp = false;
- nat_inst = NatApp::GetInstance();
-
- NatIfaceCnt = 0;
- StaClntCnt = 0;
- pNatIfaces = NULL;
- pConfig = IPACM_Config::GetInstance();;
-
- memset(nat_iface_ipv4_addr, 0, sizeof(nat_iface_ipv4_addr));
- memset(nonnat_iface_ipv4_addr, 0, sizeof(nonnat_iface_ipv4_addr));
- memset(sta_clnt_ipv4_addr, 0, sizeof(sta_clnt_ipv4_addr));
-
- IPACM_EvtDispatcher::registr(IPA_HANDLE_WAN_UP, this);
- IPACM_EvtDispatcher::registr(IPA_HANDLE_WAN_DOWN, this);
- IPACM_EvtDispatcher::registr(IPA_PROCESS_CT_MESSAGE, this);
- IPACM_EvtDispatcher::registr(IPA_PROCESS_CT_MESSAGE_V6, this);
- IPACM_EvtDispatcher::registr(IPA_HANDLE_WLAN_UP, this);
- IPACM_EvtDispatcher::registr(IPA_HANDLE_LAN_UP, this);
- IPACM_EvtDispatcher::registr(IPA_NEIGH_CLIENT_IP_ADDR_ADD_EVENT, this);
- IPACM_EvtDispatcher::registr(IPA_NEIGH_CLIENT_IP_ADDR_DEL_EVENT, this);
-
-#ifdef CT_OPT
- p_lan2lan = IPACM_LanToLan::getLan2LanInstance();
-#endif
-}
-
-void IPACM_ConntrackListener::event_callback(ipa_cm_event_id evt,
- void *data)
-{
- ipacm_event_iface_up *wan_down = NULL;
-
- if(data == NULL)
- {
- IPACMERR("Invalid Data\n");
- return;
- }
-
- switch(evt)
- {
- case IPA_PROCESS_CT_MESSAGE:
- IPACMDBG("Received IPA_PROCESS_CT_MESSAGE event\n");
- ProcessCTMessage(data);
- break;
-
-#ifdef CT_OPT
- case IPA_PROCESS_CT_MESSAGE_V6:
- IPACMDBG("Received IPA_PROCESS_CT_MESSAGE_V6 event\n");
- ProcessCTV6Message(data);
- break;
-#endif
-
- case IPA_HANDLE_WAN_UP:
- IPACMDBG_H("Received IPA_HANDLE_WAN_UP event\n");
- CreateConnTrackThreads();
- TriggerWANUp(data);
- break;
-
- case IPA_HANDLE_WAN_DOWN:
- IPACMDBG_H("Received IPA_HANDLE_WAN_DOWN event\n");
- wan_down = (ipacm_event_iface_up *)data;
- if(isWanUp())
- {
- TriggerWANDown(wan_down->ipv4_addr);
- }
- break;
-
- /* if wlan or lan comes up after wan interface, modify
- tcp/udp filters to ignore local wlan or lan connections */
- case IPA_HANDLE_WLAN_UP:
- case IPA_HANDLE_LAN_UP:
- IPACMDBG_H("Received event: %d with ifname: %s and address: 0x%x\n",
- evt, ((ipacm_event_iface_up *)data)->ifname,
- ((ipacm_event_iface_up *)data)->ipv4_addr);
- if(isWanUp())
- {
- CreateConnTrackThreads();
- IPACM_ConntrackClient::UpdateUDPFilters(data, false);
- IPACM_ConntrackClient::UpdateTCPFilters(data, false);
- }
- break;
-
- case IPA_NEIGH_CLIENT_IP_ADDR_ADD_EVENT:
- IPACMDBG("Received IPA_NEIGH_CLIENT_IP_ADDR_ADD_EVENT event\n");
- HandleNonNatIPAddr(data, true);
- break;
-
- case IPA_NEIGH_CLIENT_IP_ADDR_DEL_EVENT:
- IPACMDBG("Received IPA_NEIGH_CLIENT_IP_ADDR_DEL_EVENT event\n");
- HandleNonNatIPAddr(data, false);
- break;
-
- default:
- IPACMDBG("Ignore cmd %d\n", evt);
- break;
- }
-}
-
-int IPACM_ConntrackListener::CheckNatIface(
- ipacm_event_data_all *data, bool *NatIface)
-{
- int fd = 0, len = 0, cnt, i;
- struct ifreq ifr;
- *NatIface = false;
-
- if (data->ipv4_addr == 0 || data->iptype != IPA_IP_v4)
- {
- IPACMDBG("Ignoring\n");
- return IPACM_FAILURE;
- }
-
- IPACMDBG("Received interface index %d with ip type: %d", data->if_index, data->iptype);
- iptodot(" and ipv4 address", data->ipv4_addr);
-
- if (pConfig == NULL)
- {
- pConfig = IPACM_Config::GetInstance();
- if (pConfig == NULL)
- {
- IPACMERR("Unable to get Config instance\n");
- return IPACM_FAILURE;
- }
- }
-
- cnt = pConfig->GetNatIfacesCnt();
- NatIfaceCnt = cnt;
- IPACMDBG("Total Nat ifaces: %d\n", NatIfaceCnt);
- if (pNatIfaces != NULL)
- {
- free(pNatIfaces);
- pNatIfaces = NULL;
- }
-
- len = (sizeof(NatIfaces) * NatIfaceCnt);
- pNatIfaces = (NatIfaces *)malloc(len);
- if (pNatIfaces == NULL)
- {
- IPACMERR("Unable to allocate memory for non nat ifaces\n");
- return IPACM_FAILURE;
- }
-
- memset(pNatIfaces, 0, len);
- if (pConfig->GetNatIfaces(NatIfaceCnt, pNatIfaces) != 0)
- {
- IPACMERR("Unable to retrieve non nat ifaces\n");
- return IPACM_FAILURE;
- }
-
- /* Search/Configure linux interface-index and map it to IPA interface-index */
- if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
- {
- PERROR("get interface name socket create failed");
- return IPACM_FAILURE;
- }
-
- memset(&ifr, 0, sizeof(struct ifreq));
- ifr.ifr_ifindex = data->if_index;
- if (ioctl(fd, SIOCGIFNAME, &ifr) < 0)
- {
- PERROR("call_ioctl_on_dev: ioctl failed:");
- close(fd);
- return IPACM_FAILURE;
- }
- close(fd);
-
- for (i = 0; i < NatIfaceCnt; i++)
- {
- if (strncmp(ifr.ifr_name,
- pNatIfaces[i].iface_name,
- sizeof(pNatIfaces[i].iface_name)) == 0)
- {
- IPACMDBG_H("Nat iface (%s), entry (%d), dont cache",
- pNatIfaces[i].iface_name, i);
- iptodot("with ipv4 address: ", nat_iface_ipv4_addr[i]);
- *NatIface = true;
- return IPACM_SUCCESS;
- }
- }
-
- return IPACM_SUCCESS;
-}
-
-void IPACM_ConntrackListener::HandleNonNatIPAddr(
- void *inParam, bool AddOp)
-{
- ipacm_event_data_all *data = (ipacm_event_data_all *)inParam;
- bool NatIface = false;
- int cnt, ret;
-
- if (isStaMode)
- {
- IPACMDBG("In STA mode, don't add dummy rules for non nat ifaces\n");
- return;
- }
-
- /* Handle only non nat ifaces, NAT iface should be handle
- separately to avoid race conditions between route/nat
- rules add/delete operations */
- if (AddOp)
- {
- ret = CheckNatIface(data, &NatIface);
- if (!NatIface && ret == IPACM_SUCCESS)
- {
- /* Cache the non nat iface ip address */
- for (cnt = 0; cnt < MAX_IFACE_ADDRESS; cnt++)
- {
- if (nonnat_iface_ipv4_addr[cnt] == 0)
- {
- nonnat_iface_ipv4_addr[cnt] = data->ipv4_addr;
- IPACMDBG("Add ip addr to non nat list (%d) ", cnt);
- iptodot("with ipv4 address", nonnat_iface_ipv4_addr[cnt]);
-
- /* Add dummy nat rule for non nat ifaces */
- nat_inst->FlushTempEntries(data->ipv4_addr, true, true);
- return;
- }
- }
- }
- }
- else
- {
- /* for delete operation */
- for (cnt = 0; cnt < MAX_IFACE_ADDRESS; cnt++)
- {
- if (nonnat_iface_ipv4_addr[cnt] == data->ipv4_addr)
- {
- IPACMDBG("Reseting ct filters, entry (%d) ", cnt);
- iptodot("with ipv4 address", nonnat_iface_ipv4_addr[cnt]);
- nonnat_iface_ipv4_addr[cnt] = 0;
- nat_inst->FlushTempEntries(data->ipv4_addr, false);
- nat_inst->DelEntriesOnClntDiscon(data->ipv4_addr);
- return;
- }
- }
-
- }
-
- return;
-}
-
-void IPACM_ConntrackListener::HandleNeighIpAddrAddEvt(
- ipacm_event_data_all *data)
-{
- bool NatIface = false;
- int j, ret;
-
- ret = CheckNatIface(data, &NatIface);
- if (NatIface && ret == IPACM_SUCCESS)
- {
- for (j = 0; j < MAX_IFACE_ADDRESS; j++)
- {
- /* check if duplicate NAT ip */
- if (nat_iface_ipv4_addr[j] == data->ipv4_addr)
- break;
-
- /* Cache the new nat iface address */
- if (nat_iface_ipv4_addr[j] == 0)
- {
- nat_iface_ipv4_addr[j] = data->ipv4_addr;
- iptodot("Nating connections of addr: ", nat_iface_ipv4_addr[j]);
- break;
- }
- }
-
- /* Add the cached temp entries to NAT table */
- if (j != MAX_IFACE_ADDRESS)
- {
- nat_inst->ResetPwrSaveIf(data->ipv4_addr);
- nat_inst->FlushTempEntries(data->ipv4_addr, true);
- }
- }
- return;
-}
-
-void IPACM_ConntrackListener::HandleNeighIpAddrDelEvt(
- uint32_t ipv4_addr)
-{
- int cnt;
-
- if(ipv4_addr == 0)
- {
- IPACMDBG("Ignoring\n");
- return;
- }
-
- iptodot("HandleNeighIpAddrDelEvt(): Received ip addr", ipv4_addr);
- for(cnt = 0; cntFlushTempEntries(ipv4_addr, false);
- nat_inst->DelEntriesOnClntDiscon(ipv4_addr);
- }
- }
-
- return;
-}
-
-void IPACM_ConntrackListener::TriggerWANUp(void *in_param)
-{
- ipacm_event_iface_up *wanup_data = (ipacm_event_iface_up *)in_param;
-
- IPACMDBG_H("Recevied below information during wanup,\n");
- IPACMDBG_H("if_name:%s, ipv4_address:0x%x\n",
- wanup_data->ifname, wanup_data->ipv4_addr);
-
- if(wanup_data->ipv4_addr == 0)
- {
- IPACMERR("Invalid ipv4 address,ignoring IPA_HANDLE_WAN_UP event\n");
- return;
- }
-
- if(isWanUp())
- {
- if (wan_ipaddr != wanup_data->ipv4_addr)
- TriggerWANDown(wan_ipaddr);
- else
- return;
- }
-
- WanUp = true;
- isStaMode = wanup_data->is_sta;
- IPACMDBG("isStaMode: %d\n", isStaMode);
-
- wan_ipaddr = wanup_data->ipv4_addr;
- memcpy(wan_ifname, wanup_data->ifname, sizeof(wan_ifname));
-
- if(nat_inst != NULL)
- {
- nat_inst->AddTable(wanup_data->ipv4_addr, wanup_data->mux_id);
- }
-
- IPACMDBG("creating nat threads\n");
- CreateNatThreads();
-}
-
-int IPACM_ConntrackListener::CreateConnTrackThreads(void)
-{
- int ret;
- pthread_t tcp_thread = 0, udp_thread = 0;
-
- if(isCTReg == false)
- {
- ret = pthread_create(&tcp_thread, NULL, IPACM_ConntrackClient::TCPRegisterWithConnTrack, NULL);
- if(0 != ret)
- {
- IPACMERR("unable to create TCP conntrack event listner thread\n");
- PERROR("unable to create TCP conntrack\n");
- goto error;
- }
-
- IPACMDBG("created TCP conntrack event listner thread\n");
- if(pthread_setname_np(tcp_thread, "tcp ct listener") != 0)
- {
- IPACMERR("unable to set thread name\n");
- }
-
- ret = pthread_create(&udp_thread, NULL, IPACM_ConntrackClient::UDPRegisterWithConnTrack, NULL);
- if(0 != ret)
- {
- IPACMERR("unable to create UDP conntrack event listner thread\n");
- PERROR("unable to create UDP conntrack\n");
- goto error;
- }
-
- IPACMDBG("created UDP conntrack event listner thread\n");
- if(pthread_setname_np(udp_thread, "udp ct listener") != 0)
- {
- IPACMERR("unable to set thread name\n");
- }
-
- isCTReg = true;
- }
-
- return 0;
-
-error:
- return -1;
-}
-int IPACM_ConntrackListener::CreateNatThreads(void)
-{
- int ret;
- pthread_t udpcto_thread = 0;
-
- if(isNatThreadStart == false)
- {
- ret = pthread_create(&udpcto_thread, NULL, IPACM_ConntrackClient::UDPConnTimeoutUpdate, NULL);
- if(0 != ret)
- {
- IPACMERR("unable to create udp conn timeout thread\n");
- PERROR("unable to create udp conn timeout\n");
- goto error;
- }
-
- IPACMDBG("created upd conn timeout thread\n");
- if(pthread_setname_np(udpcto_thread, "udp conn timeout") != 0)
- {
- IPACMERR("unable to set thread name\n");
- }
-
- isNatThreadStart = true;
- }
- return 0;
-
-error:
- return -1;
-}
-
-void IPACM_ConntrackListener::TriggerWANDown(uint32_t wan_addr)
-{
- int ret = 0;
- IPACMDBG_H("Deleting ipv4 nat table with");
- IPACMDBG_H(" public ip address(0x%x): %d.%d.%d.%d\n", wan_addr,
- ((wan_addr>>24) & 0xFF), ((wan_addr>>16) & 0xFF),
- ((wan_addr>>8) & 0xFF), (wan_addr & 0xFF));
-
- if(nat_inst != NULL)
- {
- ret = nat_inst->DeleteTable(wan_addr);
- if (ret)
- return;
-
- WanUp = false;
- wan_ipaddr = 0;
- }
-}
-
-
-void ParseCTMessage(struct nf_conntrack *ct)
-{
- uint32_t status, timeout;
- IPACMDBG("Printing conntrack parameters\n");
-
- iptodot("ATTR_IPV4_SRC = ATTR_ORIG_IPV4_SRC:", nfct_get_attr_u32(ct, ATTR_ORIG_IPV4_SRC));
- iptodot("ATTR_IPV4_DST = ATTR_ORIG_IPV4_DST:", nfct_get_attr_u32(ct, ATTR_ORIG_IPV4_DST));
- IPACMDBG("ATTR_PORT_SRC = ATTR_ORIG_PORT_SRC: 0x%x\n", nfct_get_attr_u16(ct, ATTR_ORIG_PORT_SRC));
- IPACMDBG("ATTR_PORT_DST = ATTR_ORIG_PORT_DST: 0x%x\n", nfct_get_attr_u16(ct, ATTR_ORIG_PORT_DST));
-
- iptodot("ATTR_REPL_IPV4_SRC:", nfct_get_attr_u32(ct, ATTR_REPL_IPV4_SRC));
- iptodot("ATTR_REPL_IPV4_DST:", nfct_get_attr_u32(ct, ATTR_REPL_IPV4_DST));
- IPACMDBG("ATTR_REPL_PORT_SRC: 0x%x\n", nfct_get_attr_u16(ct, ATTR_REPL_PORT_SRC));
- IPACMDBG("ATTR_REPL_PORT_DST: 0x%x\n", nfct_get_attr_u16(ct, ATTR_REPL_PORT_DST));
-
- iptodot("ATTR_SNAT_IPV4:", nfct_get_attr_u32(ct, ATTR_SNAT_IPV4));
- iptodot("ATTR_DNAT_IPV4:", nfct_get_attr_u32(ct, ATTR_DNAT_IPV4));
- IPACMDBG("ATTR_SNAT_PORT: 0x%x\n", nfct_get_attr_u16(ct, ATTR_SNAT_PORT));
- IPACMDBG("ATTR_DNAT_PORT: 0x%x\n", nfct_get_attr_u16(ct, ATTR_DNAT_PORT));
-
- IPACMDBG("ATTR_MARK: 0x%x\n", nfct_get_attr_u32(ct, ATTR_MARK));
- IPACMDBG("ATTR_USE: 0x%x\n", nfct_get_attr_u32(ct, ATTR_USE));
- IPACMDBG("ATTR_ID: 0x%x\n", nfct_get_attr_u32(ct, ATTR_ID));
-
- status = nfct_get_attr_u32(ct, ATTR_STATUS);
- IPACMDBG("ATTR_STATUS: 0x%x\n", status);
-
- timeout = nfct_get_attr_u32(ct, ATTR_TIMEOUT);
- IPACMDBG("ATTR_TIMEOUT: 0x%x\n", timeout);
-
- if(IPS_SRC_NAT & status)
- {
- IPACMDBG("IPS_SRC_NAT set\n");
- }
-
- if(IPS_DST_NAT & status)
- {
- IPACMDBG("IPS_DST_NAT set\n");
- }
-
- if(IPS_SRC_NAT_DONE & status)
- {
- IPACMDBG("IPS_SRC_NAT_DONE set\n");
- }
-
- if(IPS_DST_NAT_DONE & status)
- {
- IPACMDBG(" IPS_DST_NAT_DONE set\n");
- }
-
- IPACMDBG("\n");
- return;
-}
-
-void ParseCTV6Message(struct nf_conntrack *ct)
-{
- uint32_t status, timeout;
- struct nfct_attr_grp_ipv6 orig_params;
- uint8_t l4proto, tcp_flags, tcp_state;
-
- IPACMDBG("Printing conntrack parameters\n");
-
- nfct_get_attr_grp(ct, ATTR_GRP_ORIG_IPV6, (void *)&orig_params);
- IPACMDBG("Orig src_v6_addr: 0x%08x%08x%08x%08x\n", orig_params.src[0], orig_params.src[1],
- orig_params.src[2], orig_params.src[3]);
- IPACMDBG("Orig dst_v6_addr: 0x%08x%08x%08x%08x\n", orig_params.dst[0], orig_params.dst[1],
- orig_params.dst[2], orig_params.dst[3]);
-
- IPACMDBG("ATTR_PORT_SRC = ATTR_ORIG_PORT_SRC: 0x%x\n", nfct_get_attr_u16(ct, ATTR_ORIG_PORT_SRC));
- IPACMDBG("ATTR_PORT_DST = ATTR_ORIG_PORT_DST: 0x%x\n", nfct_get_attr_u16(ct, ATTR_ORIG_PORT_DST));
-
- IPACMDBG("ATTR_MARK: 0x%x\n", nfct_get_attr_u32(ct, ATTR_MARK));
- IPACMDBG("ATTR_USE: 0x%x\n", nfct_get_attr_u32(ct, ATTR_USE));
- IPACMDBG("ATTR_ID: 0x%x\n", nfct_get_attr_u32(ct, ATTR_ID));
-
- timeout = nfct_get_attr_u32(ct, ATTR_TIMEOUT);
- IPACMDBG("ATTR_TIMEOUT: 0x%x\n", timeout);
-
- status = nfct_get_attr_u32(ct, ATTR_STATUS);
- IPACMDBG("ATTR_STATUS: 0x%x\n", status);
-
- l4proto = nfct_get_attr_u8(ct, ATTR_ORIG_L4PROTO);
- IPACMDBG("ATTR_ORIG_L4PROTO: 0x%x\n", l4proto);
- if(l4proto == IPPROTO_TCP)
- {
- tcp_state = nfct_get_attr_u8(ct, ATTR_TCP_STATE);
- IPACMDBG("ATTR_TCP_STATE: 0x%x\n", tcp_state);
-
- tcp_flags = nfct_get_attr_u8(ct, ATTR_TCP_FLAGS_ORIG);
- IPACMDBG("ATTR_TCP_FLAGS_ORIG: 0x%x\n", tcp_flags);
- }
-
- IPACMDBG("\n");
- return;
-}
-
-#ifdef CT_OPT
-void IPACM_ConntrackListener::ProcessCTV6Message(void *param)
-{
- ipacm_ct_evt_data *evt_data = (ipacm_ct_evt_data *)param;
- u_int8_t l4proto = 0;
- uint32_t status = 0;
- struct nf_conntrack *ct = evt_data->ct;
-
-#ifdef IPACM_DEBUG
- char buf[1024];
-
- /* Process message and generate ioctl call to kernel thread */
- nfct_snprintf(buf, sizeof(buf), evt_data->ct,
- evt_data->type, NFCT_O_PLAIN, NFCT_OF_TIME);
- IPACMDBG("%s\n", buf);
- IPACMDBG("\n");
- ParseCTV6Message(ct);
-#endif
-
- if(p_lan2lan == NULL)
- {
- IPACMERR("Lan2Lan Instance is null\n");
- goto IGNORE;
- }
-
- status = nfct_get_attr_u32(ct, ATTR_STATUS);
- if((IPS_DST_NAT & status) || (IPS_SRC_NAT & status))
- {
- IPACMDBG("Either Destination or Source nat flag Set\n");
- goto IGNORE;
- }
-
- l4proto = nfct_get_attr_u8(ct, ATTR_ORIG_L4PROTO);
- if(IPPROTO_UDP != l4proto && IPPROTO_TCP != l4proto)
- {
- IPACMDBG("Received unexpected protocl %d conntrack message\n", l4proto);
- goto IGNORE;
- }
-
- IPACMDBG("Neither Destination nor Source nat flag Set\n");
- struct nfct_attr_grp_ipv6 orig_params;
- nfct_get_attr_grp(ct, ATTR_GRP_ORIG_IPV6, (void *)&orig_params);
-
- ipacm_event_connection lan2lan_conn;
- lan2lan_conn.iptype = IPA_IP_v6;
- memcpy(lan2lan_conn.src_ipv6_addr, orig_params.src,
- sizeof(lan2lan_conn.src_ipv6_addr));
- IPACMDBG("Before convert, src_v6_addr: 0x%08x%08x%08x%08x\n", lan2lan_conn.src_ipv6_addr[0], lan2lan_conn.src_ipv6_addr[1],
- lan2lan_conn.src_ipv6_addr[2], lan2lan_conn.src_ipv6_addr[3]);
- for(int cnt=0; cnt<4; cnt++)
- {
- lan2lan_conn.src_ipv6_addr[cnt] = ntohl(lan2lan_conn.src_ipv6_addr[cnt]);
- }
- IPACMDBG("After convert src_v6_addr: 0x%08x%08x%08x%08x\n", lan2lan_conn.src_ipv6_addr[0], lan2lan_conn.src_ipv6_addr[1],
- lan2lan_conn.src_ipv6_addr[2], lan2lan_conn.src_ipv6_addr[3]);
-
- memcpy(lan2lan_conn.dst_ipv6_addr, orig_params.dst,
- sizeof(lan2lan_conn.dst_ipv6_addr));
- IPACMDBG("Before convert, dst_ipv6_addr: 0x%08x%08x%08x%08x\n", lan2lan_conn.dst_ipv6_addr[0], lan2lan_conn.dst_ipv6_addr[1],
- lan2lan_conn.dst_ipv6_addr[2], lan2lan_conn.dst_ipv6_addr[3]);
- for(int cnt=0; cnt<4; cnt++)
- {
- lan2lan_conn.dst_ipv6_addr[cnt] = ntohl(lan2lan_conn.dst_ipv6_addr[cnt]);
- }
- IPACMDBG("After convert, dst_ipv6_addr: 0x%08x%08x%08x%08x\n", lan2lan_conn.dst_ipv6_addr[0], lan2lan_conn.dst_ipv6_addr[1],
- lan2lan_conn.dst_ipv6_addr[2], lan2lan_conn.dst_ipv6_addr[3]);
-
- if(((IPPROTO_UDP == l4proto) && (NFCT_T_NEW == evt_data->type)) ||
- ((IPPROTO_TCP == l4proto) &&
- (nfct_get_attr_u8(ct, ATTR_TCP_STATE) == TCP_CONNTRACK_ESTABLISHED))
- )
- {
- p_lan2lan->handle_new_connection(&lan2lan_conn);
- }
- else if((IPPROTO_UDP == l4proto && NFCT_T_DESTROY == evt_data->type) ||
- (IPPROTO_TCP == l4proto &&
- nfct_get_attr_u8(ct, ATTR_TCP_STATE) == TCP_CONNTRACK_FIN_WAIT))
- {
- p_lan2lan->handle_del_connection(&lan2lan_conn);
- }
-
-IGNORE:
- /* Cleanup item that was allocated during the original CT callback */
- nfct_destroy(ct);
- return;
-}
-#endif
-
-void IPACM_ConntrackListener::ProcessCTMessage(void *param)
-{
- ipacm_ct_evt_data *evt_data = (ipacm_ct_evt_data *)param;
- u_int8_t l4proto = 0;
-
-#ifdef IPACM_DEBUG
- char buf[1024];
- unsigned int out_flags;
-
- /* Process message and generate ioctl call to kernel thread */
- out_flags = (NFCT_OF_SHOW_LAYER3 | NFCT_OF_TIME | NFCT_OF_ID);
- nfct_snprintf(buf, sizeof(buf), evt_data->ct,
- evt_data->type, NFCT_O_PLAIN, out_flags);
- IPACMDBG_H("%s\n", buf);
-
- ParseCTMessage(evt_data->ct);
-#endif
-
- l4proto = nfct_get_attr_u8(evt_data->ct, ATTR_ORIG_L4PROTO);
- if(IPPROTO_UDP != l4proto && IPPROTO_TCP != l4proto)
- {
- IPACMDBG("Received unexpected protocl %d conntrack message\n", l4proto);
- }
- else
- {
- ProcessTCPorUDPMsg(evt_data->ct, evt_data->type, l4proto);
- }
-
- /* Cleanup item that was allocated during the original CT callback */
- nfct_destroy(evt_data->ct);
- return;
-}
-
-bool IPACM_ConntrackListener::AddIface(
- nat_table_entry *rule, bool *isTempEntry)
-{
- int cnt;
-
- *isTempEntry = false;
-
- /* Special handling for Passthrough IP. */
- if (IPACM_Iface::ipacmcfg->ipacm_ip_passthrough_mode)
- {
- if (rule->private_ip == IPACM_Wan::getWANIP())
- {
- IPACMDBG("In Passthrough mode and entry matched with Wan IP (0x%x)\n",
- rule->private_ip);
- return true;
- }
- }
-
- /* check whether nat iface or not */
- for (cnt = 0; cnt < MAX_IFACE_ADDRESS; cnt++)
- {
- if (nat_iface_ipv4_addr[cnt] != 0)
- {
- if (rule->private_ip == nat_iface_ipv4_addr[cnt] ||
- rule->target_ip == nat_iface_ipv4_addr[cnt])
- {
- IPACMDBG("matched nat_iface_ipv4_addr entry(%d)\n", cnt);
- iptodot("AddIface(): Nat entry match with ip addr",
- nat_iface_ipv4_addr[cnt]);
- return true;
- }
- }
- }
-
- if (!isStaMode)
- {
- /* check whether non nat iface or not, on Non Nat iface
- add dummy rule by copying public ip to private ip */
- for (cnt = 0; cnt < MAX_IFACE_ADDRESS; cnt++)
- {
- if (nonnat_iface_ipv4_addr[cnt] != 0)
- {
- if (rule->private_ip == nonnat_iface_ipv4_addr[cnt] ||
- rule->target_ip == nonnat_iface_ipv4_addr[cnt])
- {
- IPACMDBG("matched non_nat_iface_ipv4_addr entry(%d)\n", cnt);
- iptodot("AddIface(): Non Nat entry match with ip addr",
- nonnat_iface_ipv4_addr[cnt]);
-
- rule->private_ip = rule->public_ip;
- rule->private_port = rule->public_port;
- return true;
- }
- }
- }
- IPACMDBG_H("Not mtaching with non-nat ifaces\n");
- }
- else
- IPACMDBG("In STA mode, don't compare against non nat ifaces\n");
-
- if(pConfig == NULL)
- {
- pConfig = IPACM_Config::GetInstance();
- if(pConfig == NULL)
- {
- IPACMERR("Unable to get Config instance\n");
- return false;
- }
- }
-
- if (pConfig->isPrivateSubnet(rule->private_ip) ||
- pConfig->isPrivateSubnet(rule->target_ip))
- {
- IPACMDBG("Matching with Private subnet\n");
- *isTempEntry = true;
- return true;
- }
-
- return false;
-}
-
-void IPACM_ConntrackListener::AddORDeleteNatEntry(const nat_entry_bundle *input)
-{
- u_int8_t tcp_state;
-
- if (nat_inst == NULL)
- {
- IPACMERR("Nat instance is NULL, unable to add or delete\n");
- return;
- }
-
- IPACMDBG_H("Below Nat Entry will either be added or deleted\n");
- iptodot("AddORDeleteNatEntry(): target ip or dst ip",
- input->rule->target_ip);
- IPACMDBG("target port or dst port: 0x%x Decimal:%d\n",
- input->rule->target_port, input->rule->target_port);
- iptodot("AddORDeleteNatEntry(): private ip or src ip",
- input->rule->private_ip);
- IPACMDBG("private port or src port: 0x%x, Decimal:%d\n",
- input->rule->private_port, input->rule->private_port);
- IPACMDBG("public port or reply dst port: 0x%x, Decimal:%d\n",
- input->rule->public_port, input->rule->public_port);
- IPACMDBG("Protocol: %d, destination nat flag: %d\n",
- input->rule->protocol, input->rule->dst_nat);
-
- if (IPPROTO_TCP == input->rule->protocol)
- {
- tcp_state = nfct_get_attr_u8(input->ct, ATTR_TCP_STATE);
- if (TCP_CONNTRACK_ESTABLISHED == tcp_state)
- {
- IPACMDBG("TCP state TCP_CONNTRACK_ESTABLISHED(%d)\n", tcp_state);
- if (!CtList->isWanUp())
- {
- IPACMDBG("Wan is not up, cache connections\n");
- nat_inst->CacheEntry(input->rule);
- }
- else if (input->isTempEntry)
- {
- nat_inst->AddTempEntry(input->rule);
- }
- else
- {
- nat_inst->AddEntry(input->rule);
- }
- }
- else if (TCP_CONNTRACK_FIN_WAIT == tcp_state ||
- input->type == NFCT_T_DESTROY)
- {
- IPACMDBG("TCP state TCP_CONNTRACK_FIN_WAIT(%d) "
- "or type NFCT_T_DESTROY(%d)\n", tcp_state, input->type);
-
- nat_inst->DeleteEntry(input->rule);
- nat_inst->DeleteTempEntry(input->rule);
- }
- else
- {
- IPACMDBG("Ignore tcp state: %d and type: %d\n",
- tcp_state, input->type);
- }
-
- }
- else if (IPPROTO_UDP == input->rule->protocol)
- {
- if (NFCT_T_NEW == input->type)
- {
- IPACMDBG("New UDP connection at time %ld\n", time(NULL));
- if (!CtList->isWanUp())
- {
- IPACMDBG("Wan is not up, cache connections\n");
- nat_inst->CacheEntry(input->rule);
- }
- else if (input->isTempEntry)
- {
- nat_inst->AddTempEntry(input->rule);
- }
- else
- {
- nat_inst->AddEntry(input->rule);
- }
- }
- else if (NFCT_T_DESTROY == input->type)
- {
- IPACMDBG("UDP connection close at time %ld\n", time(NULL));
- nat_inst->DeleteEntry(input->rule);
- nat_inst->DeleteTempEntry(input->rule);
- }
- }
-
- return;
-}
-
-void IPACM_ConntrackListener::PopulateTCPorUDPEntry(
- struct nf_conntrack *ct,
- uint32_t status,
- nat_table_entry *rule)
-{
- if (IPS_DST_NAT == status)
- {
- IPACMDBG("Destination NAT\n");
- rule->dst_nat = true;
-
- IPACMDBG("Parse reply tuple\n");
- rule->target_ip = nfct_get_attr_u32(ct, ATTR_ORIG_IPV4_SRC);
- rule->target_ip = ntohl(rule->target_ip);
- iptodot("PopulateTCPorUDPEntry(): target ip", rule->target_ip);
-
- /* Retriev target/dst port */
- rule->target_port = nfct_get_attr_u16(ct, ATTR_ORIG_PORT_SRC);
- rule->target_port = ntohs(rule->target_port);
- if (0 == rule->target_port)
- {
- IPACMDBG("unable to retrieve target port\n");
- }
-
- rule->public_port = nfct_get_attr_u16(ct, ATTR_ORIG_PORT_DST);
- rule->public_port = ntohs(rule->public_port);
-
- /* Retriev src/private ip address */
- rule->private_ip = nfct_get_attr_u32(ct, ATTR_REPL_IPV4_SRC);
- rule->private_ip = ntohl(rule->private_ip);
- iptodot("PopulateTCPorUDPEntry(): private ip", rule->private_ip);
- if (0 == rule->private_ip)
- {
- IPACMDBG("unable to retrieve private ip address\n");
- }
-
- /* Retriev src/private port */
- rule->private_port = nfct_get_attr_u16(ct, ATTR_REPL_PORT_SRC);
- rule->private_port = ntohs(rule->private_port);
- if (0 == rule->private_port)
- {
- IPACMDBG("unable to retrieve private port\n");
- }
- }
- else if (IPS_SRC_NAT == status)
- {
- IPACMDBG("Source NAT\n");
- rule->dst_nat = false;
-
- /* Retriev target/dst ip address */
- IPACMDBG("Parse source tuple\n");
- rule->target_ip = nfct_get_attr_u32(ct, ATTR_ORIG_IPV4_DST);
- rule->target_ip = ntohl(rule->target_ip);
- iptodot("PopulateTCPorUDPEntry(): target ip", rule->target_ip);
- if (0 == rule->target_ip)
- {
- IPACMDBG("unable to retrieve target ip address\n");
- }
- /* Retriev target/dst port */
- rule->target_port = nfct_get_attr_u16(ct, ATTR_ORIG_PORT_DST);
- rule->target_port = ntohs(rule->target_port);
- if (0 == rule->target_port)
- {
- IPACMDBG("unable to retrieve target port\n");
- }
-
- /* Retriev public port */
- rule->public_port = nfct_get_attr_u16(ct, ATTR_REPL_PORT_DST);
- rule->public_port = ntohs(rule->public_port);
- if (0 == rule->public_port)
- {
- IPACMDBG("unable to retrieve public port\n");
- }
-
- /* Retriev src/private ip address */
- rule->private_ip = nfct_get_attr_u32(ct, ATTR_ORIG_IPV4_SRC);
- rule->private_ip = ntohl(rule->private_ip);
- iptodot("PopulateTCPorUDPEntry(): private ip", rule->private_ip);
- if (0 == rule->private_ip)
- {
- IPACMDBG("unable to retrieve private ip address\n");
- }
-
- /* Retriev src/private port */
- rule->private_port = nfct_get_attr_u16(ct, ATTR_ORIG_PORT_SRC);
- rule->private_port = ntohs(rule->private_port);
- if (0 == rule->private_port)
- {
- IPACMDBG("unable to retrieve private port\n");
- }
- }
-
- return;
-}
-
-#ifdef CT_OPT
-void IPACM_ConntrackListener::HandleLan2Lan(struct nf_conntrack *ct,
- enum nf_conntrack_msg_type type,
- nat_table_entry *rule)
-{
- ipacm_event_connection lan2lan_conn = { 0 };
-
- if (p_lan2lan == NULL)
- {
- IPACMERR("Lan2Lan Instance is null\n");
- return;
- }
-
- lan2lan_conn.iptype = IPA_IP_v4;
- lan2lan_conn.src_ipv4_addr = orig_src_ip;
- lan2lan_conn.dst_ipv4_addr = orig_dst_ip;
-
- if (((IPPROTO_UDP == rule->protocol) && (NFCT_T_NEW == type)) ||
- ((IPPROTO_TCP == rule->protocol) && (nfct_get_attr_u8(ct, ATTR_TCP_STATE) == TCP_CONNTRACK_ESTABLISHED)))
- {
- p_lan2lan->handle_new_connection(&lan2lan_conn);
- }
- else if ((IPPROTO_UDP == rule->protocol && NFCT_T_DESTROY == type) ||
- (IPPROTO_TCP == rule->protocol &&
- nfct_get_attr_u8(ct, ATTR_TCP_STATE) == TCP_CONNTRACK_FIN_WAIT))
- {
- p_lan2lan->handle_del_connection(&lan2lan_conn);
- }
-}
-#endif
-
-void IPACM_ConntrackListener::CheckSTAClient(
- const nat_table_entry *rule, bool *isTempEntry)
-{
- int nCnt;
-
- /* Check whether target is in STA client list or not
- if not ignore the connection */
- if(!isStaMode || (StaClntCnt == 0))
- {
- return;
- }
-
- if((sta_clnt_ipv4_addr[0] & STA_CLNT_SUBNET_MASK) !=
- (rule->target_ip & STA_CLNT_SUBNET_MASK))
- {
- IPACMDBG("STA client subnet mask not matching\n");
- return;
- }
-
- IPACMDBG("StaClntCnt %d\n", StaClntCnt);
- for(nCnt = 0; nCnt < StaClntCnt; nCnt++)
- {
- IPACMDBG("Comparing trgt_ip 0x%x with sta clnt ip: 0x%x\n",
- rule->target_ip, sta_clnt_ipv4_addr[nCnt]);
- if(rule->target_ip == sta_clnt_ipv4_addr[nCnt])
- {
- IPACMDBG("Match index %d\n", nCnt);
- return;
- }
- }
-
- IPACMDBG_H("Not matching with STA Clnt Ip Addrs 0x%x\n",
- rule->target_ip);
- *isTempEntry = true;
-}
-
-/* conntrack send in host order and ipa expects in host order */
-void IPACM_ConntrackListener::ProcessTCPorUDPMsg(
- struct nf_conntrack *ct,
- enum nf_conntrack_msg_type type,
- u_int8_t l4proto)
-{
- nat_table_entry rule;
- uint32_t status = 0;
- uint32_t orig_src_ip, orig_dst_ip;
- bool isAdd = false;
-
- nat_entry_bundle nat_entry;
- nat_entry.isTempEntry = false;
- nat_entry.ct = ct;
- nat_entry.type = type;
-
- memset(&rule, 0, sizeof(rule));
- IPACMDBG("Received type:%d with proto:%d\n", type, l4proto);
- status = nfct_get_attr_u32(ct, ATTR_STATUS);
-
- /* Retrieve Protocol */
- rule.protocol = nfct_get_attr_u8(ct, ATTR_REPL_L4PROTO);
-
- if(IPS_DST_NAT & status)
- {
- status = IPS_DST_NAT;
- }
- else if(IPS_SRC_NAT & status)
- {
- status = IPS_SRC_NAT;
- }
- else
- {
- IPACMDBG("Neither Destination nor Source nat flag Set\n");
- orig_src_ip = nfct_get_attr_u32(ct, ATTR_ORIG_IPV4_SRC);
- orig_src_ip = ntohl(orig_src_ip);
- if(orig_src_ip == 0)
- {
- IPACMERR("unable to retrieve orig src ip address\n");
- return;
- }
-
- orig_dst_ip = nfct_get_attr_u32(ct, ATTR_ORIG_IPV4_DST);
- orig_dst_ip = ntohl(orig_dst_ip);
- if(orig_dst_ip == 0)
- {
- IPACMERR("unable to retrieve orig dst ip address\n");
- return;
- }
-
- if(orig_src_ip == wan_ipaddr)
- {
- IPACMDBG("orig src ip:0x%x equal to wan ip\n",orig_src_ip);
- status = IPS_SRC_NAT;
- }
- else if(orig_dst_ip == wan_ipaddr)
- {
- IPACMDBG("orig Dst IP:0x%x equal to wan ip\n",orig_dst_ip);
- status = IPS_DST_NAT;
- }
- else
- {
- IPACMDBG_H("Neither orig src ip:0x%x Nor orig Dst IP:0x%x equal to wan ip:0x%x\n",
- orig_src_ip, orig_dst_ip, wan_ipaddr);
-
-#ifdef CT_OPT
- HandleLan2Lan(ct, type, &rule);
-#endif
- IPACMDBG("Neither source Nor destination nat\n");
- goto IGNORE;
- }
- }
-
- PopulateTCPorUDPEntry(ct, status, &rule);
- rule.public_ip = wan_ipaddr;
-
- if (rule.private_ip != wan_ipaddr)
- {
- isAdd = AddIface(&rule, &nat_entry.isTempEntry);
- if (!isAdd)
- {
- goto IGNORE;
- }
- }
- else
- {
- if (isStaMode)
- {
- IPACMDBG("In STA mode, ignore connections destinated to STA interface\n");
- goto IGNORE;
- }
-
- IPACMDBG("For embedded connections add dummy nat rule\n");
- IPACMDBG("Change private port %d to %d\n",
- rule.private_port, rule.public_port);
- rule.private_port = rule.public_port;
- }
-
- CheckSTAClient(&rule, &nat_entry.isTempEntry);
- nat_entry.rule = &rule;
- AddORDeleteNatEntry(&nat_entry);
- return;
-
-IGNORE:
- IPACMDBG_H("ignoring below Nat Entry\n");
- iptodot("ProcessTCPorUDPMsg(): target ip or dst ip", rule.target_ip);
- IPACMDBG("target port or dst port: 0x%x Decimal:%d\n", rule.target_port, rule.target_port);
- iptodot("ProcessTCPorUDPMsg(): private ip or src ip", rule.private_ip);
- IPACMDBG("private port or src port: 0x%x, Decimal:%d\n", rule.private_port, rule.private_port);
- IPACMDBG("public port or reply dst port: 0x%x, Decimal:%d\n", rule.public_port, rule.public_port);
- IPACMDBG("Protocol: %d, destination nat flag: %d\n", rule.protocol, rule.dst_nat);
- return;
-}
-
-void IPACM_ConntrackListener::HandleSTAClientAddEvt(uint32_t clnt_ip_addr)
-{
- int cnt;
- IPACMDBG_H("Received STA client 0x%x\n", clnt_ip_addr);
-
- if(StaClntCnt >= MAX_STA_CLNT_IFACES)
- {
- IPACMDBG("Max STA client reached, ignore 0x%x\n", clnt_ip_addr);
- return;
- }
-
- for(cnt=0; cntFlushTempEntries(clnt_ip_addr, true);
- return;
-}
-
-void IPACM_ConntrackListener::HandleSTAClientDelEvt(uint32_t clnt_ip_addr)
-{
- int cnt;
- IPACMDBG_H("Received STA client 0x%x\n", clnt_ip_addr);
-
- for(cnt=0; cntDelEntriesOnSTAClntDiscon(clnt_ip_addr);
- StaClntCnt--;
- IPACMDBG("STA client cnt %d\n", StaClntCnt);
- break;
- }
- }
-
- nat_inst->FlushTempEntries(clnt_ip_addr, false);
- return;
-}
diff --git a/data-ipa-cfg-mgr/ipacm/src/IPACM_Conntrack_NATApp.cpp b/data-ipa-cfg-mgr/ipacm/src/IPACM_Conntrack_NATApp.cpp
deleted file mode 100644
index 4004597..0000000
--- a/data-ipa-cfg-mgr/ipacm/src/IPACM_Conntrack_NATApp.cpp
+++ /dev/null
@@ -1,1051 +0,0 @@
-/*
-Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-#include "IPACM_Conntrack_NATApp.h"
-#include "IPACM_ConntrackClient.h"
-#ifdef FEATURE_IPACM_HAL
-#include "IPACM_OffloadManager.h"
-#endif
-#include "IPACM_Iface.h"
-
-#define INVALID_IP_ADDR 0x0
-
-#define HDR_METADATA_MUX_ID_BMASK 0x00FF0000
-#define HDR_METADATA_MUX_ID_SHFT 0x10
-
-/* NatApp class Implementation */
-NatApp *NatApp::pInstance = NULL;
-NatApp::NatApp()
-{
- max_entries = 0;
- cache = NULL;
-
- nat_table_hdl = 0;
- pub_ip_addr = 0;
-
- curCnt = 0;
-
- pALGPorts = NULL;
- nALGPort = 0;
-
- ct = NULL;
- ct_hdl = NULL;
-
- memset(temp, 0, sizeof(temp));
-}
-
-int NatApp::Init(void)
-{
- IPACM_Config *pConfig;
- int size = 0;
-
- pConfig = IPACM_Config::GetInstance();
- if(pConfig == NULL)
- {
- IPACMERR("Unable to get Config instance\n");
- return -1;
- }
-
- max_entries = pConfig->GetNatMaxEntries();
-
- size = (sizeof(nat_table_entry) * max_entries);
- cache = (nat_table_entry *)malloc(size);
- if(cache == NULL)
- {
- IPACMERR("Unable to allocate memory for cache\n");
- goto fail;
- }
- IPACMDBG("Allocated %d bytes for config manager nat cache\n", size);
- memset(cache, 0, size);
-
- nALGPort = pConfig->GetAlgPortCnt();
- if(nALGPort > 0)
- {
- pALGPorts = (ipacm_alg *)malloc(sizeof(ipacm_alg) * nALGPort);
- if(pALGPorts == NULL)
- {
- IPACMERR("Unable to allocate memory for alg prots\n");
- goto fail;
- }
- memset(pALGPorts, 0, sizeof(ipacm_alg) * nALGPort);
-
- pConfig->GetAlgPorts(nALGPort, pALGPorts);
-
- IPACMDBG("Printing %d alg ports information\n", nALGPort);
- for(int cnt=0; cntInit())
- {
- delete pInstance;
- return NULL;
- }
- }
-
- return pInstance;
-}
-
-uint32_t NatApp::GenerateMetdata(uint8_t mux_id)
-{
- return (mux_id << HDR_METADATA_MUX_ID_SHFT) & HDR_METADATA_MUX_ID_BMASK;
-}
-
-/* NAT APP related object function definitions */
-
-int NatApp::AddTable(uint32_t pub_ip, uint8_t mux_id)
-{
- int ret;
- int cnt = 0;
- ipa_nat_ipv4_rule nat_rule;
- IPACMDBG_H("%s() %d\n", __FUNCTION__, __LINE__);
-
- /* Not reset the cache wait it timeout by destroy event */
-#if 0
- if (pub_ip != pub_ip_addr_pre)
- {
- IPACMDBG("Reset the cache because NAT-ipv4 different\n");
- memset(cache, 0, sizeof(nat_table_entry) * max_entries);
- curCnt = 0;
- }
-#endif
- ret = ipa_nat_add_ipv4_tbl(pub_ip, max_entries, &nat_table_hdl);
- if(ret)
- {
- IPACMERR("unable to create nat table Error:%d\n", ret);
- return ret;
- }
- if(IPACM_Iface::ipacmcfg->GetIPAVer() >= IPA_HW_v4_0) {
- /* modify PDN 0 so it will hold the mux ID in the src metadata field */
- ipa_nat_pdn_entry entry;
-
- entry.dst_metadata = 0;
- entry.src_metadata = GenerateMetdata(mux_id);
- entry.public_ip = pub_ip;
- ret = ipa_nat_modify_pdn(nat_table_hdl, 0, &entry);
- if(ret)
- {
- IPACMERR("unable to modify PDN 0 entry Error:%d INIT_HDR_METADATA register values will be used!\n", ret);
- }
- }
-
- /* Add back the cached NAT-entry */
- if (pub_ip == pub_ip_addr_pre)
- {
- IPACMDBG("Restore the cache to ipa NAT-table\n");
- for(cnt = 0; cnt < max_entries; cnt++)
- {
- if(cache[cnt].private_ip !=0)
- {
- memset(&nat_rule, 0 , sizeof(nat_rule));
- nat_rule.private_ip = cache[cnt].private_ip;
- nat_rule.target_ip = cache[cnt].target_ip;
- nat_rule.target_port = cache[cnt].target_port;
- nat_rule.private_port = cache[cnt].private_port;
- nat_rule.public_port = cache[cnt].public_port;
- nat_rule.protocol = cache[cnt].protocol;
-
- if(ipa_nat_add_ipv4_rule(nat_table_hdl, &nat_rule, &cache[cnt].rule_hdl) < 0)
- {
- IPACMERR("unable to add the rule delete from cache\n");
- memset(&cache[cnt], 0, sizeof(cache[cnt]));
- curCnt--;
- continue;
- }
- cache[cnt].enabled = true;
-
- IPACMDBG("On wan-iface reset added below rule successfully\n");
- iptodot("Private IP", nat_rule.private_ip);
- iptodot("Target IP", nat_rule.target_ip);
- IPACMDBG("Private Port:%d \t Target Port: %d\t", nat_rule.private_port, nat_rule.target_port);
- IPACMDBG("Public Port:%d\n", nat_rule.public_port);
- IPACMDBG("protocol: %d\n", nat_rule.protocol);
- }
- }
- }
-
- pub_ip_addr = pub_ip;
- return 0;
-}
-
-void NatApp::Reset()
-{
- int cnt = 0;
-
- nat_table_hdl = 0;
- pub_ip_addr = 0;
- /* NAT tbl deleted, reset enabled bit */
- for(cnt = 0; cnt < max_entries; cnt++)
- {
- cache[cnt].enabled = false;
- }
-}
-
-int NatApp::DeleteTable(uint32_t pub_ip)
-{
- int ret;
- IPACMDBG_H("%s() %d\n", __FUNCTION__, __LINE__);
-
- CHK_TBL_HDL();
-
- if(pub_ip_addr != pub_ip)
- {
- IPACMDBG("Public ip address is not matching\n");
- IPACMERR("unable to delete the nat table\n");
- return -1;
- }
-
- ret = ipa_nat_del_ipv4_tbl(nat_table_hdl);
- if(ret)
- {
- IPACMERR("unable to delete nat table Error: %d\n", ret);;
- return ret;
- }
-
- pub_ip_addr_pre = pub_ip_addr;
- Reset();
- return 0;
-}
-
-/* Check for duplicate entries */
-bool NatApp::ChkForDup(const nat_table_entry *rule)
-{
- int cnt = 0;
- IPACMDBG("%s() %d\n", __FUNCTION__, __LINE__);
-
- for(; cnt < max_entries; cnt++)
- {
- if(cache[cnt].private_ip == rule->private_ip &&
- cache[cnt].target_ip == rule->target_ip &&
- cache[cnt].private_port == rule->private_port &&
- cache[cnt].target_port == rule->target_port &&
- cache[cnt].protocol == rule->protocol)
- {
- log_nat(rule->protocol,rule->private_ip,rule->target_ip,rule->private_port,\
- rule->target_port,"Duplicate Rule\n");
- return true;
- }
- }
-
- return false;
-}
-
-/* Delete the entry from Nat table on connection close */
-int NatApp::DeleteEntry(const nat_table_entry *rule)
-{
- int cnt = 0;
- IPACMDBG("%s() %d\n", __FUNCTION__, __LINE__);
-
- log_nat(rule->protocol,rule->private_ip,rule->target_ip,rule->private_port,\
- rule->target_port,"for deletion\n");
-
-
- for(; cnt < max_entries; cnt++)
- {
- if(cache[cnt].private_ip == rule->private_ip &&
- cache[cnt].target_ip == rule->target_ip &&
- cache[cnt].private_port == rule->private_port &&
- cache[cnt].target_port == rule->target_port &&
- cache[cnt].protocol == rule->protocol)
- {
-
- if(cache[cnt].enabled == true)
- {
- if(ipa_nat_del_ipv4_rule(nat_table_hdl, cache[cnt].rule_hdl) < 0)
- {
- IPACMERR("%s() %d deletion failed\n", __FUNCTION__, __LINE__);
- }
-
- IPACMDBG_H("Deleted Nat entry(%d) Successfully\n", cnt);
- }
- else
- {
- IPACMDBG_H("Deleted Nat entry(%d) only from cache\n", cnt);
- }
-
- memset(&cache[cnt], 0, sizeof(cache[cnt]));
- curCnt--;
- break;
- }
- }
-
- return 0;
-}
-
-/* Add new entry to the nat table on new connection */
-int NatApp::AddEntry(const nat_table_entry *rule)
-{
- int cnt = 0;
- ipa_nat_ipv4_rule nat_rule;
-
- IPACMDBG("%s() %d\n", __FUNCTION__, __LINE__);
-
- CHK_TBL_HDL();
- log_nat(rule->protocol,rule->private_ip,rule->target_ip,rule->private_port,\
- rule->target_port,"for addition\n");
- if(isAlgPort(rule->protocol, rule->private_port) ||
- isAlgPort(rule->protocol, rule->target_port))
- {
- IPACMERR("connection using ALG Port, ignore\n");
- return -1;
- }
-
- if(rule->private_ip == 0 ||
- rule->target_ip == 0 ||
- rule->private_port == 0 ||
- rule->target_port == 0 ||
- rule->protocol == 0)
- {
- IPACMERR("Invalid Connection, ignoring it\n");
- return 0;
- }
-
- if(!ChkForDup(rule))
- {
- for(; cnt < max_entries; cnt++)
- {
- if(cache[cnt].private_ip == 0 &&
- cache[cnt].target_ip == 0 &&
- cache[cnt].private_port == 0 &&
- cache[cnt].target_port == 0 &&
- cache[cnt].protocol == 0)
- {
- break;
- }
- }
-
- if(max_entries == cnt)
- {
- IPACMERR("Error: Unable to add, reached maximum rules\n");
- return -1;
- }
- else
- {
- memset(&nat_rule, 0, sizeof(nat_rule));
- nat_rule.private_ip = rule->private_ip;
- nat_rule.target_ip = rule->target_ip;
- nat_rule.target_port = rule->target_port;
- nat_rule.private_port = rule->private_port;
- nat_rule.public_port = rule->public_port;
- nat_rule.protocol = rule->protocol;
-
- if(isPwrSaveIf(rule->private_ip) ||
- isPwrSaveIf(rule->target_ip))
- {
- IPACMDBG("Device is Power Save mode: Dont insert into nat table but cache\n");
- cache[cnt].enabled = false;
- cache[cnt].rule_hdl = 0;
- }
- else
- {
-
- if(ipa_nat_add_ipv4_rule(nat_table_hdl, &nat_rule, &cache[cnt].rule_hdl) < 0)
- {
- IPACMERR("unable to add the rule\n");
- return -1;
- }
-
- cache[cnt].enabled = true;
- }
-
- cache[cnt].private_ip = rule->private_ip;
- cache[cnt].target_ip = rule->target_ip;
- cache[cnt].target_port = rule->target_port;
- cache[cnt].private_port = rule->private_port;
- cache[cnt].protocol = rule->protocol;
- cache[cnt].timestamp = 0;
- cache[cnt].public_port = rule->public_port;
- cache[cnt].dst_nat = rule->dst_nat;
- curCnt++;
- }
-
- }
- else
- {
- IPACMERR("Duplicate rule. Ignore it\n");
- return -1;
- }
-
- if(cache[cnt].enabled == true)
- {
- IPACMDBG_H("Added rule(%d) successfully\n", cnt);
- }
- else
- {
- IPACMDBG_H("Cached rule(%d) successfully\n", cnt);
- }
-
- return 0;
-}
-
-void NatApp::UpdateCTUdpTs(nat_table_entry *rule, uint32_t new_ts)
-{
-#ifdef FEATURE_IPACM_HAL
- IOffloadManager::ConntrackTimeoutUpdater::natTimeoutUpdate_t entry;
- IPACM_OffloadManager* OffloadMng;
-#endif
- iptodot("Private IP:", rule->private_ip);
- iptodot("Target IP:", rule->target_ip);
- IPACMDBG("Private Port: %d, Target Port: %d\n", rule->private_port, rule->target_port);
-
-#ifndef FEATURE_IPACM_HAL
- int ret;
- if(!ct_hdl)
- {
- ct_hdl = nfct_open(CONNTRACK, 0);
- if(!ct_hdl)
- {
- PERROR("nfct_open");
- return;
- }
- }
-
- if(!ct)
- {
- ct = nfct_new();
- if(!ct)
- {
- PERROR("nfct_new");
- return;
- }
- }
-
- nfct_set_attr_u8(ct, ATTR_L3PROTO, AF_INET);
- if(rule->protocol == IPPROTO_UDP)
- {
- nfct_set_attr_u8(ct, ATTR_L4PROTO, rule->protocol);
- nfct_set_attr_u32(ct, ATTR_TIMEOUT, udp_timeout);
- }
- else
- {
- nfct_set_attr_u8(ct, ATTR_L4PROTO, rule->protocol);
- nfct_set_attr_u32(ct, ATTR_TIMEOUT, tcp_timeout);
- }
-
- if(rule->dst_nat == false)
- {
- nfct_set_attr_u32(ct, ATTR_IPV4_SRC, htonl(rule->private_ip));
- nfct_set_attr_u16(ct, ATTR_PORT_SRC, htons(rule->private_port));
-
- nfct_set_attr_u32(ct, ATTR_IPV4_DST, htonl(rule->target_ip));
- nfct_set_attr_u16(ct, ATTR_PORT_DST, htons(rule->target_port));
-
- IPACMDBG("dst nat is not set\n");
- }
- else
- {
- nfct_set_attr_u32(ct, ATTR_IPV4_SRC, htonl(rule->target_ip));
- nfct_set_attr_u16(ct, ATTR_PORT_SRC, htons(rule->target_port));
-
- nfct_set_attr_u32(ct, ATTR_IPV4_DST, htonl(pub_ip_addr));
- nfct_set_attr_u16(ct, ATTR_PORT_DST, htons(rule->public_port));
-
- IPACMDBG("dst nat is set\n");
- }
-
- iptodot("Source IP:", nfct_get_attr_u32(ct, ATTR_IPV4_SRC));
- iptodot("Destination IP:", nfct_get_attr_u32(ct, ATTR_IPV4_DST));
- IPACMDBG("Source Port: %d, Destination Port: %d\n",
- nfct_get_attr_u16(ct, ATTR_PORT_SRC), nfct_get_attr_u16(ct, ATTR_PORT_DST));
-
- IPACMDBG("updating %d connection with time: %d\n",
- rule->protocol, nfct_get_attr_u32(ct, ATTR_TIMEOUT));
-
- ret = nfct_query(ct_hdl, NFCT_Q_UPDATE, ct);
- if(ret == -1)
- {
- IPACMERR("unable to update time stamp");
- DeleteEntry(rule);
- }
- else
- {
- rule->timestamp = new_ts;
- IPACMDBG("Updated time stamp successfully\n");
- }
-#else
- if(rule->protocol == IPPROTO_UDP)
- {
- entry.proto = IOffloadManager::ConntrackTimeoutUpdater::UDP;;
- }
- else
- {
- entry.proto = IOffloadManager::ConntrackTimeoutUpdater::TCP;
- }
-
- if(rule->dst_nat == false)
- {
- entry.src.ipAddr = htonl(rule->private_ip);
- entry.src.port = rule->private_port;
- entry.dst.ipAddr = htonl(rule->target_ip);
- entry.dst.port = rule->target_port;
- IPACMDBG("dst nat is not set\n");
- }
- else
- {
- entry.src.ipAddr = htonl(rule->target_ip);
- entry.src.port = rule->target_port;
- entry.dst.ipAddr = htonl(pub_ip_addr);
- entry.dst.port = rule->public_port;
- IPACMDBG("dst nat is set\n");
- }
-
- iptodot("Source IP:", entry.src.ipAddr);
- iptodot("Destination IP:", entry.dst.ipAddr);
- IPACMDBG("Source Port: %d, Destination Port: %d\n",
- entry.src.port, entry.dst.port);
-
- OffloadMng = IPACM_OffloadManager::GetInstance();
- if (OffloadMng->touInstance == NULL) {
- IPACMERR("OffloadMng->touInstance is NULL, can't forward to framework!\n");
- } else {
- OffloadMng->touInstance->updateTimeout(entry);
- IPACMDBG("Updated time stamp successfully\n");
- rule->timestamp = new_ts;
- }
-#endif
- return;
-}
-
-void NatApp::UpdateUDPTimeStamp()
-{
- int cnt;
- uint32_t ts;
- bool read_to = false;
-
- for(cnt = 0; cnt < max_entries; cnt++)
- {
- ts = 0;
- if(cache[cnt].enabled == true &&
- (cache[cnt].private_ip != cache[cnt].public_ip))
- {
- IPACMDBG("\n");
- if(ipa_nat_query_timestamp(nat_table_hdl, cache[cnt].rule_hdl, &ts) < 0)
- {
- IPACMERR("unable to retrieve timeout for rule hanle: %d\n", cache[cnt].rule_hdl);
- continue;
- }
-
- if(cache[cnt].timestamp == ts)
- {
- IPACMDBG("No Change in Time Stamp: cahce:%d, ipahw:%d\n",
- cache[cnt].timestamp, ts);
- continue;
- }
-
- if (read_to == false) {
- read_to = true;
- Read_TcpUdp_Timeout();
- }
-
- UpdateCTUdpTs(&cache[cnt], ts);
- } /* end of outer if */
-
- } /* end of for loop */
-
-}
-
-bool NatApp::isAlgPort(uint8_t proto, uint16_t port)
-{
- int cnt;
- for(cnt = 0; cnt < nALGPort; cnt++)
- {
- if(proto == pALGPorts[cnt].protocol &&
- port == pALGPorts[cnt].port)
- {
- return true;
- }
- }
-
- return false;
-}
-
-bool NatApp::isPwrSaveIf(uint32_t ip_addr)
-{
- int cnt;
-
- for(cnt = 0; cnt < IPA_MAX_NUM_WIFI_CLIENTS; cnt++)
- {
- if(0 != PwrSaveIfs[cnt] &&
- ip_addr == PwrSaveIfs[cnt])
- {
- return true;
- }
- }
-
- return false;
-}
-
-int NatApp::UpdatePwrSaveIf(uint32_t client_lan_ip)
-{
- int cnt;
- IPACMDBG_H("Received IP address: 0x%x\n", client_lan_ip);
-
- if(client_lan_ip == INVALID_IP_ADDR)
- {
- IPACMERR("Invalid ip address received\n");
- return -1;
- }
-
- /* check for duplicate events */
- for(cnt = 0; cnt < IPA_MAX_NUM_WIFI_CLIENTS; cnt++)
- {
- if(PwrSaveIfs[cnt] == client_lan_ip)
- {
- IPACMDBG("The client 0x%x is already in power save\n", client_lan_ip);
- return 0;
- }
- }
-
- for(cnt = 0; cnt < IPA_MAX_NUM_WIFI_CLIENTS; cnt++)
- {
- if(PwrSaveIfs[cnt] == 0)
- {
- PwrSaveIfs[cnt] = client_lan_ip;
- break;
- }
- }
-
- for(cnt = 0; cnt < max_entries; cnt++)
- {
- if(cache[cnt].private_ip == client_lan_ip &&
- cache[cnt].enabled == true)
- {
- if(ipa_nat_del_ipv4_rule(nat_table_hdl, cache[cnt].rule_hdl) < 0)
- {
- IPACMERR("unable to delete the rule\n");
- continue;
- }
-
- cache[cnt].enabled = false;
- cache[cnt].rule_hdl = 0;
- }
- }
-
- return 0;
-}
-
-int NatApp::ResetPwrSaveIf(uint32_t client_lan_ip)
-{
- int cnt;
- ipa_nat_ipv4_rule nat_rule;
-
- IPACMDBG_H("Received ip address: 0x%x\n", client_lan_ip);
-
- if(client_lan_ip == INVALID_IP_ADDR)
- {
- IPACMERR("Invalid ip address received\n");
- return -1;
- }
-
- for(cnt = 0; cnt < IPA_MAX_NUM_WIFI_CLIENTS; cnt++)
- {
- if(PwrSaveIfs[cnt] == client_lan_ip)
- {
- PwrSaveIfs[cnt] = 0;
- break;
- }
- }
-
- for(cnt = 0; cnt < max_entries; cnt++)
- {
- IPACMDBG("cache (%d): enable %d, ip 0x%x\n", cnt, cache[cnt].enabled, cache[cnt].private_ip);
-
- if(cache[cnt].private_ip == client_lan_ip &&
- cache[cnt].enabled == false)
- {
- memset(&nat_rule, 0 , sizeof(nat_rule));
- nat_rule.private_ip = cache[cnt].private_ip;
- nat_rule.target_ip = cache[cnt].target_ip;
- nat_rule.target_port = cache[cnt].target_port;
- nat_rule.private_port = cache[cnt].private_port;
- nat_rule.public_port = cache[cnt].public_port;
- nat_rule.protocol = cache[cnt].protocol;
-
- if(ipa_nat_add_ipv4_rule(nat_table_hdl, &nat_rule, &cache[cnt].rule_hdl) < 0)
- {
- IPACMERR("unable to add the rule delete from cache\n");
- memset(&cache[cnt], 0, sizeof(cache[cnt]));
- curCnt--;
- continue;
- }
- cache[cnt].enabled = true;
-
- IPACMDBG("On power reset added below rule successfully\n");
- iptodot("Private IP", nat_rule.private_ip);
- iptodot("Target IP", nat_rule.target_ip);
- IPACMDBG("Private Port:%d \t Target Port: %d\t", nat_rule.private_port, nat_rule.target_port);
- IPACMDBG("Public Port:%d\n", nat_rule.public_port);
- IPACMDBG("protocol: %d\n", nat_rule.protocol);
-
- }
- }
-
- return -1;
-}
-
-uint32_t NatApp::GetTableHdl(uint32_t in_ip_addr)
-{
- if(in_ip_addr == pub_ip_addr)
- {
- return nat_table_hdl;
- }
-
- return -1;
-}
-
-void NatApp::AddTempEntry(const nat_table_entry *new_entry)
-{
- int cnt;
-
- IPACMDBG("Received below Temp Nat entry\n");
- iptodot("Private IP", new_entry->private_ip);
- iptodot("Target IP", new_entry->target_ip);
- IPACMDBG("Private Port: %d\t Target Port: %d\t", new_entry->private_port, new_entry->target_port);
- IPACMDBG("protocolcol: %d\n", new_entry->protocol);
-
- if(isAlgPort(new_entry->protocol, new_entry->private_port) ||
- isAlgPort(new_entry->protocol, new_entry->target_port))
- {
- IPACMDBG("connection using ALG Port. Dont insert into nat cache\n");
- return;
- }
-
- if(ChkForDup(new_entry))
- {
- return;
- }
-
- for(cnt=0; cntprivate_ip &&
- temp[cnt].target_ip == new_entry->target_ip &&
- temp[cnt].private_port == new_entry->private_port &&
- temp[cnt].target_port == new_entry->target_port &&
- temp[cnt].protocol == new_entry->protocol)
- {
- IPACMDBG("Received duplicate Temp entry\n");
- return;
- }
- }
-
- for(cnt=0; cntprivate_ip);
- iptodot("Target IP", entry->target_ip);
- IPACMDBG("Private Port: %d\t Target Port: %d\n", entry->private_port, entry->target_port);
- IPACMDBG("protocol: %d\n", entry->protocol);
-
- for(cnt=0; cntprivate_ip &&
- temp[cnt].target_ip == entry->target_ip &&
- temp[cnt].private_port == entry->private_port &&
- temp[cnt].target_port == entry->target_port &&
- temp[cnt].protocol == entry->protocol)
- {
- memset(&temp[cnt], 0, sizeof(nat_table_entry));
- IPACMDBG("Delete Temp Entry\n");
- return;
- }
- }
-
- IPACMDBG("No Such Temp Entry exists\n");
- return;
-}
-
-void NatApp::FlushTempEntries(uint32_t ip_addr, bool isAdd,
- bool isDummy)
-{
- int cnt;
- int ret;
-
- IPACMDBG_H("Received below with isAdd:%d ", isAdd);
- iptodot("IP Address: ", ip_addr);
-
- for(cnt=0; cntprivate_ip == 0 ||
- rule->target_ip == 0 ||
- rule->private_port == 0 ||
- rule->target_port == 0 ||
- rule->protocol == 0)
- {
- IPACMERR("Invalid Connection, ignoring it\n");
- return;
- }
-
- if(!ChkForDup(rule))
- {
- for(cnt=0; cnt < max_entries; cnt++)
- {
- if(cache[cnt].private_ip == 0 &&
- cache[cnt].target_ip == 0 &&
- cache[cnt].private_port == 0 &&
- cache[cnt].target_port == 0 &&
- cache[cnt].protocol == 0)
- {
- break;
- }
- }
-
- if(max_entries == cnt)
- {
- IPACMERR("Error: Unable to add, reached maximum rules\n");
- return;
- }
- else
- {
- cache[cnt].enabled = false;
- cache[cnt].rule_hdl = 0;
- cache[cnt].private_ip = rule->private_ip;
- cache[cnt].target_ip = rule->target_ip;
- cache[cnt].target_port = rule->target_port;
- cache[cnt].private_port = rule->private_port;
- cache[cnt].protocol = rule->protocol;
- cache[cnt].timestamp = 0;
- cache[cnt].public_port = rule->public_port;
- cache[cnt].public_ip = rule->public_ip;
- cache[cnt].dst_nat = rule->dst_nat;
- curCnt++;
- }
-
- }
- else
- {
- IPACMERR("Duplicate rule. Ignore it\n");
- return;
- }
-
- IPACMDBG("Cached rule(%d) successfully\n", cnt);
- return;
-}
-
-void NatApp::Read_TcpUdp_Timeout(void) {
-#ifdef FEATURE_IPACM_HAL
- tcp_timeout = 432000;
- udp_timeout = 180;
- IPACMDBG_H("udp timeout value: %d\n", udp_timeout);
- IPACMDBG_H("tcp timeout value: %d\n", tcp_timeout);
-#else
- FILE *udp_fd = NULL, *tcp_fd = NULL;
- /* Read UDP timeout value */
- udp_fd = fopen(IPACM_UDP_FULL_FILE_NAME, "r");
- if (udp_fd == NULL) {
- IPACMERR("unable to open %s\n", IPACM_UDP_FULL_FILE_NAME);
- goto fail;
- }
-
- if (fscanf(udp_fd, "%d", &udp_timeout) != 1) {
- IPACMERR("Error reading udp timeout\n");
- }
- IPACMDBG_H("udp timeout value: %d\n", udp_timeout);
-
-
- /* Read TCP timeout value */
- tcp_fd = fopen(IPACM_TCP_FULL_FILE_NAME, "r");
- if (tcp_fd == NULL) {
- IPACMERR("unable to open %s\n", IPACM_TCP_FULL_FILE_NAME);
- goto fail;
- }
-
-
- if (fscanf(tcp_fd, "%d", &tcp_timeout) != 1) {
- IPACMERR("Error reading tcp timeout\n");
- }
- IPACMDBG_H("tcp timeout value: %d\n", tcp_timeout);
-
-fail:
- if (udp_fd) {
- fclose(udp_fd);
- }
- if (tcp_fd) {
- fclose(tcp_fd);
- }
-#endif
- return;
-}
diff --git a/data-ipa-cfg-mgr/ipacm/src/IPACM_EvtDispatcher.cpp b/data-ipa-cfg-mgr/ipacm/src/IPACM_EvtDispatcher.cpp
deleted file mode 100644
index 2914f66..0000000
--- a/data-ipa-cfg-mgr/ipacm/src/IPACM_EvtDispatcher.cpp
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
-Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*!
- @file
- IPACM_EvtDispatcher.cpp
-
- @brief
- This file implements the IPAM event dispatcher functionality
-
- @Author
-
-*/
-#include
-#include
-#include
-#include
-#include "IPACM_CmdQueue.h"
-#include "IPACM_Defs.h"
-
-
-extern pthread_mutex_t mutex;
-extern pthread_cond_t cond_var;
-
-cmd_evts *IPACM_EvtDispatcher::head = NULL;
-extern uint32_t ipacm_event_stats[IPACM_EVENT_MAX];
-
-int IPACM_EvtDispatcher::PostEvt
-(
- ipacm_cmd_q_data *data
-)
-{
- Message *item = NULL;
- MessageQueue *MsgQueue = NULL;
-
- if(data->event < IPA_EXTERNAL_EVENT_MAX)
- {
- IPACMDBG("Insert event into external queue.\n");
- MsgQueue = MessageQueue::getInstanceExternal();
- }
- else
- {
- IPACMDBG("Insert event into internal queue.\n");
- MsgQueue = MessageQueue::getInstanceInternal();
- }
- if(MsgQueue == NULL)
- {
- IPACMERR("unable to retrieve MsgQueue instance\n");
- return IPACM_FAILURE;
- }
-
- item = new Message();
- if(item == NULL)
- {
- IPACMERR("unable to create new message item\n");
- return IPACM_FAILURE;
- }
-
- item->evt.callback_ptr = IPACM_EvtDispatcher::ProcessEvt;
- memcpy(&item->evt.data, data, sizeof(ipacm_cmd_q_data));
-
- if(pthread_mutex_lock(&mutex) != 0)
- {
- IPACMERR("unable to lock the mutex\n");
- return IPACM_FAILURE;
- }
-
- IPACMDBG("Enqueing item\n");
- MsgQueue->enqueue(item);
- IPACMDBG("Enqueued item %pK\n", item);
-
- if(pthread_cond_signal(&cond_var) != 0)
- {
- IPACMDBG("unable to lock the mutex\n");
- /* Release the mutex before you return failure */
- if(pthread_mutex_unlock(&mutex) != 0)
- {
- IPACMERR("unable to unlock the mutex\n");
- return IPACM_FAILURE;
- }
- return IPACM_FAILURE;
- }
-
- if(pthread_mutex_unlock(&mutex) != 0)
- {
- IPACMERR("unable to unlock the mutex\n");
- return IPACM_FAILURE;
- }
-
- return IPACM_SUCCESS;
-}
-
-void IPACM_EvtDispatcher::ProcessEvt(ipacm_cmd_q_data *data)
-{
-
- cmd_evts *tmp = head, tmp1;
-
- if(head == NULL)
- {
- IPACMDBG("Queue is empty\n");
- }
-
- while(tmp != NULL)
- {
- memcpy(&tmp1, tmp, sizeof(tmp1));
- if(data->event == tmp1.event)
- {
- ipacm_event_stats[data->event]++;
- tmp1.obj->event_callback(data->event, data->evt_data);
- IPACMDBG(" Find matched registered events\n");
- }
- tmp = tmp1.next;
- }
-
- IPACMDBG(" Finished process events\n");
-
- if(data->evt_data != NULL)
- {
- IPACMDBG("free the event:%d data: %pK\n", data->event, data->evt_data);
- free(data->evt_data);
- }
- return;
-}
-
-int IPACM_EvtDispatcher::registr(ipa_cm_event_id event, IPACM_Listener *obj)
-{
- cmd_evts *tmp = head,*nw;
-
- nw = (cmd_evts *)malloc(sizeof(cmd_evts));
- if(nw != NULL)
- {
- nw->event = event;
- nw->obj = obj;
- nw->next = NULL;
- }
- else
- {
- return IPACM_FAILURE;
- }
-
- if(head == NULL)
- {
- head = nw;
- }
- else
- {
- while(tmp->next)
- {
- tmp = tmp->next;
- }
- tmp->next = nw;
- }
- return IPACM_SUCCESS;
-}
-
-
-int IPACM_EvtDispatcher::deregistr(IPACM_Listener *param)
-{
- cmd_evts *tmp = head,*tmp1,*prev = head;
-
- while(tmp != NULL)
- {
- if(tmp->obj == param)
- {
- tmp1 = tmp;
- if(tmp == head)
- {
- head = head->next;
- }
- else if(tmp->next == NULL)
- {
- prev->next = NULL;
- }
- else
- {
- prev->next = tmp->next;
- }
-
- tmp = tmp->next;
- free(tmp1);
- }
- else
- {
- prev = tmp;
- tmp = tmp->next;
- }
- }
- return IPACM_SUCCESS;
-}
diff --git a/data-ipa-cfg-mgr/ipacm/src/IPACM_Filtering.cpp b/data-ipa-cfg-mgr/ipacm/src/IPACM_Filtering.cpp
deleted file mode 100644
index 3545d81..0000000
--- a/data-ipa-cfg-mgr/ipacm/src/IPACM_Filtering.cpp
+++ /dev/null
@@ -1,538 +0,0 @@
-/*
-Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*!
- @file
- IPACM_Filtering.cpp
-
- @brief
- This file implements the IPACM filtering functionality.
-
- @Author
- Skylar Chang
-
-*/
-#include
-#include
-#include
-#include
-#include
-
-#include "IPACM_Filtering.h"
-#include
-#include "IPACM_Defs.h"
-
-
-const char *IPACM_Filtering::DEVICE_NAME = "/dev/ipa";
-
-IPACM_Filtering::IPACM_Filtering()
-{
- fd = open(DEVICE_NAME, O_RDWR);
- if (fd < 0)
- {
- IPACMERR("Failed opening %s.\n", DEVICE_NAME);
- }
-}
-
-IPACM_Filtering::~IPACM_Filtering()
-{
- close(fd);
-}
-
-bool IPACM_Filtering::DeviceNodeIsOpened()
-{
- return fd;
-}
-
-bool IPACM_Filtering::AddFilteringRule(struct ipa_ioc_add_flt_rule const *ruleTable)
-{
- int retval = 0;
-
- IPACMDBG("Printing filter add attributes\n");
- IPACMDBG("ip type: %d\n", ruleTable->ip);
- IPACMDBG("Number of rules: %d\n", ruleTable->num_rules);
- IPACMDBG("End point: %d and global value: %d\n", ruleTable->ep, ruleTable->global);
- IPACMDBG("commit value: %d\n", ruleTable->commit);
- for (int cnt=0; cntnum_rules; cnt++)
- {
- IPACMDBG("Filter rule:%d attrib mask: 0x%x\n", cnt,
- ruleTable->rules[cnt].rule.attrib.attrib_mask);
- }
-
- retval = ioctl(fd, IPA_IOC_ADD_FLT_RULE, ruleTable);
- if (retval != 0)
- {
- IPACMERR("Failed adding Filtering rule %pK\n", ruleTable);
- PERROR("unable to add filter rule:");
-
- for (int cnt = 0; cnt < ruleTable->num_rules; cnt++)
- {
- if (ruleTable->rules[cnt].status != 0)
- {
- IPACMERR("Adding Filter rule:%d failed with status:%d\n",
- cnt, ruleTable->rules[cnt].status);
- }
- }
- return false;
- }
-
- for (int cnt = 0; cntnum_rules; cnt++)
- {
- if(ruleTable->rules[cnt].status != 0)
- {
- IPACMERR("Adding Filter rule:%d failed with status:%d\n",
- cnt, ruleTable->rules[cnt].status);
- }
- }
-
- IPACMDBG("Added Filtering rule %pK\n", ruleTable);
- return true;
-}
-
-bool IPACM_Filtering::AddFilteringRuleAfter(struct ipa_ioc_add_flt_rule_after const *ruleTable)
-{
-#ifdef FEATURE_IPA_V3
- int retval = 0;
-
- IPACMDBG("Printing filter add attributes\n");
- IPACMDBG("ip type: %d\n", ruleTable->ip);
- IPACMDBG("Number of rules: %d\n", ruleTable->num_rules);
- IPACMDBG("End point: %d\n", ruleTable->ep);
- IPACMDBG("commit value: %d\n", ruleTable->commit);
-
- retval = ioctl(fd, IPA_IOC_ADD_FLT_RULE_AFTER, ruleTable);
-
- for (int cnt = 0; cntnum_rules; cnt++)
- {
- if(ruleTable->rules[cnt].status != 0)
- {
- IPACMERR("Adding Filter rule:%d failed with status:%d\n",
- cnt, ruleTable->rules[cnt].status);
- }
- }
-
- if (retval != 0)
- {
- IPACMERR("Failed adding Filtering rule %pK\n", ruleTable);
- return false;
- }
- IPACMDBG("Added Filtering rule %pK\n", ruleTable);
-#else
- if (ruleTable)
- IPACMERR("Not support adding Filtering rule %pK\n", ruleTable);
-#endif
- return true;
-}
-
-bool IPACM_Filtering::DeleteFilteringRule(struct ipa_ioc_del_flt_rule *ruleTable)
-{
- int retval = 0;
-
- retval = ioctl(fd, IPA_IOC_DEL_FLT_RULE, ruleTable);
- if (retval != 0)
- {
- IPACMERR("Failed deleting Filtering rule %pK\n", ruleTable);
- return false;
- }
-
- IPACMDBG("Deleted Filtering rule %pK\n", ruleTable);
- return true;
-}
-
-bool IPACM_Filtering::Commit(enum ipa_ip_type ip)
-{
- int retval = 0;
-
- retval = ioctl(fd, IPA_IOC_COMMIT_FLT, ip);
- if (retval != 0)
- {
- IPACMERR("failed committing Filtering rules.\n");
- return false;
- }
-
- IPACMDBG("Committed Filtering rules to IPA HW.\n");
- return true;
-}
-
-bool IPACM_Filtering::Reset(enum ipa_ip_type ip)
-{
- int retval = 0;
-
- retval = ioctl(fd, IPA_IOC_RESET_FLT, ip);
- retval |= ioctl(fd, IPA_IOC_COMMIT_FLT, ip);
- if (retval)
- {
- IPACMERR("failed resetting Filtering block.\n");
- return false;
- }
-
- IPACMDBG("Reset command issued to IPA Filtering block.\n");
- return true;
-}
-
-bool IPACM_Filtering::DeleteFilteringHdls
-(
- uint32_t *flt_rule_hdls,
- ipa_ip_type ip,
- uint8_t num_rules
-)
-{
- struct ipa_ioc_del_flt_rule *flt_rule;
- bool res = true;
- int len = 0, cnt = 0;
- const uint8_t UNIT_RULES = 1;
-
- len = (sizeof(struct ipa_ioc_del_flt_rule)) + (UNIT_RULES * sizeof(struct ipa_flt_rule_del));
- flt_rule = (struct ipa_ioc_del_flt_rule *)malloc(len);
- if (flt_rule == NULL)
- {
- IPACMERR("unable to allocate memory for del filter rule\n");
- return false;
- }
-
- for (cnt = 0; cnt < num_rules; cnt++)
- {
- memset(flt_rule, 0, len);
- flt_rule->commit = 1;
- flt_rule->num_hdls = UNIT_RULES;
- flt_rule->ip = ip;
-
- if (flt_rule_hdls[cnt] == 0)
- {
- IPACMERR("invalid filter handle passed, ignoring it: %d\n", cnt)
- }
- else
- {
-
- flt_rule->hdl[0].status = -1;
- flt_rule->hdl[0].hdl = flt_rule_hdls[cnt];
- IPACMDBG("Deleting filter hdl:(0x%x) with ip type: %d\n", flt_rule_hdls[cnt], ip);
-
- if (DeleteFilteringRule(flt_rule) == false)
- {
- PERROR("Filter rule deletion failed!\n");
- res = false;
- goto fail;
- }
- else
- {
-
- if (flt_rule->hdl[0].status != 0)
- {
- IPACMERR("Filter rule hdl 0x%x deletion failed with error:%d\n",
- flt_rule->hdl[0].hdl, flt_rule->hdl[0].status);
- res = false;
- goto fail;
- }
- }
- }
- }
-
-fail:
- free(flt_rule);
-
- return res;
-}
-
-bool IPACM_Filtering::AddWanDLFilteringRule(struct ipa_ioc_add_flt_rule const *rule_table_v4, struct ipa_ioc_add_flt_rule const * rule_table_v6, uint8_t mux_id)
-{
- int ret = 0, cnt, num_rules = 0, pos = 0;
- ipa_install_fltr_rule_req_msg_v01 qmi_rule_msg;
-#ifdef FEATURE_IPA_V3
- ipa_install_fltr_rule_req_ex_msg_v01 qmi_rule_ex_msg;
-#endif
-
- memset(&qmi_rule_msg, 0, sizeof(qmi_rule_msg));
- int fd_wwan_ioctl = open(WWAN_QMI_IOCTL_DEVICE_NAME, O_RDWR);
- if(fd_wwan_ioctl < 0)
- {
- IPACMERR("Failed to open %s.\n",WWAN_QMI_IOCTL_DEVICE_NAME);
- return false;
- }
-
- if(rule_table_v4 != NULL)
- {
- num_rules += rule_table_v4->num_rules;
- IPACMDBG_H("Get %d WAN DL IPv4 filtering rules.\n", rule_table_v4->num_rules);
- }
- if(rule_table_v6 != NULL)
- {
- num_rules += rule_table_v6->num_rules;
- IPACMDBG_H("Get %d WAN DL IPv6 filtering rules.\n", rule_table_v6->num_rules);
- }
-
- /* if it is not IPA v3, use old QMI format */
-#ifndef FEATURE_IPA_V3
- if(num_rules > QMI_IPA_MAX_FILTERS_V01)
- {
- IPACMERR("The number of filtering rules exceed limit.\n");
- close(fd_wwan_ioctl);
- return false;
- }
- else
- {
- if (num_rules > 0)
- {
- qmi_rule_msg.filter_spec_list_valid = true;
- }
- else
- {
- qmi_rule_msg.filter_spec_list_valid = false;
- }
-
- qmi_rule_msg.filter_spec_list_len = num_rules;
- qmi_rule_msg.source_pipe_index_valid = 0;
-
- IPACMDBG_H("Get %d WAN DL filtering rules in total.\n", num_rules);
-
- if(rule_table_v4 != NULL)
- {
- for(cnt = rule_table_v4->num_rules - 1; cnt >= 0; cnt--)
- {
- if (pos < QMI_IPA_MAX_FILTERS_V01)
- {
- qmi_rule_msg.filter_spec_list[pos].filter_spec_identifier = pos;
- qmi_rule_msg.filter_spec_list[pos].ip_type = QMI_IPA_IP_TYPE_V4_V01;
- qmi_rule_msg.filter_spec_list[pos].filter_action = GetQmiFilterAction(rule_table_v4->rules[cnt].rule.action);
- qmi_rule_msg.filter_spec_list[pos].is_routing_table_index_valid = 1;
- qmi_rule_msg.filter_spec_list[pos].route_table_index = rule_table_v4->rules[cnt].rule.rt_tbl_idx;
- qmi_rule_msg.filter_spec_list[pos].is_mux_id_valid = 1;
- qmi_rule_msg.filter_spec_list[pos].mux_id = mux_id;
- memcpy(&qmi_rule_msg.filter_spec_list[pos].filter_rule,
- &rule_table_v4->rules[cnt].rule.eq_attrib,
- sizeof(struct ipa_filter_rule_type_v01));
- pos++;
- }
- else
- {
- IPACMERR(" QMI only support max %d rules, current (%d)\n ",QMI_IPA_MAX_FILTERS_V01, pos);
- }
- }
- }
-
- if(rule_table_v6 != NULL)
- {
- for(cnt = rule_table_v6->num_rules - 1; cnt >= 0; cnt--)
- {
- if (pos < QMI_IPA_MAX_FILTERS_V01)
- {
- qmi_rule_msg.filter_spec_list[pos].filter_spec_identifier = pos;
- qmi_rule_msg.filter_spec_list[pos].ip_type = QMI_IPA_IP_TYPE_V6_V01;
- qmi_rule_msg.filter_spec_list[pos].filter_action = GetQmiFilterAction(rule_table_v6->rules[cnt].rule.action);
- qmi_rule_msg.filter_spec_list[pos].is_routing_table_index_valid = 1;
- qmi_rule_msg.filter_spec_list[pos].route_table_index = rule_table_v6->rules[cnt].rule.rt_tbl_idx;
- qmi_rule_msg.filter_spec_list[pos].is_mux_id_valid = 1;
- qmi_rule_msg.filter_spec_list[pos].mux_id = mux_id;
- memcpy(&qmi_rule_msg.filter_spec_list[pos].filter_rule,
- &rule_table_v6->rules[cnt].rule.eq_attrib,
- sizeof(struct ipa_filter_rule_type_v01));
- pos++;
- }
- else
- {
- IPACMERR(" QMI only support max %d rules, current (%d)\n ",QMI_IPA_MAX_FILTERS_V01, pos);
- }
- }
- }
-
- ret = ioctl(fd_wwan_ioctl, WAN_IOC_ADD_FLT_RULE, &qmi_rule_msg);
- if (ret != 0)
- {
- IPACMERR("Failed adding Filtering rule %p with ret %d\n ", &qmi_rule_msg, ret);
- close(fd_wwan_ioctl);
- return false;
- }
- }
- /* if it is IPA v3, use new QMI format */
-#else
- if(num_rules > QMI_IPA_MAX_FILTERS_EX_V01)
- {
- IPACMERR("The number of filtering rules exceed limit.\n");
- close(fd_wwan_ioctl);
- return false;
- }
- else
- {
- memset(&qmi_rule_ex_msg, 0, sizeof(qmi_rule_ex_msg));
-
- if (num_rules > 0)
- {
- qmi_rule_ex_msg.filter_spec_ex_list_valid = true;
- }
- else
- {
- qmi_rule_ex_msg.filter_spec_ex_list_valid = false;
- }
- qmi_rule_ex_msg.filter_spec_ex_list_len = num_rules;
- qmi_rule_ex_msg.source_pipe_index_valid = 0;
-
- IPACMDBG_H("Get %d WAN DL filtering rules in total.\n", num_rules);
-
- if(rule_table_v4 != NULL)
- {
- for(cnt = rule_table_v4->num_rules - 1; cnt >= 0; cnt--)
- {
- if (pos < QMI_IPA_MAX_FILTERS_EX_V01)
- {
- qmi_rule_ex_msg.filter_spec_ex_list[pos].ip_type = QMI_IPA_IP_TYPE_V4_V01;
- qmi_rule_ex_msg.filter_spec_ex_list[pos].filter_action = GetQmiFilterAction(rule_table_v4->rules[cnt].rule.action);
- qmi_rule_ex_msg.filter_spec_ex_list[pos].is_routing_table_index_valid = 1;
- qmi_rule_ex_msg.filter_spec_ex_list[pos].route_table_index = rule_table_v4->rules[cnt].rule.rt_tbl_idx;
- qmi_rule_ex_msg.filter_spec_ex_list[pos].is_mux_id_valid = 1;
- qmi_rule_ex_msg.filter_spec_ex_list[pos].mux_id = mux_id;
- qmi_rule_ex_msg.filter_spec_ex_list[pos].rule_id = rule_table_v4->rules[cnt].rule.rule_id;
- qmi_rule_ex_msg.filter_spec_ex_list[pos].is_rule_hashable = rule_table_v4->rules[cnt].rule.hashable;
- memcpy(&qmi_rule_ex_msg.filter_spec_ex_list[pos].filter_rule,
- &rule_table_v4->rules[cnt].rule.eq_attrib,
- sizeof(struct ipa_filter_rule_type_v01));
-
- pos++;
- }
- else
- {
- IPACMERR(" QMI only support max %d rules, current (%d)\n ",QMI_IPA_MAX_FILTERS_EX_V01, pos);
- }
- }
- }
-
- if(rule_table_v6 != NULL)
- {
- for(cnt = rule_table_v6->num_rules - 1; cnt >= 0; cnt--)
- {
- if (pos < QMI_IPA_MAX_FILTERS_EX_V01)
- {
- qmi_rule_ex_msg.filter_spec_ex_list[pos].ip_type = QMI_IPA_IP_TYPE_V6_V01;
- qmi_rule_ex_msg.filter_spec_ex_list[pos].filter_action = GetQmiFilterAction(rule_table_v6->rules[cnt].rule.action);
- qmi_rule_ex_msg.filter_spec_ex_list[pos].is_routing_table_index_valid = 1;
- qmi_rule_ex_msg.filter_spec_ex_list[pos].route_table_index = rule_table_v6->rules[cnt].rule.rt_tbl_idx;
- qmi_rule_ex_msg.filter_spec_ex_list[pos].is_mux_id_valid = 1;
- qmi_rule_ex_msg.filter_spec_ex_list[pos].mux_id = mux_id;
- qmi_rule_ex_msg.filter_spec_ex_list[pos].rule_id = rule_table_v6->rules[cnt].rule.rule_id;
- qmi_rule_ex_msg.filter_spec_ex_list[pos].is_rule_hashable = rule_table_v6->rules[cnt].rule.hashable;
- memcpy(&qmi_rule_ex_msg.filter_spec_ex_list[pos].filter_rule,
- &rule_table_v6->rules[cnt].rule.eq_attrib,
- sizeof(struct ipa_filter_rule_type_v01));
-
- pos++;
- }
- else
- {
- IPACMERR(" QMI only support max %d rules, current (%d)\n ",QMI_IPA_MAX_FILTERS_EX_V01, pos);
- }
- }
- }
-
- ret = ioctl(fd_wwan_ioctl, WAN_IOC_ADD_FLT_RULE_EX, &qmi_rule_ex_msg);
- if (ret != 0)
- {
- IPACMERR("Failed adding Filtering rule %pK with ret %d\n ", &qmi_rule_ex_msg, ret);
- close(fd_wwan_ioctl);
- return false;
- }
- }
-#endif
-
- close(fd_wwan_ioctl);
- return true;
-}
-
-bool IPACM_Filtering::SendFilteringRuleIndex(struct ipa_fltr_installed_notif_req_msg_v01* table)
-{
- int ret = 0;
- int fd_wwan_ioctl = open(WWAN_QMI_IOCTL_DEVICE_NAME, O_RDWR);
- if(fd_wwan_ioctl < 0)
- {
- IPACMERR("Failed to open %s.\n",WWAN_QMI_IOCTL_DEVICE_NAME);
- return false;
- }
-
- ret = ioctl(fd_wwan_ioctl, WAN_IOC_ADD_FLT_RULE_INDEX, table);
- if (ret != 0)
- {
- IPACMERR("Failed adding filtering rule index %pK with ret %d\n", table, ret);
- close(fd_wwan_ioctl);
- return false;
- }
-
- IPACMDBG("Added Filtering rule index %pK\n", table);
- close(fd_wwan_ioctl);
- return true;
-}
-
-ipa_filter_action_enum_v01 IPACM_Filtering::GetQmiFilterAction(ipa_flt_action action)
-{
- switch(action)
- {
- case IPA_PASS_TO_ROUTING:
- return QMI_IPA_FILTER_ACTION_ROUTING_V01;
-
- case IPA_PASS_TO_SRC_NAT:
- return QMI_IPA_FILTER_ACTION_SRC_NAT_V01;
-
- case IPA_PASS_TO_DST_NAT:
- return QMI_IPA_FILTER_ACTION_DST_NAT_V01;
-
- case IPA_PASS_TO_EXCEPTION:
- return QMI_IPA_FILTER_ACTION_EXCEPTION_V01;
-
- default:
- return IPA_FILTER_ACTION_ENUM_MAX_ENUM_VAL_V01;
- }
-}
-
-bool IPACM_Filtering::ModifyFilteringRule(struct ipa_ioc_mdfy_flt_rule* ruleTable)
-{
- int i, ret = 0;
-
- IPACMDBG("Printing filtering add attributes\n");
- IPACMDBG("IP type: %d Number of rules: %d commit value: %d\n", ruleTable->ip, ruleTable->num_rules, ruleTable->commit);
-
- for (i=0; inum_rules; i++)
- {
- IPACMDBG("Filter rule:%d attrib mask: 0x%x\n", i, ruleTable->rules[i].rule.attrib.attrib_mask);
- }
-
- ret = ioctl(fd, IPA_IOC_MDFY_FLT_RULE, ruleTable);
- if (ret != 0)
- {
- IPACMERR("Failed modifying filtering rule %pK\n", ruleTable);
-
- for (i = 0; i < ruleTable->num_rules; i++)
- {
- if (ruleTable->rules[i].status != 0)
- {
- IPACMERR("Modifying filter rule %d failed\n", i);
- }
- }
- return false;
- }
-
- IPACMDBG("Modified filtering rule %p\n", ruleTable);
- return true;
-}
-
diff --git a/data-ipa-cfg-mgr/ipacm/src/IPACM_Header.cpp b/data-ipa-cfg-mgr/ipacm/src/IPACM_Header.cpp
deleted file mode 100644
index c77c69c..0000000
--- a/data-ipa-cfg-mgr/ipacm/src/IPACM_Header.cpp
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
-Copyright (c) 2013, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-#include
-#include
-#include
-#include
-#include
-
-#include "IPACM_Header.h"
-#include "IPACM_Log.h"
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-//All interaction through the driver are made through this inode.
-static const char *DEVICE_NAME = "/dev/ipa";
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-IPACM_Header::IPACM_Header()
-{
- m_fd = open(DEVICE_NAME, O_RDWR);
- if (-1 == m_fd)
- {
- IPACMERR("Failed to open %s in IPACM_Header test application constructor.\n", DEVICE_NAME);
- }
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-IPACM_Header::~IPACM_Header()
-{
- if (-1 != m_fd)
- {
- close(m_fd);
- }
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-bool IPACM_Header::DeviceNodeIsOpened()
-{
- return (-1 != m_fd);
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-bool IPACM_Header::AddHeader(struct ipa_ioc_add_hdr *pHeaderTableToAdd)
-{
- int nRetVal = 0;
- //call the Driver ioctl in order to add header
- nRetVal = ioctl(m_fd, IPA_IOC_ADD_HDR, pHeaderTableToAdd);
- IPACMDBG("return value: %d\n", nRetVal);
- return (-1 != nRetVal);
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-bool IPACM_Header::DeleteHeader(struct ipa_ioc_del_hdr *pHeaderTableToDelete)
-{
- int nRetVal = 0;
- //call the Driver ioctl in order to remove header
- nRetVal = ioctl(m_fd, IPA_IOC_DEL_HDR, pHeaderTableToDelete);
- IPACMDBG("return value: %d\n", nRetVal);
- return (-1 != nRetVal);
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-bool IPACM_Header::Commit()
-{
- int nRetVal = 0;
- nRetVal = ioctl(m_fd, IPA_IOC_COMMIT_HDR);
- IPACMDBG("return value: %d\n", nRetVal);
- return true;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-bool IPACM_Header::Reset()
-{
- int nRetVal = 0;
-
- nRetVal = ioctl(m_fd, IPA_IOC_RESET_HDR);
- nRetVal |= ioctl(m_fd, IPA_IOC_COMMIT_HDR);
- IPACMDBG("return value: %d\n", nRetVal);
- return true;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-bool IPACM_Header::GetHeaderHandle(struct ipa_ioc_get_hdr *pHeaderStruct)
-{
- int retval = 0;
-
- if (!DeviceNodeIsOpened()) return false;
-
- retval = ioctl(m_fd, IPA_IOC_GET_HDR, pHeaderStruct);
- if (retval)
- {
- IPACMERR("IPA_IOC_GET_HDR ioctl failed, routingTable =0x%p, retval=0x%x.\n", pHeaderStruct, retval);
- return false;
- }
-
- IPACMDBG("IPA_IOC_GET_HDR ioctl issued to IPA header insertion block.\n");
- return true;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-bool IPACM_Header::CopyHeader(struct ipa_ioc_copy_hdr *pCopyHeaderStruct)
-{
- int retval = 0;
-
- if (!DeviceNodeIsOpened()) return false;
-
- retval = ioctl(m_fd, IPA_IOC_COPY_HDR, pCopyHeaderStruct);
- if (retval)
- {
- IPACMERR("IPA_IOC_COPY_HDR ioctl failed, retval=0x%x.\n", retval);
- return false;
- }
-
- IPACMDBG("IPA_IOC_COPY_HDR ioctl issued to IPA header insertion block.\n");
- return true;
-}
-
-bool IPACM_Header::DeleteHeaderHdl(uint32_t hdr_hdl)
-{
- const uint8_t NUM_HDLS = 1;
- struct ipa_ioc_del_hdr *pHeaderDescriptor = NULL;
- struct ipa_hdr_del *hd_rule_entry;
- int len = 0;
- bool res = true;
-
- if (hdr_hdl == 0)
- {
- IPACMERR("Invalid header handle passed. Ignoring it\n");
- return false;
- }
-
- len = (sizeof(struct ipa_ioc_del_hdr)) + (NUM_HDLS * sizeof(struct ipa_hdr_del));
- pHeaderDescriptor = (struct ipa_ioc_del_hdr *)malloc(len);
- if (pHeaderDescriptor == NULL)
- {
- IPACMERR("Unable to allocate memory for del header\n");
- return false;
- }
-
- memset(pHeaderDescriptor, 0, len);
- pHeaderDescriptor->commit = true;
- pHeaderDescriptor->num_hdls = NUM_HDLS;
- hd_rule_entry = &pHeaderDescriptor->hdl[0];
-
- hd_rule_entry->hdl = hdr_hdl;
- hd_rule_entry->status = -1;
-
- IPACMDBG("Deleting Header hdl:(%x)\n", hd_rule_entry->hdl);
- if ((false == DeleteHeader(pHeaderDescriptor)) ||
- (hd_rule_entry->status))
- {
- IPACMERR("Header hdl:(%x) deletion failed! status: %d\n", hd_rule_entry->hdl,hd_rule_entry->status);
- res = false;
- goto fail;
- }
-
- IPACMDBG_H("Deleted Header hdl:(%x) successfully\n", hd_rule_entry->hdl);
-
-fail:
- free(pHeaderDescriptor);
-
- return res;
-
-}
-
-bool IPACM_Header::AddHeaderProcCtx(struct ipa_ioc_add_hdr_proc_ctx* pHeader)
-{
- int ret = 0;
- //call the Driver ioctl to add header processing context
- ret = ioctl(m_fd, IPA_IOC_ADD_HDR_PROC_CTX, pHeader);
- return (ret == 0);
-}
-
-bool IPACM_Header::DeleteHeaderProcCtx(uint32_t hdl)
-{
- int len, ret;
- struct ipa_ioc_del_hdr_proc_ctx* pHeaderTable = NULL;
-
- len = sizeof(struct ipa_ioc_del_hdr_proc_ctx) + sizeof(struct ipa_hdr_proc_ctx_del);
- pHeaderTable = (struct ipa_ioc_del_hdr_proc_ctx*)malloc(len);
- if(pHeaderTable == NULL)
- {
- IPACMERR("Failed to allocate buffer.\n");
- return false;
- }
- memset(pHeaderTable, 0, len);
-
- pHeaderTable->commit = 1;
- pHeaderTable->num_hdls = 1;
- pHeaderTable->hdl[0].hdl = hdl;
-
- ret = ioctl(m_fd, IPA_IOC_DEL_HDR_PROC_CTX, pHeaderTable);
- if(ret != 0)
- {
- IPACMERR("Failed to delete hdr proc ctx: return value %d, status %d\n",
- ret, pHeaderTable->hdl[0].status);
- }
- free(pHeaderTable);
- return (ret == 0);
-}
-
diff --git a/data-ipa-cfg-mgr/ipacm/src/IPACM_Iface.cpp b/data-ipa-cfg-mgr/ipacm/src/IPACM_Iface.cpp
deleted file mode 100644
index 512846f..0000000
--- a/data-ipa-cfg-mgr/ipacm/src/IPACM_Iface.cpp
+++ /dev/null
@@ -1,1053 +0,0 @@
-/*
-Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-* Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-* Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
-* Neither the name of The Linux Foundation nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.Z
-*/
-/*!
- @file
- IPACM_Iface.cpp
-
- @brief
- This file implements the basis Iface functionality.
-
- @Author
- Skylar Chang
-
-*/
-#include