GTP1 functionality
diff --git a/gtp/gtp.h b/gtp/gtp.h
index 123339b..ebe869e 100644
--- a/gtp/gtp.h
+++ b/gtp/gtp.h
@@ -38,6 +38,9 @@
 #define RESTART_FILE "gsn_restart"
 #define NAMESIZE 1024
 
+/* GTP version 1 extension header type definitions. */
+#define GTP_EXT_PDCP_PDU    0xC0 /* PDCP PDU Number */
+
 /* GTP version 1 message type definitions. Also covers version 0 except *
  * for anonymous PDP context which was superceded in version 1 */
 
@@ -259,6 +262,7 @@
   int (*cb_delete_context) (struct pdp_t*);
   int (*cb_create_context_ind) (struct pdp_t*);
   int (*cb_unsup_ind) (struct sockaddr_in *peer);
+  int (*cb_extheader_ind) (struct sockaddr_in *peer);
   int (*cb_conf) (int type, int cause, struct pdp_t *pdp, void* cbp);
   int (*cb_data_ind) (struct pdp_t* pdp, void* pack, unsigned len);
 
@@ -282,7 +286,8 @@
   uint64_t unknown;     /* Number of unknown messages 29.60 11.1.3 */
   uint64_t unexpect;    /* Number of unexpected messages 29.60 11.1.4 */
   uint64_t dublicate;   /* Number of dublicate or unsolicited replies */
-  uint64_t missing;     /* Number of missing mandatory field messages */
+  uint64_t missing;     /* Number of missing information field messages */
+  uint64_t incorrect;   /* Number of incorrect information field messages */
   uint64_t invalid;     /* Number of invalid message format messages */
 };
 
@@ -312,7 +317,7 @@
 			      void *cbp, struct in_addr* inetaddr);
 
 extern int gtp_delete_context_req(struct gsn_t *gsn, struct pdp_t *pdp, 
-				  void *cbp);
+				  void *cbp, int teardown);
 
 extern int gtp_data_req(struct gsn_t *gsn, struct pdp_t *pdp,
 			void *pack, unsigned len);
@@ -336,6 +341,9 @@
 extern int gtp_set_cb_unsup_ind(struct gsn_t *gsn,
 				int (*cb) (struct sockaddr_in *peer));
 
+extern int gtp_set_cb_extheader_ind(struct gsn_t *gsn,
+				    int (*cb) (struct sockaddr_in *peer));
+
 
 extern int gtp_set_cb_conf(struct gsn_t *gsn,
              int (*cb) (int type, int cause, struct pdp_t* pdp, void *cbp));
@@ -381,7 +389,8 @@
 extern int gtp_delete_pdp_resp(struct gsn_t *gsn, int version,
 			       struct sockaddr_in *peer, int fd,
 			       void *pack, unsigned len, 
-			       struct pdp_t *pdp, uint8_t cause);
+			       struct pdp_t *pdp, struct pdp_t *linked_pdp,
+			       uint8_t cause, int teardown);
 
 extern int gtp_delete_pdp_ind(struct gsn_t *gsn, int version,
 			      struct sockaddr_in *peer, int fd,