diff --git a/include/s1ap/main.h b/include/s1ap/main.h
new file mode 100644
index 0000000..089121a
--- /dev/null
+++ b/include/s1ap/main.h
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2003-2018, Great Software Laboratory Pvt. Ltd.
+ * Copyright (c) 2017 Intel Corporation
+ *
+ * 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.
+ */
+
+/*
+ * main.h
+ *
+ */
+
+#ifndef MAIN_H_
+#define MAIN_H_
+
+#include <time.h>
+#include <stdint.h>
+
+#include "stimer.h"
+
+#define THREADPOOL_SIZE 10
+
+#define SCTP_BUF_SIZE 1024
+
+/*Timer and stat calculations*/
+struct time_stat {
+	stimer_t init_ue;
+	stimer_t esm_in;
+	stimer_t esm_out;
+	stimer_t auth_in;
+	stimer_t auth_to_mme;
+	stimer_t secreq_in;
+	stimer_t secreq_out;
+	stimer_t secresp_in;
+	stimer_t secresp_to_mme;
+	stimer_t esmreq_in;
+	stimer_t esmreq_out;
+	stimer_t espresp_in;
+	stimer_t espresp_to_mme;
+	stimer_t initctx_out;
+	stimer_t initctx_resp;
+	stimer_t att_done;
+};
+
+void
+*authreq_handler(void *);
+
+void
+*attach_reject_handler(void *);
+
+void
+*idreq_handler(void *);
+
+void
+*secreq_handler(void *);
+
+void
+*esmreq_handler(void *);
+
+void
+*icsreq_handler(void *);
+
+void
+*detach_accept_handler(void *);
+
+void
+*s1_release_command_handler(void *);
+
+void
+*paging_handler(void *);
+
+void
+*ics_req_paging_handler(void *);
+
+void 
+*tau_response_handler(void *);
+
+void
+calculate_mac(uint8_t *int_key, uint32_t seq_no, uint8_t direction,
+		uint8_t bearer, uint8_t *data, uint16_t data_len,
+		uint8_t *mac);
+
+typedef long long int stimer_t;
+
+#define STIMER_GET_CURRENT_TP(__now__)                                                 \
+	({                                                                                     \
+	    struct timespec __ts__;                                                             \
+	    __now__ = clock_gettime(CLOCK_REALTIME,&__ts__) ?                                   \
+	          -1 : (((stimer_t)__ts__.tv_sec) * 1000000000) + ((stimer_t)__ts__.tv_nsec);   \
+	    __now__;                                                                            \
+	 })
+
+#define STIMER_GET_ELAPSED_NS(_start_)                                                 \
+	({                                                                                     \
+	    stimer_t __ns__;                                                                    \
+	    STIMER_GET_CURRENT_TP(__ns__);                                                      \
+	    if (__ns__ != -1)                                                                   \
+	       __ns__ -= _start_;                                                               \
+	    __ns__;                                                                             \
+	 })
+
+#endif /* MAIN_H_ */
