gsup: Add encoding/decoding for the pdp charging characteristics

These fields can be in the ISD and the PDP Context inofmration. Store
pointers to this IE in both cases. It needs to be used by the SGSN
when opening a PDP context.

Change-Id: Iedc7c02adcf77ca5c9545119e19c968dfbbb3e6b
diff --git a/include/osmocom/gsm/gsup.h b/include/osmocom/gsm/gsup.h
index 886ea5d..890bff3 100644
--- a/include/osmocom/gsm/gsup.h
+++ b/include/osmocom/gsm/gsup.h
@@ -51,6 +51,7 @@
 	OSMO_GSUP_PDP_TYPE_IE			= 0x11,
 	OSMO_GSUP_ACCESS_POINT_NAME_IE		= 0x12,
 	OSMO_GSUP_PDP_QOS_IE			= 0x13,
+	OSMO_GSUP_CHARG_CHAR_IE			= 0x14,
 	OSMO_GSUP_RAND_IE			= 0x20,
 	OSMO_GSUP_SRES_IE			= 0x21,
 	OSMO_GSUP_KC_IE				= 0x22,
@@ -127,6 +128,11 @@
 	const uint8_t			*qos_enc;
 	/*! length (in octets) of qos_enc */
 	size_t				qos_enc_len;
+	/*! PDP Charging Characteristics, still in encoded form. Can be NULL if no
+	 * PDP Charging Characteristics */
+	const uint8_t			*pdp_charg_enc;
+	/*! length (in octets) of pdp_charg_enc */
+	size_t				pdp_charg_enc_len;
 };
 
 /*! parsed/decoded GSUP protocol message */
@@ -148,6 +154,8 @@
 	const uint8_t			*auts;
 	const uint8_t			*rand;
 	enum osmo_gsup_cn_domain	cn_domain;
+	const uint8_t			*pdp_charg_enc;
+	size_t				pdp_charg_enc_len;
 };
 
 int osmo_gsup_decode(const uint8_t *data, size_t data_len,