Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1a1dccc4 authored by Krishna Nagaraja's avatar Krishna Nagaraja
Browse files

msm: ipa: add support for PMIPv6



Make changes to add new proc ctx and uCP commands to support Proxy Mobile IPv6.

Change-Id: I4c0995ffe6969c3183e6b16dd6dbd1203d7bec43
Signed-off-by: default avatarKrishna Nagaraja <quic_krisnag@quicinc.com>
parent daa78a41
Loading
Loading
Loading
Loading
+52 −1
Original line number Diff line number Diff line
@@ -1529,6 +1529,8 @@ enum ipa_hdr_l2_type {
 * IPA_HDR_PROC_EoGRE_HEADER_ADD:       Add IPV[46] and GRE header
 * IPA_HDR_PROC_EoGRE_HEADER_REMOVE:    Remove IPV[46] and GRE header
 * IPA_HDR_PROC_WWAN_TO_ETHII_EX:		To update PCP value for E2E traffic.
 * IPA_HDR_PROC_GRE_HEADER_ADD,         Add IPV[46] and IP-GRE header
 * IPA_HDR_PROC_GRE_HEADER_REMOVE,      Remove IPV[46] and IP-GRE header
 */
enum ipa_hdr_proc_type {
	IPA_HDR_PROC_NONE,
@@ -1545,8 +1547,10 @@ enum ipa_hdr_proc_type {
	IPA_HDR_PROC_EoGRE_HEADER_ADD,
	IPA_HDR_PROC_EoGRE_HEADER_REMOVE,
	IPA_HDR_PROC_WWAN_TO_ETHII_EX,
	IPA_HDR_PROC_GRE_HEADER_ADD,
	IPA_HDR_PROC_GRE_HEADER_REMOVE
};
#define IPA_HDR_PROC_MAX (IPA_HDR_PROC_WWAN_TO_ETHII_EX + 1)
#define IPA_HDR_PROC_MAX (IPA_HDR_PROC_GRE_HEADER_REMOVE + 1)

/**
 * struct ipa_rt_rule - attributes of a routing rule
@@ -1865,6 +1869,52 @@ struct ipa_eogre_hdr_proc_ctx_params {
	struct ipa_eogre_header_remove_procparams hdr_remove_param;
};


/**
 * struct ipa_gre_header_add_procparams -
 * @eth_hdr_retained:  Specifies if Ethernet header is retained or not
 * @input_ip_version:  Specifies if Input header is IPV4(0) or IPV6(1)
 * @output_ip_version: Specifies if template header's outer IP is IPV4(0) or IPV6(1)
 * @second_pass:       Specifies if the data should be processed again.
 * @is_mpls:           Specifies if ucp cmd is for legacy EoGRE(0) or MPLSoGRE(1)
 * @tag_remove_len:    Specifies amount to be removed for the tags
 */
struct ipa_gre_header_add_procparams {
	uint32_t eth_hdr_retained :1;
	uint32_t input_ip_version :1;
	uint32_t output_ip_version :1;
	uint32_t second_pass :1;
	uint32_t is_mpls :1;
	uint32_t tag_remove_len :4;
	uint32_t reserved :23;
};

/**
 * struct ipa_gre_header_remove_procparams -
 * @hdr_len_remove:    Specifies how much (in bytes) of the header needs
 *                     to be removed
 * @outer_ip_version:  Specifies if template header's outer IP is IPV4(0) or IPV6(1)
 * @is_mpls:           Specifies if ucp cmd is for legacy EoGRE(0) or MPLSoGRE(1)
 * @tag_add_len:       Specifies amount to be added for the tags
 */
struct ipa_gre_header_remove_procparams {
	uint32_t hdr_len_remove :8; /* 44 bytes for IPV6, 24 for IPV4 */
	uint32_t outer_ip_version :1;
	uint32_t is_mpls :1;
	uint32_t tag_add_len :4;
	uint32_t reserved :18;
};

/**
 * struct ipa_gre_hdr_proc_ctx_params -
 * @hdr_add_param: parameters for header add
 * @hdr_remove_param: parameters for header remove
 */
struct ipa_gre_hdr_proc_ctx_params {
	struct ipa_gre_header_add_procparams hdr_add_param;
	struct ipa_gre_header_remove_procparams hdr_remove_param;
};

/**
 * struct ipa_eth_II_to_eth_II_ex_procparams -
 * @input_ethhdr_negative_offset: Specifies where the ethernet hdr offset is
@@ -1926,6 +1976,7 @@ struct ipa_hdr_proc_ctx_add {
	struct ipa_eogre_hdr_proc_ctx_params eogre_params;
	struct ipa_eth_II_to_eth_II_ex_procparams generic_params;
	struct ipa_wwan_to_eth_II_ex_procparams generic_params_v2;
	struct ipa_gre_hdr_proc_ctx_params gre_params;
};

#define IPA_L2TP_HDR_PROC_SUPPORT